From 89bee3a1f2af6b28bf1e4b35ac6ae97520d4a63d Mon Sep 17 00:00:00 2001 From: Zach Daniel Date: Fri, 7 Jun 2024 18:36:19 -0400 Subject: [PATCH] improvement: various fixes around unions --- dev.exs | 1 + lib/ash_admin/components/resource/form.ex | 82 +++++++++++++++++++++-- mix.exs | 3 +- 3 files changed, 79 insertions(+), 7 deletions(-) diff --git a/dev.exs b/dev.exs index 3245d67..ab0fc9b 100644 --- a/dev.exs +++ b/dev.exs @@ -46,6 +46,7 @@ end Application.ensure_all_started(:os_mon) Application.put_env(:phoenix, :serve_endpoints, true) + :erlang.system_flag(:backtrace_depth, 100) Task.start(fn -> children = [ diff --git a/lib/ash_admin/components/resource/form.ex b/lib/ash_admin/components/resource/form.ex index b444772..974ef22 100644 --- a/lib/ash_admin/components/resource/form.ex +++ b/lib/ash_admin/components/resource/form.ex @@ -1045,17 +1045,75 @@ defmodule AshAdmin.Components.Resource.Form do ) %> + <% Ash.Type.embedded_type?(@attribute.type) && match?([%AshPhoenix.Form{} | _], @value) -> %> + <%= for inner_form <- Enum.map(@value, &to_form/1) do %> + <.input + :for={kv <- inner_form.hidden} + name={inner_form.name <> "[#{elem(kv, 0)}]"} + value={elem(kv, 1)} + type="hidden" + /> + + + <%= render_attributes( + assigns, + inner_form.source.resource, + inner_form.source.source.action, + %{ + inner_form + | id: @id || @form.id <> "_#{@attribute.name}", + name: @name || @form.name <> "[#{@attribute.name}]" + } + ) %> + <% end %> + + <% Ash.Type.embedded_type?(@attribute.type) && match?(%AshPhoenix.Form{}, @value) -> %> + <% inner_form = to_form(@value) %> + <.input + :for={kv <- inner_form.hidden} + name={inner_form.name <> "[#{elem(kv, 0)}]"} + value={elem(kv, 1)} + type="hidden" + /> + <%= render_attributes( + assigns, + inner_form.source.resource, + inner_form.source.source.action, + %{ inner_form | + id: @id || @form.id <> "_#{@attribute.name}", + name: @name || @form.name <> "[#{@attribute.name}]" + } + ) %> <% Ash.Type.embedded_type?(@attribute.type) -> %> <.inputs_for :let={inner_form} field={@form[@attribute.name]}> <.input @@ -1086,13 +1144,13 @@ defmodule AshAdmin.Components.Resource.Form do ) %>