mirror of
https://github.com/wanderer-industries/wanderer
synced 2026-05-03 07:50:37 +00:00
129 lines
3.3 KiB
Elixir
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
|