Skip to content

Commit f424331

Browse files
fix: Add unique identifier for PubSub events in SirenProvider (#59)
* fix: Add unique identifier for PubSub events in SirenProvider
1 parent 311bebc commit f424331

File tree

5 files changed

+28
-18
lines changed

5 files changed

+28
-18
lines changed

src/components/card.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Animated, Image, StyleSheet, Text, TouchableOpacity, View } from 'react
44
import type { NotificationCardProps } from '../types';
55
import { CommonUtils, useSiren } from '../utils';
66
import { eventTypes, events } from '../utils/constants';
7+
import { useSirenContext } from './sirenProvider';
78
import CloseIcon from './closeIcon';
89
import TimerIcon from './timerIcon';
910

@@ -52,6 +53,7 @@ const Card = (props: NotificationCardProps): ReactElement => {
5253
onMediaThumbnailClick
5354
} = cardProps;
5455
const { markAsReadById } = useSiren();
56+
const { id: providerId } = useSirenContext();
5557

5658
const opacity = useRef(new Animated.Value(1)).current;
5759

@@ -145,7 +147,7 @@ const Card = (props: NotificationCardProps): ReactElement => {
145147
}).start(() => {
146148
const payload = { id: notification.id, action: eventTypes.DELETE_ITEM };
147149

148-
PubSub.publish(events.NOTIFICATION_LIST_EVENT, JSON.stringify(payload));
150+
PubSub.publish(`${events.NOTIFICATION_LIST_EVENT}${providerId}`, JSON.stringify(payload));
149151
});
150152
};
151153

src/components/sirenInbox.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ const SirenInbox = (props: SirenInboxProps): ReactElement => {
105105
itemsPerFetch > MAXIMUM_ITEMS_PER_FETCH ? MAXIMUM_ITEMS_PER_FETCH : itemsPerFetch
106106
);
107107

108-
const { siren, verificationStatus } = useSirenContext();
108+
const { siren, verificationStatus, id } = useSirenContext();
109109

110110
const { deleteById, deleteByDate, markAllAsViewed } = useSiren();
111111

