@@ -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 >
0 commit comments