+ <.message :for={{dom_id, message} <- @streams.messages} dom_id={dom_id} message={message} />
<.form
@@ -137,7 +137,8 @@ defmodule SlaxWeb.ChatRoomLive do
{:noreply,
socket
- |> assign(hide_topic?: false, messages: messages, page_title: "# #{room.name}", room: room)
+ |> assign(hide_topic?: false, page_title: "# #{room.name}", room: room)
+ |> stream(:messages, messages, reset: true)
|> assign_message_form(Chat.change_message(%Message{}))}
end
@@ -160,7 +161,7 @@ defmodule SlaxWeb.ChatRoomLive do
case Chat.create_message(room, user, message_params) do
{:ok, message} ->
socket
- |> update(:messages, &(&1 ++ [message]))
+ |> stream_insert(:messages, message)
|> assign_message_form(Chat.change_message(%Message{}))
{:error, changeset} ->
@@ -191,11 +192,12 @@ defmodule SlaxWeb.ChatRoomLive do
"""
end
+ attr :dom_id, :string, required: true
attr :message, Message, required: true
defp message(assigns) do
~H"""
-