improvement: accept multiple fields in AshPhoenix.Form.clear_value/2 (#67)

This commit is contained in:
Egor Kislitsyn 2023-01-05 22:51:03 +04:00 committed by GitHub
parent bd3a6fbb1f
commit 351f46e5af
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 1 deletions

View file

@ -2070,8 +2070,14 @@ defmodule AshPhoenix.Form do
@doc """
Clears a given input's value on a form.
Accepts a field (atom) or a list of fields (atoms) as a second argument.
"""
@spec clear_value(t(), atom) :: any()
@spec clear_value(t(), atom | [atom]) :: t()
def clear_value(form, field_or_fields) when is_list(field_or_fields) do
Enum.reduce(field_or_fields, form, &clear_value(&2, &1))
end
def clear_value(form, field) do
form = require_form!(form)
string_and_atom = [field, to_string(field)]

View file

@ -129,6 +129,31 @@ defmodule AshPhoenix.FormTest do
assert form.source.params == %{}
assert form.params == %{}
end
test "it clears multiple fields" do
form =
Post
|> Form.for_create(:create)
|> Form.validate(%{"excerpt" => "text", "text" => "text"})
assert Form.value(form, :excerpt) == "text"
assert Form.value(form, :text) == "text"
assert form.source.attributes == %{text: "text"}
assert form.source.arguments == %{excerpt: "text"}
assert form.source.params == %{"excerpt" => "text", "text" => "text"}
assert form.params == %{"excerpt" => "text", "text" => "text"}
form = Form.clear_value(form, [:excerpt, :text])
assert Form.value(form, :text) == nil
assert Form.value(form, :excerpt) == nil
assert form.params == %{}
assert form.source.arguments == %{}
assert form.source.attributes == %{}
assert form.source.params == %{}
end
end
describe "form_for fields" do