|
|
@@ -1123,13 +1123,20 @@ Dat is nodig omdat een voorgeselecteerde dropdown geen `onChanged` vuurt.
|
|
|
Daarnaast is de weergave van beide dropdowns voorgevuld via *Initial Option
|
|
|
Value(s)*.
|
|
|
|
|
|
-⚠️ **Restpunt 127-D: de logo-preview blijft leeg.** `createLogoUrl` is van het
|
|
|
-type **Image Path**, en in die Set-Variable-dialoog staat `kloonTekst` **grijs**
|
|
|
-(niet selecteerbaar) — het bekende Image-Path-typeprobleem uit `CLAUDE.md`. Het
|
|
|
-logo zelf gaat wél mee bij indienen (`logo_fid` staat er). Oplossing zou zijn:
|
|
|
-het page-state-veld omzetten van Image Path naar String, maar dan moet de
|
|
|
-`Image`-widget die eraan hangt (regel ~2767 in de export) opnieuw gebonden
|
|
|
-worden. Keuze aan Bob.
|
|
|
+✅ **Restpunt 127-D (logo-/fotopreview) is OPGELOST** (2026-09-22). Geen
|
|
|
+typewijziging nodig geweest: er zijn twee custom functions bij gekomen met
|
|
|
+**ImagePath** als returntype — `kloonBeeld(bron, sleutel)` → *Image Path* en
|
|
|
+`kloonBeelden(bron, sleutel)` → *Image Path + Is List*. Die staan in de
|
|
|
+Set-Variable-dialoog wél gewoon selecteerbaar. Op **beide** aanmaakpagina's is
|
|
|
+in de On-Page-Load → Update Page State nu `createLogoUrl` =
|
|
|
+`kloonBeeld(kloonBron,'logo_url')` en `createFotosUrls` =
|
|
|
+`kloonBeelden(kloonBron,'fotos_urls')` gezet. De bestaande guards
|
|
|
+(`!= null && != ''` resp. `.length > 0`) blijven werken, want de functies geven
|
|
|
+`''` / `[]` terug als er niets te klonen valt.
|
|
|
+**Les voor later:** ImagePath/VideoPath/AudioPath staan gewoon in de
|
|
|
+return-type-dropdown van een Custom Function — een String-functie aan een
|
|
|
+Image-Path-veld binden lukt niet, maar een functie *van het juiste type*
|
|
|
+schrijven lost het in één keer op.
|
|
|
|
|
|
**127-G IS KLAAR** (2026-09-21): dezelfde Kopie-knop staat nu ook op
|
|
|
`mijnProfiel`, in béide lijsten — onder *Mijn evenementen* en onder
|
|
|
@@ -1137,16 +1144,13 @@ worden. Keuze aan Bob.
|
|
|
(`type: 'go_out_event'` resp. `'activity'`) is er géén type-conditie nodig:
|
|
|
elke knop navigeert rechtstreeks naar het juiste formulier.
|
|
|
|
|
|
-**127-E opnieuw bevestigd op het toestel (2026-09-21):** de Kopie-knop onder
|
|
|
-*Eigen activiteiten* op `mijnProfiel` navigeert netjes naar
|
|
|
-`stadsactiviteitAanmaken`, maar het formulier is **helemaal leeg** (titel,
|
|
|
-categorie, plaats). Dat is geen regressie — `stadsactiviteit_aanmaken_widget.dart`
|
|
|
-heeft simpelweg nog 0 treffers op `kloonBron`, terwijl het evenementformulier er
|
|
|
-14 heeft.
|
|
|
+**127-E IS KLAAR** (2026-09-22): het activiteitenformulier vult zich nu net zo
|
|
|
+volledig als het evenementformulier — negen tekstvelden, vijf dropdowns, logo- en
|
|
|
+fotopreview. Zie het eigen blok hieronder.
|
|
|
|
|
|
-**Nog te doen:** 127-E (activiteitenformulier vullen, na 124), 127-F
|
|
|
-(`kloonBron` wissen op 4 plekken), plus de twee restpunten hierboven
|
|
|
-(knopkleur op `MijnAanmeldingen`, logo-preview).
|
|
|
+**Nog te doen:** alleen nog het restpunt **knopkleur** op `MijnAanmeldingen`
|
|
|
+(de Kopie-knop is nog FlutterFlow-rood `primary`). 127-E en 127-F zijn af
|
|
|
+(2026-09-22), de logo-/fotopreview ook.
|
|
|
|
|
|
**Wens Bob (2026-09-20):** op elke kaart in *Mijn aanmeldingen* een knop **Kopie**.
|
|
|
Eén tik opent het aanmaakformulier volledig ingevuld; de gebruiker vult de datum
|
|
|
@@ -1326,77 +1330,89 @@ selecteert de dropdown wél de juiste waarde maar verstuurt de create-actie leeg
|
|
|
De page states worden pas bij het indienen gelezen, dus die mogen gewoon in
|
|
|
On Page Load — daar speelt het timingprobleem niet.
|
|
|
|
|
|
-#### 127-E · Activiteitenformulier voorvullen · Eigenaar: Claude — bezig (2026-09-22, preview logo/foto's)
|
|
|
+#### 127-E · Activiteitenformulier voorvullen · ✅ AF (2026-09-22)
|
|
|
+
|
|
|
+Geverifieerd in een verse export, `dart analyze` 0 fouten.
|
|
|
|
|
|
-**Af en geverifieerd in een verse export (0 analyse-fouten):**
|
|
|
- **On Page Load → Update Page State** (Action 3, ná de bestaande
|
|
|
- `gemeenteVoorselectie`-conditional) met zes velden:
|
|
|
+ `gemeenteVoorselectie`-conditional) met acht velden:
|
|
|
`createProvincieID`→`provincie_tid`, `createPlaatsID`→`plaats_tid`,
|
|
|
`createEntreeTid`→`entree_tid`, `createLogoFid`→`logo_fid`,
|
|
|
`createCategorieTids`→`categorie_tids` (kloonLijst),
|
|
|
- `createFotosFids`→`fotos_fids` (kloonLijst).
|
|
|
+ `createFotosFids`→`fotos_fids` (kloonLijst),
|
|
|
+ `createLogoUrl`→`logo_url` (**kloonBeeld**),
|
|
|
+ `createFotosUrls`→`fotos_urls` (**kloonBeelden**).
|
|
|
- **Initial Value op negen TextFields**: `titel`, `omschrijving`, `adres_straat`,
|
|
|
`adres_postcode`, `organisator`, `contact`, `website_url`,
|
|
|
`toelichting_entree`, `entree_prijs`. (Datum bewust niet — je kloont juist om
|
|
|
een nieuwe datum te kiezen.)
|
|
|
+- **Initial Option Value op vijf dropdowns**, zodat de gebruiker de gekloonde
|
|
|
+ keuze ook *ziet*: `DropDownCategorieen` = `kloonLijst(kloonBron,
|
|
|
+ 'categorie_tids')`, `DropDownProvincie` = `kloonTekst(kloonBron,
|
|
|
+ 'provincie_tid')`, `DropDownEntree` = `kloonTekst(kloonBron,'entree_tid')` —
|
|
|
+ die drie bestaan al bij de eerste build en moeten dus aan **App State**
|
|
|
+ hangen, niet aan page state. `DropDownGemeente` = `createGemeenteID` en
|
|
|
+ `DropDownPlaats` = `createPlaatsID` mogen wél page state, want die zitten
|
|
|
+ achter een Visibility-conditie en worden pas ná de On-Page-Load-`safeSetState`
|
|
|
+ voor het eerst gebouwd.
|
|
|
- **`gemeenteTid`-navigatieparameter** op beide Kopie-knoppen
|
|
|
(`MijnAanmeldingen` Action 4 en `mijnProfiel` Action 3), gebonden aan
|
|
|
`apiResult… → JSON Body → $.gemeente_tid`. `gemeenteVoorselectie()` geeft die
|
|
|
parameter voorrang, dus `createGemeenteID` klopt bij een kloon en de
|
|
|
plaats-dropdown wordt zichtbaar.
|
|
|
+ ⚠️ **Valkuil die hier één keer toesloeg:** op `mijnProfiel` stond die binding
|
|
|
+ eerst op `apiResultvpn` — de output van de On-Page-Load-call
|
|
|
+ (`MijnHorecagelegenheden`), niet van de Kopie-knop zelf. Dat compileert
|
|
|
+ gewoon, geeft stil `gemeenteTid = "null"` en dus een lege plaats-cascade.
|
|
|
+ Controleer bij zo'n binding altijd de **naam** van de action output, niet
|
|
|
+ alleen het JSON-pad. De bronnenlijst rendert daar leeg tot je de hover-truc
|
|
|
+ gebruikt; zoekterm `apiResult` + hover toont de drie outputs wél.
|
|
|
+
|
|
|
+**Volledig af**: zowel de indiening (alle waarden komen uit page state) als de
|
|
|
+weergave (tekstvelden, dropdowns, logo- en fotopreview).
|
|
|
+
|
|
|
+**Op het toestel bewezen (2026-09-22, profile-build x86_64 op emulator-5556,
|
|
|
+account `bobcity`):** Kopie op *Eigen activiteiten* → formulier met titel,
|
|
|
+omschrijving, drie categorieën, provincie/gemeente/plaats (Noord-Holland /
|
|
|
+Drechterland / Hoogkarspel), adres, postcode, entree-type én logo- + fotopreview;
|
|
|
+datumvelden leeg. Ingediend met STATUS 200:
|
|
|
+
|
|
|
+```
|
|
|
+BODY : {"titel":"gggg","plaats_tid":28739,"datum_start":"2026-09-26 17:02:00",
|
|
|
+ "omschrijving":"...","adres":{"thoroughfare":"yyy","postal_code":"gggg",
|
|
|
+ "country":"NL"},"categorie_tids":[36190,36194,36484],
|
|
|
+ "logo_fid":5513220,"fotos_fids":[5513221],"entree_tid":36197}
|
|
|
+→ {"status":"created_pending_review","nid":"222823"}
|
|
|
+```
|
|
|
|
|
|
-**De indiening is hiermee compleet**: alle waarden die `stadsactiviteitCreate`
|
|
|
-meekrijgt komen uit de page states, en die zijn nu gezet.
|
|
|
+⚠️ **Op te ruimen door Bob: testnodes 222822 en 222823 op productie** (beide door
|
|
|
+Claude aangemaakt tijdens deze tests; 222823 staat ongepubliceerd).
|
|
|
|
|
|
-**Nog te doen — alleen nog zichtbaarheid, geen functionaliteit:**
|
|
|
-- **Initial Option Value op vijf dropdowns**, zodat de gebruiker de gekloonde
|
|
|
- keuze ook *ziet* staan: `DropDownProvincie` (aan **App State**:
|
|
|
- `kloonTekst(kloonBron,'provincie_tid')` — dit is de enige die al bij de eerste
|
|
|
- build bestaat, dus niet aan page state hangen), `DropDownGemeente`
|
|
|
- (`createGemeenteID`), `DropDownPlaats` (`createPlaatsID`), `DropDownEntree`
|
|
|
- (`createEntreeTid`), `DropDownCategorieen` (`createCategorieTids`).
|
|
|
- Zonder deze tonen de dropdowns "Selecteer…" terwijl de onderliggende waarde
|
|
|
- wel goed staat — verwarrend, maar niet fout.
|
|
|
-- ⚠️ **`createFotosUrls` is type `List < Image Path >` en `createLogoUrl` is
|
|
|
- `Image Path`** — daar is `kloonLijst`/`kloonTekst` (String) niet aan te binden.
|
|
|
- Zelfde restpunt als op het evenementformulier: de **preview** van logo en
|
|
|
- foto's ontbreekt bij een kloon, de fids gaan wél mee naar Drupal. Oplossing
|
|
|
- vraagt om het type van die twee page states om te zetten naar String (en dan
|
|
|
- de Image-widgets opnieuw binden) — besluit aan Bob.
|
|
|
-
|
|
|
-⚠️ **127-F is nu urgent geworden**: zolang `kloonBron` niet gewist wordt bij
|
|
|
-"nieuw aanmaken", krijgt een verse activiteit het vorige kloonformulier te zien.
|
|
|
-Dat raakt o.a. de knop "+ Activiteit aanmaken" per stadsrecht op `mijnProfiel`.
|
|
|
-
|
|
|
-#### 127-F · `kloonBron` wissen · Eigenaar: Claude — bezig (2026-09-22)
|
|
|
-
|
|
|
-Zonder dit blijft een kloon hangen: wie daarna een **vers** evenement aanmaakt,
|
|
|
-krijgt het vorige formulier opnieuw ingevuld.
|
|
|
-
|
|
|
-Zet vóór elke bestaande "nieuw aanmaken"-navigatie een `Update App State` met
|
|
|
-`kloonBron` op **Clear Value** (zelfde patroon als de uitlogknop). Vier plekken in
|
|
|
-een verse export van 2026-09-20:
|
|
|
-
|
|
|
-| bestand | regel | doel |
|
|
|
+#### 127-F · `kloonBron` wissen · ✅ AF (2026-09-22)
|
|
|
+
|
|
|
+Vóór elke "nieuw aanmaken"-navigatie staat nu een `Update App State` met
|
|
|
+`kloonBron` op **Clear Value** (genereert `FFAppState().kloonBron = null;`).
|
|
|
+Vier plekken, alle vier geverifieerd in een verse export:
|
|
|
+
|
|
|
+| bestand | knop | doel |
|
|
|
|---|---|---|
|
|
|
-| `mijn_profiel_widget.dart` | 823 | `UitgaansevenementAanmaken` |
|
|
|
-| `mijn_profiel_widget.dart` | 1317 | `StadsactiviteitAanmaken` |
|
|
|
-| `mijn_profiel_widget.dart` | 1506 | `StadsactiviteitAanmaken` |
|
|
|
-| `favorieten_widget.dart` | 1042 | `StadsactiviteitAanmaken` |
|
|
|
+| `mijn_profiel_widget.dart` | `+ Evenement aanmaken` | `UitgaansevenementAanmaken` |
|
|
|
+| `mijn_profiel_widget.dart` | `+ Activiteit` | `StadsactiviteitAanmaken` |
|
|
|
+| `mijn_profiel_widget.dart` | `+ Activiteit aanmaken` (per stadsrecht) | `StadsactiviteitAanmaken` |
|
|
|
+| `favorieten_widget.dart` | `Stadsactiviteit aanmaken` | `StadsactiviteitAanmaken` |
|
|
|
|
|
|
Dit zijn **alle** ingangen: de aanmaakpagina's zijn verder nergens vanuit de app
|
|
|
bereikbaar (wel via een directe route).
|
|
|
|
|
|
-#### Volgorde en omvang
|
|
|
+**Op het toestel bewezen (2026-09-22):** ná een kloon levert "+ Activiteit
|
|
|
+aanmaken" bij een stadsrecht een volledig leeg formulier op (titel, omschrijving,
|
|
|
+categorie "Selecteer…", entree "Select…", geen media), mét de juiste gemeente
|
|
|
+voorgeselecteerd uit `gemeenteTid`.
|
|
|
|
|
|
-1. **127-A** (Drupal) — code staat klaar, ±15 min, blokkeert alles.
|
|
|
-2. **127-B** (App State + call + 2 functies) — ±30 min.
|
|
|
-3. **127-C + 127-D + 127-F** (evenementen, end-to-end werkend) — één sessie.
|
|
|
-4. **124/125/126** (cascade) en daarna **127-E** (activiteiten) — eigen sessie.
|
|
|
+#### Stand
|
|
|
|
|
|
-Stap 1-3 leveren al een werkende kloonknop voor evenementen; de knop op een
|
|
|
-activiteitenkaart verbergen tot 127-E klaar is, is één Visibility-conditie op de
|
|
|
-page parameter `type`.
|
|
|
+A t/m G zijn **allemaal af** (127-A Drupal door Bob, B t/m G in de builder).
|
|
|
+Open restpunt: alleen de **kleur** van de Kopie-knop, zie hieronder.
|
|
|
|
|
|
#### Testen
|
|
|
|