feat(member): collect member-overview bulk actions into a single dropdown

The growing row of bulk-action buttons above the member overview is replaced
by one "Aktionen" dropdown holding all four actions (open in email program,
copy addresses, export CSV, export PDF). With no selection the actions operate
on all — or the currently filtered — members; the email-program action is
disabled past a recipient cap, because the browser cannot reliably hand a very
long mailto over to the mail client. The trigger shows the active scope as a
badge: an emphasized count when members are selected, a muted "alle"/"gefiltert"
otherwise.
This commit is contained in:
Simon 2026-06-04 16:44:13 +02:00
parent 8e5dd7e4c6
commit c983c8d5bb
10 changed files with 920 additions and 330 deletions

View file

@ -84,6 +84,7 @@ msgstr "Über Mitgliedsbeitragsarten"
msgid "Accounting-Software (Vereinfacht) Integration"
msgstr "Buchhaltungs-Software (Vereinfacht) Integration"
#: lib/mv_web/components/bulk_actions_dropdown.ex
#: lib/mv_web/components/core_components.ex
#: lib/mv_web/live/group_live/show.ex
#, elixir-autogen, elixir-format
@ -366,11 +367,6 @@ msgstr "Mitglied werden"
msgid "By submitting your application you will receive an email with a confirmation link. Once you have confirmed your email address, your application will be reviewed."
msgstr "Mit Absenden deines Antrags erhältst du eine Mail mit einem Bestätigungslink. Sobald du deine Mail-Adresse bestätigt hast, wird dein Antrag geprüft."
#: lib/mv_web/components/export_dropdown.ex
#, elixir-autogen, elixir-format
msgid "CSV"
msgstr "CSV"
#: lib/mv_web/live/import_live/components.ex
#, elixir-autogen, elixir-format
msgid "CSV File"
@ -669,16 +665,11 @@ msgid_plural "Copied %{count} email addresses to clipboard"
msgstr[0] "%{count} E-Mail-Adresse in die Zwischenablage kopiert"
msgstr[1] "%{count} E-Mail-Adressen in die Zwischenablage kopiert"
#: lib/mv_web/live/member_live/index.html.heex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Copy email addresses"
msgstr "E-Mail-Adressen kopieren"
#: lib/mv_web/live/member_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Copy email addresses of selected members"
msgstr "E-Mail-Adressen der ausgewählten Mitglieder kopieren"
#: lib/mv_web/live/datafields_live.ex
#, elixir-autogen, elixir-format
msgid "Could not load data fields. Please check your permissions."
@ -1197,22 +1188,17 @@ msgstr "Austritte"
msgid "Expense"
msgstr "Ausgabe"
#: lib/mv_web/components/export_dropdown.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Export"
msgstr "Export"
#: lib/mv_web/controllers/member_pdf_export_controller.ex
#, elixir-autogen, elixir-format
msgid "Export contains %{count} rows, maximum is %{max}"
msgstr "Export enthält %{count} Zeilen, Maximum ist %{max}."
#: lib/mv_web/components/export_dropdown.ex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Export members to CSV"
msgstr "Mitglieder als CSV exportieren"
#: lib/mv_web/components/export_dropdown.ex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Export members to PDF"
msgstr "Mitglieder als PDF exportieren"
@ -2203,11 +2189,6 @@ msgstr "Kein Mitglied verknüpft"
msgid "No members in this group"
msgstr "Keine Mitglieder in dieser Gruppe"
#: lib/mv_web/live/member_live/index.ex
#, elixir-autogen, elixir-format
msgid "No members selected"
msgstr "Keine Mitglieder ausgewählt"
#: lib/mv_web/live/member_live/show/membership_fees_component.ex
#, elixir-autogen, elixir-format
msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned."
@ -2361,12 +2342,7 @@ msgstr "Nur Administrator*innen oder die verknüpfte*n Benutzer*in(nen) können
msgid "Only possible if no members are assigned to this type."
msgstr "Nur möglich, wenn diesem Typ keine Mitglieder zugewiesen sind."
#: lib/mv_web/live/member_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Open email program with BCC recipients"
msgstr "E-Mail-Programm mit BCC-Empfänger*innen öffnen"
#: lib/mv_web/live/member_live/index.html.heex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Open in email program"
msgstr "Im E-Mail-Programm öffnen"
@ -2392,11 +2368,6 @@ msgstr "Optional"
msgid "Options"
msgstr "Optionen"
#: lib/mv_web/components/export_dropdown.ex
#, elixir-autogen, elixir-format
msgid "PDF"
msgstr "PDF"
#: lib/mv/membership/members_pdf.ex
#: lib/mv_web/live/components/member_filter_component.ex
#: lib/mv_web/live/member_live/show.ex
@ -3575,7 +3546,7 @@ msgstr "Dein Passwort wurde erfolgreich zurückgesetzt"
msgid "admin - Unrestricted access"
msgstr "admin Uneingeschränkter Zugriff"
#: lib/mv_web/components/export_dropdown.ex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "all"
msgstr "alle"
@ -3968,7 +3939,22 @@ msgstr "Zeitraum"
msgid "To"
msgstr "Bis"
#~ #: lib/mv_web/live/group_live/show.ex
#~ #, elixir-autogen, elixir-format
#~ msgid "No members selected."
#~ msgstr "Keine Mitglieder ausgewählt."
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Export to CSV"
msgstr "Als CSV exportieren"
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Export to PDF"
msgstr "Als PDF exportieren"
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Too many recipients for this function. Copy the addresses or export the list."
msgstr "Zu viele Empfänger für diese Funktion. Kopiere die Adressen oder exportiere die Liste."
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "filtered"
msgstr "gefiltert"

