Files
tm_panel/src/components/Layouts/header/notification/notification-list.tsx
T
AmirReza Jamali 50db71843b refactor(Loading): update Loading component import paths
- Changed import paths for the Loading component from "@/app/loading" to "@/components/loading" across multiple files to maintain consistency and improve modularity.
- Removed the Loading component definition from loading.tsx, simplifying the file structure.
2026-04-13 08:07:43 +03:30

55 lines
1.8 KiB
TypeScript

"use client";
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<SetStateAction<number>>;
onNotificationClick: (notification: TNotificationDetailsResponse) => void;
}
const NotificationList = ({
setUnreadNotificationCount,
onNotificationClick,
}: IProps) => {
const { data, isLoading } = useGetMyNotifications({ seen: false });
useEffect(() => {
setUnreadNotificationCount(data?.data.length ?? 0);
}, [data, isLoading]);
if (isLoading)
return (
<Loading className="min-h-48 flex-none justify-center p-6" />
);
return (
<ul className="mb-3 max-h-[23rem] space-y-1.5 overflow-y-auto">
<IsVisible condition={data?.data.length === 0}>
<h2 className="cursor-default ps-2">No new notification</h2>
</IsVisible>
{data?.data.map((notification) => (
<li
role="menuitem"
key={notification.id}
onClick={() => onNotificationClick(notification)}
>
<div className="cursor-pointer rounded-lg px-1 py-2 transition-all duration-300 hover:bg-gray-2 dark:hover:bg-gray-7">
<strong className="block text-lg font-medium capitalize text-dark dark:text-white">
{notification.title}
</strong>
<span className="text-sm font-medium text-dark-5 dark:text-dark-6">
{truncateString(notification.message, 50, 50)}
</span>
</div>
</li>
))}
</ul>
);
};
export default NotificationList;