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 @@
+
+
+
+
+ {#each messages as message (message.id)}
+ {@const me = message.name === name}
+ -
+ {message.name}
+ {message.body}
+
+ {/each}
+
+
+
+
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