sloanelybutsurely.com/lib/web/live/status_live.ex

70 lines
1.9 KiB
Elixir

defmodule Web.StatusLive do
@moduledoc false
use Web, :live_view
@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 = %Schema.Status{}
changeset = Core.Statuses.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 = Core.Statuses.get_status!(status_id)
changeset = Core.Statuses.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 Core.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 Core.Statuses.update_status(status, attrs) do
{:ok, status} ->
assign(socket,
status: status,
form:
status
|> Core.Statuses.changeset(%{})
|> to_form()
)
{: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