71 lines
1.8 KiB
Elixir
71 lines
1.8 KiB
Elixir
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
|