'use client'; import React, { useState, useEffect, useRef } from 'react'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { Button } from 'primereact/button'; import { InputText } from 'primereact/inputtext'; import { Card } from 'primereact/card'; import { Toast } from 'primereact/toast'; import { Toolbar } from 'primereact/toolbar'; import { Tag } from 'primereact/tag'; import { Badge } from 'primereact/badge'; import notificationService, { Notification } from '../../../../services/notificationService'; import { formatDistanceToNow } from 'date-fns'; import { fr } from 'date-fns/locale'; const NotificationsNonLuesPage = () => { const [notifications, setNotifications] = useState([]); const [loading, setLoading] = useState(true); const [globalFilter, setGlobalFilter] = useState(''); const toast = useRef(null); const dt = useRef>(null); useEffect(() => { loadNotifications(); }, []); const loadNotifications = async () => { try { setLoading(true); const data = await notificationService.getUnreadNotifications(); setNotifications(data); } catch (error) { console.error('Erreur lors du chargement des notifications:', error); toast.current?.show({ severity: 'error', summary: 'Erreur', detail: 'Impossible de charger les notifications non lues', life: 3000 }); } finally { setLoading(false); } }; const markAsRead = async (notification: Notification) => { try { await notificationService.markAsRead(notification.id); setNotifications(notifications.filter(n => n.id !== notification.id)); toast.current?.show({ severity: 'success', summary: 'Succès', detail: 'Notification marquée comme lue', life: 2000 }); } catch (error) { console.error('Erreur:', error); } }; const markAllAsRead = async () => { try { await notificationService.markAllAsRead(); setNotifications([]); toast.current?.show({ severity: 'success', summary: 'Succès', detail: 'Toutes les notifications ont été marquées comme lues', life: 3000 }); } catch (error) { console.error('Erreur:', error); } }; const typeBodyTemplate = (rowData: Notification) => { const getSeverity = (type: string) => { switch (type) { case 'info': return 'info'; case 'warning': return 'warning'; case 'success': return 'success'; case 'error': return 'danger'; default: return 'info'; } }; const getIcon = (type: string) => { switch (type) { case 'info': return 'pi-info-circle'; case 'warning': return 'pi-exclamation-triangle'; case 'success': return 'pi-check-circle'; case 'error': return 'pi-times-circle'; default: return 'pi-info-circle'; } }; return ( ); }; const dateBodyTemplate = (rowData: Notification) => { return formatDistanceToNow(new Date(rowData.date), { addSuffix: true, locale: fr }); }; const actionBodyTemplate = (rowData: Notification) => { return (