import './bootstrap'; // ─── Ritorno alla pagina di partenza ──────────────────────────────────────── // // I link con data-ritorno (schede e operazioni) portano con sé ?da=: // la pagina di partenza con i suoi filtri, oppure il `da` che la pagina // corrente aveva già ricevuto, così si risale sempre all'origine del percorso // (elenco → scheda → Rientra → torna all'elenco). Il server lo valida e lo usa // dopo conferma o annulla: App\Support\Ritorno, trait RicordaRitorno. // // Si calcola al momento dell'uso e non al caricamento: filtri e pagina degli // elenchi cambiano l'indirizzo (#[Url] di Livewire) senza ricaricare. function ritornoCorrente() { const qui = new URL(window.location.href); return qui.searchParams.get('da') || (qui.pathname + qui.search); } function aggiornaLink(link) { const destinazione = new URL(link.getAttribute('href'), window.location.origin); if (destinazione.origin !== window.location.origin) return; destinazione.searchParams.set('da', ritornoCorrente()); link.setAttribute('href', destinazione.pathname + destinazione.search + destinazione.hash); } // Fase di cattura: si arriva prima di wire:navigate, che legge l'href al // pointerdown (precaricamento) e al click. contextmenu e focusin coprono // "apri in una nuova scheda" e la tastiera. ['pointerdown', 'click', 'contextmenu', 'focusin'].forEach((evento) => { document.addEventListener(evento, (e) => { const link = e.target instanceof Element ? e.target.closest('a[data-ritorno][href]') : null; if (link) aggiornaLink(link); }, true); });