Member field settings: required checkbox, line break, toggle fix
Index/Form use member_field_required; Required disabled for email and Vereinfacht-required fields with tooltip. Rebuild form with to_form on validate to fix checkbox toggle. Add mt-4 block before Required.
This commit is contained in:
parent
17fd5e13d5
commit
8933ad9d14
5 changed files with 154 additions and 155 deletions
|
|
@ -22,7 +22,6 @@ defmodule MvWeb.MemberFieldLive.IndexComponent do
|
|||
assigns =
|
||||
assigns
|
||||
|> assign(:member_fields, get_member_fields_with_visibility(assigns.settings))
|
||||
|> assign(:required?, &required?/1)
|
||||
|
||||
~H"""
|
||||
<div id={@id}>
|
||||
|
|
@ -62,22 +61,15 @@ defmodule MvWeb.MemberFieldLive.IndexComponent do
|
|||
{format_value_type(field_data.field)}
|
||||
</:col>
|
||||
|
||||
<:col :let={{_field_name, field_data}} label={gettext("Description")}>
|
||||
{field_data.description || ""}
|
||||
</:col>
|
||||
|
||||
<:col
|
||||
:let={{_field_name, field_data}}
|
||||
label={gettext("Required")}
|
||||
class="max-w-[9.375rem] text-center"
|
||||
>
|
||||
<span
|
||||
:if={@required?.(field_data.field)}
|
||||
class="text-base-content font-semibold"
|
||||
>
|
||||
<span :if={field_data.required} class="text-base-content font-semibold">
|
||||
{gettext("Required")}
|
||||
</span>
|
||||
<span :if={!@required?.(field_data.field)} class="text-base-content/70">
|
||||
<span :if={!field_data.required} class="text-base-content/70">
|
||||
{gettext("Optional")}
|
||||
</span>
|
||||
</:col>
|
||||
|
|
@ -173,26 +165,35 @@ defmodule MvWeb.MemberFieldLive.IndexComponent do
|
|||
{:error, _} ->
|
||||
# Return a minimal struct-like map for fallback
|
||||
# This is only used for initial rendering, actual settings will be loaded properly
|
||||
%{member_field_visibility: %{}}
|
||||
%{member_field_visibility: %{}, member_field_required: %{}}
|
||||
end
|
||||
end
|
||||
|
||||
defp get_member_fields_with_visibility(settings) do
|
||||
member_fields = Mv.Constants.member_fields()
|
||||
visibility_config = settings.member_field_visibility || %{}
|
||||
required_config = settings.member_field_required || %{}
|
||||
vereinfacht_required? = Mv.Config.vereinfacht_configured?()
|
||||
|
||||
# Normalize visibility config keys to atoms
|
||||
normalized_config = VisibilityConfig.normalize(visibility_config)
|
||||
normalized_visibility = VisibilityConfig.normalize(visibility_config)
|
||||
normalized_required = VisibilityConfig.normalize(required_config)
|
||||
|
||||
Enum.map(member_fields, fn field ->
|
||||
show_in_overview = Map.get(normalized_config, field, true)
|
||||
show_in_overview = Map.get(normalized_visibility, field, true)
|
||||
|
||||
# Email always required; Vereinfacht-required fields when integration active; else from settings
|
||||
required =
|
||||
field == :email ||
|
||||
(vereinfacht_required? && Mv.Constants.vereinfacht_required_field?(field)) ||
|
||||
Map.get(normalized_required, field, false)
|
||||
|
||||
attribute = Info.attribute(Mv.Membership.Member, field)
|
||||
|
||||
%{
|
||||
field: field,
|
||||
show_in_overview: show_in_overview,
|
||||
value_type: (attribute && attribute.type) || :string,
|
||||
description: nil
|
||||
required: required,
|
||||
value_type: (attribute && attribute.type) || :string
|
||||
}
|
||||
end)
|
||||
|> Enum.map(fn field_data ->
|
||||
|
|
@ -206,14 +207,4 @@ defmodule MvWeb.MemberFieldLive.IndexComponent do
|
|||
attribute -> FieldTypeFormatter.format(attribute.type)
|
||||
end
|
||||
end
|
||||
|
||||
# Check if a field is required by checking the actual attribute definition
|
||||
defp required?(field) when is_atom(field) do
|
||||
case Info.attribute(Mv.Membership.Member, field) do
|
||||
nil -> false
|
||||
attribute -> not attribute.allow_nil?
|
||||
end
|
||||
end
|
||||
|
||||
defp required?(_), do: false
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue