Files
2025-11-29 12:34:28 +01:00

129 lines
3.3 KiB
Elixir

defmodule WandererAppWeb.MapLive do
use WandererAppWeb, :live_view
use LiveViewEvents
require Logger
@impl true
def mount(%{"slug" => map_slug} = _params, _session, socket) when is_connected?(socket) do
Process.send_after(self(), %{event: :load_map}, Enum.random(10..800))
{:ok,
socket
|> assign(
map_slug: map_slug,
map_loaded?: false,
show_topup: false,
active_subscription_tab: "balance",
server_online: false,
map_subscriptions_enabled: WandererApp.Env.map_subscriptions_enabled?(),
active_subscription: nil,
user_permissions: nil
)
|> push_event("js-exec", %{
to: "#map-loader",
attr: "data-loading",
timeout: 2000
})}
end
@impl true
def mount(_params, _session, socket) do
{:ok,
socket
|> assign(
map_slug: nil,
map_loaded?: false,
show_topup: false,
server_online: false,
active_subscription: nil,
map_subscriptions_enabled: WandererApp.Env.map_subscriptions_enabled?(),
user_permissions: nil
)}
end
@impl true
def handle_params(params, _url, socket),
do: {:noreply, apply_action(socket, socket.assigns.live_action, params)}
@impl true
def handle_info(
{"change_map", map_slug},
%{assigns: %{map_id: map_id}} = socket
) do
Phoenix.PubSub.unsubscribe(WandererApp.PubSub, map_id)
{:noreply, socket |> push_navigate(to: ~p"/#{map_slug}")}
end
@impl true
def handle_info(:character_token_invalid, socket),
do:
{:noreply,
socket
|> put_flash(
:error,
"One of your characters has expired token. Please refresh it on characters page."
)}
def handle_info(:no_main_character_set, socket),
do:
{:noreply,
socket
|> put_flash(
:warning,
"You don't have main character set, please update it in tracking settings (top right icon)."
)}
def handle_info(:map_deleted, socket),
do:
{:noreply,
socket
|> put_flash(:info, "This map has been deleted.")
|> push_navigate(to: ~p"/maps")}
def handle_info(:no_access, socket),
do:
{:noreply,
socket
|> put_flash(:error, "You don't have an access to this map.")
|> push_navigate(to: ~p"/maps")}
def handle_info(:no_permissions, socket),
do:
{:noreply,
socket
|> put_flash(:error, "You don't have permissions to use this map.")
|> push_navigate(to: ~p"/maps")}
def handle_info(:not_all_characters_tracked, %{assigns: %{map_slug: map_slug}} = socket),
do:
{:noreply,
socket
|> put_flash(
:error,
"You should enable tracking for all characters that have access to this map first!"
)
|> push_navigate(to: ~p"/tracking/#{map_slug}")}
@impl true
def handle_info(info, socket) do
{:noreply,
socket
|> WandererAppWeb.MapEventHandler.handle_event(info)}
end
@impl true
def handle_event("change_subscription_tab", %{"tab" => tab}, socket),
do: {:noreply, socket |> assign(active_subscription_tab: tab)}
@impl true
def handle_event(event, body, socket) do
WandererAppWeb.MapEventHandler.handle_ui_event(event, body, socket)
end
defp apply_action(socket, :index, _params) do
socket
|> assign(:active_page, :map)
end
end