agora-appbuilder-core 4.0.0-spl.10 → 4.0.0-spl.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agora-appbuilder-core",
3
- "version": "4.0.0-spl.10",
3
+ "version": "4.0.0-spl.11",
4
4
  "description": "React Native template for RTE app builder",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -18,12 +18,13 @@
18
18
  "@sentry/tracing": "6.2.1",
19
19
  "@supersami/rn-foreground-service": "^1.1.1",
20
20
  "agora-react-native-rtm": "1.5.1",
21
- "agora-rtc-sdk-ng": "4.14.0",
22
- "agora-rtm-sdk": "1.4.3-203",
21
+ "agora-rtc-sdk-ng": "4.16.1",
22
+ "agora-rtm-sdk": "1.5.1",
23
23
  "electron-log": "4.3.5",
24
24
  "electron-squirrel-startup": "1.0.0",
25
25
  "electron-updater": "4.3.9",
26
26
  "exponential-backoff": "3.1.0",
27
+ "fetch-retry": "^5.0.6",
27
28
  "graphql": "15.5.0",
28
29
  "nanoevents": "7.0.1",
29
30
  "nanoid": "4.0.0",
@@ -6967,11 +6968,11 @@
6967
6968
  }
6968
6969
  },
6969
6970
  "node_modules/agora-rtc-sdk-ng": {
6970
- "version": "4.14.0",
6971
- "resolved": "https://registry.npmjs.org/agora-rtc-sdk-ng/-/agora-rtc-sdk-ng-4.14.0.tgz",
6972
- "integrity": "sha512-87WZEz+Lkhs39/K9iqBeQYUl6HIWoiyicez/DxspQ37N9NRWRRmoLVS1yUfG6FPWWxZiY+VEJbzPLPhuAihrpQ==",
6971
+ "version": "4.16.1",
6972
+ "resolved": "https://registry.npmjs.org/agora-rtc-sdk-ng/-/agora-rtc-sdk-ng-4.16.1.tgz",
6973
+ "integrity": "sha512-9ccs22X/BEAGe5tIGx2OqWkGpdvuGoB7xq72BouuR5HhP0WVBIBimixOvXXftlY9SwDWsBfKhBV23EtA7jtrTA==",
6973
6974
  "dependencies": {
6974
- "agora-rte-extension": "^1.0.22"
6975
+ "agora-rte-extension": "^1.2.3"
6975
6976
  }
6976
6977
  },
6977
6978
  "node_modules/agora-rte-extension": {
@@ -6980,9 +6981,9 @@
6980
6981
  "integrity": "sha512-k3yNrYVyzJRoQJjaJUktKUI1XRtf8J1XsW8OzYKFqGlS8WQRMsES1+Phj2rfuEriiLObfuyuCimG6KHQCt5tiw=="
6981
6982
  },
6982
6983
  "node_modules/agora-rtm-sdk": {
6983
- "version": "1.4.3-203",
6984
- "resolved": "https://registry.npmjs.org/agora-rtm-sdk/-/agora-rtm-sdk-1.4.3-203.tgz",
6985
- "integrity": "sha512-uQh9zqRtELAblxt7nXSv20pH7oQfTDj7gC2NI2cDIe9dcKBlQpEVf2wBM68so6sZ767ZLcW+z/FCd5QVCt9RvA=="
6984
+ "version": "1.5.1",
6985
+ "resolved": "https://registry.npmjs.org/agora-rtm-sdk/-/agora-rtm-sdk-1.5.1.tgz",
6986
+ "integrity": "sha512-4zMZVijEOTimIaY4VUS6kJxg7t+nTV3Frtt01Ffs6dvkOrPmpeuCu/1MX88QgAOE04IBiLo0l89ysc+woVn2FA=="
6986
6987
  },
6987
6988
  "node_modules/ajv": {
6988
6989
  "version": "6.12.6",
@@ -12070,6 +12071,15 @@
12070
12071
  "node": ">=8"
12071
12072
  }
12072
12073
  },
12074
+ "node_modules/eslint/node_modules/type-fest": {
12075
+ "version": "0.8.1",
12076
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
12077
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
12078
+ "dev": true,
12079
+ "engines": {
12080
+ "node": ">=8"
12081
+ }
12082
+ },
12073
12083
  "node_modules/eslint/node_modules/which": {
12074
12084
  "version": "1.3.1",
12075
12085
  "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -12870,6 +12880,11 @@
12870
12880
  "pend": "~1.2.0"
12871
12881
  }
