import React, { useEffect, useState, isValidElement } from "react"; import { ToastContainer, toast, cssTransition } from "react-toastify"; import clsx from "clsx"; import "./ReactToastifyOverrideClass.scss"; import styles from "./SnackbarController.module.scss"; import XMarkSvg from "@images/cancel.svg?react"; import WarningSvg from "@images/warning.svg?react"; import MegaphoneSvg from "@images/megaphone.svg?react"; import CheckMarkSvg from "@images/check_mark.svg?react"; import ErrorSvg from "@images/error.svg?react"; import { useNotificationStatus } from "@logics_common"; const CustomTransition = cssTransition({ enter: "fade_in", exit: "fade_out", collapse: false, }); export const SnackbarController = () => { const { currentNotificationStatus, closeNotification } = useNotificationStatus(); const [containerKey, setContainerKey] = useState(0); const settings = currentNotificationStatus.data; const snackbar_classname = clsx( styles.snackbar_content, { [styles.is_success]: settings.status === "success", [styles.is_warning]: settings.status === "warning", [styles.is_error]: settings.status === "error", } ); let hide_duration = 5000; if (settings.options?.hide_duration === null) { hide_duration = false; } else if (Number(settings.options?.hide_duration)) { hide_duration = Number(settings.options?.hide_duration); } useEffect(() => { if (!settings.is_open) return; const message_text = settings.message; const category_id = settings.category_id ? settings.category_id : message_text; const to_hide_progress_bar = (settings.options?.to_hide_progress_bar === true) ? true : false; const asyncShowNotification = async () => { setTimeout(() => { toast(message_text, { toastId: category_id, type: settings.status, autoClose: hide_duration, transition: CustomTransition, toastClassName: snackbar_classname, hideProgressBar: to_hide_progress_bar, progressClassName: styles.toast_progress, closeButton: , onClose: () => { closeNotification(); }, }); }, 100); }; // setContainerKey(prevKey => prevKey + 1); asyncShowNotification(); }, [settings]); return ( { switch (type) { case "info": return ; case "error": return ; case "success": return ; case "warning": return ; default: return null; } }} /> ); }; const CloseButtonContainer = ({ closeToast }) => { return ( ); };