kpfadnis's picture
chore (maintainance): Update depdencies, copyright and minimal support for chat template.
e23b66d
raw
history blame
2.4 kB
/**
*
* 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<NotificationContextType | undefined>(
undefined,
);
const NotificationComponent = ({
title,
subtitle,
kind,
caption,
}: NotificationType) => (
<ToastNotification
hideCloseButton={true}
className={styles.notification}
closeOnEscape={false}
title={title}
kind={kind}
subtitle={subtitle}
caption={caption}
/>
);
export const NotificationProvider = ({ children }: { children: any }) => {
const [notification, setNotification] = useState<
NotificationType | undefined
>();
const timeoutId = useRef<NodeJS.Timeout | undefined>();
const createNotification = (
notification: NotificationType,
timeout?: number,
) => {
if (timeoutId.current) {
clearTimeout(timeoutId.current);
}
setNotification(notification);
timeoutId.current = setTimeout(
() => {
setNotification(undefined);
},
timeout ? timeout : 5000,
);
};
return (
<NotificationContext.Provider value={{ createNotification }}>
{children}
{notification && <NotificationComponent {...notification} />}
</NotificationContext.Provider>
);
};
export const useNotification = () => {
const context = useContext(NotificationContext);
if (context === undefined) {
throw new Error(
'useNotification must be used within a NotificationProvider',
);
}
return context;
};