77fc11a0b0
refactor(member-live): modularize the overview and drop the superseded in-memory paths
...
Extract the cookie parser, export-payload builder and fee-status helper
into their own modules and remove the filter/sort/load helpers the
database pushdown made dead, so the overview LiveView stays a thin
coordinator over focused units.
2026-07-06 11:00:29 +02:00
c2cb3edab8
feat(member): bring the overview table up to WCAG 2.2 AA
2026-07-06 11:00:29 +02:00
0c375234c8
feat(member): make overview columns sortable through accessible sort headers
2026-07-06 10:48:28 +02:00
dfc616257d
feat(member): let members tailor overview density and visible columns
...
The View dropdown drives row density and whether the Member and Address
fields render as composite cells or split into their underlying columns;
the column manager toggles visibility and resets to the curated default.
All choices persist per browser through the URL/session/cookie/global
chain, so a saved layout survives reloads without a per-account store.
2026-07-06 10:45:53 +02:00
b79d7ac9ea
feat(member): stream the overview with keyset infinite scroll instead of loading every member
2026-07-03 11:31:44 +02:00
fe534319ee
style: order module directives per StrictModuleLayout
2026-06-16 15:51:07 +02:00
2a3a152b13
perf(member): drop per-render timing log on the member-list hot path
2026-06-16 15:51:07 +02:00
6d4629ef5b
fix(member): order member list chronologically by custom :date fields
2026-06-15 16:14:14 +02:00
c983c8d5bb
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.
2026-06-04 16:44:13 +02:00
05f66ccf74
refactor(types): remove dead catch-all clauses unreachable per success typing
2026-06-02 11:56:44 +02:00
e3295ab4b5
feat(member-live): wire date filters into LiveView lifecycle
2026-05-20 16:28:17 +02:00
c933144920
feat: unify page titles
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is failing
2026-03-13 19:01:50 +01:00
f1d0526209
feat: add join form
continuous-integration/drone/push Build is failing
2026-03-10 18:25:17 +01:00
8da22b3d88
Apply review feedback and fix Credo in fee type filter
...
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
- Index: use FilterParams and constants; fix parse recursion; validate fee type/group
IDs; OR semantics for :in; build_query_params/reset_all_filters map-based API;
alias order (Credo); Map.take list deprecation fix
- MemberFilterComponent: use FilterParams and constants; fee_type_filter_part
helper (Credo nesting); in_not_in_filter_label_class; reset_all_filters map;
button label for :not_in and combined filter count; fieldset borders
- Gettext: Fee types, filter count plural, 'without %{name}' (en/de)
2026-03-09 14:33:58 +01:00
a8f12d1c91
Add member fee type filter to member list
...
- Filter by membership fee type in same style as groups (All/Yes/No per type)
- Index: load fee types, fee_type_filters, URL params, apply_fee_type_filters
- MemberFilterComponent: fee types section, events, reset, button label
- Refactor update_filters: extract parse/dispatch helpers to satisfy Credo complexity
2026-03-09 14:33:58 +01:00
7a8b069834
Fix Credo Design (AliasUsage): add aliases in lib
...
Add module aliases at top and use short names instead of
fully qualified nested modules across lib/.
2026-03-04 16:21:15 +01:00
81ce204502
Fix Credo Readability (strict)
...
- Max line length, implicit try, alias order, zero-arity defs
- String sigils, long comments split; redundant blank lines fixed
2026-03-04 16:21:14 +01:00
5516c7fe62
fix: remove + from name in email field
2026-02-26 14:02:47 +01:00
49fd2181a7
style: highlight selected table and add tooltip
continuous-integration/drone/push Build is failing
2026-02-25 13:16:27 +01:00
02af136fd9
feat: restyle tabs and move delete to edit view
2026-02-25 10:33:30 +01:00
ff9f98f8e7
style: consitent flash messages
2026-02-25 09:45:10 +01:00
10ad32eb6f
fix: treat URL with only custom fields as valid in ?fields= mode
...
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is passing
Consider visible custom fields in compute_final_field_selection so that
a link with only custom_field_X is not wrongly treated as invalid and
reverted to session/global. Add test for URL containing only custom field.
2026-02-24 09:42:25 +01:00
94bcb5dc8c
fix: sort Fee Type by name in LiveView and exports
...
Use Ash related-field sort (membership_fee_type.name) instead of
membership_fee_type_id so column order is alphabetical. Load
membership_fee_type when sorting by it even if column is hidden.
In-memory re-sort (Build) uses loaded fee type name.
2026-02-24 09:30:04 +01:00
d41d13d122
fix(members): restore column visibility from URL on reload
...
continuous-integration/drone/push Build is passing
Read 'fields' from URI when conn.params has no query (e.g. full page load).
When ?fields=... is present use URL-only selection so columns are not
merged with global settings. Fall back to session+global when URL has
only invalid field names.
2026-02-24 01:06:46 +01:00
68ceaced0c
feat(members): show and sort by Fee Type in member overview
...
Load membership_fee_type when column visible; sort by membership_fee_type_id;
add table column with SortHeader and fee type name.
2026-02-23 23:55:03 +01:00
397f7a7975
fix linting
continuous-integration/drone/push Build is failing
2026-02-20 09:16:38 +01:00
cb932ad6ef
feat: respects sorting groups for export
continuous-integration/drone/push Build is failing
2026-02-20 08:45:55 +01:00
dbdac5870a
fix: adds shoe/hide for group column
2026-02-20 08:45:21 +01:00
01f62297fc
feat: add groups to export
2026-02-19 14:36:35 +01:00
0fd1b7e142
fix testsand load performance
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-19 09:40:02 +01:00
0333f9e722
fix: tests failing in ci
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is failing
2026-02-19 08:55:55 +01:00
6831ba046f
Merge remote-tracking branch 'origin/main' into feature/member-overview-groups
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-16 15:57:57 +01:00
ace59bbae6
fix: implement review comments
continuous-integration/drone/push Build is passing
2026-02-16 15:30:16 +01:00
5fd7c0e7f6
feat: improve groups fillter
continuous-integration/drone/push Build is failing
2026-02-13 17:45:51 +01:00
baa288bff3
refactor
2026-02-13 17:21:14 +01:00
dce4b2cf33
feat: add groups to member overview
2026-02-13 09:28:16 +01:00
e68a7cf8c7
fix linting
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-09 14:08:12 +01:00
e1266944b1
feat: add membership fee status to columns and dropdown
2026-02-09 13:34:38 +01:00
9b9e7ec995
fix: sorting and filter for export
2026-02-05 15:03:25 +01:00
c82f4b7fd7
feat: add csv export
continuous-integration/drone/push Build is failing
2026-02-04 16:40:41 +01:00
bb7e3cbe77
fix: make sure all tests run
continuous-integration/drone/push Build is passing
2026-01-29 14:49:39 +01:00
1b44730b95
Fix: Ensure members are loaded in handle_params when signature unchanged
continuous-integration/drone/push Build is passing
2026-01-23 14:48:37 +01:00
672b4a8250
Merge branch 'main' into feature/filter-boolean-custom-fields
continuous-integration/drone/push Build is failing
2026-01-23 14:41:48 +01:00
20c96123e1
fix: failing test
continuous-integration/drone/push Build is failing
2026-01-23 14:33:54 +01:00
1d46fd1baf
feat: improve filter performance by reducing Ash.read! calls
continuous-integration/drone/push Build is failing
2026-01-23 14:22:57 +01:00
b4657cae23
fix: resolve pr remarks
2026-01-23 14:00:18 +01:00
47c938cc50
Centralize role preloading in global LiveView on_mount
...
Add ensure_user_role_loaded to global live_view quote block.
Remove redundant on_mount calls from individual LiveViews.
2026-01-22 21:36:15 +01:00
f996aee6b2
feat: add new filter component to members view
continuous-integration/drone/push Build is passing
2026-01-21 00:47:01 +01:00
1011b94acf
feat: load boolean custom fields
continuous-integration/drone/push Build is passing
2026-01-20 19:12:13 +01:00
fbf3b64192
refactor: fix credo issues
continuous-integration/drone/push Build is passing
2026-01-20 18:34:17 +01:00