Explorar o código

P2-15: pagina uitgaansevenementAanmaken opgezet uit stadsactiviteitAanmaken

Nieuwe pagina gemaakt via Duplicate Page + Rename, en opgeschoond: het
complete blok "Waar" (gemeente-picker, provincie/gemeente/plaats-cascade,
adres, postcode, plaats) en de velden Organisator en Contact verwijderd.
Behouden: titel, omschrijving, categorie-multiselect, beide datumvelden
met picker-logica, website-url, entree-dropdown, toelichting, entreeprijs,
logo- en foto-upload en de verzendknop.

LET OP: de export is op dit moment geblokkeerd. Duplicate Page kopieert
de Upload-Data-actienamen mee en die moeten projectbreed uniek zijn.
ButtonLogo is al hernoemd naar UploadDataLogoEvenement; ButtonFotos moet
nog. Exacte stappen staan in TASKS.md.

CLAUDE.md: twee nieuwe patronen vastgelegd - de unieke-naam-eis bij
gedupliceerde uploadknoppen (inclusief de truc om het afgeknipte
Name-veld zichtbaar te maken), en het verschil tussen "Remove Widget"
(behoudt kinderen) en de prullenbak in de zwevende werkbalk.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob hai 1 semana
pai
achega
a3fb95717e
Modificáronse 2 ficheiros con 81 adicións e 52 borrados
  1. 25 0
      CLAUDE.md
  2. 56 52
      TASKS.md

+ 25 - 0
CLAUDE.md

