defmodule ElixirAiWeb.HomeLive do use ElixirAiWeb, :live_view alias ElixirAi.ConversationManager def mount(_params, _session, socket) do {:ok, socket |> assign(conversations: ConversationManager.list_conversations()) |> assign(new_name: "") |> assign(error: nil)} end def render(assigns) do ~H"""

Conversations

<%= if @error do %>

{@error}

<% end %>
""" end @spec handle_event(<<_::48>>, map(), any()) :: {:noreply, any()} def handle_event("create", %{"name" => name}, socket) do name = String.trim(name) if name == "" do {:noreply, assign(socket, error: "Name can't be blank")} else case ConversationManager.create_conversation(name) do {:ok, _pid} -> {:noreply, socket |> push_navigate(to: ~p"/chat/#{name}") |> assign(error: nil)} {:error, :already_exists} -> {:noreply, assign(socket, error: "A conversation with that name already exists")} _ -> {:noreply, assign(socket, error: "Failed to create conversation")} end end end end