50 lines
No EOL
2.2 KiB
Elixir
50 lines
No EOL
2.2 KiB
Elixir
defmodule MvWeb.MemberFormComponent do
|
|
use Phoenix.Component
|
|
use Gettext, backend: MvWeb.Gettext
|
|
import MvWeb.CoreComponents
|
|
|
|
@doc """
|
|
Reusable form for member data (without <form>-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")} />
|
|
|
|
<h3 class="mt-8 mb-2 text-lg font-semibold">{gettext("Custom Properties")}</h3>
|
|
<.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} />
|
|
</.inputs_for>
|
|
<input
|
|
type="hidden"
|
|
name={f_property[:property_type_id].name}
|
|
value={f_property[:property_type_id].value}
|
|
/>
|
|
</.inputs_for>
|
|
"""
|
|
end
|
|
end |