-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathNotificationsFeed.tsx
More file actions
79 lines (69 loc) · 1.89 KB
/
NotificationsFeed.tsx
File metadata and controls
79 lines (69 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import {
useClearHistory,
useHistory,
useReadHistory,
useSubscribe,
useUnreadSummary,
} from '@dialectlabs/react-sdk';
import { PropsWithChildren, useEffect } from 'react';
import { ErrorNotifications } from './ErrorNotifications';
import { NoNotifications } from './NoNotifications';
import { NotificationsList } from './NotificationsList';
import { NotificationsLoading } from './NotificationsLoading';
export const NotificationsFeed = ({
children,
isEmpty,
isLoading,
isError,
}: PropsWithChildren<{
isLoading: boolean;
isEmpty: boolean;
isError: boolean;
}>) => {
if (isLoading) {
return <NotificationsLoading />;
}
if (isError) {
return <ErrorNotifications />;
}
if (isEmpty) {
return <NoNotifications />;
}
return children;
};
NotificationsFeed.Container = function NotificationsFeeContainer() {
const {
history,
isLoading: isHistoryLoading,
error: historyError,
} = useHistory();
const { isLoading: isSubscribeLoading, error: subscribeError } =
useSubscribe();
const { read } = useReadHistory();
const { error: clearError } = useClearHistory();
const { refresh: refreshSummary } = useUnreadSummary({
revalidateOnMount: false,
revalidateOnFocus: false,
});
const notifications = history?.alerts ?? [];
const notificationsCount = notifications.length;
const isLoading = isHistoryLoading || isSubscribeLoading;
const hasError = !!subscribeError || !!historyError || !!clearError;
const isEmpty = notificationsCount === 0;
useEffect(() => {
if (notificationsCount > 0) {
read().then(() => refreshSummary());
}
// ignoring fn deps
// eslint-disable-next-line
}, [notificationsCount]);
return (
<NotificationsFeed
isEmpty={isEmpty}
isError={hasError}
isLoading={isLoading}
>
<NotificationsList.Container alerts={notifications} />
</NotificationsFeed>
);
};