I have an invitation form that includes a list of existing groups a user can be invited to. The form does not allow creating new groups but lets users select from the existing groups to associate with the invitation.
Below is a sample form input:
Hey there! I think the most straightforward way to go about this is to use the prepare_params option of AshPhoenix.Form. I put together a little example project that you can run, and go to /posts. There you can create a post with two category options each toggled with checkboxes. In your case, the label would be the name of the group, and instead of #{category} it would be something like #{group.id}.
and setting checked attribute depending on whether a group is inside that list:
<%= for group <- @groups do %>
<.input
type="checkbox"
label={group.name}
name={@form.name <> "[groups][#{group.id}]"}
id={@form.id <> "_groups_#{group.id}"}
checked={group.id in @checked_groups}
/>
The groups stay checked after validation.
We just need to make sure we’re assigning the form during validation, as always:
def handle_event("validate", %{"invitation" => params}, socket) do
form = AshPhoenix.Form.validate(socket.assigns.form, params)
{:noreply, assign(socket, :form, form)}
end