View file

@ -85,6 +85,7 @@ msgstr ""
msgid "Accounting-Software (Vereinfacht) Integration"
msgstr ""
#: lib/mv_web/components/bulk_actions_dropdown.ex
#: lib/mv_web/components/core_components.ex
#: lib/mv_web/live/group_live/show.ex
#, elixir-autogen, elixir-format
@ -367,11 +368,6 @@ msgstr ""
msgid "By submitting your application you will receive an email with a confirmation link. Once you have confirmed your email address, your application will be reviewed."
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#, elixir-autogen, elixir-format
msgid "CSV"
msgstr ""
#: lib/mv_web/live/import_live/components.ex
#, elixir-autogen, elixir-format
msgid "CSV File"
@ -670,16 +666,11 @@ msgid_plural "Copied %{count} email addresses to clipboard"
msgstr[0] ""
msgstr[1] ""
#: lib/mv_web/live/member_live/index.html.heex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Copy email addresses"
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Copy email addresses of selected members"
msgstr ""
#: lib/mv_web/live/datafields_live.ex
#, elixir-autogen, elixir-format
msgid "Could not load data fields. Please check your permissions."
@ -1198,22 +1189,17 @@ msgstr ""
msgid "Expense"
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Export"
msgstr ""
#: lib/mv_web/controllers/member_pdf_export_controller.ex
#, elixir-autogen, elixir-format
msgid "Export contains %{count} rows, maximum is %{max}"
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Export members to CSV"
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Export members to PDF"
msgstr ""
@ -2204,11 +2190,6 @@ msgstr ""
msgid "No members in this group"
msgstr ""
#: lib/mv_web/live/member_live/index.ex
#, elixir-autogen, elixir-format
msgid "No members selected"
msgstr ""
#: lib/mv_web/live/member_live/show/membership_fees_component.ex
#, elixir-autogen, elixir-format
msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned."
@ -2362,12 +2343,7 @@ msgstr ""
msgid "Only possible if no members are assigned to this type."
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Open email program with BCC recipients"
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Open in email program"
msgstr ""
@ -2393,11 +2369,6 @@ msgstr ""
msgid "Options"
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#, elixir-autogen, elixir-format
msgid "PDF"
msgstr ""
#: lib/mv/membership/members_pdf.ex
#: lib/mv_web/live/components/member_filter_component.ex
#: lib/mv_web/live/member_live/show.ex
@ -3575,7 +3546,7 @@ msgstr ""
msgid "admin - Unrestricted access"
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "all"
msgstr ""
@ -3967,3 +3938,23 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "To"
msgstr ""
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Export to CSV"
msgstr ""
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Export to PDF"
msgstr ""
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Too many recipients for this function. Copy the addresses or export the list."
msgstr ""
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "filtered"
msgstr ""

