Overview
Kanban
Archetype business per gestione attività a colonne (board) con drag&drop metadata-driven.
Screenshot reference (manuale utente)
manual__kanban__01.png: board kanban con colonne status, card e drag&drop.
Use cases
- Task board operative (To Do, In Progress, Review, Done).
- Gestione ticket/stati processo.
- Smistamento rapido record in base a stato.
md_props_bag: archetypes.kanban
{
"archetypes": {
"kanban": {
"advancedFilter": false,
"statusField": "StatusId",
"colorField": "ColorHex",
"wipLimitField": "WipLimit",advancedFilter: quandotruemostra lawuic-filter-barper l'archetypekanban(a livello data-repeater).statusField: campo metadata che identifica lo stato della card/record (obbligatorio per board funzionante).colorField: nome campo sulla route lookup dellostatusFieldda usare come colore colonna/tile; se assente/vuoto usa il fallback statico.wipLimitField: nome campo sulla route lookup dellostatusFieldusato per valorizzare dinamicamente il limite WIP per ogni tile (quandostatusColumnsnon è definito).wipLimitHardField: nome campo booleano (bit) sulla route lookup che decide se il
limite WIP della tile è hard (true, drop bloccante) o soft (false, solo warning).
Esempio nel sample dataset: la route lookup wuic_kanban_status espone le colonne
WipLimit (int) e WipLimitHard (bit); la riga Review ha WipLimitHard=1,
quindi raggiunto WipLimit=3 ulteriori drop sulla colonna Review vengono bloccati.
assignedUserIdField: campo metadata lookup che contiene l'ID utente assegnatario task; sulla card viene renderizzato il valore descrittivo lookup (non l'ID raw).statusColumns[]: definizione colonne board (ordine, label, colore, opzionalewipLimit= Work In Progress Limit ewipLimitHard).titleField: campo testo usato come titolo card.descriptionField: campo descrizione card.cardSubtitleField: campo sottotitolo card.clickAction(enum):none,detail,edit.persistMode(enum):immediate: ogni drop persiste subito lato server.batch: accumula modifiche locali e salva/annulla in blocco.
Note operative
- Se
statusFieldmanca, la board mostra warning configurazione e non crasha. - Se una card ha stato vuoto/null finisce nella colonna "Da assegnare".
- Se
statusColumnsnon è definito (o è vuoto), le colonne vengono generate automaticamente dalla route lookup collegata astatusField:
- value: preso da mc_ui_lookup_dataValueField
- label: preso da mc_ui_lookup_dataTextField
- order: ordine naturale restituito dalla route lookup (getFlatData senza sort aggiuntivo)
- color: preso da colorField se configurato; in fallback usa la palette statica runtime (defaultStatusColors[]).
- wipLimit: preso da wipLimitField se configurato.
- wipLimitHard: preso da wipLimitHardField (booleano).
- In caso di superamento
wipLimit:
- hard (wipLimitHard=true): drop bloccato.
- soft (wipLimitHard=false): drop consentito con warning.
Eventi e subscriptions (host)
Eventi disponibili su wuic-kanban-list:
onKanbanDataBound: emesso quando il board viene ricostruito dal datasource.onKanbanCardDrop: emesso su drop card confromStatus/toStatus.onKanbanCardClick: emesso su click card.onKanbanBatchSave: emesso dopo salvataggio batch.onKanbanBatchCancel: emesso dopo annullamento batch.onKanbanConfigApplied: emesso dopo apply configurazione archetype.
Esempio subscribe:
@ViewChild(KanbanListComponent) kanban?: KanbanListComponent;
private readonly subs = new Subscription();
ngAfterViewInit(): void {
if (!this.kanban) return;
this.subs.add(this.kanban.onKanbanDataBound.subscribe((e) => console.log(e)));
this.subs.add(this.kanban.onKanbanCardDrop.subscribe((e) => console.log(e)));<!-- import-and-mount -->
Import e mount (componente Angular)
Importa LazyKanbanListComponent da 'wuic-framework-lib' e montalo col DataSource del framework:
import { DataSourceComponent, LazyKanbanListComponent } from 'wuic-framework-lib';
@Component({
selector: 'app-esempio',
imports: [DataSourceComponent, LazyKanbanListComponent],
template: `
<wuic-data-source #ds [hardcodedRoute]="'<route>'" [autoload]="true"></wuic-data-source>Nomi ESATTI (barrel wuic-framework-lib): classe LazyKanbanListComponent, selector <wuic-kanban-list-lazy>. Importa quella classe, non altri nomi inventati (es. un prefisso Lazy dove non c'è, o viceversa) → altrimenti il build dà has no exported member.
Config metadata-driven: il tag accetta SOLO gli input standard [hardcodedRoute], [hardcodedDatasource], [autoload], [hideToolbar]. La configurazione specifica (qui: le colonne/lo stato di raggruppamento (KanbanOptions)) NON è un input HTML ([groupField], [type], ecc. danno NG8002 not a known property) → va nei metadata (md_props_bag/archetipo) o in-code via metaInfo.
Screenshot

