Files

69 lines
2.0 KiB
JavaScript
Raw Permalink Normal View History

import './app.scss';
import * as Turbo from "@hotwired/turbo";
import * as Sentry from "@sentry/browser";
import AOS from 'aos';
import 'aos/dist/aos.css';
// --- INITIALISATION SENTRY ---
// On initialise Sentry immédiatement sans attendre le DOM pour capturer les erreurs précoces
Sentry.init({
dsn: "https://803814be6540031b1c37bf92ba9c0f79@sentry.esy-web.dev/24",
tunnel: "/sentry-tunnel",
integrations: [
Sentry.browserTracingIntegration(),
Sentry.replayIntegration()
],
tracesSampleRate: 1.0,
replaysSessionSampleRate: 0.1,
replaysOnErrorSampleRate: 1.0
});
/**
* Initialisation globale des composants UI
* Appelée à chaque navigation Turbo
*/
const initApp = () => {
// Flash Messages Auto-hide
document.querySelectorAll('.flash-message').forEach(flash => {
setTimeout(() => {
flash.classList.add('opacity-0', 'translate-y-2');
setTimeout(() => flash.remove(), 500);
}, 5000);
});
// Initialize AOS
AOS.init({
duration: 800,
once: true,
// offset: 120, // Optional: offset (in px) from the original trigger point
// easing: 'ease', // Optional: default easing for AOS animations
});
// Exemple : Init d'un bouton de retour en haut de page
// initBackToTop();
};
// --- TURBO HOOKS ---
// 'turbo:load' s'exécute au chargement initial ET à chaque navigation
document.addEventListener('turbo:load', () => {
initApp();
});
// Gestion des confirmations de suppression ou d'actions sensibles via Turbo
document.addEventListener("turbo:click", (event) => {
const confirmationMsg = event.target.closest("[data-turbo-confirm]")?.getAttribute("data-turbo-confirm");
if (confirmationMsg && !confirm(confirmationMsg)) {
event.preventDefault();
}
});
// Capture des erreurs de rendu Turbo dans Sentry
document.addEventListener("turbo:render", () => {
Sentry.addBreadcrumb({
category: "turbo",
message: "Page rendered: " + window.location.pathname,
level: "info",
});
});