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.
raggruppa i figli per apertura e produce la mappa degli slot
trasforma il contenuto di uno slot in nodi React pronti
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 a sua volta un contenitore, o un riferimento a un documento.
distribuisce i figli nelle aperture che il viewMode dichiara (la risoluzione avviene dopo, nella proiezione)
La firma
mapChildrenToSlots( slots: SlotDefinition[], children: ChildInstance[], context: UIMSContext, ): Promise<ResolvedSlots>
Cosa restituisce
{ header: { nodes: [...], className: 'border-b pb-2', tag: 'div' },
content: { nodes: [...], className: 'flex flex-col gap-2', tag: 'div' } }Mappare i record
Il caso delle viste: i figli ci sono, ma sono un modello. Prima della risoluzione il passo di binding fa N copie del figlio che dichiara repeatFor, una per elemento della riga, e ogni copia legge i suoi valori con dataPathValue; poi le copie passano dal mapping dei figli come tutto il resto. Il guscio resta uno: la forma della griglia appartiene al container, 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.
il passo di binding condiviso da ogni blocco: copie, percorsi, prop puntate
legge un valore annidato da un percorso in stringa
Continua
Altro in «Il motore · src/engine»
Il motoreStili e classiTutte le diciassette pagineindice