12872
12882
  },
12883
+ "node_modules/fetch-retry": {
12884
+ "version": "5.0.6",
12885
+ "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz",
12886
+ "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ=="
12887
+ },
12873
12888
  "node_modules/figures": {
12874
12889
  "version": "2.0.0",
12875
12890
  "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
@@ -24374,6 +24389,15 @@
24374
24389
  "node": ">=8"
24375
24390
  }
24376
24391
  },
24392
+ "node_modules/read-pkg-up/node_modules/type-fest": {
24393
+ "version": "0.8.1",
24394
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
24395
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
24396
+ "dev": true,
24397
+ "engines": {
24398
+ "node": ">=8"
24399
+ }
24400
+ },
24377
24401
  "node_modules/read-pkg/node_modules/parse-json": {
24378
24402
  "version": "5.2.0",
24379
24403
  "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -27867,12 +27891,17 @@
27867
27891
  }
27868
27892
  },
27869
27893
  "node_modules/type-fest": {
27870
- "version": "0.8.1",
27871
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
27872
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
27894
+ "version": "2.19.0",
27895
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
27896
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
27873
27897
  "dev": true,
27898
+ "optional": true,
27899
+ "peer": true,
27874
27900
  "engines": {
27875
- "node": ">=8"
27901
+ "node": ">=12.20"
27902
+ },
27903
+ "funding": {
27904
+ "url": "https://github.com/sponsors/sindresorhus"
27876
27905
  }
27877
27906
  },
27878
27907
  "node_modules/type-is": {
@@ -34838,11 +34867,11 @@
34838
34867
  "requires": {}
34839
34868
  },
34840
34869
  "agora-rtc-sdk-ng": {
34841
- "version": "4.14.0",
34842
- "resolved": "https://registry.npmjs.org/agora-rtc-sdk-ng/-/agora-rtc-sdk-ng-4.14.0.tgz",
34843
- "integrity": "sha512-87WZEz+Lkhs39/K9iqBeQYUl6HIWoiyicez/DxspQ37N9NRWRRmoLVS1yUfG6FPWWxZiY+VEJbzPLPhuAihrpQ==",
34870
+ "version": "4.16.1",
34871
+ "resolved": "https://registry.npmjs.org/agora-rtc-sdk-ng/-/agora-rtc-sdk-ng-4.16.1.tgz",
34872
+ "integrity": "sha512-9ccs22X/BEAGe5tIGx2OqWkGpdvuGoB7xq72BouuR5HhP0WVBIBimixOvXXftlY9SwDWsBfKhBV23EtA7jtrTA==",
34844
34873
  "requires": {
34845
- "agora-rte-extension": "^1.0.22"
34874
+ "agora-rte-extension": "^1.2.3"
34846
34875
  }
34847
34876
  },
34848
34877
  "agora-rte-extension": {
@@ -34851,9 +34880,9 @@
34851
34880
  "integrity": "sha512-k3yNrYVyzJRoQJjaJUktKUI1XRtf8J1XsW8OzYKFqGlS8WQRMsES1+Phj2rfuEriiLObfuyuCimG6KHQCt5tiw=="
34852
34881
  },
34853
34882
  "agora-rtm-sdk": {
34854
- "version": "1.4.3-203",
34855
- "resolved": "https://registry.npmjs.org/agora-rtm-sdk/-/agora-rtm-sdk-1.4.3-203.tgz",
34856
- "integrity": "sha512-uQh9zqRtELAblxt7nXSv20pH7oQfTDj7gC2NI2cDIe9dcKBlQpEVf2wBM68so6sZ767ZLcW+z/FCd5QVCt9RvA=="
34883
+ "version": "1.5.1",
34884
+ "resolved": "https://registry.npmjs.org/agora-rtm-sdk/-/agora-rtm-sdk-1.5.1.tgz",
34885
+ "integrity": "sha512-4zMZVijEOTimIaY4VUS6kJxg7t+nTV3Frtt01Ffs6dvkOrPmpeuCu/1MX88QgAOE04IBiLo0l89ysc+woVn2FA=="
34857
34886
  },
34858
34887
  "ajv": {
34859
34888
  "version": "6.12.6",
@@ -38689,6 +38718,12 @@
38689
38718
  "has-flag": "^4.0.0"
38690
38719
  }
38691
38720
  },
