diff --git a/lib/cobblemon_ui_web/live/dashboard_live.ex b/lib/cobblemon_ui_web/live/dashboard_live.ex index fc062ad..6f9b0ee 100644 --- a/lib/cobblemon_ui_web/live/dashboard_live.ex +++ b/lib/cobblemon_ui_web/live/dashboard_live.ex @@ -3,6 +3,8 @@ defmodule CobblemonUiWeb.DashboardLive do @impl true def mount(_params, _session, socket) do + if connected?(socket), do: :timer.send_interval(1000, self(), :tick) + players = case CobblemonUi.CobblemonFS.list_players() do {:ok, list} -> list @@ -86,6 +88,15 @@ defmodule CobblemonUiWeb.DashboardLive do end def handle_event("refresh", _params, socket) do + {:noreply, do_refresh(socket)} + end + + @impl true + def handle_info(:tick, socket) do + {:noreply, do_refresh(socket)} + end + + defp do_refresh(socket) do players = case CobblemonUi.CobblemonFS.list_players() do {:ok, list} -> list @@ -103,7 +114,7 @@ defmodule CobblemonUiWeb.DashboardLive do socket end - {:noreply, assign(socket, players: players)} + assign(socket, players: players) end @impl true @@ -111,19 +122,20 @@ defmodule CobblemonUiWeb.DashboardLive do ~H"""
-
- <%!-- Header --%> -
-
-
- <.icon name="hero-cube-transparent" class="size-6 text-primary" /> +
+ + <%!-- Player picker --%> +
+
+
+
+ <.icon name="hero-cube-transparent" class="size-6 text-primary" /> +
+
+

Cobblemon

+

Who are you?

+
-
-

Cobblemon

-

Player Data Explorer

-
-
-
+ +
+ <.icon name="hero-user-group" class="size-10 mx-auto mb-4 text-base-content/20" /> +

No players found

+

Check the data directory

+
+ +
+ <.link + :for={player <- @players} + patch={~p"/player/#{player.uuid}"} + id={"player-#{player.uuid}"} + class="group flex items-center gap-3 rounded-xl border border-base-300/40 bg-base-200/20 px-5 py-4 hover:bg-base-200/50 hover:border-primary/30 hover:shadow-md hover:shadow-primary/5 transition-all duration-150" + > +
+ <.icon name="hero-user" class="size-5 text-primary/70" /> +
+ + {player.name || "Unknown"} + + <.icon name="hero-chevron-right" class="size-4 text-base-content/20 ml-auto shrink-0 group-hover:text-primary/40 transition-colors" /> + +
-
- <%!-- Sidebar: Player List --%> - - - <%!-- Main Content --%> -
-
-
- <.icon name="hero-exclamation-triangle" class="size-5" /> - {@error} + <.icon name="hero-arrow-path" class="size-4" /> Refresh + +
+ +
+
+ <.icon name="hero-exclamation-triangle" class="size-5" /> + {@error} +
+
+ +
+ <%!-- Stats bar --%> +
+
+
+ {party_count(@player_data)} in party +
+
+
+ {pc_count(@player_data)} in PC
- <%!-- Empty state --%> -
- <.icon - name="hero-arrow-left" - class="size-10 mx-auto mb-4 text-base-content/20" - /> -

Select a player to explore

-

- Choose from the sidebar to view their Pokémon -

+ <%!-- Active battle --%> + <.battle_panel :if={@battle} battle={@battle} player_id={@selected_player} /> + + <%!-- View mode tabs --%> +
+ +
- <%!-- Player data --%> -
- <%!-- Player header --%> -
-
-
- <.icon name="hero-user" class="size-5 text-primary/70" /> -
-
-

- {player_name(@players, @player_data.uuid)} -

-

- {@player_data.uuid} -

-
-
-
-
- {party_count(@player_data)} in party -
-
-
- {pc_count(@player_data)} in PC -
-
-
+ <%!-- Party view --%> +
+
+ <%= for {pokemon, idx} <- Enum.with_index(@player_data.party) do %> + <.pokemon_card pokemon={pokemon} index={idx} /> + <% end %>
+
- <%!-- Active battle --%> - <.battle_panel :if={@battle} battle={@battle} player_id={@selected_player} /> - - <%!-- View mode tabs --%> -
- - -
- - <%!-- Party view --%> -
-
- <%= for {pokemon, idx} <- Enum.with_index(@player_data.party) do %> - <.pokemon_card pokemon={pokemon} index={idx} /> + <%!-- PC view --%> +
+
+

+ Box {box.box + 1} +

+
+ <%= for {pokemon, idx} <- Enum.with_index(box.pokemon) do %> + <.pokemon_card + pokemon={pokemon} + index={pc_global_index(@player_data.pc, box.box, idx)} + compact + /> <% end %>
- - <%!-- PC view --%> -
-
-

- Box {box.box + 1} -

-
- <%= for {pokemon, idx} <- Enum.with_index(box.pokemon) do %> - <.pokemon_card - pokemon={pokemon} - index={pc_global_index(@player_data.pc, box.box, idx)} - compact - /> - <% end %> -
-
-
- PC storage is empty -
+
+ PC storage is empty
- - <%!-- Pokémon detail panel --%> - <.pokemon_detail :if={@selected_pokemon} pokemon={@selected_pokemon} />
-
+ + <%!-- Pokémon detail panel --%> + <.pokemon_detail :if={@selected_pokemon} pokemon={@selected_pokemon} /> +
+
@@ -559,7 +548,6 @@ defmodule CobblemonUiWeb.DashboardLive do
Active Battle - {@battle.battle_id}