Преглед изворни кода

P2-24 B grotendeels gebouwd; tabIndex-binding overgedragen aan Bob

Gebouwd en export-geverifieerd (0 analyze-errors):
- API Call Horecacategorieen (absolute URL, cache: true, geen headers)
- custom functions horcatOptiesVoorTab / horcatLabelsVoorTab (per tabindex,
  eerste optie leeg resp. "Alle categorieen") naast horcatSubTids/-Labels
- DropDown op horecagelegenhedenOverzichtCurrent, als 2e kind van de body-Column
  (tussen zoekveld en tabs), met Backend Query op die call

De filterkant bleek al aanwezig: filterHorecagelegenheden heeft al een
categorieFilter-parameter en alle zes de tabs lezen de gedeelde page state
categorieFilterActiviteiten -- die wordt alleen nergens gezet.

Vastgelopen op het binden van het Integer-argument tabIndex aan Widget State ->
TabBar Current Index: de optie is aanklikbaar maar de waarde plakt niet, en de
halve binding zet de Issues-teller op 3 wat de export project-breed blokkeert.
Met Remove teruggedraaid; project staat weer schoon. Vier resterende
builder-stappen staan uitgeschreven in TASKS.md.

CLAUDE.md: drie nieuwe valkuilen -- Integer-argument dat niet plakt (met de
Remove-herstelroute), het feit dat de bronnenlijst wel gewoon scrollt en dat een
zoekterm geen hover overleeft, en tooltips die knoppen afdekken.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob пре 10 часа
родитељ
комит
fcaef94eeb
2 измењених фајлова са 90 додато и 2 уклоњено
  1. 27 0
      CLAUDE.md
  2. 63 2
      TASKS.md

+ 27 - 0
CLAUDE.md

@@ -1288,6 +1288,33 @@ halve actie op (⋮ op de actie-node → *Delete Action*) vóór je verdergaat:
 zou een bestaande waarde juist wissen. Draag de binding daarna over aan Bob.
 
 
+**⚠️ Een INTEGER-argument van een custom function binden aan Widget State lukt
+Claude niet — de keuze plakt niet.** Bevestigd 2026-09-19 (P2-24 B, `tabIndex` ↔
+*TabBar Current Index*, 4 pogingen). Het `respons`-argument (Json) binden ging
+in één keer goed; bij het Integer-argument opent de geneste dialoog gewoon, de
+optie rendert na de blinde klik, hij is aanklikbaar — maar het Value-veld blijft
+leeg en na Confirm staat de functie rood. **De Issues-teller springt dan omhoog
+en dat BLOKKEERT de export project-breed**, dus laat het nooit zo staan: open de
+binding opnieuw en klik **Remove** (dat werkt wel), en draag de stap over aan Bob.
+Verifieer daarna met een verse export dat je weer op 0 errors zit.
+
+**Twee dingen over de bronnenlijst in die dialoog die tijd schelen:**
+- **De lijst SCROLLT wel gewoon met het muiswiel** (anders dan elders in dit
+  bestand staat) — dat is de snelste manier om bij *Custom Functions* te komen,
+  dat ver onderaan staat. Wil je meer regels tegelijk zien: sleep de dialoog aan
+  de **pil bovenaan** omhoog; dat sluit 'm niet en levert een flink langere lijst.
+- **Een zoekterm overleeft geen hover**: zodra je ergens anders hovert springt het
+  filter terug naar de volledige lijst. Combineer de zoekterm dus nooit met de
+  hover-truc — typ, en klik daarna meteen het resultaat aan. Rendert de rij leeg,
+  klik dan **blind** op de verwachte positie: de rij verschijnt dan alsnog en is
+  daarna met een tweede klik te kiezen.
+
+**Het "+"-menu in Custom Code én knoppen in het rechterpaneel worden afgedekt door
+hun eigen TOOLTIP.** Zowel *Function* in het "+"-menu als de knop *Add Query* in
+het Backend-Query-paneel reageerde niet, puur omdat de tooltip eroverheen lag.
+**Vaste oplossing: hover eerst ergens neutraals (bv. midden op het canvas), wacht
+3-4 s tot de tooltip weg is, en klik dan pas.** Scheelde bij beide meteen succes.
+
 **⚠️ "Set from Variable": een zoekterm die tot precies ÉÉN bron reduceert
 rendert zijn optielijst NIET — zoek breder.** Dit is de simpelste verklaring
 voor het bekende lege-optielijst-probleem, gevonden 2026-09-11. Zoeken op

