WoodyLab
WoodyLabBuild with UIMS

Documentazione · src/engine/mapper · src/engine/utils

Mapper e slot

Sette file che fanno una cosa sola: portare dei dati dentro le aperture di una forma, e trasformarli in nodi React senza che il resolver debba sapere come.

Che cos’è uno slot

Uno slot è un’apertura nominata dentro un viewMode: `header`, `content`, `footer`, e qualunque altro nome il viewMode decida di dichiarare. Un figlio dice in quale apertura vuole andare con il proprio campo `slot`; il mapper li raggruppa per nome e il componente li riceve già divisi.

Sbagliare il nome di uno slot non dà nessun errore: dà un elemento che non appare. È il tipo di guasto peggiore, perché non lascia traccia — e la ragione per cui esiste `dal/slotsByViewMode.ts`, che calcola i nomi veri per proporli in interfaccia invece di lasciarli scrivere a mano.

  • engine/utils/slot.tsx — raggruppa i figli per apertura e produce la mappa degli slot
  • engine/utils/projectSlotToReact.tsx — trasforma il contenuto di uno slot in nodi React pronti
  • engine/utils/extractUIProps.ts — separa le props strutturali dal resto

Mappare i figli

Il caso normale: un blocco ha dei figli, ognuno dichiara il proprio slot, e vanno risolti a loro volta prima di poter essere proiettati. È ricorsivo, e ogni figlio passa dal contesto come il genitore — un figlio può essere una sezione, un riferimento, una vista.

  • mapper/mapChildrenToSlots.ts — risolve i figli e li distribuisce nelle aperture

Mappare i record

Il caso delle viste: non ci sono figli, ci sono N record, e per ciascuno la mappatura dice quale campo va in quale apertura. Il risultato non è N descrittori indipendenti ma un guscio solo con dentro le righe, perché la forma della griglia appartiene al guscio e non alla riga.

`getValueByPath` è quello che rende scrivibile la mappatura: il campo si indica con un percorso (`autore.nome`, `meta.image.url`) e non serve una funzione per ogni caso.

  • mapper/mapRecordsToSlots.ts — la mappatura condivisa da `viewResolver` e `mappedReferenceResolver`
  • mapper/mapViewDataToSlots.ts — il caso completo di una vista: campi, percorsi, righe
  • mapper/getValueByPath.ts — legge un valore annidato da un percorso in stringa
Login