View file

@ -85,6 +85,7 @@ msgstr ""
msgid "Accounting-Software (Vereinfacht) Integration"
msgstr ""
#: lib/mv_web/components/bulk_actions_dropdown.ex
#: lib/mv_web/components/core_components.ex
#: lib/mv_web/live/group_live/show.ex
#, elixir-autogen, elixir-format
@ -367,11 +368,6 @@ msgstr ""
msgid "By submitting your application you will receive an email with a confirmation link. Once you have confirmed your email address, your application will be reviewed."
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#, elixir-autogen, elixir-format
msgid "CSV"
msgstr ""
#: lib/mv_web/live/import_live/components.ex
#, elixir-autogen, elixir-format
msgid "CSV File"
@ -670,16 +666,11 @@ msgid_plural "Copied %{count} email addresses to clipboard"
msgstr[0] ""
msgstr[1] ""
#: lib/mv_web/live/member_live/index.html.heex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Copy email addresses"
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Copy email addresses of selected members"
msgstr ""
#: lib/mv_web/live/datafields_live.ex
#, elixir-autogen, elixir-format
msgid "Could not load data fields. Please check your permissions."
@ -1198,22 +1189,17 @@ msgstr ""
msgid "Expense"
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Export"
msgstr ""
#: lib/mv_web/controllers/member_pdf_export_controller.ex
#, elixir-autogen, elixir-format
msgid "Export contains %{count} rows, maximum is %{max}"
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Export members to CSV"
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Export members to PDF"
msgstr ""
@ -2204,11 +2190,6 @@ msgstr ""
msgid "No members in this group"
msgstr ""
#: lib/mv_web/live/member_live/index.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "No members selected"
msgstr ""
#: lib/mv_web/live/member_live/show/membership_fees_component.ex
#, elixir-autogen, elixir-format
msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned."
@ -2362,12 +2343,7 @@ msgstr ""
msgid "Only possible if no members are assigned to this type."
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Open email program with BCC recipients"
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Open in email program"
msgstr ""
@ -2393,11 +2369,6 @@ msgstr ""
msgid "Options"
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#, elixir-autogen, elixir-format
msgid "PDF"
msgstr ""
#: lib/mv/membership/members_pdf.ex
#: lib/mv_web/live/components/member_filter_component.ex
#: lib/mv_web/live/member_live/show.ex
@ -3575,7 +3546,7 @@ msgstr ""
msgid "admin - Unrestricted access"
msgstr ""
#: lib/mv_web/components/export_dropdown.ex
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "all"
msgstr ""
@ -3968,7 +3939,22 @@ msgstr ""
msgid "To"
msgstr ""
#~ #: lib/mv_web/live/group_live/show.ex
#~ #, elixir-autogen, elixir-format, fuzzy
#~ msgid "No members selected."
#~ msgstr ""
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Export to CSV"
msgstr ""
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Export to PDF"
msgstr ""
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "Too many recipients for this function. Copy the addresses or export the list."
msgstr ""
#: lib/mv_web/components/bulk_actions_dropdown.ex
#, elixir-autogen, elixir-format
msgid "filtered"
msgstr ""