add read notifications route and update notifications behavior
This commit is contained in:
@@ -1,25 +1,54 @@
|
||||
import styles from "./Header.module.css"
|
||||
import { Link, NavLink } from "react-router";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import {useContext, useEffect, useRef, useState} from "react";
|
||||
import getUserNotifications from "../../utils/notifications/getUserNotifications.js";
|
||||
import deleteNotificationUser from "../../utils/notifications/deleteNotificationUser.js";
|
||||
import initEcho from "../../utils/echo/initEcho.js"
|
||||
import readNotifications from "../../utils/notifications/readNotifications.js";
|
||||
import {AuthContext} from "../../contexts/auth/AuthContext.js";
|
||||
|
||||
|
||||
function Header() {
|
||||
const { update } = useContext(AuthContext);
|
||||
const [notificationMenu, setnotificationMenu] = useState(false);
|
||||
const [unreadNotification, setunreadNotification] = useState(true);
|
||||
const [unreadNotification, setunreadNotification] = useState(false);
|
||||
const [mobileMenu, setMobileMenu] = useState(false);
|
||||
const [notifications, setNotifications] = useState([]);
|
||||
const notificationRef = useRef(null);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
const echo = initEcho();
|
||||
|
||||
echo.private("admins-private")
|
||||
.listen(".user.created", (event) => {
|
||||
const newNotification = {
|
||||
id: Date.now(),
|
||||
content: `Nouvel demande d'inscription : ${event.user.name} ${event.user.lastname}`,
|
||||
is_new: true
|
||||
};
|
||||
setNotifications(prevNotifications => [newNotification, ...prevNotifications]);
|
||||
setunreadNotification(true);
|
||||
});
|
||||
|
||||
return () => {
|
||||
echo.leave("admins-private");
|
||||
};
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
async function loadNotifications() {
|
||||
const notifData = await getUserNotifications();
|
||||
const data = notifData || [];
|
||||
setNotifications(notifData || []);
|
||||
const hasUnread = data.some(n => n.pivot && n.pivot.unread === 1);
|
||||
|
||||
setunreadNotification(hasUnread);
|
||||
}
|
||||
|
||||
loadNotifications();
|
||||
|
||||
const handleClickOutside = (event) => {
|
||||
if (
|
||||
notificationRef.current &&
|
||||
@@ -40,12 +69,25 @@ function Header() {
|
||||
|
||||
|
||||
|
||||
const toggleNotificationMenu = async () => {
|
||||
try {
|
||||
setnotificationMenu(!notificationMenu);
|
||||
if (unreadNotification) {
|
||||
const result = await readNotifications();
|
||||
if (result) {
|
||||
setunreadNotification(false);
|
||||
update();
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Erreur suppression notification :', err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function deleteNotification(notificationId) {
|
||||
try {
|
||||
const result = await deleteNotificationUser(notificationId);
|
||||
|
||||
console.log(result);
|
||||
|
||||
if (result) {
|
||||
setNotifications(prev => prev.filter(n => n.id !== notificationId));
|
||||
}
|
||||
@@ -81,10 +123,7 @@ function Header() {
|
||||
<div className={styles.headerRightContent}>
|
||||
<button
|
||||
className={`${styles.bellBtn} ${notificationMenu ? styles.activeBellBtn : ""}`}
|
||||
onClick={() => {
|
||||
setnotificationMenu(!notificationMenu);
|
||||
setunreadNotification(false);
|
||||
}}
|
||||
onClick={() => {toggleNotificationMenu();}}
|
||||
>
|
||||
<img className={styles.notificationsImg} src="bell.svg" alt="notifications"/>
|
||||
{unreadNotification && <span className={styles.notificationBadge}></span>}
|
||||
|
||||
Reference in New Issue
Block a user