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 slotengine/utils/projectSlotToReact.tsx— trasforma il contenuto di uno slot in nodi React prontiengine/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, righemapper/getValueByPath.ts— legge un valore annidato da un percorso in stringa