defmodule CMSWeb.StatusLive do @moduledoc false use CMSWeb, :live_view alias CMS.Statuses alias CMS.Statuses.Status @impl true def mount(_params, _session, socket) do {:ok, socket} end @impl true def handle_params(_params, _uri, %{assigns: %{live_action: :new}} = socket) do status = %Status{} changeset = Status.changeset(status) socket = assign(socket, status: status, form: to_form(changeset)) {:noreply, socket} end def handle_params(%{"status_id" => status_id}, _uri, %{assigns: %{live_action: :edit}} = socket) do status = Statuses.get_status!(status_id) changeset = Status.changeset(status) socket = assign(socket, status: status, form: to_form(changeset)) {:noreply, socket} end @impl true def handle_event("save_status", %{"status" => attrs}, %{assigns: %{live_action: :new}} = socket) do socket = case Statuses.create_status(attrs) do {:ok, status} -> push_navigate(socket, to: ~p"/admin/statuses/#{status}") {:error, changeset} -> assign(socket, form: to_form(changeset)) end {:noreply, socket} end def handle_event( "save_status", %{"status" => attrs}, %{assigns: %{status: status, live_action: :edit}} = socket ) do socket = case Statuses.update_status(status, attrs) do {:ok, status} -> assign(socket, status: status, form: to_form(Status.changeset(status))) {:error, changeset} -> assign(socket, form: to_form(changeset)) end {:noreply, socket} end @impl true def render(assigns) do ~H""" <.form for={@form} class="flex flex-col gap-y-2" phx-submit="save_status"> <.input type="textarea" field={@form[:body]} /> <button type="submit" class="self-end">save</button> </.form> """ end end