Packages
ash_phoenix
2.1.1
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/form_component.ex.eex
defmodule <%= inspect Module.concat(@web_module, @resource_alias) %>Live.FormComponent do
use <%= @web_module %>, :live_component
@impl true
def render(assigns) do
~H"""
<div>
<.header>
<%%= @title %>
<:subtitle>Use this form to manage <%= @resource_singular %> records in your database.</:subtitle>
</.header>
<.simple_form
for={@form}
id="<%= @resource_singular %>-form"
phx-target={@myself}
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 %>
<:actions>
<.button phx-disable-with="Saving...">Save <%= @resource_human_singular %></.button>
</:actions>
</.simple_form>
</div>
"""
end
@impl true
def update(assigns, socket) do
{:ok,
socket
|> assign(assigns)
|> assign_form()}
end
@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 %>} ->
notify_parent({:saved, <%= @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_patch(to: socket.assigns.patch)
{:noreply, socket}
{:error, form} ->
{:noreply, assign(socket, form: form)}
end
end
defp notify_parent(msg), do: send(self(), {__MODULE__, msg})
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_singular %>, <%= inspect @create_action.name %>, as: <%= inspect @resource_singular %><%= @actor_opt %>)
<% end %>
assign(socket, form: to_form(form))
end
end