Riferimento Componenti Frontend
Ultimo aggiornamento: 2026-04-27
Scopo
Riferimento sintetico dei componenti JS usati nel runtime Logeon.
Questa guida sostituisce la vecchia documentazione frammentata in molti file.
Dove si trovano
- Componenti shared:
assets/js/components/* - Utility pure:
assets/js/components/utils/*
Componenti UI principali
Modal.js: wrapper lifecycle modale (show/hide, beforeShow, afterHide, form reset, spinner).Dialog.js: conferme/alert standard.Toast.js: notifiche toast.Tooltip.js: tooltip runtime-safe.DataGrid.js: tabelle con sorting/filter/paginazione.Paginator.js: paginazione dataset.Search.js: ricerca locale su liste/griglie.Uploader.js: upload file con progress.TipTapEditor.js: editor rich-text (sostituisce Summernote).
TipTapEditor — note operative
Auto-init: al DOMContentLoaded su tutti gli elementi .summernote, .richtext-editor; nelle modali Bootstrap al show.bs.modal.
API globale (window.TipTapEditor):
// Inizializza editor sullo scope indicato (o sull'intero document)
TipTapEditor.init(root, options);
// Recupera istanza esistente (null se non inizializzata)
const instance = TipTapEditor.getInstance(textarea);
// Inizializza se non esiste, restituisce l'istanza
const instance = TipTapEditor.ensureInstance(textarea, { height: 300 });
// Distrugge l'istanza e ripristina il textarea originale
TipTapEditor.destroy(textarea);
Opzioni (tutte opzionali):
TipTapEditor.init(document, {
height: 250, // altezza area editor in px (default 250)
imageUploadTarget: 'richtext_image', // target Uploader per le immagini
callbacks: {
onInit: function () { /* chiamato quando l'editor è pronto */ }
}
});
Bridge jQuery (retrocompatibilita callsite Summernote preesistenti):
$('.summernote').summernote(); // init
$('.summernote').summernote('code'); // get HTML
$('.summernote').summernote('code', '<p>...</p>'); // set HTML
$('.summernote').summernote('pasteHTML', html); // inserisce HTML alla posizione cursore
$('.summernote').summernote('reset'); // svuota
$('.summernote').summernote('focus');
$('.summernote').summernote('disable');
$('.summernote').summernote('enable');
$('.summernote').summernote('destroy');
DataGrid — uso corretto con filtri
// Caricamento con filtri liberi (pagine con form filtro)
grid.loadData(payload, limit, page, orderBy);
// Pagine log: usa setFilters(), NON chiamare load() dopo
grid.setFilters({ user_id: 5, from: '2026-01-01' });
// setFilters chiama load() internamente — una doppia chiamata manda una seconda
// request con filtri vuoti che sovrascrive il risultato filtrato.
Modal — uso tipico
const modal = Modal('myModalId', {
beforeShow: function (data) {
// popola i campi prima dell'apertura
this.form.find('[name=name]').val(data.name);
},
afterHide: function () {
this.form[0].reset();
}
});
modal.init();
modal.show({ name: 'Mario' });
modal.hide();
Componenti di selezione input
SelectionGroup.js: base comune.RadioGroup.js: selezione singola.CheckGroup.js: selezione multipla.SwitchGroup.js: toggle guidato (on/off, si/no).
Componenti runtime e supporto
Navbar.js: comportamento navbar/offcanvas.Dashboard.js: helper pagine dashboard/admin.PollManager.js: polling periodico.EventBus.js: evento pub/sub leggero.PermissionGate.js: gating UI da permessi.ConfigStore.js: accesso config frontend.Calendar.js: utility calendario.DocsRender.js: rendering contenuti docs.SlideShow.js: slideshow immagini.DiceEngine.jseDices.js: motore dadi.CommandParser.js: parser comandi chat.
Runtime area admin
- Le pagine admin non usano componenti
Admin*.jscome sorgente primaria. - La logica pagina vive in
assets/js/app/features/admin/*. - L'orchestrazione pagina/modulo passa da:
assets/js/app/core/admin.registry.jsassets/js/app/core/admin.runtime.js
- I componenti shared restano in
assets/js/components/*(DataGrid, SwitchGroup, Dialog, Modal, ecc.).
Utility pure (assets/js/components/utils)
Utils.js: helper base generici.Dates.js: formattazione date/ora.Form.js: serializzazione e helper form.Cookie.js: helper cookie.
Regole d'uso rapide
- Riusa un componente shared prima di crearne uno nuovo.
- Evita logica di dominio dentro i componenti UI.
- Permessi UI sempre come supporto UX, mai come sicurezza.
- Se aggiungi un componente shared, documenta almeno: scopo, API minima, esempio uso.