defmodule MoonWeb.Examples.Design.ModalExample.WithForm do
@moduledoc false
use Moon.StatefulComponent
use MoonWeb, :example
alias Moon.Design.Modal
alias Moon.Design.Button
alias Moon.Design.Form
alias MoonWeb.Schema.Dates
prop(is_open, :boolean, default: false)
data(changeset, :any)
def render(assigns) do
~F"""
"""
end
def mount(socket) do
changeset = Dates.create_changeset(%{})
socket = assign(socket, changeset: changeset)
{:ok, socket}
end
def handle_event("close", _params, socket) do
{:noreply, assign(socket, is_open: false)}
end
def handle_event("open", _params, socket) do
{:noreply, assign(socket, is_open: true)}
end
def handle_event("update_selected", %{"dates" => params}, socket) do
changeset = Dates.create_changeset(params)
{:noreply, assign(socket, changeset: changeset)}
end
def handle_event("apply", _params, socket) do
changeset = Map.merge(socket.assigns.changeset, %{action: :insert})
socket =
if changeset.valid? do
params = %{value: "custom", dates: Ecto.Changeset.apply_changes(changeset)}
send(self(), {:updated_date_filter, params})
assign(socket, is_open: false)
else
assign(socket, is_open: true, changeset: changeset)
end
{:noreply, socket}
end
end