diff --git a/lib/ash_admin/components/resource/form.ex b/lib/ash_admin/components/resource/form.ex index fbc5f9e..161afc3 100644 --- a/lib/ash_admin/components/resource/form.ex +++ b/lib/ash_admin/components/resource/form.ex @@ -227,6 +227,25 @@ defmodule AshAdmin.Components.Resource.Form do argument, opts ) do + key = + opts[:value_is_key] || + relationship.destination + |> Ash.Resource.Info.primary_key() + |> case do + [key] -> + key + + _ -> + nil + end + + {hidden?, exactly_fields} = + if map_type?(argument.type) || !key do + {true, nil} + else + {false, [key]} + end + ~F"""
- "[#{elem(kv, 0)}]"} value={elem(kv, 1)} hidden> + {#if hidden?} + "[#{elem(kv, 0)}]"} value={elem(kv, 1)} hidden> + {/if} {#if inner_form.source.form_keys[:_join]} - "[#{elem(kv, 0)}]"} value={elem(kv, 1)} hidden> + {#if hidden?} + "[#{elem(kv, 0)}]"} value={elem(kv, 1)} hidden> + {/if} {render_attributes( assigns, relationship.through, join_action(relationship.through, join_form, inner_form.source.form_keys[:_join]), join_form, - inner_form.source.form_keys[:_join][:create_fields], - skip_through_related(relationship) + exactly_fields || inner_form.source.form_keys[:_join][:create_fields], + skip_through_related(exactly_fields, relationship) )} {/if} @@ -269,8 +292,8 @@ defmodule AshAdmin.Components.Resource.Form do inner_form.source.resource, inner_form.source.source.action, inner_form, - relationship_fields(inner_form), - skip_related(relationship) + exactly_fields || relationship_fields(inner_form), + skip_related(exactly_fields, relationship) )}