Inizia gratis

Documentazione · ShadowUI

La HeaderBar e il Breadcrumb

Documentazione storica, non aggiornata.

L’header bar è il componente fisso in alto che contiene la navigazione e i controlli principali dell’applicazione.

ShaHeaderBar

La ShaHeaderBar è il contenitore dell’intestazione dell’applicazione. In ShaMainViewSticky, questo elemento rimane fisso in alto durante lo scroll della pagina.
Proprietà principali:

ProprietàTipoDescrizione
sidebarButtonbooleanMostra il pulsante per aprire la sidebar (default: true)
classNamestringClassi CSS personalizzate
styleobjectStili inline personalizzati

Contenuto standard: 

  • Pulsante menu sidebar (su mobile)
  • ShaBreadcrumb: Navigazione breadcrumb
  • ShaDropdownMenu: Menu utente

ShaBreadcrumb

Il breadcrumb mostra il percorso di navigazione corrente e permette di tornare alle pagine precedenti.
Proprietà principali:

ProprietàTipoDescrizione
itemsarrayArray di oggetti { id, title } da visualizzare
maxNamesnumberNumero massimo di elementi da mostrare (default: 4)
disabledbooleanDisabilita l’interazione
visiblebooleanMostra/nascondi il breadcrumb

Struttura items:

[
  { id: 0, title: "Dashboard" },
  { id: 1, title: "Progetti" },
  { id: 2, title: "Progetto Alpha" }
]

Eventi:

onSelect(event):

  •  Scatenato quando si clicca su un elemento del breadcrumb
  • event.id: id dell’elemento cliccato

Aggiornamento automatico:
Il breadcrumb viene aggiornato automaticamente quando si usano i metodi di navigazione (push, pop, setTitle). Non è necessario gestirlo manualmente.

Comportamento al click:
Quando l’utente clicca su un elemento del breadcrumb, il page controller chiama automaticamente pop() per tornare a quella pagina:

// Gestito automaticamente dal framework
shadcnBreadcrumb.onSelect = function(event) {
  let id = event.id;

  if (id >= (view.navStack.length - 1)) return;

  let nrPageToRemove = view.navStack.length - id - 1;
  view.pop(nrPageToRemove);
};

Esempio personalizzazione:

// Imposta breadcrumb manualmente (raramente necessario)
function* updateBreadcrumb() {
  this.view.shadcnBreadcrumb.items = [
    { id: 0, title: "Home" },
    { id: 1, title: "Progetti" },
    { id: 2, title: this.currentProject.name }
  ];
}

ShaDropdownMenu

Il dropdown menu nell’header contiene tipicamente le azioni utente: profilo, impostazioni, logout.
Struttura:

ShaDropdownMenu
├── ShaDropdownMenuItem (Profilo)
├── ShaDropdownMenuItem (Impostazioni)
├── ShaDropdownMenuSeparator
└── ShaDropdownMenuItem (Logout)

Di seguito analizziamo i componenti del dropdown.

ShaDropdownMenu

Contenitore principale del menu a tendina.
Proprietà:

  • label: Testo del trigger button
  • icon: Icona del trigger
  • align: Allineamento menu (start, center, end)

ShaDropdownMenuItem

Voce di menu cliccabile.
Proprietà:

  • label: Testo della voce
  • icon: Icona (opzionale)
  • disabled: Disabilita la voce

Eventi: – onSelect(event): Scatenato al click.
Esempio:

// Dropdown menu utente
function* profileMenuItem_onSelect() {
  yield view.push(App.ProfileView, {
    title: "Profilo Utente"
  });
}

function* logoutMenuItem_onSelect() {
  let confirm = yield app.popup(
    "Conferma Logout",
    "Sei sicuro di voler uscire?",
    ["Annulla", "Esci"]
  );

  if (confirm === 1) {
    yield app.logout();
    yield view.push(App.LoginView, {
      root: true,
      remove: true
    });
  }
}

ShaDropdownMenuCheckboxItem

Voce con checkbox per opzioni on/off.

Proprietà:

  • label: Testo
  • checked: Stato checkbox (boolean)

Eventi:

  • onCheckedChange(event): Scatenato al cambio stato

Esempio:

// Toggle notifiche
function* notificationsCheckbox_onCheckedChange() {
  let enabled = this.sender.checked;

  yield app.settings.setNotifications(enabled);

  yield app.toast(
    enabled ? "Notifiche attivate" : "Notifiche disattivate",
    { variant: "success" }
  );
}

ShaDropdownMenuRadioGroup e RadioItem

Per selezione esclusiva tra opzioni.

Esempio selezione tema:

ShaDropdownMenuRadioGroup
├── ShaDropdownMenuRadioItem (Light)
├── ShaDropdownMenuRadioItem (Dark)
└── ShaDropdownMenuRadioItem (Auto)
function* themeRadioItem_onSelect() {
  let theme = this.sender.value; // "light", "dark", "auto"

  yield app.theme.set(theme);

  // Notifica tutte le view aperte
  yield view.postMessage({
    bc: true,
    type: "theme-changed",
    theme: theme
  });
}

ShaDropdownMenuSeparator

Linea separatrice tra gruppi di voci.

ShaDropdownMenuLabel

Etichetta non cliccabile per raggruppare voci.
Esempio struttura completa:

ShaDropdownMenu
├── ShaDropdownMenuLabel ("Account")
├── ShaDropdownMenuItem ("Profilo")
├── ShaDropdownMenuItem ("Impostazioni")
├── ShaDropdownMenuSeparator
├── ShaDropdownMenuLabel ("Preferenze")
├── ShaDropdownMenuCheckboxItem ("Notifiche")
├── ShaDropdownMenuSeparator
└── ShaDropdownMenuItem ("Logout")

Pattern comuni HeaderBar

ShaDropdownMenu
  label: app.user.name
  icon: app.user.avatar
  ├── MenuItem (Profilo)
  ├── MenuItem (Impostazioni)
  ├── Separator
  └── MenuItem (Logout)
ShaBreadcrumb
  maxNames: 3  // Mostra max 3 elementi

// Se ci sono più elementi: "Home > ... > Dettaglio"

Aggiornamento dinamico breadcrumb

// Nel metodo onLoad della view
function* onLoad() {
  yield this.view.dataDM.load();

  let data = this.view.dataDM.getData();

  // Aggiorna titolo breadcrumb
  view.setTitle(`${data.type}: ${data.name}`);
}

Header con azioni contestuali

// Aggiungi pulsanti nell'header per azioni della pagina corrente
ShaHeaderBar
  └── actionsContainer
        ├── ShaButton (Salva)
        ├── ShaButton (Annulla)
        └── ShaButton (Elimina)