Demo-integratie (postMessage API)

Deze pagina beschrijft hoe de demo-pagina met de GPS‑editor praat via window.postMessage. De editor draait in een <iframe>; de ouderpagina stuurt een configuratie en ontvangt events. Controleer altijd de origin en het type van elk bericht.

Basisprincipe

De editor meldt zich met gps-ready. Daarna stuur je een gps-config terug met je instellingen. Verder komen er events binnen over (way)points en route‑wijzigingen.

Voorbeeld: luisteren & reageren

// Luisteren naar berichten uit het iFrame
window.addEventListener('message', (ev) => {
  if (!ev.data || typeof ev.data !== 'object') return;
  // Optioneel: check ev.origin === IFRAME_ORIGIN
  switch (ev.data.type) {
    case 'gps-ready':
      // iFrame is ready: stuur config vanuit de UI
      sendConfig(ev.source, ev.origin || IFRAME_ORIGIN);
      break;

    case 'gps-wpt-create': {
      // [ tmpId, lat, lng, name, desc, img, order ]
      const newId = 12345; // TODO: sla op en geef echte ID terug
      ev.source?.postMessage({
        type: 'gps-wpt-create-ack',
        tempId: ev.data.tempId,
        id: newId
      }, ev.origin || IFRAME_ORIGIN);
      break;
    }

    // Andere events: zie "Berichttypen" hieronder
  }
});

Configuratiebericht: gps-config

Wordt door de ouderpagina naar het iFrame gestuurd na gps-ready of wanneer de gebruiker instellingen wijzigt.

{
  type: 'gps-config',
  apiKey: '...YOUR_KEY...',
  hide_ids: ["addPointModeBtn", "modeToggle", "bulkWrap"],
  waypoints: [ {id:1, lat: 52.378232504381934, lng: 4.877359614007748, name: "test", desc: "test", img: "" }],
  route: { segments: [ { mode: "auto", points: [[ 52.704800000000006, 5.297700000000001 ],[ 52.713550000000005, 5.28809 ]] }] }
}

Berichttypen (events)

gps-ready — iFrame is klaar om config te ontvangen.
Actie: stuur gps-config terug.

gps-wpt-selected — gebruiker selecteert een waypoint.
Payload: { id, lat, lng, order }

gps-wpt-create — verzoek om een nieuw waypoint op te slaan.
Payload: { tempId, lat, lng, name, desc, img, order }
Antwoord: stuur gps-wpt-create-ack met { tempId, id }.

gps-wpt-edit — waypoint is bewerkt.
Payload: { id, lat, lng, name, desc, img, order }

gps-wpt-delete — waypoint is verwijderd.
Payload: { id, lat, lng, order }

gps-wpt-move — waypoint is verplaatst.
Payload: { id, lat, lng }

gps-wpt-reorder-bulk — meerdere volgordes gewijzigd.
Payload: [ { id, order }, ... ]

gps-route-changed — route is aangepast.
Payload: { lengthMeters, segments: [{ mode: 'auto'|'straight', points: [[lat,lng], ...] }, ...] }