2024-02-29 22:31:42 +03:00
|
|
|
defmodule AlgoraWeb.Nav do
|
|
|
|
import Phoenix.LiveView
|
|
|
|
use Phoenix.Component
|
|
|
|
|
|
|
|
alias Algora.{Library}
|
|
|
|
alias AlgoraWeb.{ChannelLive, HomeLive, SettingsLive}
|
|
|
|
|
|
|
|
def on_mount(:default, _params, _session, socket) do
|
|
|
|
{:cont,
|
|
|
|
socket
|
2024-09-12 11:00:16 +02:00
|
|
|
|> assign(active_users: Library.list_live_channels(limit: 20))
|
2024-02-29 22:31:42 +03:00
|
|
|
|> assign(:region, System.get_env("FLY_REGION") || "iad")
|
|
|
|
|> attach_hook(:active_tab, :handle_params, &handle_active_tab_params/3)}
|
|
|
|
end
|
|
|
|
|
|
|
|
defp handle_active_tab_params(params, _url, socket) do
|
|
|
|
active_tab =
|
|
|
|
case {socket.view, socket.assigns.live_action} do
|
|
|
|
{ChannelLive, _} ->
|
|
|
|
if params["channel_handle"] == current_user_channel_handle(socket) do
|
|
|
|
:channel
|
|
|
|
end
|
|
|
|
|
|
|
|
{HomeLive, _} ->
|
|
|
|
:home
|
|
|
|
|
|
|
|
{SettingsLive, _} ->
|
|
|
|
:settings
|
|
|
|
|
|
|
|
{_, _} ->
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
|
|
|
|
{:cont, assign(socket, active_tab: active_tab)}
|
|
|
|
end
|
|
|
|
|
|
|
|
defp current_user_channel_handle(socket) do
|
|
|
|
if user = socket.assigns.current_user do
|
|
|
|
user.handle
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|