mirror of
https://github.com/ash-project/ash_phoenix.git
synced 2024-09-20 07:12:49 +12:00
fix: show forms on single
fix: always List.wrap() forms
This commit is contained in:
parent
e8da89bdbc
commit
948dde6f4b
2 changed files with 91 additions and 42 deletions
|
@ -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) ++
|
||||
[
|
||||
|
|
|
@ -1464,25 +1464,9 @@ defmodule AshPhoenix.Form do
|
|||
end
|
||||
|
||||
if (opts[:type] || :single) == :single do
|
||||
if data || form_params["_form_type"] == "read" do
|
||||
case form_params["_form_type"] || "update" do
|
||||
"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
|
||||
)
|
||||
# "read" ->
|
||||
|
||||
"update" ->
|
||||
update_action =
|
||||
|
@ -1513,6 +1497,49 @@ defmodule AshPhoenix.Form do
|
|||
)
|
||||
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
|
||||
|
||||
resource =
|
||||
opts[:create_resource] || opts[:resource] ||
|
||||
raise AshPhoenix.Form.NoResourceConfigured,
|
||||
path: Enum.reverse(trail, [key])
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue