From de442c36e841c935d085f6ef441e6704a80cebd1 Mon Sep 17 00:00:00 2001 From: Wout De Puysseleir Date: Thu, 16 Mar 2023 16:50:49 -0700 Subject: [PATCH] Add Advanced chat example --- examples/advanced_chat/AdvancedChat.svelte | 56 ++++++++++++++++++++++ examples/advanced_chat/live_svelte.ex | 49 +++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 examples/advanced_chat/AdvancedChat.svelte create mode 100644 examples/advanced_chat/live_svelte.ex diff --git a/examples/advanced_chat/AdvancedChat.svelte b/examples/advanced_chat/AdvancedChat.svelte new file mode 100644 index 0000000..61909d9 --- /dev/null +++ b/examples/advanced_chat/AdvancedChat.svelte @@ -0,0 +1,56 @@ + + +
+ + +
+ + + +
+
diff --git a/examples/advanced_chat/live_svelte.ex b/examples/advanced_chat/live_svelte.ex new file mode 100644 index 0000000..47c51f5 --- /dev/null +++ b/examples/advanced_chat/live_svelte.ex @@ -0,0 +1,49 @@ +defmodule ExampleWeb.AdvancedChat do + use ExampleWeb, :live_view + + @topic "public" + @event_new_message "new_message" + + def render(assigns) do + ~H""" +
+ <%= unless @name do %> +
+ + + +
+ <% else %> + + <% end %> +
+ """ + end + + def mount(_params, _session, socket) do + ExampleWeb.Endpoint.subscribe(@topic) + {:ok, assign(socket, messages: [], name: nil)} + end + + def handle_event("set_name", %{"name" => ""}, socket), do: {:noreply, socket} + def handle_event("set_name", %{"name" => name}, socket), do: {:noreply, assign(socket, name: name)} + + def handle_event("send_message", payload, socket) do + payload = + payload + |> Map.put(:name, socket.assigns.name) + |> Map.put(:id, System.unique_integer([:positive])) + + ExampleWeb.Endpoint.broadcast(@topic, @event_new_message, payload) + + {:noreply, socket} + end + + def handle_info(%{topic: @topic, event: @event_new_message, payload: payload}, socket) do + {:noreply, assign(socket, messages: socket.assigns.messages ++ [payload])} + end +end