Ver código fonte

FOTOBOEK: logo-knop samengevoegd tot één knop met Fotoboek/Mobiel-keuze

Confirm Dialog "Waar komt het logo vandaan?" met knoppen Fotoboek/Mobiel,
daarachter een Conditional: TRUE opent de bottom sheet (85%) met
FotoboekGridComponent, FALSE draait de bestaande upload-keten.
Export-geverifieerd.

CLAUDE.md: drie nieuwe builder-inzichten — het compacte Actions-paneel
schrijft Title/Message/Height niet weg (de Action Flow Editor wel), een
Conditional na een Confirm Dialog bindt zichzelf, en callback-argumenten
staan als bron "Action Parameters" met een typefilter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 8 horas atrás
pai
commit
e5f46e76bb
2 arquivos alterados com 33 adições e 1 exclusões
  1. 32 0
      CLAUDE.md
  2. 1 1
      TASKS.md

+ 32 - 0
CLAUDE.md

@@ -2509,6 +2509,38 @@ breiden met een derde optie — wil je er een eigen bron bij, dan moet je die sh
 vervangen door een eigen dialoog plus losse `selectMedia`-acties met expliciete
 Media Source.
 
+**⚠️ Het compacte Actions-paneel schrijft sommige velden NIET weg — de Action Flow
+Editor wél. Bouw een actieketen daarom standaard in de editor (knop *Edit*).**
+Bevestigd 2026-09-23 op een `Confirm Dialog`: **Title** en **Message** weigerden
+zes pogingen lang in het rechterpaneel (`triple_click`, `left_click`+`ctrl+a`,
+commit via label/Return/een ander veld — het veld toonde de tekst en sprong daarna
+terug op `Unset`), terwijl exact dezelfde reeks in de Action Flow Editor meteen
+opsloeg. Hetzelfde geldt voor het **Height**-veld van een `Bottom Sheet`: in het
+compacte paneel ligt dat ~5 px van de vensterrand en landt elke klik op *Select
+Component*, in de editor staat het gewoon in beeld (klik eerst het `%`-teken rechts
+van het label, dan `triple_click` + typen). **Vuistregel: loopt een veld in een
+actie-paneel vast, open dan de editor vóór je een zevende poging doet.**
+- *Dismiss Text* en *Confirm Text* van een Confirm Dialog zitten in eigen
+  subsecties (chevron rechts) en schrijven in het compacte paneel wél gewoon weg.
+- **Een `Confirm Dialog` genereert `?? false`**, dus wegklikken van de dialoog valt
+  in de **Dismiss**-tak. Zet daar dus de onschuldigste van de twee keuzes.
+
+**Een Conditional direct ná een Confirm Dialog krijgt zijn bron automatisch.**
+*Add Conditional* onder die actie zet Source meteen op **Confirm Dialog Response**
+(een echte boolean) — geen Single Condition, geen Set-Variable-dialoog. Export:
+`if (confirmDialogResponse) { … } else { … }`.
+
+**De argumenten van een callback staan in de Set-Variable-dialoog als eigen bron
+"Action Parameters", helemaal bovenaan.** Bevestigd 2026-09-23 bij het vullen van
+een `bijKeuze(fid, url)`-callback. Het typefilter grijst de niet-passende uit: bij
+een String-page-state is `fid` wit en `url` (Image Path) grijs, bij een
+Image-Path-veld precies andersom. Die lijst rendert leeg tot je de bekende
+hover-truc gebruikt (hover ver weg → hover op de rij → 8 s wachten → klikken).
+**Praktisch gevolg voor het ontwerp van zo'n callback: geef elk doeltype zijn eigen
+argument.** Een `List<String>`-page-state kan niets met een Image-Path-argument, dus
+wil je dezelfde url zowel aan een Image-Path-veld als aan een String-lijst geven,
+dan heb je twee argumenten nodig met dezelfde waarde.
+
 **"Convert to Component" bestaat wél en werkt — het is de manier om een blok
 herbruikbaar te maken, want widget copy/paste kan niet.** Bewezen 2026-09-20 op
 `homeCopy` (de Home-filterbalk). Rechtsklik de node in de widget tree →

+ 1 - 1
TASKS.md

@@ -26,7 +26,7 @@ Google Play en één doorloop die alleen Bob kan doen.
 
 | # | Taak | Kort |
 |---|---|---|
