defmodule MvWeb.MemberFormComponent do use Phoenix.Component use Gettext, backend: MvWeb.Gettext import MvWeb.CoreComponents @doc """ Reusable form for member data (without
-tag and buttons). Expects: - form: Phoenix.HTML.FormField for Member - property_types: List of PropertyTypes """ attr :form, :any, required: true attr :property_types, :list, required: true def member_form(assigns) do ~H""" <.input field={@form[:first_name]} label={gettext("First Name")} required /> <.input field={@form[:last_name]} label={gettext("Last Name")} required /> <.input field={@form[:email]} label={gettext("Email")} required type="email" /> <.input field={@form[:birth_date]} label={gettext("Birth Date")} type="date" /> <.input field={@form[:paid]} label={gettext("Paid")} type="checkbox" /> <.input field={@form[:phone_number]} label={gettext("Phone Number")} /> <.input field={@form[:join_date]} label={gettext("Join Date")} type="date" /> <.input field={@form[:exit_date]} label={gettext("Exit Date")} type="date" /> <.input field={@form[:notes]} label={gettext("Notes")} /> <.input field={@form[:city]} label={gettext("City")} /> <.input field={@form[:street]} label={gettext("Street")} /> <.input field={@form[:house_number]} label={gettext("House Number")} /> <.input field={@form[:postal_code]} label={gettext("Postal Code")} />

{gettext("Custom Properties")}

<.inputs_for :let={f_property} field={@form[:properties]}> <% type = Enum.find(@property_types, &(&1.id == f_property[:property_type_id].value)) %> <.inputs_for :let={value_form} field={f_property[:value]}> <% input_type = cond do type && type.value_type == :boolean -> "checkbox" type && type.value_type == :date -> :date true -> "text" end %> <.input field={value_form[:value]} label={type && type.name} type={input_type} /> """ end end