From a7b2296d43d95b6716050b159a19319cd1af7a37 Mon Sep 17 00:00:00 2001 From: Zach Daniel Date: Mon, 12 Jul 2021 17:37:06 -0400 Subject: [PATCH] chore: refactor the use_data? change --- lib/ash_phoenix.ex | 68 +++++++++++++++++------------------------ test/changeset_test.exs | 2 +- 2 files changed, 29 insertions(+), 41 deletions(-) diff --git a/lib/ash_phoenix.ex b/lib/ash_phoenix.ex index 0d44b45..a4ea53c 100644 --- a/lib/ash_phoenix.ex +++ b/lib/ash_phoenix.ex @@ -417,36 +417,39 @@ defmodule AshPhoenix do changeset {rel, id, nil} -> - if Map.has_key?(changeset.relationships, rel) || !opts[:use_data?] || - !loaded?(changeset.data, rel) do - new_relationships = - changeset.relationships - |> Map.put_new(rel, []) - |> Map.update!(rel, fn manages -> - manages ++ [{add_to_path(nil, path, add), [meta: [id: id]]}] - end) + new_relationships = + changeset.relationships + |> Map.put_new(rel, []) + |> Map.update!(rel, fn manages -> + to_add = + if opts[:use_data?] && loaded?(changeset.data, rel) do + changeset.data + |> Map.get(rel) + |> List.wrap() + |> Enum.reduce(nil, fn _, acc -> + add_to_path(acc, path, %{}) + end) + |> add_to_path(path, add) + else + add_to_path(nil, path, add) + end - %{changeset | relationships: new_relationships} - else - add_all_related_and_try_again(changeset, rel, original_path, outer_form_name, opts) - end + manages ++ [{to_add, [meta: [id: id]]}] + end) + + %{changeset | relationships: new_relationships} {rel, _id, index} -> - if Map.has_key?(changeset.relationships, rel) || !opts[:use_data?] || - !loaded?(changeset.data, rel) do - new_relationships = - changeset.relationships - |> Map.put_new(rel, []) - |> Map.update!(rel, fn manages -> - List.update_at(manages, index, fn {manage, opts} -> - {add_to_path(manage, path, add), opts} - end) + new_relationships = + changeset.relationships + |> Map.put_new(rel, []) + |> Map.update!(rel, fn manages -> + List.update_at(manages, index, fn {manage, opts} -> + {add_to_path(manage, path, add), opts} end) + end) - %{changeset | relationships: new_relationships} - else - add_all_related_and_try_again(changeset, rel, original_path, outer_form_name, opts) - end + %{changeset | relationships: new_relationships} end end @@ -457,21 +460,6 @@ defmodule AshPhoenix do end end - defp add_all_related_and_try_again(changeset, rel, path, outer_form_name, opts) do - changeset.data - |> Map.get(rel) - |> List.wrap() - |> Enum.reduce(changeset, fn _, changeset -> - add_related( - changeset, - path, - outer_form_name, - Keyword.merge(opts, add: %{}, use_data?: false) - ) - end) - |> add_related(path, outer_form_name, opts) - end - @remove_related_opts [ add: [ type: :any, diff --git a/test/changeset_test.exs b/test/changeset_test.exs index 95c5556..ff2c621 100644 --- a/test/changeset_test.exs +++ b/test/changeset_test.exs @@ -3,7 +3,7 @@ defmodule AshPhoenix.ChangesetTest do import Phoenix.HTML.Form, only: [form_for: 2, inputs_for: 2, inputs_for: 3] alias Phoenix.HTML.FormData - alias AshPhoenix.Test.{Api, Comment, Post, PostLink} + alias AshPhoenix.Test.{Api, Comment, Post} describe "form_for fields" do test "it should show simple field values" do