fix(Map): Fix 'Character Activity' modal

This commit is contained in:
Dmitry Popov
2025-01-02 20:56:14 +01:00
parent 25dd6de770
commit 9de7cd99ee
3 changed files with 75 additions and 8 deletions
@@ -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"""
<div id={@id}>
<.table class="!max-h-[80vh] !overflow-y-auto" id="activity-tbl" rows={@activity}>
<:col :let={row} label="Character">
<.character_item character={row.character} />
</:col>
<:col :let={row} label="Passages">
<%= row.count %>
</:col>
</.table>
</div>
"""
end
def character_item(assigns) do
~H"""
<div class="flex items-center gap-3">
<div class="avatar">
<div class="rounded-md w-12 h-12">
<img src={member_icon_url(@character.eve_id)} alt={@character.name} />
</div>
</div>
<%= @character.name %>
</div>
"""
end
end
@@ -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
@@ -31,6 +31,29 @@
</.link>
</div>
<.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...</:loading>
<:failed :let={reason}><%= reason %></:failed>
<span :if={character_activity}>
<.live_component
module={WandererAppWeb.CharacterActivity}
id="character-activity"
activity={character_activity}
notify_to={self()}
/>
</span>
</.async_result>
</.modal>
<.modal
:if={assigns |> Map.get(:show_tracking?, false)}
id="map-tracking-modal"