+ 63 - 2
TASKS.md

@@ -22,7 +22,7 @@ oppakken.
 | ~~88B~~ | Pagina "Mijn aanmeldingen" | ⚠️ **Al geclaimd** door de sessie 'taken-B1-B7' — niet oppakken |
 | **98** | "Zet in mijn agenda"-knop op een evenement (`add_2_calendar`) | Claude — **BEZIG** (2026-09-19). 98A en 98B zijn af; alleen de knop op `EventCurrent` rest nog |
 | **65** | Release-build doorloop | ✅ **Uitgelogde deel af 2026-09-19** (0 crashes; 65a, 65b en 65d-kleur opgelost; 65c + 65e open). Rest = ingelogd + Xiaomi → Bob |
-| **P2-24 B** | Categoriedropdown horeca-overzicht, tab-bewust | ✅ **NIET MEER GEBLOKKEERD** — `horecacategorieen.json` geeft anoniem HTTP 200 op **productie** (gemeten 2026-09-19, 8808 bytes, 0,18 s). Custom functions staan klaar |
+| **P2-24 B** | Categoriedropdown horeca-overzicht | 🟡 **grotendeels af** — endpoint live, API Call, 4 custom functions en de dropdown staan er en zijn export-geverifieerd. Alléén de `tabIndex`-binding lukt Claude niet → **4 stappen voor Bob**, zie P2-24 B hieronder |
 | **99/100/101** | Loginvelden breed · drawer-logo onder statusbalk · Firebase-console-check | Claude — **BEZIG** (2026-09-19, sessie 'losse-restpunten'); Bob klikt, Claude verifieert. ⚠️ Crashtest-knop opruimen NIET nu: staat op `Favorieten`, en die pagina is van 88B |
 | **G0.6** | Play-screenshots schieten | Browserloos op beide AVD's, ±10 min — zeg het en het gebeurt |
 
@@ -34,7 +34,7 @@ oppakken.
 | ~~B1b~~ | Splashscreen | ✅ **AF** (Bob 2026-09-19, export-geverifieerd): `nav.dart` toont `logo_1080x2160.png`; op telefoon, 9:20, tablet staand én liggend volledig leesbaar |
 | **G** | Google Play-checklist G0–G4 | Volledige checklist hieronder, afvinkbaar |
 | **66** | Crashlytics: Firebase-console nakijken + Crashtest-knop opruimen | App-kant is bewezen (rapport met status 200); alleen de console-check en het opruimen zijn nog van jou |
-| **P2-24 B** | `horecacategorieen` publiek: **devbob ✅, nog naar productie** | Werkt en is nagemeten op devbob. Na deploy: `cc all`, resource aanvinken op het `flutterdrup`-endpoint, anoniem testen, Cloudflare 2-uurs-rule |
+| **P2-24 B** | 4 laatste builder-stappen op de categoriedropdown + Cloudflare-cacheregel | Claude komt niet door de `tabIndex`-binding; exacte stappen staan bij P2-24 B |
 | **P1-17** | Engelse vertalingen, één ronde | 46 velden op de twee aanmaakpagina's + 3 losse |
 | **Bij livegang** | Zes schakelaars en opruimklussen | Eigen blok hieronder |
 | **Drupal** | taak 56, P2-25 | Eigen blokken hieronder (P1-42/P1-43 zijn af, nagemeten 2026-09-19) |
@@ -936,6 +936,67 @@ de zes tab-tids — en 123 op diepte 1. Dieper dan 1 gaat de boom niet, dus
 even lang, geen lege labels, geen duplicaten, en alle randgevallen (`respons` null
 of leeg, `horcatTid` null/leeg, onbekend tid) geven netjes een lege lijst.
 
