import { useToast, type ToastPositionWithLogical, Box, HStack, Text, } from "@chakra-ui/react"; import { useNuiEvent } from "../../hooks/useNuiEvent"; import { debugData } from "../../utils/debugData"; import { IconProp } from "@fortawesome/fontawesome-svg-core"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; interface Props { title?: string; description: string; duration?: number; position?: ToastPositionWithLogical; status?: "info" | "warning" | "success" | "error"; id?: number; } interface CustomProps { style?: React.CSSProperties; description: string; title?: string; duration?: number; icon?: IconProp; iconColor?: string; position?: ToastPositionWithLogical; id?: number; type?: string; } debugData([ { action: "notify", data: { description: "Dunak is nerd", title: "Dunak", id: 1, }, }, ]); debugData([ { action: "customNotify", data: { description: "Dunak is nerd", title: "Dunak", icon: "basket-shopping", style: { backgroundColor: "#2D3748", color: "white", }, }, }, ]); const Notifications: React.FC = () => { const toast = useToast(); useNuiEvent("customNotify", (data) => { if (data.id && toast.isActive(data.id)) return; if (!data.icon) { data.icon = data.type === "error" ? "circle-xmark" : data.type === "success" ? "circle-check" : "circle-info"; } toast({ duration: data.duration || 3000, position: data.position || "top-right", render: () => ( {data.icon && ( )} {data.title && {data.title}} {data.description && {data.description}} ), }); }); useNuiEvent("notify", (data) => { if (data.id && toast.isActive(data.id)) return; toast({ title: data.title, description: data.description, duration: data.duration || 4000, position: data.position || "top-right", status: data.status, }); }); return <>; }; export default Notifications;