From 868cd1a487a729439897dbe95558ef43739fac2c Mon Sep 17 00:00:00 2001 From: TheMeinerLP Date: Sun, 23 Aug 2026 15:31:34 +0200 Subject: [PATCH] feat(console): make the consent roster a list somebody can work through The page rendered one card per person, fetched every consent record a guild ever had in one request, sorted them in the browser, and offered exactly one action per card behind its own confirmation. A guild with four hundred participants sent four hundred records to draw the first ten, and withdrawing consent for four people was four confirmations. It is now a paginated UiDisclosureList. A row says who and where they stand; opening it reveals the policy version, the grant, the scope, the withdrawal date, the recordings held and the withdrawal itself. The window is the API's limit/offset, the page number is in the address, and the order is SQL's -- orderConsents is deliberately no longer called, because a second ordering over a page whose neighbours the reader cannot see is a list that disagrees with its own pager. Several people can be withdrawn at once. The confirmation names every one of them before anything happens to anybody, including the ones whose rows the reader has paged away from, and the answer is rendered one person at a time: the endpoint answers 200 for a mixed result on purpose, so "seven withdrawn, two already withdrawn, one had no record" has to be legible per person rather than collapsed into a sentence. Ids are secondary now. The guild directory was parsed and consumed nowhere; the roster asks it for the people the consent record has no name for. Somebody neither can name still renders -- as their bare id, with a sentence saying which of the two reasons applies -- because a person quietly missing from a consent roster is a roster that is wrong about who may be recorded. The effective instant is UiDatePicker, which already calls the module that decided this question. The hand-rolled datetime-local goes, and with it the third implementation of that arithmetic. --- .../app/components/ui/UiDisclosureList.vue | 11 +- console/app/pages/admin/consents.vue | 925 +++++++++++++----- console/app/utils/consentRoster.ts | 632 ++++++++++++ console/app/utils/consents.ts | 64 +- console/i18n/locales/de.json | 38 +- console/i18n/locales/en.json | 38 +- console/test/consentRoster.spec.ts | 555 +++++++++++ console/test/consents.spec.ts | 38 +- 8 files changed, 2023 insertions(+), 278 deletions(-) create mode 100644 console/app/utils/consentRoster.ts create mode 100644 console/test/consentRoster.spec.ts diff --git a/console/app/components/ui/UiDisclosureList.vue b/console/app/components/ui/UiDisclosureList.vue index 9a2845e..508c90c 100644 --- a/console/app/components/ui/UiDisclosureList.vue +++ b/console/app/components/ui/UiDisclosureList.vue @@ -1,4 +1,4 @@ -