-| **FOTOBOEK** | Fotoboek: foto's kiezen uit Drupal + beheren | **Claude — bezig** (2026-09-22/23). **Drupal AF.** **App: bottom sheet werkt op de eerste plek** (logo op `uitgaansevenementAanmaken`) — `FotoboekGridComponent` = `Column > TextField(zoek) + Expanded(GridView)`, component state `zoekterm` → Backend Query `zoek`, en een tik roept `bijKeuze(fid, url)` aan en sluit de sheet. `dart analyze` 0 errors. **⚠️ EERST DOEN (Bob, 1 veld): de sheet heeft nog GEEN hoogte** — `ButtonFotoboekLogo` → Actions → de *Bottom Sheet*-actie → **Height (Optional)** op **85 %** (klik eerst het `%`-teken rechts van het label). Zonder hoogte comprimeert de sheet het component tot zijn natuurlijke grootte, en een `Expanded` in een onbegrensde Column geeft dan een leeg vlak. Claude kwam hier niet bij: het veld ligt ~5 px van de vensterrand, elke klik landde op *Select Component* of op de actie-dropdown (4 pogingen). **Daarna testen** met een profile-build op `uitgaansevenementAanmaken`. **Rest:** (a) samenvoegen tot ÉÉN knop *Logo kiezen* → `Alert Dialog → Confirm Dialog` met knoppen Fotoboek/Mobiel → conditional: TRUE = de sheet, FALSE = de bestaande upload-keten (via Copy Action Chain → Delete → Add Conditional → Paste); daarna mag *Uit fotoboek* weg, plus de nu ongebruikte inline `Container` + page state `fotoboekOpen`/`fotoboekDoel`; (b) uitrollen naar de 3 andere upload-plekken (foto's hier, logo + foto's op `stadsactiviteitAanmaken`); (c) 5e tab "Mijn foto's" op `mijnProfiel` voor beheer/verwijderen; (d) EN-vertaling van het zoekveld (Hint Text). **Opruimen (Bob):** `parameter1..4` op `FotoboekGridComponent` (door *Convert to Component* gemaakt, nergens gelezen) en het wegwerp-component `FotoboekGridComponentCopy`. Endpoint-spec + builder-recepten staan in `CLAUDE.md` |
+| **FOTOBOEK** | Fotoboek: foto's kiezen uit Drupal + beheren | **Claude — bezig** (2026-09-22/23). **Drupal AF.** **App: de logo-knop op `uitgaansevenementAanmaken` is KLAAR en export-geverifieerd** — één knop *Logo kiezen* → `Confirm Dialog` ("Waar komt het logo vandaan?", knoppen **Fotoboek** / **Mobiel**) → conditional op `confirmDialogResponse`: TRUE = bottom sheet 85 % met `FotoboekGridComponent` (callback `bijKeuze(fid, url)` zet `createLogoFid`/`createLogoUrl`), FALSE = de bestaande upload-keten. Let op: wegklikken van de dialoog telt als **Mobiel** (FlutterFlow genereert `?? false`). **⚠️ EERST (Bob, 2 kliks, dan is de dubbele knop weg): verwijder `ButtonFotoboekLogo`** (de knop *Uit fotoboek* naast *Logo kiezen*, staat in de tree onder `Row`) **en de dode inline `Container`** onderaan diezelfde Column (`if (_model.fotoboekOpen)`, 300 dp hoog, roept het component aan met een lege callback). Daarna mogen ook de page states **`fotoboekOpen`** en **`fotoboekDoel`** weg. **Rest:** (a) uitrollen naar de 3 andere upload-plekken — foto's hier (⚠️ vraagt een **derde callback-argument** `urlTekst` (String), want `createFotosUrls` is `List<String>` en het huidige `url`-argument is *Image Path*), plus logo + foto's op `stadsactiviteitAanmaken`; (b) 5e tab "Mijn foto's" op `mijnProfiel` voor beheer/verwijderen; (c) cosmetica: zoekveld boven de grid i.p.v. eronder (2 sleeppogingen mislukt) + Hint Text "Zoek op bestandsnaam" + EN-vertaling. **Opruimen (Bob):** wegwerp-component `FotoboekGridComponentCopy`. Endpoint-spec + builder-recepten staan in `CLAUDE.md` |
 | **133** | Kopie-knop verkleinen (mijnProfiel 2x + MijnAanmeldingen) | **Claude — bezig** (plan af 2026-09-22, wacht op groen licht voor de browser). Variant A (icoon in de rij) op `mijnProfiel`, variant B (compacte chip) op `MijnAanmeldingen`, tooltip erbij, kleuren meteen goed. Volledig plan + terugvalopties onderaan dit bestand |
 | **G0.6** | Play-screenshots | ✅ Nieuwe set van 10 klaar (2026-09-19 avond). Alleen `tel-04-horeca.png` moet over zodra *Show Test Ads* uit staat |