fix: show forms on single

fix: always List.wrap() forms
This commit is contained in:
Zach Daniel 2021-07-17 14:52:18 -04:00
parent e8da89bdbc
commit 948dde6f4b
2 changed files with 91 additions and 42 deletions

View file

@ -170,6 +170,13 @@ defmodule AshPhoenix.Form.Auto do
defp add_read_action(opts, manage_opts, relationship, cycle_preventer) do
manage_opts
|> Ash.Changeset.ManagedRelationshipHelpers.on_lookup_read_action(relationship)
|> case do
{:join, action, _} ->
{:join, action}
other ->
other
end
|> case do
nil ->
opts
@ -193,6 +200,21 @@ defmodule AshPhoenix.Form.Auto do
{source_dest_or_join, update_action} ->
resource = rel_to_resource(source_dest_or_join, relationship)
forms ++
related(resource, action_name, cycle_preventer) ++
[
{:_update,
[
resource: resource,
type: :single,
data: resource.__struct__(),
update_action: update_action
]}
]
{:join, update_action, _} ->
resource = relationship.through
forms ++
related(resource, action_name, cycle_preventer) ++
[

View file

@ -1464,55 +1464,82 @@ defmodule AshPhoenix.Form do
end
if (opts[:type] || :single) == :single do
case form_params["_form_type"] || "update" do
"read" ->
resource =
opts[:read_resource] || opts[:resource] ||
raise AshPhoenix.Form.NoResourceConfigured,
path: Enum.reverse(trail, [key])
if data || form_params["_form_type"] == "read" do
case form_params["_form_type"] || "update" do
# "read" ->
read_action =
opts[:read_action] ||
raise AshPhoenix.Form.NoActionConfigured,
path: Enum.reverse(trail, Enum.reverse(trail, [key])),
action: :read
"update" ->
update_action =
opts[:update_action] ||
raise AshPhoenix.Form.NoActionConfigured,
path: Enum.reverse(trail, Enum.reverse(trail, [key])),
action: :update
for_read(resource, read_action,
params: form_params,
forms: opts[:forms] || [],
errors: error?,
prev_data_trail: prev_data_trail
)
for_update(data, update_action,
params: form_params,
forms: opts[:forms] || [],
errors: error?,
prev_data_trail: prev_data_trail
)
"update" ->
update_action =
opts[:update_action] ||
raise AshPhoenix.Form.NoActionConfigured,
path: Enum.reverse(trail, Enum.reverse(trail, [key])),
action: :update
"destroy" ->
destroy_action =
opts[:destroy_action] ||
raise AshPhoenix.Form.NoActionConfigured,
path: Enum.reverse(trail, Enum.reverse(trail, [key])),
action: :destroy
for_update(data, update_action,
params: form_params,
forms: opts[:forms] || [],
errors: error?,
prev_data_trail: prev_data_trail
)
for_destroy(data, destroy_action,
params: form_params,
forms: opts[:forms] || [],
errors: error?,
prev_data_trail: prev_data_trail
)
end
else
case form_params["_form_type"] || "create" do
"create" ->
create_action =
opts[:create_action] ||
raise AshPhoenix.Form.NoActionConfigured,
path: Enum.reverse(trail, Enum.reverse(trail, [key])),
action: :create_action
"destroy" ->
destroy_action =
opts[:destroy_action] ||
raise AshPhoenix.Form.NoActionConfigured,
path: Enum.reverse(trail, Enum.reverse(trail, [key])),
action: :destroy
resource =
opts[:create_resource] || opts[:resource] ||
raise AshPhoenix.Form.NoResourceConfigured,
path: Enum.reverse(trail, [key])
for_destroy(data, destroy_action,
params: form_params,
forms: opts[:forms] || [],
errors: error?,
prev_data_trail: prev_data_trail
)
for_create(resource, create_action,
params: form_params,
forms: opts[:forms] || [],
errors: error?,
prev_data_trail: prev_data_trail
)
"read" ->
resource =
opts[:read_resource] || opts[:resource] ||
raise AshPhoenix.Form.NoResourceConfigured,
path: Enum.reverse(trail, [key])
read_action =
opts[:read_action] ||
raise AshPhoenix.Form.NoActionConfigured,
path: Enum.reverse(trail, Enum.reverse(trail, [key])),
action: :read
for_read(resource, read_action,
params: form_params,
forms: opts[:forms] || [],
errors: error?,
prev_data_trail: prev_data_trail
)
end
end
else
data = List.wrap(data)
form_params
|> indexed_list()
|> Enum.reduce({[], List.wrap(data)}, fn form_params, {forms, data} ->
@ -1705,7 +1732,6 @@ defmodule AshPhoenix.Form do
|> to_form(opts)
|> Map.put(:name, form.name <> "[#{field}]")
|> Map.put(:id, form.id <> "_#{field}")
|> List.wrap()
end
:list ->
@ -1719,6 +1745,7 @@ defmodule AshPhoenix.Form do
|> Map.put(:id, form.id <> "_#{field}_#{index}")
end)
end
|> List.wrap()
end
@impl true