import { getCookie, setCookie } from "cookies-next/client"; import { add } from "date-fns"; import { X } from "lucide-react"; import Link from "next/link"; import { type MouseEvent, useEffect, useRef, useState } from "react"; import { IconMatrix, type IconType } from "~/components/IconComponents"; import { cn } from "~/lib/utils"; import type { Banners } from "~/schemas/public/Banners"; const defaultHideDuration = 365; // days export const BannerFactory = (bannerData: Banners) => { const NEW_BANNER_KEY = `bannercookie_${bannerData.idbanner}`; let bgColor = ""; let accentColor = ""; let closeHoverColor = ""; switch (bannerData.color) { case "blu": bgColor = "bg-blue-600"; accentColor = "bg-blue-800"; closeHoverColor = "hover:bg-blue-500"; break; case "rosso": bgColor = "bg-red-600"; accentColor = "bg-red-800"; closeHoverColor = "hover:bg-red-500"; break; case "verde": bgColor = "bg-green-600"; accentColor = "bg-green-800"; closeHoverColor = "hover:bg-green-500"; break; case "indaco": bgColor = "bg-indigo-600"; accentColor = "bg-indigo-800"; closeHoverColor = "hover:bg-indigo-500"; break; default: bgColor = "bg-indigo-600"; accentColor = "bg-indigo-800"; closeHoverColor = "hover:bg-indigo-500"; break; } const NewBanner = () => { const [isBannerToShow, setIsBannerToShow] = useState(false); useEffect(() => { if (bannerData.is_unskippable === false) { const cookievalue = getCookie(NEW_BANNER_KEY) !== "true"; setIsBannerToShow(cookievalue); } }, []); const onClick = (e: MouseEvent) => { e.preventDefault(); setCookie(NEW_BANNER_KEY, "true", { expires: add(new Date(), { days: bannerData.hide_duration || defaultHideDuration, }), }); setIsBannerToShow(false); }; if (!isBannerToShow && bannerData.is_unskippable === false) { return null; } return (
{bannerData.titolo}{" "}

{bannerData.testo} {bannerData.has_cta && bannerData.cta_href && bannerData.cta_icon && ( {bannerData.cta_text} )}

{bannerData.is_unskippable === false && ( )}
); }; return ; }; export function AnniversaryBanner() { const [isVisible, setIsVisible] = useState(false); const bannerRef = useRef(null); useEffect(() => { const observer = new IntersectionObserver( ([entry]) => { if (entry?.isIntersecting) { setIsVisible(true); } }, { threshold: 0.3 }, ); if (bannerRef.current) { observer.observe(bannerRef.current); } return () => observer.disconnect(); }, []); return (
{/* Decorative background "25" */}
25
{/* Main content - horizontal layout */}
{/* Left: Badge + Number */}
Da più di
25 Anni
{/* Center: Tagline */}

Un quarto di secolo di{" "} eccellenza,{" "} innovazione, e{" "} fiducia

{/* Right: Mini stats */}
{/* Accent lines */} {/*
*/} {/*
*/}
); } function Stat({ value, label }: { value: string; label: string }) { return (
{value} {label}
); }