38721
+ "type-fest": {
38722
+ "version": "0.8.1",
38723
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
38724
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
38725
+ "dev": true
38726
+ },
38692
38727
  "which": {
38693
38728
  "version": "1.3.1",
38694
38729
  "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -39478,6 +39513,11 @@
39478
39513
  "pend": "~1.2.0"
39479
39514
  }
39480
39515
  },
39516
+ "fetch-retry": {
39517
+ "version": "5.0.6",
39518
+ "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz",
39519
+ "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ=="
39520
+ },
39481
39521
  "figures": {
39482
39522
  "version": "2.0.0",
39483
39523
  "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
@@ -48577,6 +48617,12 @@
48577
48617
  "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
48578
48618
  "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
48579
48619
  "dev": true
48620
+ },
48621
+ "type-fest": {
48622
+ "version": "0.8.1",
48623
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
48624
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
48625
+ "dev": true
48580
48626
  }
48581
48627
  }
48582
48628
  },
@@ -51300,10 +51346,12 @@
51300
51346
  "dev": true
51301
51347
  },
51302
51348
  "type-fest": {
51303
- "version": "0.8.1",
51304
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
51305
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
51306
- "dev": true
51349
+ "version": "2.19.0",
51350
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
51351
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
51352
+ "dev": true,
51353
+ "optional": true,
51354
+ "peer": true
51307
51355
  },
