|
@@ -1985,10 +1985,13 @@ in Drupal, geen uitputtende audit.
|
|
|
**P2-1 · Eigenaar: Bob — testen in de API, komt terug.** Datum-filter:
|
|
**P2-1 · Eigenaar: Bob — testen in de API, komt terug.** Datum-filter:
|
|
|
Vandaag / Dit weekend / Deze week.
|
|
Vandaag / Dit weekend / Deze week.
|
|
|
|
|
|
|
|
-**P2-2 · Eigenaar: Onbepaald.** Google Maps-weergave van
|
|
|
|
|
-horecagelegenheden — bewust niet vóór livegang (Maps API-key +
|
|
|
|
|
-billing, onduidelijk of elke locatie al lat/long heeft, marker-UI —
|
|
|
|
|
-geen quick win).
|
|
|
|
|
|
|
+**P2-2 · Eigenaar: Onbepaald, bewust v2 (herbevestigd 2026-08-25 door
|
|
|
|
|
+Bob).** Google Maps-**overzichtsweergave** (kaart met meerdere markers)
|
|
|
|
|
+van horecagelegenheden op de overzichtspagina — bewust niet vóór
|
|
|
|
|
+livegang (Maps API-key + billing, onduidelijk of elke locatie al
|
|
|
|
|
+lat/long heeft, marker-UI — geen quick win). **Niet te verwarren met
|
|
|
|
|
+P2-14** (los Google Maps-deep-link-icoontje per adres, geen kaart/API-
|
|
|
|
|
+key nodig — dat pakken we wél nu op).
|
|
|
|
|
|
|
|
**P2-3 · Eigenaar: Onbepaald.** "In de buurt"/geolocatie-browsen —
|
|
**P2-3 · Eigenaar: Onbepaald.** "In de buurt"/geolocatie-browsen —
|
|
|
aanvulling op het provincie/gemeente-model, geen vervanging.
|
|
aanvulling op het provincie/gemeente-model, geen vervanging.
|
|
@@ -2078,10 +2081,76 @@ overgeslagen, Bob's eigen Sort/Datatype-experiment op die pagina loopt
|
|
|
nog (zie P2-6); oppakken zodra dat is afgerond, zelfde recept
|
|
nog (zie P2-6); oppakken zodra dat is afgerond, zelfde recept
|
|
|
(kopieer de AdBanner-node vanaf een van de 3 al werkende pagina's).
|
|
(kopieer de AdBanner-node vanaf een van de 3 al werkende pagina's).
|
|
|
|
|
|
|
|
-**P2-6 · Eigenaar: Onbepaald.** Tekstzoeken op titel op de
|
|
|
|
|
-horeca-overzichtspagina (los van de Datatype/Sort-experimenten die Bob
|
|
|
|
|
-daar zelf op test — die zijn actief werk-in-uitvoering, geen dode
|
|
|
|
|
-code).
|
|
|
|
|
|
|
+**P2-6 · Eigenaar: Claude, wacht op groen licht van Bob (actief bezig
|
|
|
|
|
+op dezelfde pagina).** Tekstzoeken op naam, per tab van
|
|
|
|
|
+`horecagelegenheden_overzicht_widget.dart`/`..._provincie_page_widget.dart`
|
|
|
|
|
+(Bob's besluit 2026-08-25: "op naam kunnen selecteren, tekstveld voor
|
|
|
|
|
+overeenkomstige namen", nodig op elke tab). **Bouwplan (client-side
|
|
|
|
|
+filter, geen nieuwe Drupal-parameter nodig — de volledige lijst is al
|
|
|
|
|
+lokaal na de bestaande API-call):**
|
|
|
|
|
+1. Eén `TextField` boven de `TabBar` (filtert altijd de op dat moment
|
|
|
|
|
+ actieve tab, geen los veld per tab nodig — simpeler, en de
|
|
|
|
|
+ tabs delen toch hetzelfde zoekpatroon). Component/Page State
|
|
|
|
|
+ `zoekterm` (String), gebonden via `onChanged`.
|
|
|
|
|
+2. Nieuwe **Custom Function** `filterOpNaam(List<dynamic> items, String
|
|
|
|
|
+ query, String titelPad) -> List<dynamic>`: itereert `items`, haalt
|
|
|
|
|
+ per item `getJsonField(item, titelPad)` op, vergelijkt
|
|
|
|
|
+ case-insensitive én **diacritics-genormaliseerd** (bv. "café" moet
|
|
|
|
|
+ ook matchen op "cafe" — anders mist een zoekopdracht zonder accent
|
|
|
|
|
+ alsnog het juiste resultaat, veelvoorkomend bij horeca-namen).
|
|
|
|
|
+ Lege `query` → hele lijst ongewijzigd terug (geen filter-overhead
|
|
|
|
|
+ bij het openen van een tab).
|
|
|
|
|
+3. Elke tab's `Generate Dynamic Children`-"Value"-binding (nu
|
|
|
|
|
+ waarschijnlijk direct de rauwe API-response) wijzigen naar
|
|
|
|
|
+ `filterOpNaam(<rauwe lijst>, zoekterm, '$.titel')` (titel-JSON-path
|
|
|
|
|
+ per tab kan verschillen, per tab losstaand controleren).
|
|
|
|
|
+**Advies/aandachtspunten:**
|
|
|
|
|
+- Client-side filteren i.p.v. een nieuwe Drupal-endpoint-parameter: de
|
|
|
|
|
+ lijsten per tab zijn klein genoeg (geen paginering gezien in de
|
|
|
|
|
+ bestaande calls) — dus geen performance-reden om dit server-side te
|
|
|
|
|
+ doen, en dit blijft zo werkend ongeacht wat Bob's Sort/Datatype-
|
|
|
|
|
+ experiment uiteindelijk oplevert (orthogonale features, wel dezelfde
|
|
|
|
|
+ pagina — vandaar "wacht op groen licht" i.p.v. blind starten terwijl
|
|
|
|
|
+ Bob er middenin zit).
|
|
|
|
|
+- Debounce is hier niet nodig (puur client-side lijst-filter op een al
|
|
|
|
|
+ geladen array, geen API-call per toetsaanslag) — direct live filteren
|
|
|
|
|
+ op elke `onChanged` kan gewoon.
|
|
|
|
|
+- Style-tip: een "wis"-kruisje (`suffixIcon`) in het zoekveld is fijn
|
|
|
|
|
+ UX, maar val niet in de bekende `TextFormField`-`suffixIcon`-
|
|
|
|
|
+ Tooltip-beperking uit `CLAUDE.md` (geen Tooltip nodig op zo'n icoon,
|
|
|
|
|
+ gewoon een losse `onTap` die `zoekterm` leegt).
|
|
|
|
|
+
|
|
|
|
|
+**P2-14 · Eigenaar: Claude (nieuw, 2026-08-25, Bob's idee).**
|
|
|
|
|
+Google Maps-icoon achter elk adres — bij horecagelegenheid-,
|
|
|
|
|
+stadsactiviteit- en uitgaansevenement-detailpagina's, tikken opent
|
|
|
|
|
+Google Maps (native app indien geïnstalleerd, anders browser) met
|
|
|
|
|
+het adres + plaats voorgevuld. Bob's eigen suggestie: als **losse
|
|
|
|
|
+herbruikbare Project Component** bouwen, niet per pagina dupliceren.
|
|
|
|
|
+**Bouwplan — geen Google Maps API-key/billing nodig** (dat is alleen
|
|
|
|
|
+voor een ingesloten kaart-weergave zoals P2-2, niet voor een simpele
|
|
|
|
|
+deep-link):
|
|
|
|
|
+1. Nieuwe **Custom Function** `googleMapsUrl(String adres, String
|
|
|
|
|
+ plaats) -> String`, bouwt
|
|
|
|
|
+ `https://www.google.com/maps/search/?api=1&query=' +
|
|
|
|
|
+ Uri.encodeComponent('$adres, $plaats')` — dit is Google's
|
|
|
|
|
+ "Universal URL"-formaat: opent de native app op iOS/Android als die
|
|
|
|
|
+ geïnstalleerd is, valt anders terug op de browser-versie, werkt
|
|
|
|
|
+ zonder eigen API-key.
|
|
|
|
|
+2. Nieuwe **Project Component** `GoogleMapsIconButton` met twee String-
|
|
|
|
|
+ parameters (`adres`, `plaats`): een `Icon` (bv.
|
|
|
|
|
+ `Icons.location_on_outlined` of `Icons.map_outlined`) → On Tap →
|
|
|
|
|
+ **Launch URL** (categorie "Share", zie `CLAUDE.md`) → Value via Set
|
|
|
|
|
+ from Variable → Custom Functions → `googleMapsUrl` met beide
|
|
|
|
|
+ parameters gebonden.
|
|
|
|
|
+3. Component invoegen naast/achter het bestaande adres-`Text`-widget
|
|
|
|
|
+ op `horecagelegenheid_current_widget.dart` en `event_current_widget.dart`
|
|
|
|
|
+ (dekt uitgaansevenement; bevestig tijdens de bouw of stadsactiviteit
|
|
|
|
|
+ dezelfde detailpagina deelt met event of een eigen widget heeft —
|
|
|
|
|
+ nog niet met zekerheid vastgesteld welke pagina "stadsactiviteit"
|
|
|
|
|
+ toont).
|
|
|
|
|
+Nog te doen vóór bouwen: Bob geeft akkoord om te starten (zie vraag in
|
|
|
|
|
+de chat) — dit is nieuw, nog niet eerder besproken/gepland werk, geen
|
|
|
|
|
+losstaande blocker verder.
|
|
|
|
|
|
|
|
**P2-7 · Eigenaar: Bob.** Opschonen:
|
|
**P2-7 · Eigenaar: Bob.** Opschonen:
|
|
|
- Merge `kaartTabelUitgaanComp` + `kaartTabelUitgaanSComp` — Bob doet
|
|
- Merge `kaartTabelUitgaanComp` + `kaartTabelUitgaanSComp` — Bob doet
|