espace-paie-odentas/hooks/useAnalyticsConsent.ts
odentas 9cb4ed09a4 feat(rgpd): Système consentement analytics salariés + politique exhaustive
- Popup consentement salariés: bandeau style identique employeurs, card Odentas, détails visibles, bouton Accepter visible (sky-600)
- Hook useAnalyticsConsent: détection pages salariés (/auto-declaration, /signature-salarie)
- ConsentManager: orchestrateur affichage popups selon contexte B2B/B2C
- PostHogProvider: init conditionnelle au consentement salarié
- Politique Section 9 bis: liste exhaustive organismes (Audiens, AGIRC-ARRCO, CNAV, FNAS, FCAP, etc.), adresse postale pour exercice droits
- PopupInfoSuivi: card Odentas Media SAS engagement transparence
- Conformité RGPD: B2B (intérêt légitime) + B2C (consentement opt-in Article 6.1.a)
2025-10-25 21:08:00 +02:00

66 lines
1.8 KiB
TypeScript

"use client";
import { useEffect, useState } from "react";
import { usePathname } from "next/navigation";
const EMPLOYEE_PAGES = ["/auto-declaration", "/signature-salarie"];
const CONSENT_KEY = "odentas_analytics_consent_employee";
export type ConsentStatus = "pending" | "accepted" | "rejected";
export function useAnalyticsConsent() {
const pathname = usePathname();
const [consentStatus, setConsentStatus] = useState<ConsentStatus>("pending");
// Détecte si on est sur une page salarié
const isEmployeePage = EMPLOYEE_PAGES.some(page => pathname?.includes(page));
useEffect(() => {
if (!isEmployeePage) {
// Pas sur une page salarié, pas besoin de consentement
setConsentStatus("accepted");
return;
}
// Vérifier si un consentement existe déjà
try {
const savedConsent = localStorage.getItem(CONSENT_KEY);
if (savedConsent === "accepted") {
setConsentStatus("accepted");
} else if (savedConsent === "rejected") {
setConsentStatus("rejected");
} else {
setConsentStatus("pending");
}
} catch {
setConsentStatus("pending");
}
}, [isEmployeePage, pathname]);
const acceptConsent = () => {
try {
localStorage.setItem(CONSENT_KEY, "accepted");
setConsentStatus("accepted");
} catch {
console.error("Impossible de sauvegarder le consentement");
}
};
const rejectConsent = () => {
try {
localStorage.setItem(CONSENT_KEY, "rejected");
setConsentStatus("rejected");
} catch {
console.error("Impossible de sauvegarder le refus");
}
};
return {
isEmployeePage,
consentStatus,
hasConsent: consentStatus === "accepted",
needsConsent: isEmployeePage && consentStatus === "pending",
acceptConsent,
rejectConsent,
};
}