/** * * Copyright 2023-2025 InspectorRAGet Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **/ 'use client'; import { createContext, useContext, useState, useRef } from 'react'; import { ToastNotification } from '@carbon/react'; import { Notification as NotificationType } from '@/src/types'; import styles from './Notification.module.scss'; type NotificationContextType = { createNotification(notification: NotificationType, timeout?: number): void; }; const NotificationContext = createContext( undefined, ); const NotificationComponent = ({ title, subtitle, kind, caption, }: NotificationType) => ( ); export const NotificationProvider = ({ children }: { children: any }) => { const [notification, setNotification] = useState< NotificationType | undefined >(); const timeoutId = useRef(); const createNotification = ( notification: NotificationType, timeout?: number, ) => { if (timeoutId.current) { clearTimeout(timeoutId.current); } setNotification(notification); timeoutId.current = setTimeout( () => { setNotification(undefined); }, timeout ? timeout : 5000, ); }; return ( {children} {notification && } ); }; export const useNotification = () => { const context = useContext(NotificationContext); if (context === undefined) { throw new Error( 'useNotification must be used within a NotificationProvider', ); } return context; };