import { onUpdateConsentCookie, onSetAllConsentCookie, type ConsentCookies } from "./Cookies.telefunc"; import React, { useState, useContext, createContext, useMemo } from "react"; import { usePageContext } from "vike-react/usePageContext"; import { reload } from "vike/client/router"; import { Button } from "@syntax/Button"; import { toast } from "react-toastify"; import { Toggle } from "./Toggle"; import { Link } from "./Link"; export const CookiesContext = createContext<{ cookies: { analytics: boolean; customization: boolean; }; setCookie: (cookieName: ConsentCookies, cookieValue: boolean) => void; setAllCookies: (cookieValue: boolean) => void; isOpen: boolean; setIsOpen: (isOpen: boolean) => void; isSelectionOpen: boolean; setIsSelectionOpen: (isSelectionOpen: boolean) => void; }>({ cookies: { analytics: false, customization: false, }, setCookie: (_cookieName: ConsentCookies, _cookieValue: boolean) => {}, setAllCookies: () => {}, isOpen: false, setIsOpen: () => {}, isSelectionOpen: false, setIsSelectionOpen: () => {}, }); type CookiesContainerProps = { children?: React.ReactNode; }; export function CookiesContainer(props: CookiesContainerProps) { const { cookies } = usePageContext(); const [consentCookies, setConsentCookies] = useState(cookies.consent); const [isSelectionOpen, setIsSelectionOpen] = useState(false); const [isOpen, setIsOpen] = useState(() => { return !Object.keys(cookies.consent).every((value) => value); }); const toastPromiseMessages = useMemo( () => ({ pending: "Mise à jour des cookies...", success: "Cookies mis à jour !", error: "Erreur lors de la mise à jour des cookies", }), [], ); const handleUpdateCookie = (cookieName: ConsentCookies, cookieValue: boolean) => { setConsentCookies((prev) => ({ ...prev, [cookieName]: cookieValue, })); toast.promise(onUpdateConsentCookie(cookieName, cookieValue), toastPromiseMessages).then(() => { setIsOpen(false); reload(); }); }; const handleSetAll = (value: boolean) => { setConsentCookies({ analytics: true, customization: true }); toast.promise(onSetAllConsentCookie(value), toastPromiseMessages).then(() => { setIsOpen(false); setIsSelectionOpen(false); reload(); }); }; return ( {props.children} {isSelectionOpen && } {isOpen && } ); } function CookieChoices() { const cookiesContext = useContext(CookiesContext); return (

Personnalisation des cookies 🍪

cookiesContext.setCookie("analytics", checked)} /> cookiesContext.setCookie("customization", checked)} />
); } function CookieModal() { const cookiesContext = useContext(CookiesContext); return (

Coucou c'est nous...
les cookies ! 🍪

On ne t‘embête pas longtemps, on te laisse même le choix (si ça c‘est pas la classe 😎).

Si tu veux en savoir plus, tu peux consulter la page{" "} Politique de confidentialité .

); }