'use client'; import React, { useState, useRef } from 'react'; import { Card } from 'primereact/card'; import { InputText } from 'primereact/inputtext'; import { InputTextarea } from 'primereact/inputtextarea'; import { Dropdown } from 'primereact/dropdown'; import { Button } from 'primereact/button'; import { Toast } from 'primereact/toast'; import { Divider } from 'primereact/divider'; import { Message } from 'primereact/message'; import notificationService from '../../../../services/notificationService'; const NotificationsBroadcastPage = () => { const [titre, setTitre] = useState(''); const [message, setMessage] = useState(''); const [type, setType] = useState<'info' | 'warning' | 'success' | 'error'>('info'); const [loading, setLoading] = useState(false); const [submitted, setSubmitted] = useState(false); const toast = useRef(null); const types = [ { label: 'Information', value: 'info', icon: 'pi-info-circle', color: '#3B82F6' }, { label: 'Avertissement', value: 'warning', icon: 'pi-exclamation-triangle', color: '#F59E0B' }, { label: 'Succès', value: 'success', icon: 'pi-check-circle', color: '#10B981' }, { label: 'Erreur', value: 'error', icon: 'pi-times-circle', color: '#EF4444' } ]; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setSubmitted(true); if (!titre.trim() || !message.trim()) { toast.current?.show({ severity: 'warn', summary: 'Attention', detail: 'Veuillez remplir tous les champs obligatoires', life: 3000 }); return; } try { setLoading(true); await notificationService.broadcastNotification({ type, titre: titre.trim(), message: message.trim() }); toast.current?.show({ severity: 'success', summary: 'Succès', detail: 'Notification diffusée avec succès à tous les utilisateurs', life: 5000 }); // Réinitialiser le formulaire setTitre(''); setMessage(''); setType('info'); setSubmitted(false); } catch (error) { console.error('Erreur lors de la diffusion:', error); toast.current?.show({ severity: 'error', summary: 'Erreur', detail: 'Impossible de diffuser la notification', life: 3000 }); } finally { setLoading(false); } }; const handleReset = () => { setTitre(''); setMessage(''); setType('info'); setSubmitted(false); }; const typeOptionTemplate = (option: any) => { return (
{option.label}
); }; const selectedTypeTemplate = (option: any, props: any) => { if (option) { return (
{option.label}
); } return {props.placeholder}; }; const getPreviewSeverity = () => { switch (type) { case 'info': return 'info'; case 'warning': return 'warn'; case 'success': return 'success'; case 'error': return 'error'; default: return 'info'; } }; return (

Diffuser une Notification

Envoyez une notification à tous les utilisateurs de l'application

t.value === type)} options={types} onChange={(e) => setType(e.value.value)} optionLabel="label" placeholder="Sélectionnez un type" className="w-full" itemTemplate={typeOptionTemplate} valueTemplate={selectedTypeTemplate} />
setTitre(e.target.value)} placeholder="Entrez le titre de la notification" className={`w-full ${submitted && !titre.trim() ? 'p-invalid' : ''}`} maxLength={100} /> {submitted && !titre.trim() && ( Le titre est obligatoire )} {titre.length}/100 caractères
setMessage(e.target.value)} placeholder="Entrez le message de la notification" rows={5} className={`w-full ${submitted && !message.trim() ? 'p-invalid' : ''}`} maxLength={500} /> {submitted && !message.trim() && ( Le message est obligatoire )} {message.length}/500 caractères

Voici comment apparaîtra votre notification :

{titre || message ? (
{titre || 'Titre de la notification'}
{message || 'Message de la notification'}
} /> ) : (

Remplissez le formulaire pour voir l'aperçu

)}
Informations
  • La notification sera visible immédiatement
  • Tous les utilisateurs recevront cette notification
  • Elle apparaîtra dans leur liste de notifications
  • Un badge indiquera qu'elle n'a pas été lue
  • Info : Pour les informations générales
  • Avertissement : Pour les alertes importantes
  • Succès : Pour les bonnes nouvelles
  • Erreur : Pour les problèmes critiques
); }; export default NotificationsBroadcastPage;