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
|
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
|
def change_room(room, attrs \\ %{}) do
|
||||||
Room.changeset(room, attrs)
|
Room.changeset(room, attrs)
|
||||||
end
|
end
|
||||||
|
@ -37,6 +37,17 @@ defmodule SlaxWeb.ChatRoomLive.Index do
|
|||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -56,4 +67,14 @@ defmodule SlaxWeb.ChatRoomLive.Index do
|
|||||||
|
|
||||||
{:ok, socket}
|
{:ok, socket}
|
||||||
end
|
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
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user