From 0d606e9948d5d42c200bf3a64553db0c32178168 Mon Sep 17 00:00:00 2001 From: Zach Daniel Date: Thu, 4 Apr 2024 14:03:20 -0400 Subject: [PATCH] fix: undo the change of not returning hidden fields this caused issues with setting ids for related entities. Instead, we tell each changeset/query that they can ignore any unknown inputs --- lib/ash_phoenix/form/form.ex | 46 +++++++----------------------------- mix.lock | 4 ++-- 2 files changed, 10 insertions(+), 40 deletions(-) diff --git a/lib/ash_phoenix/form/form.ex b/lib/ash_phoenix/form/form.ex index 1dd39b2..0ca72ec 100644 --- a/lib/ash_phoenix/form/form.ex +++ b/lib/ash_phoenix/form/form.ex @@ -216,12 +216,6 @@ defmodule AshPhoenix.Form do type: :atom, doc: "The domain to use when calling the action" ], - skip_unknown_inputs: [ - type: {:list, {:or, [:atom, :string]}}, - default: [], - doc: - "A list of inputs that will be ignored by the underlying changeset if they are not accepted" - ], as: [ type: :string, default: "form", @@ -1087,7 +1081,8 @@ defmodule AshPhoenix.Form do |> Ash.Changeset.for_create( form.action, Map.drop(changeset_params, ["_form_type", "_touched", "_union_type"]), - source_opts + allow_all_keys_to_be_skipped(source_opts, changeset_params) + ) :update -> @@ -1100,7 +1095,7 @@ defmodule AshPhoenix.Form do |> Ash.Changeset.for_update( form.action, Map.drop(changeset_params, ["_form_type", "_touched", "_union_type"]), - source_opts + allow_all_keys_to_be_skipped(source_opts, changeset_params) ) :destroy -> @@ -1113,7 +1108,7 @@ defmodule AshPhoenix.Form do |> Ash.Changeset.for_destroy( form.action, Map.drop(changeset_params, ["_form_type", "_touched", "_union_type"]), - source_opts + allow_all_keys_to_be_skipped(source_opts, changeset_params) ) :read -> @@ -1234,7 +1229,6 @@ defmodule AshPhoenix.Form do domain: form.opts[:domain], params: params, forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -1259,7 +1253,6 @@ defmodule AshPhoenix.Form do tenant: form.opts[:tenant], domain: form.opts[:domain], params: params, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -1342,7 +1335,6 @@ defmodule AshPhoenix.Form do tenant: form.opts[:tenant], domain: form.opts[:domain], params: form_params, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -1413,7 +1405,6 @@ defmodule AshPhoenix.Form do tenant: form.opts[:tenant], domain: form.opts[:domain], errors: errors?, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -1434,7 +1425,6 @@ defmodule AshPhoenix.Form do actor: form.opts[:actor], tenant: form.opts[:tenant], errors: errors?, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], warn_on_unhandled_errors?: form.warn_on_unhandled_errors?, @@ -1488,7 +1478,6 @@ defmodule AshPhoenix.Form do tenant: form.opts[:tenant], domain: form.opts[:domain], errors: errors?, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], warn_on_unhandled_errors?: form.warn_on_unhandled_errors?, @@ -1517,7 +1506,6 @@ defmodule AshPhoenix.Form do tenant: form.opts[:tenant], domain: form.opts[:domain], errors: errors?, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], prev_data_trail: prev_data_trail, @@ -1691,7 +1679,7 @@ defmodule AshPhoenix.Form do |> Ash.Changeset.for_create( form.source.action.name, changeset_params, - changeset_opts + allow_all_keys_to_be_skipped(changeset_opts, changeset_params) ) |> before_submit.() |> with_changeset(&Ash.create(&1, opts[:action_opts] || [])) @@ -1703,7 +1691,7 @@ defmodule AshPhoenix.Form do |> Ash.Changeset.for_update( form.source.action.name, changeset_params, - changeset_opts + allow_all_keys_to_be_skipped(changeset_opts, changeset_params) ) |> before_submit.() |> with_changeset(&Ash.update(&1, opts[:action_opts] || [])) @@ -1715,7 +1703,7 @@ defmodule AshPhoenix.Form do |> Ash.Changeset.for_destroy( form.source.action.name, changeset_params, - changeset_opts + allow_all_keys_to_be_skipped(changeset_opts, changeset_params) ) |> before_submit.() |> with_changeset(&Ash.destroy(&1, opts[:action_opts] || [])) @@ -2568,7 +2556,7 @@ defmodule AshPhoenix.Form do def params(form, opts \\ []) do form = to_form!(form) # These options aren't documented because they are still experimental - hidden? = Keyword.get(opts, :hidden?, false) + hidden? = Keyword.get(opts, :hidden?, true) excluded_empty_fields = Keyword.get( @@ -3432,7 +3420,6 @@ defmodule AshPhoenix.Form do domain: form.opts[:domain], actor: form.opts[:actor], tenant: form.opts[:tenant], - skip_unknown_inputs: config[:skip_unknown_inputs] || [], accessing_from: config[:managed_relationship], transform_params: config[:transform_params], prepare_source: config[:prepare_source], @@ -3943,7 +3930,6 @@ defmodule AshPhoenix.Form do actor: actor, tenant: tenant, errors: error?, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], warn_on_unhandled_errors?: warn_on_unhandled_errors?, @@ -3964,7 +3950,6 @@ defmodule AshPhoenix.Form do actor: actor, tenant: tenant, errors: error?, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], warn_on_unhandled_errors?: warn_on_unhandled_errors?, @@ -4022,7 +4007,6 @@ defmodule AshPhoenix.Form do actor: actor, tenant: tenant, errors: error?, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], warn_on_unhandled_errors?: warn_on_unhandled_errors?, @@ -4048,7 +4032,6 @@ defmodule AshPhoenix.Form do actor: actor, tenant: tenant, errors: error?, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], prev_data_trail: prev_data_trail, @@ -4163,7 +4146,6 @@ defmodule AshPhoenix.Form do params: form_params, warn_on_unhandled_errors?: warn_on_unhandled_errors?, forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4190,7 +4172,6 @@ defmodule AshPhoenix.Form do tenant: tenant, params: form_params, forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4224,7 +4205,6 @@ defmodule AshPhoenix.Form do tenant: tenant, params: add_index(form_params, original_index, opts), forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4252,7 +4232,6 @@ defmodule AshPhoenix.Form do tenant: tenant, params: add_index(form_params, original_index, opts), forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], warn_on_unhandled_errors?: warn_on_unhandled_errors?, @@ -4309,7 +4288,6 @@ defmodule AshPhoenix.Form do params: form_params, forms: opts[:forms] || [], errors: error?, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4332,7 +4310,6 @@ defmodule AshPhoenix.Form do tenant: tenant, params: form_params, forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4363,7 +4340,6 @@ defmodule AshPhoenix.Form do tenant: tenant, params: form_params, forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4392,7 +4368,6 @@ defmodule AshPhoenix.Form do tenant: tenant, params: form_params, forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4437,7 +4412,6 @@ defmodule AshPhoenix.Form do params: add_index(form_params, original_index, opts), forms: opts[:forms] || [], errors: error?, - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4469,7 +4443,6 @@ defmodule AshPhoenix.Form do tenant: tenant, params: add_index(form_params, original_index, opts), forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4497,7 +4470,6 @@ defmodule AshPhoenix.Form do tenant: tenant, params: form_params, forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4520,7 +4492,6 @@ defmodule AshPhoenix.Form do tenant: tenant, params: form_params, forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], transform_params: opts[:transform_params], @@ -4553,7 +4524,6 @@ defmodule AshPhoenix.Form do tenant: tenant, params: form_params, forms: opts[:forms] || [], - skip_unknown_inputs: opts[:skip_unknown_inputs] || [], transform_params: opts[:transform_params], accessing_from: opts[:managed_relationship], prepare_source: opts[:prepare_source], diff --git a/mix.lock b/mix.lock index 68bb080..3327050 100644 --- a/mix.lock +++ b/mix.lock @@ -1,5 +1,5 @@ %{ - "ash": {:hex, :ash, "3.0.0-rc.3", "9d2af1a4baef19ef0ef8a7f4bbdbbd640d54d62b484cdfd42e583d88c566115f", [:mix], [{:comparable, "~> 1.0", [hex: :comparable, repo: "hexpm", optional: false]}, {:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:ecto, "~> 3.7", [hex: :ecto, repo: "hexpm", optional: false]}, {:ets, "~> 0.8", [hex: :ets, repo: "hexpm", optional: false]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: false]}, {:picosat_elixir, "~> 0.2", [hex: :picosat_elixir, repo: "hexpm", optional: true]}, {:plug, ">= 0.0.0", [hex: :plug, repo: "hexpm", optional: true]}, {:reactor, "~> 0.8", [hex: :reactor, repo: "hexpm", optional: false]}, {:simple_sat, ">= 0.1.1 and < 1.0.0-0", [hex: :simple_sat, repo: "hexpm", optional: true]}, {:spark, ">= 2.1.7 and < 3.0.0-0", [hex: :spark, repo: "hexpm", optional: false]}, {:splode, "~> 0.2", [hex: :splode, repo: "hexpm", optional: false]}, {:stream_data, "~> 0.6", [hex: :stream_data, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.1", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "83a16dace30aabb1f623e6f1b405cfe1af14f87a1411b1af9bbc745cd968a373"}, + "ash": {:hex, :ash, "3.0.0-rc.11", "2eb81c33ec318b55083bd1f3d3708e7e86062a3bbca8c6c94954c505d48409cc", [:mix], [{:comparable, "~> 1.0", [hex: :comparable, repo: "hexpm", optional: false]}, {:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:ecto, "~> 3.7", [hex: :ecto, repo: "hexpm", optional: false]}, {:ets, "~> 0.8", [hex: :ets, repo: "hexpm", optional: false]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: false]}, {:picosat_elixir, "~> 0.2", [hex: :picosat_elixir, repo: "hexpm", optional: true]}, {:plug, ">= 0.0.0", [hex: :plug, repo: "hexpm", optional: true]}, {:reactor, "~> 0.8", [hex: :reactor, repo: "hexpm", optional: false]}, {:simple_sat, ">= 0.1.1 and < 1.0.0-0", [hex: :simple_sat, repo: "hexpm", optional: true]}, {:spark, ">= 2.1.7 and < 3.0.0-0", [hex: :spark, repo: "hexpm", optional: false]}, {:splode, "~> 0.2", [hex: :splode, repo: "hexpm", optional: false]}, {:stream_data, "~> 0.6", [hex: :stream_data, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.1", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "92198b501324c9ecc6060cf563abad064d04d122c626abf6836e9cf0f5fec1cb"}, "bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"}, "castore": {:hex, :castore, "1.0.6", "ffc42f110ebfdafab0ea159cd43d31365fa0af0ce4a02ecebf1707ae619ee727", [:mix], [], "hexpm", "374c6e7ca752296be3d6780a6d5b922854ffcc74123da90f2f328996b962d33a"}, "comparable": {:hex, :comparable, "1.0.0", "bb669e91cedd14ae9937053e5bcbc3c52bb2f22422611f43b6e38367d94a495f", [:mix], [{:typable, "~> 0.1", [hex: :typable, repo: "hexpm", optional: false]}], "hexpm", "277c11eeb1cd726e7cd41c6c199e7e52fa16ee6830b45ad4cdc62e51f62eb60c"}, @@ -34,7 +34,7 @@ "simple_sat": {:hex, :simple_sat, "0.1.1", "68a5ebe6f6d5956bd806e4881c495692c14580a2f1a4420488985abd0fba2119", [:mix], [], "hexpm", "63571218f92ff029838df7645eb8f0c38df8ed60d2d14578412a8d142a94471e"}, "sobelow": {:hex, :sobelow, "0.13.0", "218afe9075904793f5c64b8837cc356e493d88fddde126a463839351870b8d1e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "cd6e9026b85fc35d7529da14f95e85a078d9dd1907a9097b3ba6ac7ebbe34a0d"}, "sourceror": {:hex, :sourceror, "1.0.2", "c5e86fdc14881f797749d1fe5df017ca66727a8146e7ee3e736605a3df78f3e6", [:mix], [], "hexpm", "832335e87d0913658f129d58b2a7dc0490ddd4487b02de6d85bca0169ec2bd79"}, - "spark": {:hex, :spark, "2.1.9", "053adb7f9b7f1059694aaf6f608fd3f13e460844f7fa7c689dabd97d6e49caf6", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.0", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "7896127fdaa01230604cd7f1ae907e54ac5038a514603a5ed209e40f6304671c"}, + "spark": {:hex, :spark, "2.1.11", "8093149dfd583b5ce2c06e1fea1faaf4125b50e4703138b2cbefb78c8f4aa07f", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.0", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "1877d92ab993b860e9d828bfd72d50367c0d3a53dd84f4de5d221baf66ae8723"}, "splode": {:hex, :splode, "0.2.1", "020079ec06c9e00f8b6586852e781b5e07aee6ba588f3f45dd993831c87b0511", [:mix], [], "hexpm", "d232a933666061fe1f659d9906042fa94b9b393bb1129a4fde6fa680033b2611"}, "stream_data": {:hex, :stream_data, "0.6.0", "e87a9a79d7ec23d10ff83eb025141ef4915eeb09d4491f79e52f2562b73e5f47", [:mix], [], "hexpm", "b92b5031b650ca480ced047578f1d57ea6dd563f5b57464ad274718c9c29501c"}, "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},