aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/src/components/shared/NotificationContext.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/components/shared/NotificationContext.tsx')
-rw-r--r--frontend/src/components/shared/NotificationContext.tsx55
1 files changed, 55 insertions, 0 deletions
diff --git a/frontend/src/components/shared/NotificationContext.tsx b/frontend/src/components/shared/NotificationContext.tsx
new file mode 100644
index 0000000..a8f6454
--- /dev/null
+++ b/frontend/src/components/shared/NotificationContext.tsx
@@ -0,0 +1,55 @@
+'use client';
+
+import { createContext, useContext, useState, ReactNode } from 'react';
+import { Notification, NotificationType } from './Notification';
+
+type NotificationData = {
+ id: string;
+ type: NotificationType;
+ message: string;
+ duration?: number;
+};
+
+interface NotificationContextType {
+ showNotification: (type: NotificationType, message: string, duration?: number) => void;
+ hideNotification: (id: string) => void;
+}
+
+const NotificationContext = createContext<NotificationContextType | undefined>(undefined);
+
+export function NotificationProvider({ children }: { children: ReactNode }) {
+ const [notifications, setNotifications] = useState<NotificationData[]>([]);
+
+ const showNotification = (type: NotificationType, message: string, duration?: number) => {
+ const id = Math.random().toString(36).substring(2, 9);
+ setNotifications(prev => [...prev, { id, type, message, duration }]);
+ return id;
+ };
+
+ const hideNotification = (id: string) => {
+ setNotifications(prev => prev.filter(notification => notification.id !== id));
+ };
+
+ return (
+ <NotificationContext.Provider value={{ showNotification, hideNotification }}>
+ {children}
+ {notifications.map(notification => (
+ <Notification
+ key={notification.id}
+ type={notification.type}
+ message={notification.message}
+ duration={notification.duration}
+ onClose={() => hideNotification(notification.id)}
+ />
+ ))}
+ </NotificationContext.Provider>
+ );
+}
+
+export function useNotification() {
+ const context = useContext(NotificationContext);
+ if (context === undefined) {
+ throw new Error('useNotification must be used within a NotificationProvider');
+ }
+ return context;
+} \ No newline at end of file