Skip to content

Commit bd26443

Browse files
committed
feat: add real-time message subscription and handling in contract view
1 parent 95aae2d commit bd26443

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

lib/algora_web/live/contract/view_live.ex

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,10 @@ defmodule AlgoraWeb.Contract.ViewLive do
484484
not (socket.assigns.all_contexts |> Enum.map(& &1.id) |> Enum.member?(contract.client_id)) do
485485
{:ok, raise(AlgoraWeb.NotFoundError)}
486486
else
487+
if connected?(socket) do
488+
Chat.subscribe(thread.id)
489+
end
490+
487491
{:ok,
488492
socket
489493
|> assign(:contract, contract)
@@ -501,6 +505,14 @@ defmodule AlgoraWeb.Contract.ViewLive do
501505
end
502506
end
503507

508+
def handle_info(%Chat.Message{} = message, socket) do
509+
if message.id in Enum.map(socket.assigns.messages, & &1.id) do
510+
{:noreply, socket}
511+
else
512+
{:noreply, Phoenix.Component.update(socket, :messages, &(&1 ++ [message]))}
513+
end
514+
end
515+
504516
def handle_event("send_message", %{"message" => content}, socket) do
505517
{:ok, message} =
506518
Chat.send_message(

0 commit comments

Comments
 (0)