"use client"; import { useEffect } from "react"; import { VariantProps, cva } from "class-variance-authority"; import { AlertTriangle, Check, Info, Siren } from "lucide-react"; import { cn } from "@/lib/utils"; import React from "react"; export type CustomNotificationType = { text: string; severity?: "success" | "info" | "warning" | "error"; // userType?: "internal" | "external"; targetPermission?: string; endOfLife?: number; }; type CustomNotificationProps = CustomNotificationType & React.ComponentProps<"div">; const custonNotificationsContainerVariants = cva("flex px-2 py-1.5", { variants: { severity: { warning: "bg-amber-500 bg-opacity-10 dark:bg-amber-900 dark:bg-opacity-30", success: "bg-lime-500 bg-opacity-10 dark:bg-lime-900 dark:bg-opacity-30", info: "bg-lime-500 bg-opacity-10 dark:bg-lime-900 dark:bg-opacity-30", error: "bg-amber-500 bg-opacity-10 dark:bg-amber-900 dark:bg-opacity-30", }, }, defaultVariants: { severity: "warning", }, }); const custonNotificationsTextVariants = cva( "flex items-center gap-3 text-sm leading-6", { variants: { severity: { warning: "text-amber-500 dark:text-amber-400", success: "text-lime-600 dark:text-lime-400", info: "text-lime-600 dark:text-lime-400", error: "text-amber-500 dark:text-amber-400", }, }, defaultVariants: { severity: "warning", }, } ); const getIcon = (severity: string) => { switch (severity) { case "warning": return ; case "success": return ; case "info": return ; case "error": return ; default: return ; } }; export const CustomNotification = React.forwardRef< HTMLDivElement, CustomNotificationProps >( ( { text, severity = "warning", // userType = "internal", targetPermission, endOfLife = 30, className, ...props }, ref ) => { const [show, setShow] = React.useState(true); const [initialTimeDifference, setInitialTimeDifference] = React.useState(null); // useEffect(() => { // const savedTimeDifference = localStorage.getItem("timeDifference"); // if (savedTimeDifference) { // setInitialTimeDifference(Number(savedTimeDifference)); // } // const endOfLifeMinutes = endOfLife * 60 * 1000; // console.log(endOfLifeMinutes, "endOfLifeMinutes"); // const currentDate = new Date(); // const hideTime = new Date(currentDate.getTime() + endOfLifeMinutes); // const timeDifference = hideTime.getTime() - currentDate.getTime(); // if (!savedTimeDifference) { // localStorage.setItem( // "timeDifference", // timeDifference.toString() // ); // setInitialTimeDifference(timeDifference); // } // console.log(timeDifference, "timeDifference"); // if (initialTimeDifference && initialTimeDifference < 0) { // setShow(false); // localStorage.removeItem("timeDifference"); // return; // } // if (initialTimeDifference && initialTimeDifference > 0) // setShow(true); // const timer = setTimeout(() => { // setShow(false); // }, initialTimeDifference ?? 0); // return () => clearTimeout(timer); // }, [endOfLife, initialTimeDifference]); // if (!show) return null; return (

{getIcon(severity)} {text}

); } ); CustomNotification.displayName = "CustomNotification"; export default CustomNotification;