+**✅ Productie 2026-09-19:** `horecacategorieen.json` is publiek (HTTP 200
+anoniem, 129 records, 8,8 KB, 0,22 s), identiek aan devbob.
+⚠️ Nog te doen: `cf-cache-status` is nog **DYNAMIC** — zet 'm in de **2-uurs**
+Cloudflare Cache Rule bij `plaatsen.json`.
+
+**✅ Al gebouwd en export-geverifieerd (Claude, 2026-09-19), 0 analyze-errors:**
+1. **API Call `Horecacategorieen`** — top-level, absolute URL, `cache: true`,
+   geen headers.
+2. **Vier custom functions**: `horcatSubTids` / `horcatSubLabels` (per
+   `horcat`-tid) en `horcatOptiesVoorTab` / `horcatLabelsVoorTab` (per
+   *tabindex*; eerste element `''` resp. `Alle categorieen`). De tabvolgorde
+   zit erin als `['17969','17963','34','17965','17967','17968']`.
+3. **DropDown op `horecagelegenhedenOverzichtCurrent`**, als 2e kind van de
+   body-`Column` (tussen zoekveld en tabs), mét **Backend Query → API Call →
+   Horecacategorieen**.
+
+**De filterkant was al klaar:** `filterHorecagelegenheden` heeft al een
+`categorieFilter`-parameter en alle zes de tabs lezen de gedeelde page state
+`categorieFilterActiviteiten` — die wordt alleen nergens *gezet*.
+⚠️ Die filter vergelijkt op **labels** (de `categorie`-array van een zaak), niet
+op tids; daarom leveren mijn functies labels als dropdown-*waarde*.
+
+**⛔ Waar Claude vastliep — 4 resterende stappen, voor Bob:**
+
+*Het probleem:* in **Define Options → `horcatOptiesVoorTab` → argument
+`tabIndex` (Integer)** blijft de binding aan *Widget State → TabBar Current
+Index* niet staan. De optie rendert en is aanklikbaar, maar het Value-veld
+blijft leeg; na Confirm staat `horcatOptiesVoorTab()` rood en springt de
+Issues-teller van 2 naar 3 — en dat blokkeert de export project-breed. Ik heb
+de binding daarom met **Remove** teruggedraaid: de dropdown staat weer op de
+statische `Option 1/2/3` en het project is schoon. Het argument `respons`
+binden lukte wél (Horecacategorieen Response → JSON Body → No Further Changes).
+
+1. **Define Options** → `horcatOptiesVoorTab`; `respons` = *Horecacategorieen
+   Response → JSON Body → No Further Changes*, `tabIndex` = *Widget State →
+   TabBar Current Index*.
+2. **Add Option Labels** aan → **Define Options Labels** → idem, maar met
+   `horcatLabelsVoorTab`.
+3. **DropDown → Actions → On Selected** → *Update Page State* →
+   `categorieFilterActiviteiten` = de dropdown-waarde (Widget State).
+4. **TabBar → Actions → On Tab Change** → *Update Page State* →
+   `categorieFilterActiviteiten` → **Clear Value**. Zonder deze stap lekt een
+   gekozen categorie door naar de volgende tab. Overweeg daarbij een **Value
+   Key** op de DropDown = *TabBar Current Index*, zodat ook de zichtbare
+   selectie leegt bij een tabwissel.
+
+**Hint Text** staat nog op "Select..." — mag "Alle categorieën" worden.
+
+**Bekende datakwestie, geen blokkade:** een tab toont álle subcategorieën uit de
+taxonomie, ook die in de gekozen plaats geen enkele zaak hebben (Amsterdam:
+Eetgelegenheden 52 opties waarvan 38 met resultaat; Activiteiten 26 waarvan 6).
+Aanscherpen kan later door de optielijst te snijden met de labels die in de
+geladen lijst voorkomen.
+
+**⚠️ Los datapuntje voor Drupal:** de taxonomieterm **"Verhuur, Verkoop &
+Catering"** (tid 17968) bevat een komma, en `_custom_parse_komma_to_array()`
+splitst 'm in de zakenlijst in twee labels ("Verhuur" en "Verkoop & Catering"),
+die allebei niet in de taxonomie bestaan. Raakt de dropdown niet (alleen
+diepte-0), maar op de kaarten staan er zo twee losse labels. Enige term met dit
+probleem.
+
 **App-deel (Claude), zodra het endpoint publiek is:**
 1. ✅ **AF** — custom functions `horcatSubTids` en `horcatSubLabels` staan in het
    project (2026-09-19, export-geverifieerd, `dart analyze` 0 errors).