@@ -123,7 +123,7 @@ const SirenInbox = (props: SirenInboxProps): ReactElement => {
123123
const disableCardDelete = useRef(false);
124124

125125
useEffect(() => {
126-
PubSub.subscribe(events.NOTIFICATION_LIST_EVENT, notificationSubscriber);
126+
PubSub.subscribe(`${events.NOTIFICATION_LIST_EVENT}${id}`, notificationSubscriber);
127127

128128
return cleanUp();
129129
}, []);
@@ -173,7 +173,7 @@ const SirenInbox = (props: SirenInboxProps): ReactElement => {
173173
const cleanUp = () => () => {
174174
siren?.stopRealTimeFetch(EventType.NOTIFICATION);
175175
setNotifications([]);
176-
PubSub.unsubscribe(events.NOTIFICATION_LIST_EVENT);
176+
PubSub.unsubscribe(`${events.NOTIFICATION_LIST_EVENT}${id}`);
177177
handleMarkAllAsViewed();
178178
};
179179

src/components/sirenInboxIcon.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ const SirenInboxIcon = (props: SirenInboxIconProps) => {
5151
onError = () => null
5252
} = props;
5353

54-
const { siren, verificationStatus } = useSirenContext();
54+
const { siren, verificationStatus, id } = useSirenContext();
5555

5656
const [unviewedCount, seUnviewedCount] = useState<number>(0);
5757

@@ -69,7 +69,7 @@ const SirenInboxIcon = (props: SirenInboxIconProps) => {
6969
// Clean up - stop polling when component unmounts
7070
const cleanUp = () => () => {
7171
siren?.stopRealTimeFetch(EventType.UNVIEWED_COUNT);
72-
PubSub.unsubscribe(events.NOTIFICATION_COUNT_EVENT);
72+
PubSub.unsubscribe(`${events.NOTIFICATION_COUNT_EVENT}${id}`);
7373
seUnviewedCount(0);
7474
};
7575

@@ -82,7 +82,7 @@ const SirenInboxIcon = (props: SirenInboxIconProps) => {
8282
};
8383

8484
useEffect(() => {
85-
PubSub.subscribe(events.NOTIFICATION_COUNT_EVENT, notificationSubscriber);
85+
PubSub.subscribe(`${events.NOTIFICATION_COUNT_EVENT}${id}`, notificationSubscriber);
8686

8787
return cleanUp();
8888
}, []);

src/components/sirenProvider.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { useSiren } from '../utils';
2525
type SirenContextProp = {
2626
siren: Siren | null;
2727
verificationStatus: VerificationStatus;
28+
id: string;
2829
};
2930

3031
interface SirenProvider {
@@ -34,7 +35,8 @@ interface SirenProvider {
3435

3536
export const SirenContext = createContext<SirenContextProp>({
3637
siren: null,
37-
verificationStatus: VerificationStatus.PENDING
38+
verificationStatus: VerificationStatus.PENDING,
39+
id: ''
3840
});
3941

4042
/**
@@ -74,8 +76,13 @@ export const useSirenContext = (): SirenContextProp => useContext(SirenContext);
7476
const SirenProvider: React.FC<SirenProvider> = ({ config, children }) => {
7577
let retryCount = 0;
7678

79+
const generateUniqueId = (): string => {
80+
return Math.random().toString(36).substring(2, 15);
81+
};
82+
7783
const { markAllAsViewed } = useSiren();
7884

85+
const [id] = useState(generateUniqueId());
7986
const [siren, setSiren] = useState<Siren | null>(null);
8087
const [verificationStatus, setVerificationStatus] = useState<VerificationStatus>(
8188
VerificationStatus.PENDING
@@ -104,8 +111,8 @@ const SirenProvider: React.FC<SirenProvider> = ({ config, children }) => {
104111
action: eventTypes.RESET_NOTIFICATIONS
105112
};
106113

107-
PubSub.publish(events.NOTIFICATION_COUNT_EVENT, JSON.stringify(updateCountPayload));
108-
PubSub.publish(events.NOTIFICATION_LIST_EVENT, JSON.stringify(updateNotificationPayload));
114+
PubSub.publish(`${events.NOTIFICATION_COUNT_EVENT}${id}`, JSON.stringify(updateCountPayload));
115+
PubSub.publish(`${events.NOTIFICATION_LIST_EVENT}${id}`, JSON.stringify(updateNotificationPayload));
109116
};
110117

111118
const onNewNotificationEvent = (responseData: NotificationDataType[]) => {
@@ -114,7 +121,7 @@ const SirenProvider: React.FC<SirenProvider> = ({ config, children }) => {
114121
markAllAsViewed(responseData[0].createdAt);
115122
const payload = { newNotifications: responseData, action: eventTypes.NEW_NOTIFICATIONS };
116123

117-
PubSub.publish(events.NOTIFICATION_LIST_EVENT, JSON.stringify(payload));
124+
PubSub.publish(`${events.NOTIFICATION_LIST_EVENT}${id}`, JSON.stringify(payload));
118125
};
119126

120127
const onTotalUnviewedCountEvent = (response: UnviewedCountApiResponse) => {
@@ -124,7 +131,7 @@ const SirenProvider: React.FC<SirenProvider> = ({ config, children }) => {
124131
action: eventTypes.UPDATE_NOTIFICATIONS_COUNT
125132
};
126133

127-
PubSub.publish(events.NOTIFICATION_COUNT_EVENT, JSON.stringify(payload));
134+
PubSub.publish(`${events.NOTIFICATION_COUNT_EVENT}${id}`, JSON.stringify(payload));
128135
};
129136

130137
const handleNotificationEvent = (response: NotificationsApiResponse) => {
@@ -195,6 +202,7 @@ const SirenProvider: React.FC<SirenProvider> = ({ config, children }) => {
195202
return (
196203
<SirenContext.Provider
197204
value={{
205+
id,
198206
siren,
199207
verificationStatus
200208
}}

src/utils/sirenHook.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { errorMap, events, eventTypes } from './constants';
44
import { useSirenContext } from '../components/sirenProvider';
55

66
const useSiren = () => {
7-
const { siren } = useSirenContext();
7+
const { siren, id: providerId } = useSirenContext();
88

99
const markAsReadById = async (id: string) => {
1010
if (siren)
@@ -14,7 +14,7 @@ const useSiren = () => {
1414
if (response?.data) {
1515
const payload = { id, action: eventTypes.MARK_ITEM_AS_READ };
1616

17-
PubSub.publish(events.NOTIFICATION_LIST_EVENT, JSON.stringify(payload));
17+
PubSub.publish(`${events.NOTIFICATION_LIST_EVENT}${providerId}`, JSON.stringify(payload));
1818
}
1919

2020
return response;
@@ -32,7 +32,7 @@ const useSiren = () => {
3232
if (response?.data) {
3333
const payload = { action: eventTypes.MARK_ALL_AS_READ };
3434

35-
PubSub.publish(events.NOTIFICATION_LIST_EVENT, JSON.stringify(payload));
35+
PubSub.publish(`${events.NOTIFICATION_LIST_EVENT}${providerId}`, JSON.stringify(payload));
3636
}
3737

3838
return response;
@@ -49,7 +49,7 @@ const useSiren = () => {
4949
if (response?.data && shouldUpdateList) {
5050
const payload = { id, action: eventTypes.DELETE_ITEM };
5151

52-
PubSub.publish(events.NOTIFICATION_LIST_EVENT, JSON.stringify(payload));
52+
PubSub.publish(`${events.NOTIFICATION_LIST_EVENT}${providerId}`, JSON.stringify(payload));
5353
}
5454

5555
return response;
@@ -67,7 +67,7 @@ const useSiren = () => {
6767
if (response?.data) {
6868
const payload = { action: eventTypes.DELETE_ALL_ITEM };
6969

70-
PubSub.publish(events.NOTIFICATION_LIST_EVENT, JSON.stringify(payload));
70+
PubSub.publish(`${events.NOTIFICATION_LIST_EVENT}${providerId}`, JSON.stringify(payload));
7171
}
7272

7373
return response;
@@ -83,7 +83,7 @@ const useSiren = () => {
8383
if (response?.data) {
8484
const payload = { unviewedCount: 0, action: eventTypes.UPDATE_NOTIFICATIONS_COUNT };
8585

86-
PubSub.publish(events.NOTIFICATION_COUNT_EVENT, JSON.stringify(payload));
86+
PubSub.publish(`${events.NOTIFICATION_COUNT_EVENT}${providerId}`, JSON.stringify(payload));
8787
}
8888

8989
return response;

0 commit comments

Comments
 (0)