Overview
Pattern: Framework component + Framework data (manual mount)
Usi i widget del framework (<wuic-list-grid>, <wuic-chart-list>, <wuic-map-list>, <wuic-spreadsheet-list>, <wuic-kanban-list>, <wuic-tree-list>, <wuic-scheduler-list>, <wuic-carousel-list>, <wuic-data-repeater>, <wuic-parametric-dialog>, ...) montati a mano su un <wuic-data-source> metadata-driven con hardcodedRoute="...". Rispetto al Pattern 1 "Full autogeneration" — che scaffoldizza l'intera pagina da metadata — qui sei tu a comporre il template Angular, scegliendo quali widget usare, come disporli e a quali eventi reagire, pur continuando ad attingere dati e configurazione colonne dal metadata WUIC.
Quando usarlo
- Serve una sola vista specifica su un'entity esistente (solo grid, solo chart, solo map, ecc.) senza montare l'intera pagina autogen.
- Serve layout misto con piu' widget WUIC nella stessa pagina (es. grid + chart sincronizzati sullo stesso datasource).
- Si vuole intercettare eventi UI della list-grid (onPaging, onSorting, onBeforeRowRender, onPTableRowExpand, ...) o del datasource (datasourceReady$, fetchInfo$, afterFirstLoad$, beforeSync$, afterSync$) per logica host-side personalizzata.
- Si vuole sperimentare un archetype alternativo senza modificare la metadata della route (es. mostrare
citiescome carousel in una pagina promo, mantenendo la list-grid standard nel menu principale).
Architettura
Tre attori, la compozione e' tua:
- Framework: espone i widget Angular (
wuic-framework-lib) + ilDataSourceComponentche risolve schema e dati da_metadati__tabelle/_metadati__colonne. - Sviluppatore: scrive un componente Angular che istanzia il datasource con
hardcodedRoutee monta i widget WUIC nel suo template. - Utente finale: naviga la pagina custom ma vede widget ed interazioni standard del framework (paging, filter-bar, export, gestione stato, ecc.).
<wuic-data-source #ds [hardcodedRoute]="'cities'"></wuic-data-source>
<wuic-list-grid [datasource]="ds.fetchInfo$" (onPaging)="log($event)"></wuic-list-grid>Cosa fai tu
1. Crei un Angular component standalone (@Component({ standalone: true, imports: [DataSourceComponent, ListGridComponent, ...] })).
2. Imposti nel template <wuic-data-source #ds [hardcodedRoute]="..."> col nome route metadata.
3. Monti uno o piu' widget WUIC bindati al datasource ([datasource]="ds.fetchInfo$" o [hardcodedDatasource]="ds" a seconda del widget).
4. Opzionalmente ti iscrivi agli @Output dei widget / ai Subject del datasource per la tua logica custom.
5. Aggiungi la route al app.routes.ts (loadComponent) e il componente e' subito funzionante.
Il metadata della route (md_props_bag.archetypes.*) continua a pilotare la maggior parte del comportamento dei widget (status-columns per kanban, fromField/toField per scheduler, ecc.) — tu aggiungi solo la compozione Angular e l'handling eventi.
Trade-off
| Pro | Contro |
|---|---|
| Controllo completo sul layout della pagina (puoi affiancare piu' widget, usare Material/PrimeNG accanto, ecc.) | Devi scrivere tu il componente (non e' autogen) |
| Accesso esplicito a tutti gli @Output dei widget e ai Subject del datasource | Se il metadata route cambia shape (colonne, FK, ecc.) devi verificare che il tuo layout regga |
| Riusi al 100% data layer + permessi + filtri + i18n del framework | Duplichi codice boilerplate di montaggio widget (mitigabile con component-loader / data-repeater) |
| Puoi usare archetype diversi dallo standard della route senza toccare la metadata | URL custom (deve essere aggiunta al routing / menu manualmente) |
Differenza rispetto agli altri pattern
- [Pattern 1 — Full autogeneration](./pattern-full-autogeneration.md): stessa data source e stessi widget, ma la pagina e' generata dal framework (
<wuic-crafter-route>). Zero codice. Qui scrivi TU il componente Angular. - [Pattern 2 — Framework data + Custom component](./pattern-framework-data-custom-comp.md): data source del framework ma UI 100% custom (niente widget WUIC, solo Angular/PrimeNG). Qui invece USI i widget WUIC.
- [Pattern 3 — Framework component + Custom data](./pattern-framework-comp-custom-data.md): stessa composizione di widget manuale, ma il data source NON parte da metadata WUIC — usa un endpoint REST/OData custom. Qui invece la route e' registrata come metadata.
- [Pattern 4 — Full custom](./pattern-full-custom.md): pure Angular senza widget ne' data source WUIC. Qui usi entrambi.
Esempi vivi nel WuicTest
Gli 11 esempi sotto esplorano singolarmente ogni widget WUIC con hardcodedRoute="cities" (e varianti come schedules, kanban-task, uploadsample). Cartella sorgente: wwwroot/src/app/component/examples/pattern-5/.
- Cities list-grid → monta
<wuic-list-grid>e sottoscrive tutti gli eventi UI (paging, sorting, filtering, row-expand, column-resize). Apri demo. - Cities chart → monta
<wuic-chart-list>con datasource subject-driven e i Subject afterSync/beforeSync. Apri demo. - Cities map → monta
<wuic-map-list>(archetype map) con lat/long delle citta'. Apri demo. - Cities spreadsheet → monta
<wuic-spreadsheet-list>per bulk-edit tipo Excel. Apri demo. - Cities edit → monta
<wuic-parametric-dialog>+<wuic-pager>per la sola vista dettaglio record. Apri demo. - Cities wizard → monta
<wuic-parametric-dialog [isWizard]=true>per wizard multi-step condataTabs. Apri demo. - Cities data-repeater events → monta
<wuic-data-repeater>con switcher di archetype runtime (list/chart/spreadsheet/map). Apri demo. - Kanban task → monta
<wuic-kanban-list>su routekanban-taskcon colonne di status + drag&drop card. Apri demo. - Tree sample → monta
<wuic-tree-list>su route gerarchica (parentField). Apri demo. - Schedules scheduler → monta
<wuic-scheduler-list>(calendar view from/to). Apri demo. - Uploadsample carousel → monta
<wuic-carousel-list>con image field binding. Apri demo.
Vedi anche
- Pattern 1 — Full autogeneration: se non ti serve layout custom, la pagina autogen copre gia' tutto.
- Pattern 2 — Framework data + Custom component: quando ti bastano i dati WUIC ma il rendering lo vuoi pure Angular.
- Pattern 3 — Framework component + Custom data: quando i widget WUIC sono quelli giusti ma il backend dati e' custom (REST/OData).
- Pattern 4 — Full custom: quando vuoi uscire completamente dal framework.