jason.o
Errors aren't hidden on a form after creation
I have an email input form that uses CoreComponent’s input and error components. When the page is first opened or refreshed (at which time, the email input box is naturally blank), the ‘is required’ error message is displayed for a second and then disappears. In the browser console, the phx-xxxxxx mount: is printed when the said error message disappears, which leads me to suspect that that’s when phx-no-feedback:hidden kicks in.
To solve this problem, I’ve been told that the initial changeset should not include validation, and it should be added in the event handlers. Since, in Ash, however, allow_nil? false is defined at the resource level, how is this supposed to be handled?
def error(assigns) do
~H"""
<p class="mt-1 flex gap-3 text-sm leading-6 text-rose-600 phx-no-feedback:hidden">
<Heroicons.exclamation_circle mini class="mt-0.5 h-5 w-5 flex-none fill-rose-500" /> <%= render_slot(
@inner_block
) %>
</p>
"""
end
def input(assigns) do
~H"""
<div phx-feedback-for={@name}>
<.label for={@id}><%= @label %></.label>
<input
type={@type}
name={@name}
id={@id || @name}
value={Phoenix.HTML.Form.normalize_value(@type, @value)}
class={[
"block w-full rounded-lg text-zinc-900 focus:ring-0 sm:text-sm sm:leading-6",
@border && "phx-no-feedback:border-zinc-300 phx-no-feedback:focus:border-zinc-400",
@border && "border-zinc-300 focus:border-zinc-400",
if(!@border, do: "border-0"),
if(@strike_through, do: "line-through"),
@errors != [] && "border-rose-400 focus:border-rose-400",
@class
]}
{@rest}
/>
<.error :for={msg <- @errors}><%= msg %></.error>
</div>
"""
end
Marked As Solved
zachdaniel
Right, so the validate call is turning the errors on. By default when you create a form errors are off. Try this:
defp apply_action(socket, default_date) do
current_user = socket.assigns.current_user
form =
AshPhoenix.Form.for_create(Task, :create,
api: Tasks,
actor: socket.assigns.current_user,
forms: [auto?: true]
)
form = AshPhoenix.Form.validate(form, %{"task_code" => default_suggested_task_code}, errors: false)
form =
form
|> AshPhoenix.Form.add_form(:task_members, validate_opts: [errors: false])
|> AshPhoenix.Form.add_form(:keydates, validate_opts: [errors: false])
socket
|> assign(:form, form)
end
Also Liked
jason.o
Works like magic. Thank you!!
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #javascript
- #code-sync
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








