import React, { useState, useEffect, useCallback } from 'react'; import { useAuth } from '../context/useAuth'; import api from '../services/api'; import type { INotification } from '../types'; import { NotificationContext } from './NotificationContextState'; export const NotificationProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { const { appUser, isSignedIn } = useAuth(); const orgId = appUser?.organizationId; const [notifications, setNotifications] = useState([]); const [loading, setLoading] = useState(false); const fetchNotifications = useCallback(async () => { if (!isSignedIn || !orgId) return; try { setLoading(true); const response = await api.get('/notifications'); setNotifications(response.data); } catch (error) { console.error('Error fetching notifications:', error); } finally { setLoading(false); } }, [isSignedIn, orgId]); useEffect(() => { if (isSignedIn && orgId) { fetchNotifications(); const interval = setInterval(fetchNotifications, 60000); return () => clearInterval(interval); } }, [isSignedIn, orgId, fetchNotifications]); const markAsRead = async (id: string) => { try { await api.patch(`/notifications/${id}/read`); setNotifications(prev => prev.map(n => n._id === id ? { ...n, isRead: true } : n)); } catch (error) { console.error('Error marking notification as read:', error); } }; const markAllAsRead = async () => { try { await api.post('/notifications/read-all'); setNotifications(prev => prev.map(n => ({ ...n, isRead: true }))); } catch (error) { console.error('Error marking all notifications as read:', error); } }; const deleteNotification = async (id: string) => { try { await api.delete(`/notifications/${id}`); setNotifications(prev => prev.filter(n => n._id !== id)); } catch (error) { console.error('Error deleting notification:', error); } }; const unreadCount = notifications.filter(n => !n.isRead).length; return ( {children} ); };