diff --git a/lib/wanderer_app_web/components/character_activity.ex b/lib/wanderer_app_web/components/character_activity.ex
new file mode 100644
index 00000000..dbbaa31f
--- /dev/null
+++ b/lib/wanderer_app_web/components/character_activity.ex
@@ -0,0 +1,47 @@
+defmodule WandererAppWeb.CharacterActivity do
+ use WandererAppWeb, :live_component
+ use LiveViewEvents
+
+ @impl true
+ def mount(socket) do
+ {:ok, socket}
+ end
+
+ @impl true
+ def update(
+ assigns,
+ socket
+ ) do
+ {:ok,
+ socket
+ |> handle_info_or_assign(assigns)}
+ end
+
+ def render(assigns) do
+ ~H"""
+
+ <.table class="!max-h-[80vh] !overflow-y-auto" id="activity-tbl" rows={@activity}>
+ <:col :let={row} label="Character">
+ <.character_item character={row.character} />
+
+ <:col :let={row} label="Passages">
+ <%= row.count %>
+
+
+
+ """
+ end
+
+ def character_item(assigns) do
+ ~H"""
+
+
+
+
})
+
+
+ <%= @character.name %>
+
+ """
+ end
+end
diff --git a/lib/wanderer_app_web/live/maps/event_handlers/map_activity_event_handler.ex b/lib/wanderer_app_web/live/maps/event_handlers/map_activity_event_handler.ex
index 8283beb4..3a3cf48f 100644
--- a/lib/wanderer_app_web/live/maps/event_handlers/map_activity_event_handler.ex
+++ b/lib/wanderer_app_web/live/maps/event_handlers/map_activity_event_handler.ex
@@ -18,15 +18,12 @@ defmodule WandererAppWeb.MapActivityEventHandler do
do: MapCoreEventHandler.handle_server_event(event, socket)
def handle_ui_event("show_activity", _, %{assigns: %{map_id: map_id}} = socket) do
- Task.async(fn ->
- {:ok, character_activity} = map_id |> get_character_activity()
-
- {:character_activity, character_activity}
- end)
-
{:noreply,
socket
- |> assign(:show_activity?, true)}
+ |> assign(:show_activity?, true)
+ |> assign_async(:character_activity, fn ->
+ map_id |> get_character_activity()
+ end)}
end
def handle_ui_event("hide_activity", _, socket),
@@ -44,6 +41,6 @@ defmodule WandererAppWeb.MapActivityEventHandler do
%{p | character: p.character |> MapEventHandler.map_ui_character_stat()}
end)
- {:ok, %{jumps: jumps}}
+ {:ok, %{character_activity: jumps}}
end
end
diff --git a/lib/wanderer_app_web/live/maps/map_live.html.heex b/lib/wanderer_app_web/live/maps/map_live.html.heex
index dc6f83c0..ff74cfb7 100644
--- a/lib/wanderer_app_web/live/maps/map_live.html.heex
+++ b/lib/wanderer_app_web/live/maps/map_live.html.heex
@@ -31,6 +31,29 @@
+<.modal
+ :if={assigns |> Map.get(:show_activity?, false)}
+ id="map-activity-modal"
+ title="Activity of Characters"
+ class="!w-[500px]"
+ show
+ on_cancel={JS.push("hide_activity")}
+>
+ <.async_result :let={character_activity} assign={@character_activity}>
+ <:loading>Loading...
+ <:failed :let={reason}><%= reason %>
+
+
+ <.live_component
+ module={WandererAppWeb.CharacterActivity}
+ id="character-activity"
+ activity={character_activity}
+ notify_to={self()}
+ />
+
+
+
+
<.modal
:if={assigns |> Map.get(:show_tracking?, false)}
id="map-tracking-modal"