Skip to content

Commit 098249c

Browse files
committed
genserver survive refresh
1 parent 3cfc545 commit 098249c

File tree

2 files changed

+38
-31
lines changed

2 files changed

+38
-31
lines changed

lib/pling_web/live/room_live.ex

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,7 @@ defmodule PlingWeb.RoomLive do
1111
%{"user_id" => user_id},
1212
socket
1313
) do
14-
socket =
15-
assign(socket,
16-
room_code: room_code,
17-
user_id: user_id,
18-
show_playlist: false,
19-
game_mode: game_mode,
20-
current_track: nil
21-
)
14+
socket = init_assigns(socket, room_code, game_mode, user_id)
2215

2316
if connected?(socket) do
2417
{:ok, state} = Rooms.join_room(room_code, user_id, self(), game_mode)
@@ -30,7 +23,9 @@ defmodule PlingWeb.RoomLive do
3023
|> assign(state)
3124
|> maybe_load_track(state.selection.track)}
3225
else
33-
{:ok, assign(socket, Rooms.get_state(room_code))}
26+
{:ok,
27+
socket
28+
|> assign(Rooms.get_state(room_code))}
3429
end
3530
end
3631

@@ -39,6 +34,18 @@ defmodule PlingWeb.RoomLive do
3934
{:ok, redirect(socket, to: ~p"/login")}
4035
end
4136

37+
defp init_assigns(socket, room_code, game_mode, user_id) do
38+
assign(socket,
39+
room_code: room_code,
40+
user_id: user_id,
41+
show_playlist: false,
42+
game_mode: game_mode,
43+
current_track: nil,
44+
leader?: false,
45+
users: []
46+
)
47+
end
48+
4249
# ------------------------------------------------------------------
4350
# Presence diff
4451
# ------------------------------------------------------------------
@@ -150,27 +157,27 @@ defmodule PlingWeb.RoomLive do
150157
<div class="w-full text-center space-y-2">
151158
<div class="text-sm text-gray-500">{@room_code}</div>
152159
<div class="text-sm text-gray-500">
153-
<%= if length(@users) == 1 do %>
154-
<span class={if Enum.at(@users, 0).user_id == @user_id, do: "font-bold"}>
155-
{Enum.at(@users, 0).user_id}
156-
</span>
157-
{gettext("is here")}
160+
<%= if @users == [] do %>
161+
{gettext("Waiting for users...")}
158162
<% else %>
159-
<span class={if Enum.at(@users, 0).user_id == @user_id, do: "font-bold"}>
160-
{Enum.at(@users, 0).user_id}
161-
</span>
162-
{gettext("is joined by")}
163-
<%= for {user, index} <- Enum.with_index(Enum.drop(@users, 1)) do %>
164-
<span class={if user.user_id == @user_id, do: "font-bold"}>{user.user_id}</span>{if index <
165-
length(
166-
Enum.drop(
167-
@users,
168-
1
169-
)
170-
) -
171-
1,
172-
do:
173-
", "}
163+
<%= if length(@users) == 1 do %>
164+
<span class={if List.first(@users).user_id == @user_id, do: "font-bold"}>
165+
{List.first(@users).user_id}
166+
</span>
167+
{gettext("is here")}
168+
<% else %>
169+
<span class={if List.first(@users).user_id == @user_id, do: "font-bold"}>
170+
{List.first(@users).user_id}
171+
</span>
172+
{gettext("is joined by")}
173+
<% other_users = fn -> Enum.drop(@users, 1) end %>
174+
<% show_comma? = fn index, users -> index < length(users) - 1 end %>
175+
<%= for {user, index} <- Enum.with_index(other_users.()) do %>
176+
<span class={if user.user_id == @user_id, do: "font-bold"}>
177+
{user.user_id}
178+
</span>
179+
{if show_comma?.(index, other_users.()), do: ", "}
180+
<% end %>
174181
<% end %>
175182
<% end %>
176183
</div>

lib/pling_web/live/room_live.html.heex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
<pre class="absolute whitespace-pre-wrap text-xs p-4 bg-zinc-100 rounded-lg">
1+
<%!-- <pre class="absolute whitespace-pre-wrap text-xs p-4 bg-zinc-100 rounded-lg">
22
<%= inspect(Map.take(assigns, [:room_code, :user_id, :users, :playing?, :countdown, :timer_threshold, :leader?, :show_playlist, :selection, :game_mode, :scores]), pretty: true) %>
3-
</pre>
3+
</pre> --%>
44
<div class="w-full flex flex-col h-dvh space-y-4 py-4 justify-between" data-leader={@leader?}>
55
<.room_info room_code={@room_code} users={@users} user_id={@user_id} />
66
<.pling_button

0 commit comments

Comments
 (0)