From 37aa916ad51ebed3a3ae098d8a9f261d9fc9765e Mon Sep 17 00:00:00 2001 From: AmirReza Jamali Date: Sat, 11 Jul 2026 14:56:05 +0330 Subject: [PATCH] fix notification badge initialization --- .../Layouts/header/notification/index.tsx | 32 +++++++++++-------- .../header/notification/notification-list.tsx | 21 ++++-------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/components/Layouts/header/notification/index.tsx b/src/components/Layouts/header/notification/index.tsx index eea73d7..e2a752a 100644 --- a/src/components/Layouts/header/notification/index.tsx +++ b/src/components/Layouts/header/notification/index.tsx @@ -8,19 +8,21 @@ import { import { useUser } from "@/contexts"; import Modal from "@/components/ui/modal"; import Status from "@/components/ui/Status"; -import { useMarkNotificationAsSeen } from "@/hooks/queries/useNotificationQueries"; +import { + useGetMyNotifications, + useMarkNotificationAsSeen, +} from "@/hooks/queries/useNotificationQueries"; import { useIsMobile } from "@/hooks/use-mobile"; import { TNotificationDetailsResponse } from "@/lib/api/types/NotificationHistory"; import { cn, sanitizeHtmlWithStyles } from "@/lib/utils"; import { capitalize, unixToDate } from "@/utils/shared"; import Link from "next/link"; -import { useMemo, useState } from "react"; +import { useEffect, useMemo, useState } from "react"; import { BellIcon } from "./icons"; import NotificationList from "./notification-list"; export function Notification() { const [isOpen, setIsOpen] = useState(false); - const [isDotVisible, setIsDotVisible] = useState(true); const [unreadNotificationCount, setUnreadNotificationCount] = useState(0); const [isModalOpen, setIsModalOpen] = useState(false); @@ -28,8 +30,15 @@ export function Notification() { useState(null); const { mutate } = useMarkNotificationAsSeen(); + const { data: unreadNotifications, isLoading: isLoadingNotifications } = + useGetMyNotifications({ seen: false }); const isMobile = useIsMobile(); const { user } = useUser(); + + useEffect(() => { + setUnreadNotificationCount(unreadNotifications?.data.length ?? 0); + }, [unreadNotifications]); + const notificationHistoryHref = useMemo(() => { if (!user?.id) return "/notification-history"; @@ -47,20 +56,14 @@ export function Notification() { return ( <> - { - setIsOpen(open); - if (setIsDotVisible) setIsDotVisible(false); - }} - > + - {isDotVisible && unreadNotificationCount > 0 && ( + {unreadNotificationCount > 0 && ( @@ -118,7 +122,7 @@ export function Notification() {
- + @@ -183,7 +187,7 @@ export function Notification() { diff --git a/src/components/Layouts/header/notification/notification-list.tsx b/src/components/Layouts/header/notification/notification-list.tsx index df988f6..3a57fc8 100644 --- a/src/components/Layouts/header/notification/notification-list.tsx +++ b/src/components/Layouts/header/notification/notification-list.tsx @@ -2,36 +2,29 @@ import Loading from "@/components/loading"; import IsVisible from "@/components/ui/IsVisible"; -import { useGetMyNotifications } from "@/hooks/queries/useNotificationQueries"; import { TNotificationDetailsResponse } from "@/lib/api/types/NotificationHistory"; import { truncateString } from "@/utils/shared"; -import { Dispatch, SetStateAction, useEffect } from "react"; interface IProps { - setUnreadNotificationCount: Dispatch>; + notifications?: TNotificationDetailsResponse[]; + isLoading: boolean; onNotificationClick: (notification: TNotificationDetailsResponse) => void; } const NotificationList = ({ - setUnreadNotificationCount, + notifications, + isLoading, onNotificationClick, }: IProps) => { - const { data, isLoading } = useGetMyNotifications({ seen: false }); - useEffect(() => { - setUnreadNotificationCount(data?.data.length ?? 0); - }, [data, isLoading]); - if (isLoading) - return ( - - ); + return ; return (
    - +

    No new notification

    - {data?.data.map((notification) => ( + {notifications?.map((notification) => (