defmodule SlaxWeb.ChatRoomLive.Index do use SlaxWeb, :live_view alias Slax.Chat @impl Phoenix.LiveView def render(assigns) do ~H"""

{@page_title}

#{room.name}
<%= if joined? do %> ✓ Joined <% end %> <%= if joined? && room.topic do %> · <% end %> <%= if room.topic do %> {room.topic} <% end %>
""" end @impl Phoenix.LiveView def mount(_params, _session, socket) do rooms = Chat.list_rooms_with_joined(socket.assigns.current_user) socket |> assign(page_title: "All rooms") |> stream_configure(:rooms, dom_id: fn {room, _joined?} -> "rooms-#{room.id}" end) |> stream(:rooms, rooms) |> ok() 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) socket |> stream_insert(:rooms, {room, joined?}) |> noreply() end defp open_room(room) do JS.navigate(~p"/rooms/#{room}") end end