feat(chat): toggle room membership on index page
This commit is contained in:
parent
3f97444908
commit
24c457413d
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user