- <.form_section title={gettext("Custom Fields")}>
-
-
- {gettext("These will appear in addition to other data when adding new members.")}
-
-
- <.button
- class="ml-auto"
- variant="primary"
- phx-click="new_custom_field"
- phx-target={@myself}
- >
- <.icon name="hero-plus" /> {gettext("New Custom field")}
-
-
-
- <%!-- Show form when creating or editing --%>
-
- <.live_component
- module={MvWeb.CustomFieldLive.FormComponent}
- id={@form_id}
- custom_field={@editing_custom_field}
- on_save={
- fn custom_field, action -> send(self(), {:custom_field_saved, custom_field, action}) end
- }
- on_cancel={fn -> send_update(__MODULE__, id: @id, show_form: false) end}
- />
-
+ <.header>
+ {gettext("Custom Fields")}
+ <:subtitle>
+ {gettext("These will appear in addition to other data when adding new members.")}
+
+ <:actions>
+ <.button variant="primary" phx-click="new_custom_field" phx-target={@myself}>
+ <.icon name="hero-plus" /> {gettext("New Custom field")}
+
+
+
- <%!-- Hide table when form is visible --%>
- <.table
- :if={!@show_form}
- id="custom_fields"
- rows={@streams.custom_fields}
- row_click={
- fn {_id, custom_field} ->
- JS.push("edit_custom_field", value: %{id: custom_field.id}, target: @myself)
- end
+ <%!-- Show form when creating or editing --%>
+
+ <.live_component
+ module={MvWeb.CustomFieldLive.FormComponent}
+ id={@form_id}
+ custom_field={@editing_custom_field}
+ on_save={
+ fn custom_field, action -> send(self(), {:custom_field_saved, custom_field, action}) end
}
- >
- <:col :let={{_id, custom_field}} label={gettext("Name")}>{custom_field.name}
+ on_cancel={fn -> send_update(__MODULE__, id: @id, show_form: false) end}
+ />
+
- <:col :let={{_id, custom_field}} label={gettext("Value Type")}>
- {@field_type_label.(custom_field.value_type)}
-
+ <%!-- Hide table when form is visible --%>
+ <.table
+ :if={!@show_form}
+ id="custom_fields"
+ rows={@streams.custom_fields}
+ row_click={
+ fn {_id, custom_field} ->
+ JS.push("edit_custom_field", value: %{id: custom_field.id}, target: @myself)
+ end
+ }
+ >
+ <:col :let={{_id, custom_field}} label={gettext("Name")}>{custom_field.name}
- <:col :let={{_id, custom_field}} label={gettext("Description")}>
- {custom_field.description}
-
+ <:col :let={{_id, custom_field}} label={gettext("Value Type")}>
+ {custom_field.value_type}
+
- <:col
- :let={{_id, custom_field}}
- label={gettext("Show in overview")}
- class="max-w-[9.375rem] text-center"
- >
-
- {gettext("Yes")}
-
-
- {gettext("No")}
-
-
+ <:col :let={{_id, custom_field}} label={gettext("Description")}>
+ {custom_field.description}
+
- <:action :let={{_id, custom_field}}>
- <.link phx-click={
- JS.push("edit_custom_field", value: %{id: custom_field.id}, target: @myself)
- }>
- {gettext("Edit")}
-
-
+ <:col :let={{_id, custom_field}} label={gettext("Show in Overview")}>
+
+ {gettext("Yes")}
+
+
+ {gettext("No")}
+
+
- <:action :let={{_id, custom_field}}>
- <.link phx-click={
- JS.push("prepare_delete", value: %{id: custom_field.id}, target: @myself)
- }>
- {gettext("Delete")}
-
-
-
+ <:action :let={{_id, custom_field}}>
+ <.link phx-click={
+ JS.push("edit_custom_field", value: %{id: custom_field.id}, target: @myself)
+ }>
+ {gettext("Edit")}
+
+
- <%!-- Delete Confirmation Modal --%>
-
-
-
{gettext("Delete Custom Field")}
+ <:action :let={{_id, custom_field}}>
+ <.link phx-click={JS.push("prepare_delete", value: %{id: custom_field.id}, target: @myself)}>
+ {gettext("Delete")}
+
+
+
-
-
- <.icon name="hero-exclamation-triangle" class="w-5 h-5" />
-
-
- {ngettext(
- "%{count} member has a value assigned for this custom field.",
- "%{count} members have values assigned for this custom field.",
- @custom_field_to_delete.assigned_members_count,
- count: @custom_field_to_delete.assigned_members_count
- )}
-
-
- {gettext(
- "All custom field values will be permanently deleted when you delete this custom field."
- )}
-
-
-
+ <%!-- Delete Confirmation Modal --%>
+
+
+
{gettext("Delete Custom Field")}
+
+
+ <.icon name="hero-exclamation-triangle" class="w-5 h-5" />
-
-
- {gettext("To confirm deletion, please enter this text:")}
-
-
-
- {@custom_field_to_delete.slug}
-
-
+
+ {ngettext(
+ "%{count} member has a value assigned for this custom field.",
+ "%{count} members have values assigned for this custom field.",
+ @custom_field_to_delete.assigned_members_count,
+ count: @custom_field_to_delete.assigned_members_count
+ )}
+
+
+ {gettext(
+ "All custom field values will be permanently deleted when you delete this custom field."
+ )}
+
-
-
- {gettext("Cancel")}
-
-
- {gettext("Delete Custom Field and All Values")}
-
+
+
+
+ {gettext("To confirm deletion, please enter this text:")}
+
+
+
+ {@custom_field_to_delete.slug}
+
+
-
-
+
+
+
+ {gettext("Cancel")}
+
+
+ {gettext("Delete Custom Field and All Values")}
+
+
+
+
"""
end
diff --git a/lib/mv_web/live/global_settings_live.ex b/lib/mv_web/live/global_settings_live.ex
index 0b3ec1c..bb919cb 100644
--- a/lib/mv_web/live/global_settings_live.ex
+++ b/lib/mv_web/live/global_settings_live.ex
@@ -46,22 +46,22 @@ defmodule MvWeb.GlobalSettingsLive do
<%!-- Club Settings Section --%>
- <.form_section title={gettext("Club Settings")}>
- <.form for={@form} id="settings-form" phx-change="validate" phx-submit="save">
-
- <.input
- field={@form[:club_name]}
- type="text"
- label={gettext("Association Name")}
- required
- />
-
+ <.header>
+ {gettext("Club Settings")}
+
+ <.form for={@form} id="settings-form" phx-change="validate" phx-submit="save">
+ <.input
+ field={@form[:club_name]}
+ type="text"
+ label={gettext("Association Name")}
+ required
+ />
+
+ <.button phx-disable-with={gettext("Saving...")} variant="primary">
+ {gettext("Save Settings")}
+
+
- <.button phx-disable-with={gettext("Saving...")} variant="primary">
- {gettext("Save Settings")}
-
-
-
<%!-- Custom Fields Section --%>
<.live_component
module={MvWeb.CustomFieldLive.IndexComponent}
diff --git a/lib/mv_web/live/member_live/form.ex b/lib/mv_web/live/member_live/form.ex
index 87148ad..5380d0f 100644
--- a/lib/mv_web/live/member_live/form.ex
+++ b/lib/mv_web/live/member_live/form.ex
@@ -348,6 +348,25 @@ defmodule MvWeb.MemberLive.Form do
defp return_path("show", nil), do: ~p"/members"
defp return_path("show", member), do: ~p"/members/#{member.id}"
+ # -----------------------------------------------------------------
+ # Helper Components
+ # -----------------------------------------------------------------
+
+ # Renders a form section box with border and title.
+ attr :title, :string, required: true
+ slot :inner_block, required: true
+
+ defp form_section(assigns) do
+ ~H"""
+
+ {@title}
+
+ {render_slot(@inner_block)}
+
+
+ """
+ end
+
# -----------------------------------------------------------------
# Helper Functions for Custom Fields
# -----------------------------------------------------------------
diff --git a/lib/mv_web/live/member_live/index.ex b/lib/mv_web/live/member_live/index.ex
index ad4a4a9..f9d8aa1 100644
--- a/lib/mv_web/live/member_live/index.ex
+++ b/lib/mv_web/live/member_live/index.ex
@@ -1082,6 +1082,16 @@ defmodule MvWeb.MemberLive.Index do
|> Enum.map(&format_member_email/1)
end
+ @doc """
+ Returns a JS command to toggle member selection when clicking the checkbox column.
+
+ Used as `col_click` handler to ensure clicking anywhere in the checkbox column
+ toggles the checkbox instead of navigating to the member details.
+ """
+ def checkbox_column_click(member) do
+ JS.push("select_member", value: %{id: member.id})
+ end
+
# Formats a member's email in the format "First Last "
# Used for copy_emails feature and mailto links to create email-client-friendly format.
def format_member_email(member) do
diff --git a/lib/mv_web/live/member_live/index.html.heex b/lib/mv_web/live/member_live/index.html.heex
index 1658209..fbeb416 100644
--- a/lib/mv_web/live/member_live/index.html.heex
+++ b/lib/mv_web/live/member_live/index.html.heex
@@ -65,6 +65,7 @@
<:col
:let={member}
+ col_click={&MvWeb.MemberLive.Index.checkbox_column_click/1}
label={
~H"""
<.input
@@ -81,11 +82,7 @@
<.input
type="checkbox"
name={member.id}
- phx-click="select_member"
- phx-value-id={member.id}
checked={MapSet.member?(@selected_members, member.id)}
- phx-capture-click
- phx-stop-propagation
aria-label={gettext("Select member")}
role="checkbox"
/>
diff --git a/lib/mv_web/translations/field_types.ex b/lib/mv_web/translations/field_types.ex
deleted file mode 100644
index 969f20b..0000000
--- a/lib/mv_web/translations/field_types.ex
+++ /dev/null
@@ -1,21 +0,0 @@
-defmodule MvWeb.Translations.FieldTypes do
- @moduledoc """
- Helper module to dynamically translate field types.
-
- ## Features
- - Can be used in templates to dynamically translate technical field type words to human friendly text
-
- ## Example
- assigns = assign(assigns, :field_type_label, &MvWeb.Translations.FieldTypes.label/1)
- In template:
- <%= @field_type_label.(custom_field.value_type) %>
- """
- use Gettext, backend: MvWeb.Gettext
-
- @spec label(atom()) :: String.t()
- def label(:string), do: gettext("Text")
- def label(:integer), do: gettext("Number")
- def label(:boolean), do: gettext("Yes/No-Selection")
- def label(:date), do: gettext("Date")
- def label(:email), do: gettext("E-Mail")
-end
diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po
index 311e727..bb781f7 100644
--- a/priv/gettext/de/LC_MESSAGES/default.po
+++ b/priv/gettext/de/LC_MESSAGES/default.po
@@ -48,7 +48,7 @@ msgstr "Löschen"
#: lib/mv_web/live/user_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Edit"
-msgstr "Bearbeiten"
+msgstr "Bearbeite"
#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/show.ex
@@ -214,7 +214,7 @@ msgstr "Falsche E-Mail oder Passwort"
#: lib/mv_web/live/member_live/form.ex
#, elixir-autogen, elixir-format
msgid "Member %{action} successfully"
-msgstr "Mitglied erfolgreich %{action}"
+msgstr "Mitglied %{action} erfolgreich"
#: lib/mv_web/controllers/auth_controller.ex
#, elixir-autogen, elixir-format
@@ -419,8 +419,8 @@ msgstr "Administrator*innen-Hinweis"
#: lib/mv_web/live/user_live/form.ex
#, elixir-autogen, elixir-format
-msgid "As an administrator, you can directly set a new password for this user."
-msgstr "Als Administrator*in können Sie direkt ein neues Passwort für diese*n Benutzer*in setzen."
+msgid "As an administrator, you can directly set a new password for this user using the same secure Ash Authentication system."
+msgstr "Als Administrator*in können Sie direkt ein neues Passwort für diese*n Benutzer*in setzen, wobei das gleiche sichere Ash Authentication System verwendet wird."
#: lib/mv_web/live/user_live/form.ex
#, elixir-autogen, elixir-format
@@ -658,7 +658,7 @@ msgstr "Um die Löschung zu bestätigen, gib bitte folgenden Text ein:"
#: lib/mv_web/live/custom_field_live/form_component.ex
#, elixir-autogen, elixir-format
msgid "Show in overview"
-msgstr "In Übersicht anzeigen"
+msgstr "In der Mitglieder-Übersicht anzeigen"
#: lib/mv_web/live/global_settings_live.ex
#, elixir-autogen, elixir-format
@@ -904,96 +904,96 @@ msgstr "Mitglied erstellen"
#, elixir-autogen, elixir-format
msgid "%{count} period selected"
msgid_plural "%{count} periods selected"
-msgstr[0] "%{count} Zyklus ausgewählt"
-msgstr[1] "%{count} Zyklen ausgewählt"
+msgstr[0] ""
+msgstr[1] ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "About Contribution Types"
-msgstr "Über Beitragsarten"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Amount"
-msgstr "Betrag"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Back to Settings"
-msgstr "Zurück zu den Einstellungen"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Can be changed at any time. Amount changes affect future periods only."
-msgstr "Kann jederzeit geändert werden. Änderungen des Betrags betreffen nur zukünftige Zyklen."
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Cannot delete - members assigned"
-msgstr "Löschen nicht möglich – es sind Mitglieder zugewiesen"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Change Contribution Type"
-msgstr "Beitragsart ändern"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Configure global settings for membership contributions."
-msgstr "Globale Einstellungen für Mitgliedsbeiträge konfigurieren."
+msgstr ""
#: lib/mv_web/components/layouts/navbar.ex
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution Settings"
-msgstr "Beitragseinstellungen"
+msgstr "Beitrag"
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution Start"
-msgstr "Beitragsbeginn"
+msgstr "Beitrag"
#: lib/mv_web/components/layouts/navbar.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution Types"
-msgstr "Beitragsarten"
+msgstr "Beitrag"
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution start"
-msgstr "Beitragsbeginn"
+msgstr "Beitrag"
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution type"
-msgstr "Beitragsart"
+msgstr "Beitrag"
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Contribution types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation."
-msgstr "Beitragsarten definieren verschiedene Beitragsmodelle. Jede Art hat einen festen Zyklus (monatlich, vierteljährlich, halbjährlich, jährlich), der nach Erstellung nicht mehr geändert werden kann."
+msgstr ""
#: lib/mv_web/components/layouts/navbar.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Contributions"
-msgstr "Beiträge"
+msgstr "Beitrag"
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Contributions for %{name}"
-msgstr "Beiträge für %{name}"
+msgstr "Beitrag"
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Current"
-msgstr "Aktuell"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Default Contribution Type"
-msgstr "Standard-Beitragsart"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format, fuzzy
@@ -1003,28 +1003,28 @@ msgstr "Löschen"
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Example: Member Contribution View"
-msgstr "Beispiel: Ansicht Mitgliedsbeiträge"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Examples"
-msgstr "Beispiele"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Family"
-msgstr "Familie"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Fixed after creation. Members can only switch between types with the same interval."
-msgstr "Festgelegt nach der Erstellung. Mitglieder können nur zwischen Beitragsarten mit gleichem Intervall wechseln."
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Generated periods"
-msgstr "Generierte Zyklen"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format, fuzzy
@@ -1036,29 +1036,29 @@ msgstr "Vereinsdaten"
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Half-yearly"
-msgstr "Halbjährlich"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Half-yearly contribution for supporting members"
-msgstr "Halbjährlicher Beitrag für Fördermitglieder"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Honorary"
-msgstr "Ehrenamtlich"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Include joining period"
-msgstr "Beitrittsdatum einbeziehen"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Interval"
-msgstr "Zyklus"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format, fuzzy
@@ -1068,240 +1068,240 @@ msgstr "Beitrittsdatum"
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Joining year - reduced to 0"
-msgstr "Beitrittsjahr – auf 0 reduziert"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Manage contribution types for membership fees."
-msgstr "Beitragsarten für Mitgliedsbeiträge verwalten."
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Mark as Paid"
-msgstr "Als bezahlt markieren"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Mark as Suspended"
-msgstr "Als pausiert markieren"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Mark as Unpaid"
-msgstr "Als unbezahlt markieren"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Member Contributions"
-msgstr "Mitgliedsbeiträge"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Member pays for the year they joined"
-msgstr "Mitglied zahlt für das Beitrittsjahr"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Member pays from the joining month"
-msgstr "Mitglied zahlt ab Beitrittsmonat"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Member pays from the next full quarter"
-msgstr "Mitglied zahlt ab dem nächsten vollständigen Quartal"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Member pays from the next full year"
-msgstr "Mitglied zahlt ab dem nächsten vollständigen Jahr"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Member since"
-msgstr "Mitglied seit"
+msgstr "Mitglieder"
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Members can only switch between contribution types with the same payment interval (e.g., yearly to yearly). This prevents complex period overlaps."
-msgstr "Mitglieder können nur zwischen Beitragsarten mit demselben Zahlungszyklus wechseln (z. B. jährlich zu jährlich). Dadurch werden komplexe Überlappungen vermieden."
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_settings_live.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Monthly"
-msgstr "Monatlich"
+msgstr "monatlich"
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Monthly Interval - Joining Period Included"
-msgstr "Monatliches Intervall – Beitrittszeitraum einbezogen"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Monthly fee for students and trainees"
-msgstr "Monatlicher Beitrag für Studierende und Auszubildende"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Name & Amount"
-msgstr "Name & Betrag"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "New Contribution Type"
-msgstr "Neue Beitragsart"
+msgstr "Beitrag"
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "No fee for honorary members"
-msgstr "Kein Beitrag für ehrenamtliche Mitglieder"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Only possible if no members are assigned to this type."
-msgstr "Nur möglich, wenn diesem Typ keine Mitglieder zugewiesen sind."
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Open Contributions"
-msgstr "Offene Beiträge"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Paid via bank transfer"
-msgstr "Bezahlt durch Überweisung"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_settings_live.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Preview Mockup"
-msgstr "Vorschau"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_settings_live.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Quarterly"
-msgstr "Vierteljährlich"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Quarterly Interval - Joining Period Excluded"
-msgstr "Vierteljährliches Intervall – Beitrittszeitraum nicht einbezogen"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Quarterly fee for family memberships"
-msgstr "Vierteljährlicher Beitrag für Familienmitgliedschaften"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_settings_live.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Reduced"
-msgstr "Reduziert"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Reduced fee for unemployed, pensioners, or low income"
-msgstr "Ermäßigter Beitrag für Arbeitslose, Rentner*innen oder Geringverdienende"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_settings_live.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Regular"
-msgstr "Regulär"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Reopen"
-msgstr "Wieder öffnen"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "See how the contribution periods will be displayed for an individual member. This example shows Maria Weber with multiple contribution periods."
-msgstr "Beispielhafte Anzeige der Beitragsperioden für ein einzelnes Mitglied. In diesem Beispiel wird Maria Weber mit mehreren Zyklen angezeigt."
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Standard membership fee for regular members"
-msgstr "Regulärer Mitgliedsbeitrag für Vollmitglieder"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Status"
-msgstr "Status"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Student"
-msgstr "Student"
+msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Supporting Member"
-msgstr "Fördermitglied"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Suspend"
-msgstr "Pausieren"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Suspended"
-msgstr "Pausiert"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "This contribution type is automatically assigned to all new members. Can be changed individually per member."
-msgstr "Dieser Beitragstyp wird automatisch neuen Mitgliedern zugewiesen. Kann individuell angepasst werden."
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_settings_live.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "This page is not functional and only displays the planned features."
-msgstr "Diese Seite ist nicht funktionsfähig und zeigt nur geplante Funktionen."
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Time Period"
-msgstr "Zeitraum"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Total Contributions"
-msgstr "Gesamtbeiträge"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Unpaid"
-msgstr "Unbezahlt"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "View Example Member"
-msgstr "Beispielmitglied anzeigen"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "When active: Members pay from the period of their joining."
-msgstr "Wenn aktiviert: Mitglieder zahlen ab dem Zeitraum ihres Beitritts."
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "When inactive: Members pay from the next full period after joining."
-msgstr "Wenn deaktiviert: Mitglieder zahlen ab dem nächsten vollen Beitragszyklus nach dem Beitritt."
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#, elixir-autogen, elixir-format
msgid "Why are not all contribution types shown?"
-msgstr "Warum werden nicht alle Beitragsarten angezeigt?"
+msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_settings_live.ex
@@ -1313,12 +1313,12 @@ msgstr "jährlich"
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Yearly Interval - Joining Period Excluded"
-msgstr "Jährliches Intervall – Beitrittszeitraum nicht einbezogen"
+msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex
#, elixir-autogen, elixir-format
msgid "Yearly Interval - Joining Period Included"
-msgstr "Jährliches Intervall – Beitrittszeitraum einbezogen"
+msgstr ""
#: lib/mv_web/live/components/field_visibility_dropdown_component.ex
#, elixir-autogen, elixir-format
@@ -1363,7 +1363,7 @@ msgstr "Zurück zur Felderliste"
#: lib/mv_web/live/global_settings_live.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Custom field deleted successfully"
-msgstr "Benutzerdefiniertes Feld erfolgreich gelöscht"
+msgstr "Benutzerdefiniertes Feld erfolgreich %{action}"
#: lib/mv_web/live/custom_field_live/form_component.ex
#, elixir-autogen, elixir-format, fuzzy
@@ -1405,31 +1405,6 @@ msgstr "Diese Felder können zusätzlich zu den normalen Daten ausgefüllt werde
msgid "Value Type"
msgstr "Wertetyp"
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Date"
-msgstr "Datum"
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format, fuzzy
-msgid "E-Mail"
-msgstr "E-Mail"
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Number"
-msgstr "Zahl"
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Text"
-msgstr "Textfeld"
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Yes/No-Selection"
-msgstr "Ja/Nein-Auswahl"
-
#~ #: lib/mv_web/live/custom_field_live/show.ex
#~ #, elixir-autogen, elixir-format
#~ msgid "Auto-generated identifier (immutable)"
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index 10c230b..7581d62 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -1405,28 +1405,3 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Value Type"
msgstr ""
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Date"
-msgstr ""
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "E-Mail"
-msgstr ""
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Number"
-msgstr ""
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Text"
-msgstr ""
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Yes/No-Selection"
-msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index e23030f..dc86840 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -1406,31 +1406,6 @@ msgstr ""
msgid "Value Type"
msgstr ""
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Date"
-msgstr ""
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format, fuzzy
-msgid "E-Mail"
-msgstr ""
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Number"
-msgstr ""
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Text"
-msgstr ""
-
-#: lib/mv_web/translations/field_types.ex
-#, elixir-autogen, elixir-format
-msgid "Yes/No-Selection"
-msgstr ""
-
#~ #: lib/mv_web/live/custom_field_live/show.ex
#~ #, elixir-autogen, elixir-format
#~ msgid "Auto-generated identifier (immutable)"
diff --git a/test/mv_web/member_live/index_test.exs b/test/mv_web/member_live/index_test.exs
index 0bcc731..9e3323f 100644
--- a/test/mv_web/member_live/index_test.exs
+++ b/test/mv_web/member_live/index_test.exs
@@ -285,14 +285,9 @@ defmodule MvWeb.MemberLive.IndexTest do
conn = conn_with_oidc_user(conn)
{:ok, view, _html} = live(conn, "/members")
- # Select two members
- view
- |> element("[phx-click='select_member'][phx-value-id='#{member1.id}']")
- |> render_click()
-
- view
- |> element("[phx-click='select_member'][phx-value-id='#{member2.id}']")
- |> render_click()
+ # Select two members by sending the select_member event directly
+ render_click(view, "select_member", %{"id" => member1.id})
+ render_click(view, "select_member", %{"id" => member2.id})
# Trigger copy_emails event
view |> element("#copy-emails-btn") |> render_click()
@@ -336,10 +331,8 @@ defmodule MvWeb.MemberLive.IndexTest do
conn = conn_with_oidc_user(conn)
{:ok, view, _html} = live(conn, "/members")
- # Select member with umlauts
- view
- |> element("[phx-click='select_member'][phx-value-id='#{member3.id}']")
- |> render_click()
+ # Select member with umlauts by sending the select_member event directly
+ render_click(view, "select_member", %{"id" => member3.id})
# Trigger copy_emails event - should not crash
view |> element("#copy-emails-btn") |> render_click()
@@ -355,10 +348,8 @@ defmodule MvWeb.MemberLive.IndexTest do
conn = conn_with_oidc_user(conn)
{:ok, view, _html} = live(conn, "/members")
- # Select a member
- view
- |> element("[phx-click='select_member'][phx-value-id='#{member1.id}']")
- |> render_click()
+ # Select a member by sending the select_member event directly
+ render_click(view, "select_member", %{"id" => member1.id})
# Delete the member from the database
Ash.destroy!(member1)
@@ -379,14 +370,9 @@ defmodule MvWeb.MemberLive.IndexTest do
conn = conn_with_oidc_user(conn)
{:ok, view, _html} = live(conn, "/members")
- # Select two members
- view
- |> element("[phx-click='select_member'][phx-value-id='#{member1.id}']")
- |> render_click()
-
- view
- |> element("[phx-click='select_member'][phx-value-id='#{member2.id}']")
- |> render_click()
+ # Select two members by sending the select_member event directly
+ render_click(view, "select_member", %{"id" => member1.id})
+ render_click(view, "select_member", %{"id" => member2.id})
# Get the socket state to verify the formatted email string
state = :sys.get_state(view.pid)
@@ -415,10 +401,8 @@ defmodule MvWeb.MemberLive.IndexTest do
{:ok, view, _html} = live(conn, "/members")
- # Select the test member
- view
- |> element("[phx-click='select_member'][phx-value-id='#{test_member.id}']")
- |> render_click()
+ # Select the test member by sending the select_member event directly
+ render_click(view, "select_member", %{"id" => test_member.id})
# The format should be "Test Format "
# We verify this by checking the flash shows 1 email was copied
@@ -441,10 +425,8 @@ defmodule MvWeb.MemberLive.IndexTest do
conn = conn_with_oidc_user(conn)
{:ok, view, _html} = live(conn, "/members")
- # Select a member
- view
- |> element("[phx-click='select_member'][phx-value-id='#{member1.id}']")
- |> render_click()
+ # Select a member by sending the select_member event directly
+ render_click(view, "select_member", %{"id" => member1.id})
# Button should now be visible
assert has_element?(view, "#copy-emails-btn")
@@ -457,10 +439,8 @@ defmodule MvWeb.MemberLive.IndexTest do
conn = conn_with_oidc_user(conn)
{:ok, view, _html} = live(conn, "/members")
- # Select a member
- view
- |> element("[phx-click='select_member'][phx-value-id='#{member1.id}']")
- |> render_click()
+ # Select a member by sending the select_member event directly
+ render_click(view, "select_member", %{"id" => member1.id})
# Click copy button
view |> element("#copy-emails-btn") |> render_click()