feat(chat): toggle room membership on index page

This commit is contained in:
João Paulo Dubas 2024-11-17 22:18:34 +00:00
parent 3f97444908
commit 24c457413d
Signed by: joao.dubas
SSH Key Fingerprint: SHA256:V1mixgOGRc/YMhGx/DNkOSmJxgA2vHNrDZEk3wt/kOA
2 changed files with 33 additions and 0 deletions

View File

@ -35,6 +35,18 @@ defmodule Slax.Chat do
)
end
def toggle_room_membership(%Room{} = room, %User{} = user) do
case Repo.get_by(RoomMembership, room_id: room.id, user_id: user.id) do
%RoomMembership{} = membership ->
Repo.delete(membership)
{room, false}
nil ->
join_room!(room, user)
{room, true}
end
end
def change_room(room, attrs \\ %{}) do
Room.changeset(room, attrs)
end

View File

@ -37,6 +37,17 @@ defmodule SlaxWeb.ChatRoomLive.Index do
<% end %>
</div>
</div>
<button
class="opacity-0 group-hover:opacity-100 bg-white hover:bg-gray-100 border border-gray-400 text-gray-700 px-3 py-1.5 w-24 rounded-sm font-bold"
phx-click="toggle-room-membership"
phx-value-id={room.id}
>
<%= if joined? do %>
Leave
<% else %>
Join
<% end %>
</button>
</div>
</div>
</div>
@ -56,4 +67,14 @@ defmodule SlaxWeb.ChatRoomLive.Index do
{:ok, socket}
end
@impl Phoenix.LiveView
def handle_event("toggle-room-membership", %{"id" => id}, socket) do
{room, joined?} =
id
|> Chat.get_room!()
|> Chat.toggle_room_membership(socket.assigns.current_user)
{:noreply, stream_insert(socket, :rooms, {room, joined?})}
end
end