defmodule WandererAppWeb.UserActivity 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 # attr(:can_undo_types, :list, required: false) # attr(:stream, :any, required: true) # attr(:page, :integer, required: true) # attr(:end_of_stream?, :boolean, required: true) def render(assigns) do ~H"""
1} class="text-1xl fixed bottom-10 right-10 bg-zinc-700 text-white rounded-lg p-1 text-center min-w-[65px] z-50 opacity-70" > <%= @page %>
No more activity
""" end attr(:activity, WandererApp.Api.UserActivity, required: true) attr(:can_undo_types, :list, required: false) defp activity_entry(%{} = assigns) do ~H"""

<.local_time id={@activity.id} at={@activity.inserted_at} />

<.character_item :if={not is_nil(@activity.character)} character={@activity.character} />

System user / Administrator

<%= _get_event_name(@activity.event_type) %>

<.activity_event event_type={@activity.event_type} event_data={@activity.event_data} />
""" end attr(:character, WandererApp.Api.Character, required: true) def character_item(assigns) do ~H"""
{@character.name}
<%= @character.name %>
""" end attr(:event_type, :string, required: true) attr(:event_data, :string, required: true) def activity_event(assigns) do ~H"""
<%= _get_event_data(@event_type, Jason.decode!(@event_data) |> Map.drop(["character_id"])) %>
""" end @impl true def handle_event("undo", %{"event-data" => event_data} = _params, socket) do # notify_to(socket.assigns.notify_to, socket.assigns.event_name, map_slug) {:noreply, socket} end defp _get_event_name(:hub_added), do: "Hub Added" defp _get_event_name(:hub_removed), do: "Hub Removed" defp _get_event_name(:map_connection_added), do: "Connection Added" defp _get_event_name(:map_connection_updated), do: "Connection Updated" defp _get_event_name(:map_connection_removed), do: "Connection Removed" defp _get_event_name(:map_acl_added), do: "Acl Added" defp _get_event_name(:map_acl_removed), do: "Acl Removed" defp _get_event_name(:system_added), do: "System Added" defp _get_event_name(:system_updated), do: "System Updated" defp _get_event_name(:systems_removed), do: "System(s) Removed" defp _get_event_name(name), do: name # defp _get_event_data(:hub_added, data), do: Jason.encode!(data) # defp _get_event_data(:hub_removed, data), do: data # defp _get_event_data(:map_acl_added, data), do: data # defp _get_event_data(:map_acl_removed, data), do: data # defp _get_event_data(:system_added, data), do: data # defp _get_event_data(:system_updated, %{ "key" => "labels", "solar_system_id" => solar_system_id, "value" => value }) do system_name = _get_system_name(solar_system_id) try do %{"customLabel" => customLabel, "labels" => labels} = Jason.decode!(value) "#{system_name} labels - #{inspect(labels)}, customLabel - #{customLabel}" rescue _ -> "#{system_name} labels - #{inspect(value)}" end end defp _get_event_data(:system_added, %{ "solar_system_id" => solar_system_id }), do: _get_system_name(solar_system_id) defp _get_event_data(:hub_added, %{ "solar_system_id" => solar_system_id }), do: _get_system_name(solar_system_id) defp _get_event_data(:hub_removed, %{ "solar_system_id" => solar_system_id }), do: _get_system_name(solar_system_id) defp _get_event_data(:system_updated, %{ "key" => key, "solar_system_id" => solar_system_id, "value" => value }) do system_name = _get_system_name(solar_system_id) "#{system_name} #{key} - #{inspect(value)}" end defp _get_event_data(:systems_removed, %{ "solar_system_ids" => solar_system_ids }), do: solar_system_ids |> Enum.map(&_get_system_name/1) |> Enum.join(", ") defp _get_event_data(:map_connection_added, %{ "solar_system_source_id" => solar_system_source_id, "solar_system_target_id" => solar_system_target_id }) do source_system_name = _get_system_name(solar_system_source_id) target_system_name = _get_system_name(solar_system_target_id) "[#{source_system_name}:#{target_system_name}]" end defp _get_event_data(:map_connection_removed, %{ "solar_system_source_id" => solar_system_source_id, "solar_system_target_id" => solar_system_target_id }) do source_system_name = _get_system_name(solar_system_source_id) target_system_name = _get_system_name(solar_system_target_id) "[#{source_system_name}:#{target_system_name}]" end defp _get_event_data(:map_connection_updated, %{ "key" => key, "solar_system_source_id" => solar_system_source_id, "solar_system_target_id" => solar_system_target_id, "value" => value }) do source_system_name = _get_system_name(solar_system_source_id) target_system_name = _get_system_name(solar_system_target_id) "[#{source_system_name}:#{target_system_name}] #{key} - #{inspect(value)}" end defp _get_event_data(_name, data), do: Jason.encode!(data) defp _get_system_name(solar_system_id) do case WandererApp.CachedInfo.get_system_static_info(solar_system_id) do {:ok, nil} -> solar_system_id {:ok, system_static_info} -> Map.get(system_static_info, :solar_system_name, "") _ -> "" end end end