51308
51356
  "type-is": {
51309
51357
  "version": "1.6.18",
@@ -20,8 +20,7 @@ import {RtmClientEvents} from 'agora-react-native-rtm/lib/typescript/src/RtmEngi
20
20
  import AgoraRTM, {VERSION} from 'agora-rtm-sdk';
21
21
  // export {RtmAttribute}
22
22
  //
23
- interface RtmAttributePlaceholder {
24
- };
23
+ interface RtmAttributePlaceholder {}
25
24
  export {RtmAttributePlaceholder as RtmAttribute};
26
25
 
27
26
  type callbackType = (args?: any) => void;
@@ -99,6 +98,8 @@ export default class RtmEngine {
99
98
  this.appId = APP_ID;
100
99
  this.client = AgoraRTM.createInstance(this.appId);
101
100
 
101
+ window.rtmClient = this.client;
102
+
102
103
  this.client.on('ConnectionStateChanged', (state, reason) => {
103
104
  this.clientEventsMap.get('connectionStateChanged')({state, reason});
104
105
  });
@@ -58,12 +58,13 @@
58
58
  "@sentry/tracing": "6.2.1",
59
59
  "@supersami/rn-foreground-service": "^1.1.1",
60
60
  "agora-react-native-rtm": "1.5.1",
61
- "agora-rtc-sdk-ng": "4.14.0",
62
- "agora-rtm-sdk": "1.4.3-203",
61
+ "agora-rtc-sdk-ng": "4.16.1",
62
+ "agora-rtm-sdk": "1.5.1",
63
63
  "electron-log": "4.3.5",
64
64
  "electron-squirrel-startup": "1.0.0",
65
65
  "electron-updater": "4.3.9",
66
66
  "exponential-backoff": "3.1.0",
67
+ "fetch-retry": "^5.0.6",
67
68
  "graphql": "15.5.0",
68
69
  "nanoevents": "7.0.1",
69
70
  "nanoid": "4.0.0",
@@ -34,6 +34,9 @@ import ToastComponent from './components/ToastComponent';
34
34
  import {ToastContext, ToastProvider} from './components/useToast';
35
35
  import {SdkApiContext} from './components/SdkApiContext';
36
36
  import isSDK from './utils/isSDK';
37
+ import {setupLogger} from './utils/axiomLogger';
38
+
39
+ setupLogger();
37
40
 
38
41
  interface AppWrapperProps {
39
42
  children: React.ReactNode;
@@ -437,7 +437,15 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
437
437
  checkDeviceExists(storedDevice, deviceList)
438
438
  ) {
439
439
  log(logTag, deviceLogTag, 'Setting to active id', storedDevice);
440
- setDevice(storedDevice);
440
+ setDevice(storedDevice).catch((e:Error) => {
441
+ log(
442
+ logTag,
443
+ deviceLogTag,
444
+ 'ERROR:Setting to active id',
445
+ storedDevice,
446
+ e.message,
447
+ );
448
+ });
441
449
  } else {
442
450
  eventEmitter(currentDevice);
443
451
  setDeviceUi(currentDevice);
@@ -622,7 +630,7 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
622
630
  return new Promise<void>((res, rej) => {
623
631
  if (mutexRef.current) {
624
632
  const e = new Error(logtag + ' Change already in progress');
625
- log('DeviceConfigure:', logtag, 'Error setting', kind, e);
633
+ log('DeviceConfigure:', logtag, 'Error setting', kind, e.message);
626
634
  rej(e);
627
635
  return;
628
636
  }
@@ -33,6 +33,7 @@ import RTMEngine from '../rtm/RTMEngine';
33
33
  import {filterObject} from '../utils';
34
34
  import SDKEvents from '../utils/SdkEvents';
35
35
  import isSDK from '../utils/isSDK';
36
+ import {useAsyncEffect} from '../utils/useAsyncEffect';
36
37
 
37
38
  export enum UserType {
38
39
  ScreenShare = 'screenshare',
@@ -120,7 +121,7 @@ const RtmConfigure = (props: any) => {
120
121
  });
121
122
  RTMEngine.getInstance().setLocalUID(localUid.toString());
122
123
  timerValueRef.current = 5;
123
- setAttribute();
124
+ await setAttribute();
124
125
  } catch (error) {
125
126
  setTimeout(async () => {
126
127
  timerValueRef.current = timerValueRef.current + timerValueRef.current;
@@ -392,7 +393,7 @@ const RtmConfigure = (props: any) => {
392
393
  }
393
394
  }
394
395
  });
395
- doLoginAndSetupRTM();
396
+ await doLoginAndSetupRTM();
396
397
  };
397
398
 
398
399
  const runQueuedEvents = async () => {
@@ -443,23 +444,24 @@ const RtmConfigure = (props: any) => {
443
444
  };
444
445
 
445
446
  const end = async () => {
446
- callActive
447
- ? (RTMEngine.getInstance().destroy(),
448
- EventUtils.clear(),
449
- setHasUserJoinedRTM(false),
450
- // setLogin(false),
451
- console.log('RTM cleanup done'))
452
- : {};
447
+ if (!callActive) {
448
+ return;
449
+ }
450
+ await RTMEngine.getInstance().destroy();
451
+ setHasUserJoinedRTM(false);
452
+ // setLogin(false),
453
+ console.log('RTM cleanup done');
453
454
  };
454
455
 
455
- useEffect(() => {
456
- if (!mountState.current) {
457
- mountState.current = true;
458
- return () => {};
456
+ useAsyncEffect(async () => {
457
+ if (!callActive) {
458
+ console.log('waiting to init RTM');
459
+ setLogin(true);
460
+ } else {
461
+ await init();
459
462
  }
460
- callActive ? init() : (console.log('waiting to init RTM'), setLogin(true));
461
- return () => {
462
- end();
463
+ return async () => {
464
+ await end();
463
465
  };
464
466
  // eslint-disable-next-line react-hooks/exhaustive-deps
465
467
  }, [rtcProps.channel, rtcProps.appId, callActive]);
@@ -177,166 +177,179 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
177
177
  },
178
178
  });
179
179
  };
180
- events.on(EventNames.PUBLIC_CHAT_MESSAGE, (data) => {
181
- const payload = JSON.parse(data.payload);
182
- const messageAction = payload.action;
183
- const messageData = payload.value;
184
- switch (messageAction) {
185
- case ChatMessageActionEnum.Create:
186
- showMessageNotification(messageData.msg, `${data.sender}`);
187
- addMessageToStore(data.sender, {
188
- msg: messageData.msg,
189
- createdTimestamp: messageData.createdTimestamp,
190
- isDeleted: messageData.isDeleted,
191
- msgId: messageData.msgId,
192
- });
193
- /**
194
- * if chat group window is not active.
195
- * then we will increment the unread count
196
- */
197
- if (!groupActiveRef.current) {
198
- setUnreadGroupMessageCount((prevState) => {
199
- return prevState + 1;
200
- });
201
- }
202
- break;
203
- case ChatMessageActionEnum.Update:
204
- setMessageStore((prevState) => {
205
- const newState = prevState.map((item) => {
206
- if (
207
- item.msgId === messageData.msgId &&
208
- item.uid === data.sender
209
- ) {
210
- return {
211
- ...item,
212
- msg: messageData.msg,
213
- updatedTimestamp: messageData.updatedTimestamp,
214
- };
215
- } else {
216
- return item;
217
- }
218
- });
219
- return newState;
220
- });
221
- break;
222
- case ChatMessageActionEnum.Delete:
223
- setMessageStore((prevState) => {
224
- const newState = prevState.map((item) => {
225
- if (
226
- item.msgId === messageData.msgId &&
227
- item.uid === data.sender
228
- ) {
229
- return {
230
- ...item,
231
- isDeleted: true,
232
- updatedTimestamp: messageData.updatedTimestamp,
233
- };
234
- } else {
235
- return item;
236
- }
237
- });
238
- return newState;
239
- });
240
- break;
241
- default:
242
- break;
243
- }
244
- });
245
- events.on(EventNames.PRIVATE_CHAT_MESSAGE, (data) => {
246
- const payload = JSON.parse(data.payload);
247
- const messageAction = payload.action;
248
- const messageData = payload.value;
249
- switch (messageAction) {
250
- case ChatMessageActionEnum.Create:
251
- //To order chat participant based on recent message
252
- try {
253
- updateRenderListState(data.sender, {
254
- lastMessageTimeStamp: new Date().getTime(),
255
- });
256
- } catch (error) {
257
- console.log("ERROR : couldn't update the last message timestamp");
258
- }
259
- showMessageNotification(messageData.msg, `${data.sender}`, true);
260
- addMessageToPrivateStore(
261
- data.sender,
262
- {
180
+
181
+ const unsubPublicChatMessage = events.on(
182
+ EventNames.PUBLIC_CHAT_MESSAGE,
183
+ (data) => {
184
+ const payload = JSON.parse(data.payload);
185
+ const messageAction = payload.action;
186
+ const messageData = payload.value;
187
+ switch (messageAction) {
188
+ case ChatMessageActionEnum.Create:
189
+ showMessageNotification(messageData.msg, `${data.sender}`);
190
+ addMessageToStore(data.sender, {
263
191
  msg: messageData.msg,
264
192
  createdTimestamp: messageData.createdTimestamp,
265
- msgId: messageData.msgId,
266
193
  isDeleted: messageData.isDeleted,
267
- },
268
- false,
269
- );
270
- /**
271
- * if user's private window is active.
272
- * then we will not increment the unread count
273
- */
274
-
275
- if (!(individualActiveRef.current === data.sender)) {
276
- setUnreadIndividualMessageCount((prevState) => {
277
- const prevCount =
278
- prevState && prevState[data.sender]
279
- ? prevState[data.sender]
280
- : 0;
281
- return {
282
- ...prevState,
283
- [data.sender]: prevCount + 1,
284
- };
194
+ msgId: messageData.msgId,
285
195
  });
286
- }
287
- break;
288
- case ChatMessageActionEnum.Update:
289
- setPrivateMessageStore((prevState) => {
290
- const privateChatOfUid = prevState[data.sender];
291
- const updatedData = privateChatOfUid.map((item) => {
292
- if (
293
- item.msgId === messageData.msgId &&
294
- item.uid === data.sender
295
- ) {
296
- return {
297
- ...item,
298
- msg: messageData.msg,
299
- updatedTimestamp: messageData.updatedTimestamp,
300
- };
301
- } else {
302
- return item;
303
- }
196
+ /**
197
+ * if chat group window is not active.
198
+ * then we will increment the unread count
199
+ */
200
+ if (!groupActiveRef.current) {
201
+ setUnreadGroupMessageCount((prevState) => {
202
+ return prevState + 1;
203
+ });
204
+ }
205
+ break;
206
+ case ChatMessageActionEnum.Update:
207
+ setMessageStore((prevState) => {
208
+ const newState = prevState.map((item) => {
209
+ if (
210
+ item.msgId === messageData.msgId &&
211
+ item.uid === data.sender
212
+ ) {
213
+ return {
214
+ ...item,
215
+ msg: messageData.msg,
216
+ updatedTimestamp: messageData.updatedTimestamp,
217
+ };
218
+ } else {
219
+ return item;
220
+ }
221
+ });
222
+ return newState;
304
223
  });
305
- const newState = {
306
- ...prevState,
307
- [data.sender]: updatedData,
308
- };
309
- return newState;
310
- });
311
- break;
312
- case ChatMessageActionEnum.Delete:
313
- setPrivateMessageStore((prevState) => {
314
- const privateChatOfUid = prevState[data.sender];
315
- const updatedData = privateChatOfUid.map((item) => {
316
- if (
317
- item.msgId === messageData.msgId &&
318
- item.uid === data.sender
319
- ) {
224
+ break;
225
+ case ChatMessageActionEnum.Delete:
226
+ setMessageStore((prevState) => {
227
+ const newState = prevState.map((item) => {
228
+ if (
229
+ item.msgId === messageData.msgId &&
230
+ item.uid === data.sender
231
+ ) {
232
+ return {
233
+ ...item,
234
+ isDeleted: true,
235
+ updatedTimestamp: messageData.updatedTimestamp,
236
+ };
237
+ } else {
238
+ return item;
239
+ }
240
+ });
241
+ return newState;
242
+ });
243
+ break;
244
+ default:
245
+ break;
246
+ }
247
+ },
248
+ );
249
+
250
+ const unsubPrivateChatMessage = events.on(
251
+ EventNames.PRIVATE_CHAT_MESSAGE,
252
+ (data) => {
253
+ const payload = JSON.parse(data.payload);
254
+ const messageAction = payload.action;
255
+ const messageData = payload.value;
256
+ switch (messageAction) {
257
+ case ChatMessageActionEnum.Create:
258
+ //To order chat participant based on recent message
259
+ try {
260
+ updateRenderListState(data.sender, {
261
+ lastMessageTimeStamp: new Date().getTime(),
262
+ });
263
+ } catch (error) {
264
+ console.log("ERROR : couldn't update the last message timestamp");
265
+ }
266
+ showMessageNotification(messageData.msg, `${data.sender}`, true);
267
+ addMessageToPrivateStore(
268
+ data.sender,
269
+ {
270
+ msg: messageData.msg,
271
+ createdTimestamp: messageData.createdTimestamp,
272
+ msgId: messageData.msgId,
273
+ isDeleted: messageData.isDeleted,
274
+ },
275
+ false,
276
+ );
277
+ /**
278
+ * if user's private window is active.
279
+ * then we will not increment the unread count
280
+ */
281
+
282
+ if (!(individualActiveRef.current === data.sender)) {
283
+ setUnreadIndividualMessageCount((prevState) => {
284
+ const prevCount =
285
+ prevState && prevState[data.sender]
286
+ ? prevState[data.sender]
287
+ : 0;
320
288
  return {
321
- ...item,
322
- isDeleted: true,
323
- updatedTimestamp: messageData.updatedTimestamp,
289
+ ...prevState,
290
+ [data.sender]: prevCount + 1,
324
291
  };
325
- } else {
326
- return item;
327
- }
292
+ });
293
+ }
294
+ break;
295
+ case ChatMessageActionEnum.Update:
296
+ setPrivateMessageStore((prevState) => {
297
+ const privateChatOfUid = prevState[data.sender];
298
+ const updatedData = privateChatOfUid.map((item) => {
299
+ if (
300
+ item.msgId === messageData.msgId &&
301
+ item.uid === data.sender
302
+ ) {
303
+ return {
304
+ ...item,
305
+ msg: messageData.msg,
306
+ updatedTimestamp: messageData.updatedTimestamp,
307
+ };
308
+ } else {
309
+ return item;
310
+ }
311
+ });
312
+ const newState = {
313
+ ...prevState,
314
+ [data.sender]: updatedData,
315
+ };
316
+ return newState;
328
317
  });
329
- const newState = {
330
- ...prevState,
331
- [data.sender]: updatedData,
332
- };
333
- return newState;
334
- });
335
- break;
336
- default:
337
- break;
338
- }
339
- });
318
+ break;
319
+ case ChatMessageActionEnum.Delete:
320
+ setPrivateMessageStore((prevState) => {
321
+ const privateChatOfUid = prevState[data.sender];
322
+ const updatedData = privateChatOfUid.map((item) => {
323
+ if (
324
+ item.msgId === messageData.msgId &&
325
+ item.uid === data.sender
326
+ ) {
327
+ return {
328
+ ...item,
329
+ isDeleted: true,
330
+ updatedTimestamp: messageData.updatedTimestamp,
331
+ };
332
+ } else {
333
+ return item;
334
+ }
335
+ });
336
+ const newState = {
337
+ ...prevState,
338
+ [data.sender]: updatedData,
339
+ };
340
+ return newState;
341
+ });
342
+ break;
343
+ default:
344
+ break;
345
+ }
346
+ },
347
+ );
348
+
349
+ return () => {
350
+ unsubPublicChatMessage();
351
+ unsubPrivateChatMessage();
352
+ };
340
353
  }, []);
341
354
 
342
355
  const addMessageToStore = (uid: UidType, body: messageInterface) => {