π Documentazione del Progetto β
Questa cartella contiene la documentazione completa del sistema di autenticazione e delle best practices per lo sviluppo.
π― BEST PRACTICES β β
Guida completa alle best practices del progetto (aggiornata con TanStack Query):
- β Data Fetching con TanStack Query (raccomandato)
- β NO useRef per fetch in StrictMode
- π¦ Import Policy (NO barrel files)
- π Route Protection patterns
- βοΈ React Compiler guidelines
- π§ͺ Testing patterns
- π Multi-tab synchronization
π Leggi sempre questo documento prima di iniziare una nuova feature!
π Contenuti β
Autenticazione β
Guida completa al sistema di autenticazione:
- Guida Rapida - Come proteggere le pagine
- Esempi - Implementazioni pratiche
- Flusso Login - Diagramma del flusso
- Architettura - Dettagli tecnici
- API Reference - Funzioni API disponibili
quick-start.md β
Guida rapida per iniziare:
- Come creare una pagina protetta
- Come creare una pagina pubblica
- Checklist complete
- Best practices per API calls con TanStack Query
- Note e convenzioni
π‘ TanStack Query (Data Fetching) β
tanstack-query-guide.md β
Guida completa e consolidata a TanStack Query v5:
- βοΈ Configurazione e setup
- π Quick start (Query e Mutation)
- π¦ Organizzazione file e hooks disponibili
- π¨ Pattern avanzati (conditional queries, filters, callbacks)
- π Query keys e invalidazioni
- π― Best practices (NO useRef per fetch, import diretti)
- π§ͺ Testing con QueryClientProvider
- π§ Creare nuovi moduli
- π Troubleshooting
zustand-auth.md β
Gestione dello stato con Zustand:
- PerchΓ© Zustand
- Struttura dello store
- Persist middleware
- Utilizzo nei componenti
- Cross-tab synchronization
user-settings.md β
Gestione delle impostazioni utente:
- Caricamento automatico dei settings
- Protezione route con requireSettings (verifica autenticazione + presenza settings)
- Type guards per validazione
- Accesso ai settings nei componenti
react-compiler-verification.md β
Guida alla verifica di React Compiler:
- Cosa ottimizza React Compiler
- Pagina di test interattiva (
/test-compiler) - Test con React DevTools Profiler
- Analisi del bundle compilato
- Metriche di successo e troubleshooting
- Best practices con React Compiler
modules.md β
Sistema di gestione moduli ERP:
- Sidebar con lista moduli
- Route dinamica per caricamento moduli
- Iframe integration
- Encoding/decoding dei path
- Apertura in nuova tab
useBroadcastChannel.md β
Documentazione dell'hook useBroadcastChannel:
- Come funziona BroadcastChannel API
- Esempi pratici di utilizzo
- Confronto con storage events
- Best practices
iframe-topbar-communication.md β
Comunicazione Iframe - Topbar Menu:
- Hook useTopbarMenu
- Chiamate da iframe a parent per aggiornare il menu
- Type declarations
- Test e best practices
iframe-messages-communication.md β
Comunicazione Iframe - Messages:
- Hook useTopbarMessages
- Store Zustand per persistenza stato
- Gestione contatore messaggi non letti
- Chiamate da iframe (readMessage, addMessage, setMessages)
- Comportamento del modal automatico
- Sincronizzazione cross-tab
- Migrazione dal legacy Messages.js
iframe-navigation.md β
Comunicazione Iframe - Navigation:
- Hook useIframeNavigation
- Navigazione dell'applicazione React dall'iframe
- Chiamate da iframe per navigare (navigateTo)
- Validazione e normalizzazione del path
- Esempi di utilizzo e casi d'uso
- Integrazione con React Router
iframe-toast-communication.md β
Comunicazione Iframe - Toast:
- Hook useToastBridge
- Mostrare notifiche toast dall'iframe
- Chiamate da iframe (show, success, info, warning, error, dismiss)
- Varianti stilistiche dei toast
- Esempi di utilizzo in PHP/JavaScript
error-boundary.md β
Documentazione degli Error Boundary:
- Come gestire gli errori a livello di route
- Componente RouteErrorBoundary riutilizzabile
- Errori HTTP (404, 401, 403, 500)
- Personalizzazione e best practices
testing.md β
Testing con Vitest:
- Configurazione Vitest e React Testing Library
- Test dei componenti
- Test delle API
- Coverage reports
zustand-migration.md (Archivio) β
Migrazione a Zustand (storico):
- Obiettivo della migrazione
- File creati e modificati
- Confronto prima/dopo
- Benefici ottenuti
π Inizio Rapido β
Creare una Pagina Protetta con Data Fetching β
Registra la route in
app/routes.ts:typescriptroute("dashboard", "routes/dashboard.tsx")Crea il file della route in
app/routes/dashboard.tsx:typescriptimport { AuthenticatedLayout } from "@/components/layout/authenticated-layout"; import { createProtectedLoader } from "@/lib/auth/loaders"; import { useCompaniesList } from "@/hooks/api/auth/useAuthApi"; // β Una riga per proteggere export const clientLoader = createProtectedLoader(); export default function Dashboard() { // β TanStack Query - nessun useEffect/useRef necessario! const { data, isLoading } = useCompaniesList(); return ( <AuthenticatedLayout> <div>Dashboard con dati</div> </AuthenticatedLayout> ); }
Una riga per proteggere, nessun flash di contenuto, zero boilerplate per fetch!
π― Concetti Chiave β
Autenticazione β
- Factory functions:
createProtectedLoader()ecreateGuestLoader() - Protezione pre-render:
clientLoaderblocca PRIMA del render - Zero flash: Nessun contenuto non autorizzato visibile
- Type-safe: TypeScript verifica tutto
- Multi-tab sync: Funziona automaticamente
Data Fetching (TanStack Query) β
- β USA TanStack Query per chiamate API (raccomandato)
- β NO useRef per fetch - TanStack Query de-duplica automaticamente
- Cache automatica: 5 minuti default, configurabile
- StrictMode safe: Gestione automatica doppi render in dev
- Import diretti: NO barrel files (
index.ts)
π Struttura del Progetto β
app/
βββ routes.ts # Configurazione route
βββ lib/
β βββ api.ts # Utility API (apiRequest, ApiError)
β βββ query-client.ts # QueryClient TanStack Query
β βββ auth/
β βββ auth.ts # Servizio di autenticazione
β βββ loaders.ts # Factory functions (createProtectedLoader, createGuestLoader)
βββ store/
β βββ auth/
β β βββ auth.store.ts # Zustand store autenticazione
β βββ cart/
β β βββ cart.store.ts # Zustand store carrello
β βββ messages/
β βββ messages.store.ts # Zustand store messaggi
βββ api/
β βββ auth/
β βββ auth.api.ts # Funzioni API autenticazione
βββ schemas/
β βββ api.schema.ts # Schema base API
β βββ auth/
β βββ auth.schema.ts # Schema autenticazione
βββ hooks/
β βββ api/
β β βββ auth/
β β βββ useAuthApi.ts # TanStack Query hooks per autenticazione
β βββ ui/
β β βββ useTopbarCart.ts # Comunicazione carrello con iframe
β β βββ useTopbarMessages.ts # Comunicazione messaggi con iframe
β βββ sync/
β β βββ useBroadcastChannel.ts # Hook per sincronizzazione multi-tab
β β βββ useAuthSyncListener.ts # Sync autenticazione tra tab
β β βββ useCartSyncListener.ts # Sync carrello tra tab
β β βββ useMessagesSyncListener.ts # Sync messaggi tra tab
β βββ iframe/
β βββ useIframeNavigation.ts # Navigazione dall'iframe
βββ components/
β βββ layout/
β βββ authenticated-layout.tsx # Layout per pagine protette
β βββ sidebar/ # Componenti sidebar
β β βββ app-sidebar.tsx
β β βββ nav-modules.tsx
β β βββ nav-user.tsx
β βββ topbar/ # Componenti topbar
β βββ cart.tsx
β βββ messages.tsx
β βββ nav-actions.tsx
βββ routes/
βββ auth/
β βββ login.tsx # + createGuestLoader()
β βββ companies.tsx # + createProtectedLoader()
βββ welcome.tsx # + createProtectedLoader({ loadSettings: true })
βββ r.$path.tsx # Route moduli con iframeπ‘ Workflow Tipico β
- Pianifica - Decidi quali route servono
- Registra - Aggiungile alla configurazione route in
routes.ts - Proteggi - Aggiungi
clientLoaderdove necessario - Implementa - Scrivi il componente della pagina
- Testa - Il sistema gestisce autenticazione e sincronizzazione
π Collegamenti Utili β
β FAQ β
Q: Devo aggiungere codice di autenticazione nelle route? A: Solo una riga: export const clientLoader = createProtectedLoader();
Q: Come faccio a sapere quali route sono protette? A: Cerca createProtectedLoader() nei file delle route.
Q: Funziona la sincronizzazione tra tab? A: Sì, automaticamente tramite AuthSyncListener.
Q: Posso avere route accessibili a tutti? A: Sì, semplicemente non aggiungere clientLoader.