@@ -870,6 +870,31 @@ klikken.** Bevestigd 2026-08-31 (P1-33, 93 hardcoded hexen → 12, en die
   verschillende velden zijn — een hartje-op-wit-vlak zit in *Icon
   Color*, een hamburger-op-gekleurd-vlak in *Fill Color*.
 
+**`Duplicate Page` kopieert Upload-Data-actienamen mee, en die moeten
+projectbreed UNIEK zijn — een duplicaat blokkeert daardoor meteen de
+export.** Bevestigd 2026-09-02 (`stadsactiviteitAanmaken` gedupliceerd
+naar `uitgaansevenementAanmaken`): het Issues-paneel meldt
+`Name for Upload Data action on <knop> is not unique`, en
+`flutterflow export-code` faalt met de generieke
+`Status: 400 / Error generating code for the project`. **Fix:** knop →
+Actions-tab → de "Store media for upload"-actie → onderaan het
+rechterpaneel het veld **`Name`** een unieke waarde geven.
+**Het `Name`-veld valt standaard buiten beeld:** klik het
+**"|<"-icoontje linksboven in de Action Flow Editor** om de
+trigger-kolom in te klappen — dan schuift het rechterpaneel mee en staat
+het veld gewoon in beeld. (Dat icoontje is ook los nuttig tegen de
+bekende paneel-clipping.) Reken er bij elke gedupliceerde pagina met
+uploads op dat je dit per upload-knop moet doen.
+
+**"Remove Widget" op een Container haalt alleen de container weg en
+behoudt de kinderen — voor een heel blok gebruik je de prullenbak in de
+zwevende werkbalk.** Bevestigd 2026-09-02: rechtsklik op een
+tree-node → "Remove Widget" op `ContainerWaar` verplaatste alle
+kinderen (dropdowns, tekstvelden) één niveau omhoog i.p.v. ze te
+verwijderen. Wil je de node **inclusief** subtree weg: rechtsklik de
+node, en klik in de zwevende icoontjesbalk die dan boven de rij
+verschijnt het **rode prullenbak-icoon** (uiterst rechts).
+
 **Een lijstwidget met paginering omzetten naar een grid (Replace) —
 volledig recept, bevestigd 2026-09-01 op `HomeUitgaantabelKaartComponent`.**
 Rechtsklik → Replace weigert met "Can't replace a widget that has

+ 56 - 52
TASKS.md

@@ -2699,7 +2699,7 @@ overwegen bij een volgende theme-update:
 
 ---
 
-**P2-15 · Eigenaar: Bob (builder), Claude regisseert/verifieert (niet meer actief bezig — sessie 2026-08-31 avond afgesloten na bouwstap 5 stap 1; zie STAND VAN ZAKEN bij bouwstap 5).
+**P2-15 · Eigenaar: Claude — bezig (sessie 2026-09-02: bouwt de formulierpagina `uitgaansevenementAanmaken`, bouwstap 5 stap 2-5, door `stadsactiviteitAanmaken` te dupliceren).
 Bouwstap 1 afgerond en bevestigd (2026-08-27): custom action
 `bestandUpload` (`lib/custom_code/actions/bestand_upload.dart`) upload
 foto → fid, live getest tegen productie
@@ -3424,57 +3424,61 @@ werkte.
 
 ---
 
-### STAND VAN ZAKEN bouwstap 5 (2026-08-31 avond) — hier verder
-
-**Klaar:** stap 1, de custom action (zie punt 1 hierboven).
-
-**Bezig:** stap 2, `evenementCreate` los testen tegen productie. Daarvoor
-staat op de bestaande wegwerp-testpagina **`kanwegTestUpload`** een
-**tweede knop "Test evenement"** (sibling van de bestaande "Test
-Upload"-knop, in dezelfde `Column`). Zijn On Tap heeft één actie:
-Custom Action `evenementCreate`, met deze waarden al gezet en
-UI-geverifieerd:
-
-| Argument | Waarde |
-|---|---|
-| `sessionName` | App State `userSessionname` |
-| `sessionId` | App State `userSessionid` |
-| `token` | App State `userToken` |
-| `titel` | letterlijk `Testevenement Claude` |
-| `datumStart` | letterlijk `2026-09-15 20:00:00` |
-| `categorieTids` | Inline Function, expression `<String>[]` |
-
-Er is **bewust géén snackbar-actie** toegevoegd: `evenementCreate` print
-URL, body, status en response al naar de console, dus `adb logcat` is de
-uitleesroute. (Wil je 'm tijdens het testen tóch zichtbaar op het
-toestel, voeg dan een Show Snack Bar toe met Action Output → JSON Path
-`$`, zoals de bestaande upload-knop doet — dan is een Action Output
-Variable Name nodig, die staat nu niet ingesteld.)
-
-**Nog te doen om stap 2 af te maken:**
-
-1. **`fotosFids` zetten — DIT DEBLOKKEERT DE EXPORT.** Pagina
-   `kanwegTestUpload` → knop "Test evenement" → Actions → argument
-   `fotosFids` → potlood naast Value → **Inline Function** → Expression
-   `<String>[]` → Check Errors → Confirm. *(Claude kon dit veld niet
-   zelf bereiken: het rechterpaneel scrollt niet en zelfs met alle 15
-   argumenten erboven ingeklapt blijft het waardeveld ~40px onder de
-   viewportrand. In Bob's eigen browser staat het gewoon in beeld.)*
-2. **`horecagelegenheidNid` invullen** met het nid van een
-   horecagelegenheid op Bob's eigen account (op te zoeken via
-   `mijn_horecagelegenheden` of in de app op Mijn profiel). Verplicht
-   argument, staat nu op Unset.
-3. **Verse export + `dart analyze`** ter controle (moet weer slagen).
-4. **Live testen:** app draaien op `emulator-5554`, eerst `adb logcat -c`,
-   dan de knop "Test evenement" indrukken en de `EVENEMENT CREATE`-blokken
-   (URL/BODY/STATUS/response) uit `logcat` lezen. Verwacht:
-   `{"status": "created", "nid": "..."}` en een **direct gepubliceerde**
-   node op productie — daarna die testnode weer opruimen in Drupal.
-5. **Testknop opruimen** zodra stap 2 groen is (de knop verwijderen,
-   `kanwegTestUpload` zelf blijft staan als herbruikbare testtool).
-
-**Daarna pas** aan de formulierpagina beginnen (punt 2 t/m 5 van "Wat
-nieuw gebouwd moet worden" hierboven).
+### STAND VAN ZAKEN bouwstap 5 (2026-09-02) — hier verder
+
+**Gedaan (Claude, 2026-09-02):** de pagina **`uitgaansevenementAanmaken`**
+bestaat, route `/uitgaansevenementAanmaken`. Gemaakt door
+`stadsactiviteitAanmaken` te dupliceren (rechtsklik → Duplicate Page →
+Rename Page) en daarna op te schonen:
+- **Verwijderd:** het complete blok "Waar" (Mijn-gemeenten-picker, de
+  provincie/gemeente/plaats-cascade, adres, postcode, plaats) én de
+  velden **Organisator** en **Contact**.
+- **Behouden:** Titel, Omschrijving, categorie-multiselect, beide
+  datumvelden mét hun picker-logica, Website-URL, entree-dropdown,
+  toelichting entree, entreeprijs, logo-upload, foto's-upload,
+  verzendknop. (Dat zijn precies de dure onderdelen — niet opnieuw
+  bouwen.)
+
+**⚠️ EERST DOEN — de export is hierdoor GEBLOKKEERD (raakt ook andere
+sessies).** `Duplicate Page` kopieert de Upload-Data-actienamen mee, en
+die moeten **projectbreed uniek** zijn. Het Issues-paneel meldt
+`Name for Upload Data action on ButtonFotos is not unique`.
+**Fix (10 seconden in Bob's browser):** pagina
+`uitgaansevenementAanmaken` → widget **`ButtonFotos`** → Actions-tab →
+"On Tap · 4 actions" → **Action 1 "Store media for upload"** → helemaal
+onderaan het rechterpaneel het veld **`Name`** → maak hem uniek, bv.
+`UploadDataFotosEvenement`.
+*(`ButtonLogo` is al gedaan: die staat nu op `UploadDataLogoEvenement`
+en zijn actieflow toont een groen vinkje.)*
+**Tip:** het `Name`-veld valt buiten beeld zolang de Action Flow Editor
+zijn linkerkolom toont — klik het **"|<"-icoontje linksboven** in die
+editor om die kolom in te klappen, dan staat het veld gewoon in beeld.
+*(Claude kreeg `ButtonFotos` na 4 pogingen niet geselecteerd — bekende
+widget-tree-klik-offset, zie `CLAUDE.md`. In Bob's eigen browser is dat
+één klik.)*
+Check daarna het Issues-paneel: er kunnen nog meer losse referenties
+staan van de verwijderde velden (Organisator/Contact) in de
+verzendactie.
+
+**Daarna nog te bouwen op deze pagina:**
+1. **Horecagelegenheid-dropdown** — Backend Query
+   `MijnHorecagelegenheden` (variabelen `session_name`/`sessid` → App
+   State `userSessionname`/`userSessionid`), optie-label `$.titel`,
+   waarde `$.nid`, auto-select bij precies 1 resultaat.
+2. **Tickets-URL-veld** — dupliceer `TextFieldWebsiteURL` (Ctrl+D) en
+   pas label/hint aan; scheelt alle styling.
+3. **Page State opschonen/aanvullen:** `createProvincieID`,
+   `createGemeenteID` en `createPlaatsID` kunnen weg; er moet een
+   `createHorecagelegenheidNid` (String) bij.
+4. **Verzendknop `ButtonIndienen`** omzetten van `stadsactiviteitCreate`
+   naar **`evenementCreate`** (16 argumenten, zie het API-contract
+   hierboven). Let op de les uit restpunt 7: geen non-null assertion op
+   een Page State-veld — schakel de knop uit zolang
+   horecagelegenheid/titel/datum leeg zijn.
+5. **Page parameter `horecagelegenheid_nid`** (optioneel) zodat
+   `mijnProfiel`'s "+ Voeg toe" 'm vooringevuld kan meegeven.
+6. Succesmelding moet **"geplaatst"** zeggen, niet "wordt beoordeeld" —
+   evenementen komen direct gepubliceerd binnen.
 
 **Nieuwe FlutterFlow-valkuil, gevonden tijdens deze stap (geldt straks
 óók voor de formulierpagina):** een **List-typed custom-action-argument