Rework member overview #553

Open
simon wants to merge 27 commits from issue/mitgliederverwaltung-547 into main

27 commits

Author SHA1 Message Date
2c8a403cc0 fix(member-live): guard the composite sort event and apply review cleanup
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-07-16 09:39:18 +02:00
f2312c24a1 fix(member-live): stop infinite scroll from cascading into loading every page 2026-07-16 09:39:14 +02:00
f847ae10af test(member-live): update component tests for the new defaults and composite sort 2026-07-16 09:39:13 +02:00
95c25142f0 feat(seeds): add an opt-in bulk member seed for load testing 2026-07-16 09:39:12 +02:00
c482a2630b fix(member-live): keep overview badges a consistent size across densities 2026-07-16 09:39:11 +02:00
f7005f395f feat(member-live): sort the composite Member column by first or last name 2026-07-16 09:39:07 +02:00
ca2aaa069c feat(member-live): unify the overview settings menu and add a reset-button tooltip 2026-07-16 09:39:04 +02:00
561463725a feat(member-live): keep the compact overview font legible 2026-07-16 09:39:02 +02:00
e16ef1bea4 fix(member-live): correct the overview pinned-column layering 2026-07-16 09:38:59 +02:00
4d100aef22 feat(member-live): default the overview to comfortable density with folded-in email 2026-07-16 09:38:57 +02:00
0a23d03d9d fix(member-export): split composite Name and Address into component columns on export 2026-07-16 09:38:54 +02:00
a64835fe6d fix(member-live): re-read view-settings cookie on live navigation 2026-07-16 09:38:53 +02:00
fe6d1c52f9 Merge remote-tracking branch 'origin/main' into issue/mitgliederverwaltung-547
# Conflicts:
#	lib/mv_web/live/member_live/index.html.heex
2026-07-12 12:29:47 +02:00
cdb8b03ce1 test(member): move the cycle-status test beside its OverviewQuery
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-06 15:42:58 +02:00
c9dd900a5f docs(member): clarify the :overview vs :read read actions 2026-07-06 15:42:32 +02:00
4adb6be5e5 refactor(member): drop the unused second-sticky-column table option 2026-07-06 15:42:01 +02:00
0cc37f7e9b docs(changelog): record member overview data foundation and redesign under Unreleased
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-06 11:01:05 +02:00
1c67527c56 docs(member-live): document the overview and use English throughout its internals 2026-07-06 11:00:29 +02:00
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
af2cc2e0d4 feat(member): condense the overview into composite name and address cells 2026-07-03 11:35:46 +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
b09cdf7f3a feat(member): resolve custom-field filters and sorting in PostgreSQL
Push the boolean and date custom-field predicates and custom-field
sorting down to JSONB expressions so the overview stops classifying
custom-field values in memory. A GIN index on custom_field_values.value
keeps the boolean membership predicates index-served.
2026-07-03 11:19:59 +02:00
e64f55c36a feat(member): back the overview with a keyset-paginated :overview read action 2026-07-03 11:12:38 +02:00
b745b13ca5 feat(membership-fees): denormalize cycle_end so fee status filters run in the database
Store the cycle's end date alongside its start so the payment-status
filter can be a plain date comparison in SQL instead of loading every
cycle and classifying it in memory. The value is fixed when the cycle
is created (the fee type's interval is immutable and the update action
never changes the start date), so the denormalized column can never
drift from the computed end and needs no write-time reconciliation.
2026-07-03 11:04:43 +02:00