Просмотр исходного кода

TASKS: P2-45 toegevoegd — knop "Selecteer datum" naast de datumchips op Home

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 12 часов назад
Родитель
Сommit
40735bd82b
1 измененных файлов с 69 добавлено и 0 удалено
  1. 69 0
      TASKS.md

+ 69 - 0
TASKS.md

@@ -38,6 +38,9 @@ half af** — node 220276 geeft 404, alleen de dblog-telling staat nog open.
    Links / Bezorgen / Agenda — "Bezorgen" kapt af) en **P2-44 · datum-icoon
    zonder datum op `EventCurrent`** — allebei door Bob naar Claude geschoven
    2026-09-18.
+10. **P2-45 · knop "Selecteer datum" naast de datumchips op Home** — nieuw
+   2026-09-18 op Bob's vraag, zie het uitgeschreven blok verderop. Feature, dus
+   geen livegang-blokker; Claude kan dit zelf in de builder doen.
 
 ### 🆕 88 · "Mijn aanmeldingen" + kloonknop · Eigenaar: Bob (Drupal, deel A), Claude (app, deel B)
 
@@ -926,6 +929,72 @@ telefoon-emulator bekeken (zie screenshots in `~/uk-shots/2026-09-16/na-*.png`).
   kalender-icoon alleen staan. Conditie noteren, op de `Row` zetten
   (Visibility → Conditional → Set from Variable → API-response → JSON Path
   `$[0].datum` → Is Set) en van de Text afhalen.
+- **P2-45 · Home: knop "Selecteer datum" naast de datumchips · Eigenaar: Claude
+  (builder + custom code), ontwerpbesluit bij Bob.** Vraag Bob 2026-09-18: *"Kan
+  bij die choicechips ook een button, selecteer datum?"* Ja — en het past op de
+  bestaande architectuur zonder nieuwe App State of nieuwe API-parameters.
+
+  **Hoe het nu werkt** (`lib/uitgaanspaginas/home/home_widget.dart`): de chips
+  (Alles / Vandaag / Dit weekend / Deze week, `wrapped: true`) zetten in hun
+  `onChanged` `FFAppState().datumFilter = <chiplabel>` en roepen daarna
+  `herlaadLijsten()` aan. Elke van de 5 `HomeUitgaantabelKaartComponent`-
+  instanties heeft `key: ValueKey(FFAppState().datumFilter)` en krijgt
+  `datumVan: filterDatumVan(datumFilter)` / `datumTot: filterDatumTot(...)`
+  mee; die twee custom functions vertalen het chiplabel naar
+  `yyyy-MM-dd 00:00:00` resp. `yyyy-MM-dd 23:59:59`, en die gaan als
+  `datum_van`/`datum_tot` naar `flutterflowmobiel1` (afgehandeld in
+  `custom_views_query_alter()`). `datumFilter` is dus de enige bron van
+  waarheid — een gekozen datum hoeft daar alleen maar *in* te komen.
+
+  **A · `filterDatumVan` / `filterDatumTot` een rauwe datum laten doorlaten.**
+  Voeg in beide functies, direct ná `final k = (keuze ?? '').toLowerCase().trim();`
+  en vóór de `contains`-checks, toe:
+  ```dart
+    if (k.length == 10 && k[4] == '-' && k[7] == '-') {
+      return '$k 00:00:00';   // in filterDatumTot: '$k 23:59:59'
+    }
+  ```
+  Geen regex, geen geneste closure (FlutterFlow's validator struikelt daarover,
+  zie `CLAUDE.md`). Taalonafhankelijk, dus dit werkt ook in het Engels.
+  ⚠️ Achteraf bewerken in de Custom Code-editor is onbetrouwbaar: **Cancel →
+  "Discard new custom code?" → Yes** en de volledige body in één keer opnieuw
+  typen, daarna **Ctrl+S** (zonder die Ctrl+S haalt de wijziging de export niet).
+
+  **B · De knop op Home.** `FlutterFlowChoiceChips` zit als direct kind in de
+  Column onder het zoekveld. Wrap de chips in een **Row** en zet de knop
+  ernaast (chips in `Flex → Expansion = Expanded`, zodat ze blijven wrappen).
+  Voorkeur: een compacte knop of `FlutterFlowIconButton` met
+  `Icons.calendar_month` — vier chips vullen op 411 dp al bijna de breedte, dus
+  een brede tekstknop ernaast loopt over. Controleer op telefoonformaat
+  (411 dp) én tablet dat er niets afkapt.
+
+  **C · Actieketen op de knop** (Action Flow Editor, niet het compacte
+  Actions-paneel — daar opent de Set-Variable-dialoog niet):
+  1. **Date/Time Picker** — type *Date only*, `Min Date` = vandaag.
+  2. **Update App State** → `datumFilter` = `Date Picked 1`, Available Options
+     **DateTime Format** → in *DateTime Format Options* het woord `custom` typen
+     (staat niet in de standaardlijst) → *Custom Format* **`yyyy-MM-dd`**. Die
+     10-tekenvorm is precies wat A herkent. `Date Picked N` staat onder **Widget
+     State**; zoekveld leeg laten, sectie openklappen, 10 s wachten en hoveren
+     (zie `CLAUDE.md`).
+  3. **Custom Action `herlaadLijsten`** — verplicht, anders houdt de
+     `pagingController` de oude lijst vast; de Value Key alleen doet niets.
+
+  **D · Twee restpunten die je bewust moet afhandelen.**
+  - Na het kiezen van een datum blijft de eerder gekozen chip nog gemarkeerd —
+    FlutterFlow heeft geen actie om een `FormFieldController` van choice chips
+    te wissen. Oplossing: laat de **knoptekst de gekozen datum tonen**, via een
+    nieuwe custom function `datumKnopLabel(String? filter)` die `Selecteer
+    datum` teruggeeft tenzij `filter` een 10-teken-datum is (dan `dd-MM-yyyy`).
+    Dan is altijd zichtbaar welk filter écht actief is.
+  - Andersom klopt het al vanzelf: een chip aantikken overschrijft
+    `datumFilter` en wist de datum dus.
+
+  **Testen** (browserloos, telefoonformaat): `--route "/home"` in een profile-
+  build, datum kiezen, en de lijst naleggen met
+  `curl ".../flutterflowmobiel1.json?display_id=services_5&townid=28695&datum_van=<d>%2000:00:00&datum_tot=<d>%2023:59:59"`.
+  Reken erop dat de evenementenvoorraad per dag sterk wisselt — tel eerst met
+  curl vóór je concludeert dat de knop niets doet.
 - **P2-36 · ❌ NEE — besluit Bob 2026-09-16: kaarttitels blijven Roboto.**
   Niet opnieuw voorstellen. (Voorstel was Title Large/Medium op Noto Serif zetten
   omdat de site kaarttitels in serif zet; Headline L/M/S staan al wel op serif.)