Packages
ash_phoenix
2.3.21
2.3.24
2.3.23
2.3.22
2.3.21
2.3.20
2.3.19
2.3.18
2.3.17
2.3.16
2.3.15
2.3.14
2.3.13
2.3.12
2.3.11
2.3.10
2.3.9
2.3.8
2.3.7
2.3.6
2.3.5
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.0
2.1.26
2.1.25
2.1.24
2.1.23
2.1.22
2.1.21
2.1.20
2.1.19
2.1.18
2.1.17
2.1.16
2.1.15
2.1.14
2.1.13
2.1.12
2.1.11
2.1.10
2.1.9
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.8
2.0.0-rc.7
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.3.7
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.26
1.2.25
1.2.24
1.2.23
1.2.22
1.2.21
1.2.20
1.2.19
1.2.18
1.2.17
1.2.16
1.2.15
1.2.14
1.2.13
1.2.12
1.2.11
1.2.10
1.2.9
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.1.0-rc.3
1.1.0-rc.2
1.1.0-rc.1
1.1.0-rc.0
1.0.0-rc.1
1.0.0-rc.0
1.0.0-pre.2
1.0.0-pre.1
1.0.0-pre.0
0.7.7
0.7.6-rc.0
0.7.5
0.7.4
0.7.3
0.7.2-rc.2
0.7.2-rc.1
0.7.2-rc.0
0.7.1
0.7.0
0.6.0-rc.7
0.6.0-rc.6
0.6.0-rc.5
0.6.0-rc.4
0.6.0-rc.3
0.6.0-rc.2
0.6.0-rc.1
0.6.0-rc.0
0.5.19-rc.2
0.5.19-rc.1
0.5.19-rc.0
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.24
0.4.23
0.4.23-rc.1
0.4.23-rc.0
0.4.22-rc2
0.4.22-rc1
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Utilities for integrating Ash and Phoenix
Current section
Files
Jump to
Current section
Files
priv/templates/ash_phoenix.gen.live/new/form.ex.eex
defmodule <%= inspect Module.concat(@web_module, @resource_alias) %>Live.Form do
use <%= @web_module %>, :live_view
@impl true
def render(assigns) do
~H"""
<Layouts.app flash={@flash}>
<.header>
<%%= @page_title %>
<:subtitle>Use this form to manage <%= @resource_singular %> records in your database.</:subtitle>
</.header>
<.form
for={@form}
id="<%= @resource_singular %>-form"
phx-change="validate"
phx-submit="save"
>
<%= cond do %>
<% @create_action && @update_action -> %>
<%= if @create_inputs == @update_inputs do %>
<%= @create_inputs %>
<% else %>
<%%= if @form.source.type == :create do %>
<%= @create_inputs %>
<%% end %>
<%%= if @form.source.type == :update do %>
<%= @update_inputs %>
<%% end %>
<% end %>
<% @create_action -> %>
<%= @create_inputs %>
<% @update_action -> %>
<%= @update_inputs %>
<% end %>
<.button phx-disable-with="Saving..." variant="primary">Save <%= @resource_human_singular %></.button>
<.button navigate={return_path(@return_to, @<%= @resource_singular %>)} >Cancel</.button>
</.form>
</Layouts.app>
"""
end
@impl true
def mount(params, _session, socket) do
<%= @resource_singular %> =
case params["id"] do
nil -> nil
id -> Ash.get!(<%= inspect Module.concat(Elixir, @resource) %>, id<%= @actor_opt %>)
end
action = if is_nil(<%= @resource_singular %>), do: "New", else: "Edit"
page_title = action <> " " <> <%= inspect @resource_human_singular %>
{:ok,
socket
|> assign(:return_to, return_to(params["return_to"]))
|> assign(<%= @resource_singular %>: <%= @resource_singular %>)
|> assign(:page_title, page_title)
|> assign_form()}
end
defp return_to("show"), do: "show"
defp return_to(_), do: "index"
@impl true
def handle_event("validate", %{"<%= @resource_singular %>" => <%= @resource_singular %>_params}, socket) do
{:noreply, assign(socket, form: AshPhoenix.Form.validate(socket.assigns.form, <%= @resource_singular %>_params))}
end
def handle_event("save", %{"<%= @resource_singular %>" => <%= @resource_singular %>_params}, socket) do
case AshPhoenix.Form.submit(socket.assigns.form, params: <%= @resource_singular %>_params) do
{:ok, <%= @resource_singular %>} ->
socket =
socket
<%= cond do %>
<% @update_action && @create_action -> %>
|> put_flash(:info, "<%= @resource_human_singular %> #{socket.assigns.form.source.type}d successfully")
<% @update_action -> %>
|> put_flash(:info, "<%= @resource_human_singular %> updated successfully")
<% @create_action -> %>
|> put_flash(:info, "<%= @resource_human_singular %> created successfully")
<% end %>
|> push_navigate(to: return_path(socket.assigns.return_to, <%= @resource_singular %>))
{:noreply, socket}
{:error, form} ->
{:noreply, assign(socket, form: form)}
end
end
defp assign_form(%{assigns: %{<%= @resource_singular %>: <%= @resource_singular %>}} = socket) do
form =
<%= cond do %>
<% @update_action && @create_action -> %>
if <%= @resource_singular %> do
AshPhoenix.Form.for_update(<%= @resource_singular %>, <%= inspect @update_action.name %>, as: <%= inspect @resource_singular %><%= @actor_opt %>)
else
AshPhoenix.Form.for_create(<%= @resource %>, <%= inspect @create_action.name %>, as: <%= inspect @resource_singular %><%= @actor_opt %>)
end
<% @update_action -> %>
AshPhoenix.Form.for_update(<%= @resource_singular %>, <%= inspect @update_action.name %>, as: <%= inspect @resource_singular %><%= @actor_opt %>)
<% @create_action -> %>
AshPhoenix.Form.for_create(<%= @resource %>, <%= inspect @create_action.name %>, as: <%= inspect @resource_singular %><%= @actor_opt %>)
<% end %>
assign(socket, form: to_form(form))
end
defp return_path("index", _<%= @resource_singular %>), do: ~p"<%= @route_prefix %>"
defp return_path("show", <%= @resource_singular %>), do: ~p"<%= @route_prefix %>/#{<%= @resource_singular %>.id}"
end