11import { FC } from "react" ;
22import { observer } from "mobx-react" ;
3- import { RefreshCw } from "lucide-react" ;
4- import { Tooltip } from "@plane/ui" ;
3+ import { CheckCheck , RefreshCw } from "lucide-react" ;
4+ import { Spinner , Tooltip } from "@plane/ui" ;
55// components
66import { NotificationFilter , NotificationHeaderMenuOption } from "@/components/workspace-notifications" ;
77// constants
8+ import { NOTIFICATIONS_READ } from "@/constants/event-tracker" ;
89import { ENotificationLoader , ENotificationQueryParamType } from "@/constants/notification" ;
910// hooks
10- import { useWorkspaceNotifications } from "@/hooks/store" ;
11+ import { useEventTracker , useWorkspaceNotifications } from "@/hooks/store" ;
1112import { usePlatformOS } from "@/hooks/use-platform-os" ;
1213
1314type TNotificationSidebarHeaderOptions = {
@@ -18,7 +19,8 @@ export const NotificationSidebarHeaderOptions: FC<TNotificationSidebarHeaderOpti
1819 const { workspaceSlug } = props ;
1920 // hooks
2021 const { isMobile } = usePlatformOS ( ) ;
21- const { loader, getNotifications } = useWorkspaceNotifications ( ) ;
22+ const { loader, getNotifications, markAllNotificationsAsRead } = useWorkspaceNotifications ( ) ;
23+ const { captureEvent } = useEventTracker ( ) ;
2224
2325 const refreshNotifications = async ( ) => {
2426 if ( loader ) return ;
@@ -29,8 +31,35 @@ export const NotificationSidebarHeaderOptions: FC<TNotificationSidebarHeaderOpti
2931 }
3032 } ;
3133
34+ const handleMarkAllNotificationsAsRead = async ( ) => {
35+ // NOTE: We are using loader to prevent continues request when we are making all the notification to read
36+ if ( loader ) return ;
37+ try {
38+ await markAllNotificationsAsRead ( workspaceSlug ) ;
39+ } catch ( error ) {
40+ console . error ( error ) ;
41+ }
42+ } ;
43+
3244 return (
3345 < div className = "relative flex justify-center items-center gap-2 text-sm" >
46+ { /* mark all notifications as read*/ }
47+ < Tooltip tooltipContent = "Mark all as read" isMobile = { isMobile } position = "bottom" >
48+ < div
49+ className = "flex-shrink-0 w-5 h-5 flex justify-center items-center overflow-hidden cursor-pointer transition-all hover:bg-custom-background-80 rounded-sm"
50+ onClick = { ( ) => {
51+ captureEvent ( NOTIFICATIONS_READ ) ;
52+ handleMarkAllNotificationsAsRead ( ) ;
53+ } }
54+ >
55+ { loader === ENotificationLoader . MARK_ALL_AS_READY ? (
56+ < Spinner height = "14px" width = "14px" />
57+ ) : (
58+ < CheckCheck className = "h-3 w-3" />
59+ ) }
60+ </ div >
61+ </ Tooltip >
62+
3463 { /* refetch current notifications */ }
3564 < Tooltip tooltipContent = "Refresh" isMobile = { isMobile } position = "bottom" >
3665 < div
@@ -45,7 +74,7 @@ export const NotificationSidebarHeaderOptions: FC<TNotificationSidebarHeaderOpti
4574 < NotificationFilter />
4675
4776 { /* notification menu options */ }
48- < NotificationHeaderMenuOption workspaceSlug = { workspaceSlug } />
77+ < NotificationHeaderMenuOption />
4978 </ div >
5079 ) ;
5180} ) ;
0 commit comments