@amityco/ts-sdk 0.0.1-beta.38 → 0.0.1-beta.39

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.
Files changed (89) hide show
  1. package/dist/@types/core/model.d.ts +2 -0
  2. package/dist/@types/core/model.d.ts.map +1 -1
  3. package/dist/@types/domains/channel.d.ts +2 -2
  4. package/dist/@types/domains/channel.d.ts.map +1 -1
  5. package/dist/@types/domains/feed.d.ts +1 -2
  6. package/dist/@types/domains/feed.d.ts.map +1 -1
  7. package/dist/@types/domains/message.d.ts +1 -1
  8. package/dist/@types/domains/message.d.ts.map +1 -1
  9. package/dist/@types/domains/post.d.ts +1 -1
  10. package/dist/@types/domains/post.d.ts.map +1 -1
  11. package/dist/@types/domains/user.d.ts +8 -0
  12. package/dist/@types/domains/user.d.ts.map +1 -1
  13. package/dist/channel/observers/liveChannels.d.ts.map +1 -1
  14. package/dist/client/api/connectClient.d.ts.map +1 -1
  15. package/dist/core/model/idResolvers.d.ts.map +1 -1
  16. package/dist/core/model/identifyModel.d.ts.map +1 -1
  17. package/dist/core/model/index.d.ts.map +1 -1
  18. package/dist/core/query/filtering.d.ts +10 -0
  19. package/dist/core/query/filtering.d.ts.map +1 -1
  20. package/dist/core/query/paging.d.ts +2 -2
  21. package/dist/core/query/paging.d.ts.map +1 -1
  22. package/dist/core/query/tests/paging.test.d.ts +2 -0
  23. package/dist/core/query/tests/paging.test.d.ts.map +1 -0
  24. package/dist/index.cjs.js +180 -71
  25. package/dist/index.esm.js +178 -71
  26. package/dist/index.umd.js +4 -4
  27. package/dist/message/api/queryMessages.d.ts +2 -2
  28. package/dist/message/api/queryMessages.d.ts.map +1 -1
  29. package/dist/post/observers/livePosts.d.ts +2 -2
  30. package/dist/post/observers/livePosts.d.ts.map +1 -1
  31. package/dist/report/api/createReport.d.ts.map +1 -1
  32. package/dist/report/api/deleteReport.d.ts.map +1 -1
  33. package/dist/report/api/tests/createReport.test.d.ts +2 -0
  34. package/dist/report/api/tests/createReport.test.d.ts.map +1 -0
  35. package/dist/report/api/tests/deleteReport.test.d.ts +2 -0
  36. package/dist/report/api/tests/deleteReport.test.d.ts.map +1 -0
  37. package/dist/user/api/queryUsers.d.ts +1 -6
  38. package/dist/user/api/queryUsers.d.ts.map +1 -1
  39. package/dist/user/observers/index.d.ts +1 -0
  40. package/dist/user/observers/index.d.ts.map +1 -1
  41. package/dist/user/observers/liveUsers.d.ts +18 -0
  42. package/dist/user/observers/liveUsers.d.ts.map +1 -0
  43. package/dist/user/observers/tests/liveUsers.test.d.ts +2 -0
  44. package/dist/user/observers/tests/liveUsers.test.d.ts.map +1 -0
  45. package/dist/utils/liveObject.d.ts +1 -1
  46. package/dist/utils/liveObject.d.ts.map +1 -1
  47. package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
  48. package/dist/utils/tests/dummy/feed.d.ts +21 -0
  49. package/dist/utils/tests/dummy/feed.d.ts.map +1 -0
  50. package/dist/utils/tests/dummy/index.d.ts +1 -0
  51. package/dist/utils/tests/dummy/index.d.ts.map +1 -1
  52. package/dist/utils/tests/dummy/post.d.ts +9 -0
  53. package/dist/utils/tests/dummy/post.d.ts.map +1 -1
  54. package/dist/utils/tests/dummy/user.d.ts +63 -0
  55. package/dist/utils/tests/dummy/user.d.ts.map +1 -1
  56. package/package.json +1 -1
  57. package/src/@types/core/model.ts +4 -0
  58. package/src/@types/domains/channel.ts +2 -2
  59. package/src/@types/domains/feed.ts +1 -3
  60. package/src/@types/domains/message.ts +4 -1
  61. package/src/@types/domains/post.ts +1 -1
  62. package/src/@types/domains/user.ts +14 -0
  63. package/src/cache/api/tests/ingestInCache.test.ts +2 -0
  64. package/src/channel/observers/liveChannels.ts +29 -24
  65. package/src/client/api/connectClient.ts +0 -2
  66. package/src/core/model/idResolvers.ts +2 -0
  67. package/src/core/model/identifyModel.ts +1 -0
  68. package/src/core/model/index.ts +2 -0
  69. package/src/core/query/filtering.ts +33 -3
  70. package/src/core/query/paging.ts +5 -4
  71. package/src/core/query/tests/paging.test.ts +66 -0
  72. package/src/message/api/queryMessages.ts +7 -7
  73. package/src/message/api/tests/queryMessages.test.ts +6 -6
  74. package/src/message/tests/observers/liveMessages.test.ts +4 -4
  75. package/src/post/observers/livePosts.ts +14 -22
  76. package/src/post/observers/tests/livePosts.test.ts +65 -8
  77. package/src/report/api/createReport.ts +1 -6
  78. package/src/report/api/deleteReport.ts +2 -6
  79. package/src/report/api/tests/createReport.test.ts +93 -0
  80. package/src/report/api/tests/deleteReport.test.ts +93 -0
  81. package/src/user/api/queryUsers.ts +1 -6
  82. package/src/user/observers/index.ts +1 -0
  83. package/src/user/observers/liveUsers.ts +162 -0
  84. package/src/user/observers/tests/liveUsers.test.ts +202 -0
  85. package/src/utils/tests/dummy/channel.ts +1 -0
  86. package/src/utils/tests/dummy/feed.ts +13 -0
  87. package/src/utils/tests/dummy/index.ts +2 -0
  88. package/src/utils/tests/dummy/post.ts +6 -2
  89. package/src/utils/tests/dummy/user.ts +36 -0
package/dist/index.esm.js CHANGED
@@ -163,14 +163,14 @@ const partialMatch = (predicate, candidate) => {
163
163
  const checkIfShouldGoesToTombstone = (errorCode) => [400400 /* Amity.ServerError.ITEM_NOT_FOUND */, 400300 /* Amity.ServerError.FORBIDDEN */].includes(errorCode);
164
164
 
165
165
  /**
166
- * Type guard to find if the a given decoded backend token uses "skip/limit" pagination style
166
+ * Type guard to find if the a given decoded backend token uses "skip" pagination style
167
167
  *
168
168
  * @param json any json object as extracted from the backend
169
169
  * @returns success boolean if the token has either "skip" or "limit" props
170
170
  *
171
171
  * @hidden
172
172
  */
173
- const isSkipLimit = (json) => ['skip', 'limit'].some(prop => prop in json);
173
+ const isSkip = (json) => ['skip'].some(prop => prop in json);
174
174
  /**
175
175
  * Type guard to find if the a given decoded backend token uses "after/before" pagination style
176
176
  *
@@ -270,7 +270,7 @@ const toPage = (token) => {
270
270
  return undefined;
271
271
  // don't try catch, let it throw
272
272
  const json = JSON.parse(decode(token));
273
- if (isSkipLimit(json)) {
273
+ if (isSkip(json)) {
274
274
  return {
275
275
  after: json.skip,
276
276
  limit: json.limit,
@@ -497,6 +497,7 @@ const idResolvers = {
497
497
  stream: ({ streamId }) => streamId,
498
498
  follow: ({ from, to }) => `${from}#${to}`,
499
499
  followCount: ({ userId }) => userId,
500
+ feed: ({ targetId, feedId }) => `${targetId}#${feedId}`,
500
501
  };
501
502
  /**
502
503
  * Retrieve the id resolver matching a domain name
@@ -534,6 +535,7 @@ const CRITERIAS = {
534
535
  stream: ['streamId'],
535
536
  follow: ['from', 'to'],
536
537
  followCount: ['userId', 'followerCount'],
538
+ feed: ['feedId', 'feedType'],
537
539
  };
538
540
  /** @hidden */
539
541
  const hasKeys = (object, needles) => {
@@ -594,6 +596,7 @@ const PAYLOAD2MODEL = {
594
596
  videoStreamings: 'stream',
595
597
  follows: 'follow',
596
598
  followCounts: 'followCount',
599
+ feeds: 'feed',
597
600
  };
598
601
  /** hidden */
599
602
  const hasUpdates = (prevData, nextData) => {
@@ -1060,10 +1063,36 @@ const filterByChannelMembership = (collection, membership, userId) => {
1060
1063
  'get',
1061
1064
  channelUserCacheKey,
1062
1065
  ])) === null || _a === void 0 ? void 0 : _a.data;
1063
- if (membership === 'member' && channelUser && channelUser.membership !== 'none') {
1064
- return true;
1066
+ if (membership === 'member') {
1067
+ return channelUser && channelUser.membership !== 'none';
1065
1068
  }
1066
- return membership === 'notMember' && (!channelUser || channelUser.membership === 'none');
1069
+ // only membership value remainging is 'notMember'
1070
+ return !channelUser || channelUser.membership === 'none';
1071
+ });
1072
+ };
1073
+ /**
1074
+ * Filter a channel collection by membership of the userId
1075
+ *
1076
+ * @param collection the channel collection to filter
1077
+ * @param feedType to be filtered by
1078
+ * @returns a filtered collection with items only matching the criteria
1079
+ *
1080
+ * @hidden
1081
+ */
1082
+ const filterByFeedType = (collection, feedType) => {
1083
+ /*
1084
+ * It is possible that the targetId & feedId are the same for most of the posts
1085
+ * But since cache is in-memory, i've avoided memoizing, to avoid premature
1086
+ * optimization. Can be revisited if performance issues arise
1087
+ */
1088
+ return collection.filter(({ targetId, feedId }) => {
1089
+ var _a;
1090
+ const feed = (_a = pullFromCache([
1091
+ 'feed',
1092
+ 'get',
1093
+ getResolver('feed')({ targetId, feedId }),
1094
+ ])) === null || _a === void 0 ? void 0 : _a.data;
1095
+ return feed && feed.feedType === feedType;
1067
1096
  });
1068
1097
  };
1069
1098
 
@@ -20806,7 +20835,7 @@ const connectClient = async (params, sessionHandler, config) => {
20806
20835
  setSessionState(state);
20807
20836
  disconnectClient();
20808
20837
  subscriptions.forEach(fn => fn());
20809
- }), onUserDeleted(() => null));
20838
+ }));
20810
20839
  return client.ws.connected;
20811
20840
  };
20812
20841
 
@@ -21495,6 +21524,101 @@ const liveUser = (userId, callback) => {
21495
21524
  ]);
21496
21525
  };
21497
21526
 
21527
+ /**
21528
+ * ```js
21529
+ * import { liveUsers } from '@amityco/ts-sdk'
21530
+ *
21531
+ * let users = []
21532
+ * const unsub = liveUsers({}, response => merge(users, response.data))
21533
+ * ```
21534
+ *
21535
+ * Observe all mutations on a list of {@link Amity.User}s
21536
+ *
21537
+ * @param params for querying users
21538
+ * @param callback the function to call when new data are available
21539
+ * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the users
21540
+ *
21541
+ * @category Category Live Collection
21542
+ */
21543
+ const liveUsers = (params, callback, config) => {
21544
+ const { log, cache } = getActiveClient();
21545
+ if (!cache) {
21546
+ console.log(ENABLE_CACHE_MESSAGE);
21547
+ }
21548
+ const timestamp = Date.now();
21549
+ log(`liveUsers(tmpid: ${timestamp}) > listen`);
21550
+ const { limit: queryLimit } = params, queryParams = __rest(params, ["limit"]);
21551
+ const limit = queryLimit !== null && queryLimit !== void 0 ? queryLimit : COLLECTION_DEFAULT_PAGINATION_LIMIT;
21552
+ const { policy = COLLECTION_DEFAULT_CACHING_POLICY } = config !== null && config !== void 0 ? config : {};
21553
+ const disposers = [];
21554
+ const cacheKey = ['user', 'collection', {}];
21555
+ const responder = (data) => {
21556
+ var _a, _b;
21557
+ let users = (_a = data.data
21558
+ .map(userId => pullFromCache(['user', 'get', userId]))
21559
+ .filter(Boolean)
21560
+ .map(({ data }) => data)) !== null && _a !== void 0 ? _a : [];
21561
+ users = filterByPropEquality(users, 'displayName', params.displayName);
21562
+ switch (params.sortBy) {
21563
+ case 'firstCreated':
21564
+ users = users.sort(sortByFirstCreated);
21565
+ break;
21566
+ case 'lastCreated':
21567
+ users = users.sort(sortByLastCreated);
21568
+ break;
21569
+ default:
21570
+ users = users
21571
+ // this needs to be aligned with the backend data type
21572
+ .map(u => (u.displayName ? u : Object.assign(Object.assign({}, u), { displayName: '' })))
21573
+ // @ts-ignore
21574
+ .sort(sortByDisplayName);
21575
+ }
21576
+ callback({
21577
+ onNextPage: onFetch,
21578
+ data: users,
21579
+ hasNextPage: !!((_b = data.params) === null || _b === void 0 ? void 0 : _b.page),
21580
+ loading: data.loading,
21581
+ error: data.error,
21582
+ });
21583
+ };
21584
+ const realtimeRouter = (_) => (user) => {
21585
+ var _a;
21586
+ const collection = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
21587
+ if (!collection)
21588
+ return;
21589
+ collection.data = [...new Set([user.userId, ...collection.data])];
21590
+ pushToCache(cacheKey, collection);
21591
+ responder(collection);
21592
+ };
21593
+ const onFetch = () => {
21594
+ var _a, _b, _c;
21595
+ const collection = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
21596
+ const users = (_b = collection === null || collection === void 0 ? void 0 : collection.data) !== null && _b !== void 0 ? _b : [];
21597
+ if (users.length > 0 && !(collection === null || collection === void 0 ? void 0 : collection.params.page))
21598
+ return;
21599
+ const query = createQuery(queryUsers, Object.assign(Object.assign({}, queryParams), { page: (_c = collection === null || collection === void 0 ? void 0 : collection.params.page) !== null && _c !== void 0 ? _c : { limit } }));
21600
+ runQuery(query, ({ data: result, error, loading, nextPage: page }) => {
21601
+ const data = {
21602
+ loading,
21603
+ error,
21604
+ params: { page },
21605
+ data: users,
21606
+ };
21607
+ if (result) {
21608
+ data.data = [...new Set([...users, ...result.map(getResolver('user'))])];
21609
+ }
21610
+ pushToCache(cacheKey, data);
21611
+ responder(data);
21612
+ }, queryOptions(policy));
21613
+ };
21614
+ disposers.push(onUserUpdated(realtimeRouter()), onUserDeleted(realtimeRouter()), onUserFlagged(realtimeRouter()), onUserUnflagged(realtimeRouter()), onUserFlagCleared(realtimeRouter()));
21615
+ onFetch();
21616
+ return () => {
21617
+ log(`liveUsers(tmpid: ${timestamp}) > dispose`);
21618
+ disposers.forEach(fn => fn());
21619
+ };
21620
+ };
21621
+
21498
21622
  /**
21499
21623
  * ```js
21500
21624
  * import { observeUser } from '@amityco/ts-sdk'
@@ -22176,8 +22300,8 @@ const queryMessages = async (query) => {
22176
22300
  pushToCache(cacheKey, { messages: messages.map(getResolver('message')), paging });
22177
22301
  }
22178
22302
  fireEvent('local.message.fetched', { messages });
22179
- const nextPage = toPage(paging.next);
22180
- const prevPage = toPage(paging.previous);
22303
+ const nextPage = toPageRaw(paging.next);
22304
+ const prevPage = toPageRaw(paging.previous);
22181
22305
  return { data: messages, cachedAt, prevPage, nextPage };
22182
22306
  };
22183
22307
  /**
@@ -22208,8 +22332,8 @@ queryMessages.locally = (query) => {
22208
22332
  .map(messageId => pullFromCache(['message', 'get', messageId]))
22209
22333
  .filter(Boolean)
22210
22334
  .map(({ data }) => data);
22211
- const prevPage = toPage(data === null || data === void 0 ? void 0 : data.paging.previous);
22212
- const nextPage = toPage(data === null || data === void 0 ? void 0 : data.paging.next);
22335
+ const prevPage = toPageRaw(data === null || data === void 0 ? void 0 : data.paging.previous);
22336
+ const nextPage = toPageRaw(data === null || data === void 0 ? void 0 : data.paging.next);
22213
22337
  return messages.length === ((_b = data === null || data === void 0 ? void 0 : data.messages) === null || _b === void 0 ? void 0 : _b.length)
22214
22338
  ? { data: messages, cachedAt, prevPage, nextPage }
22215
22339
  : undefined;
@@ -24854,13 +24978,7 @@ const createReport = async (referenceType, referenceId) => {
24854
24978
  const { data } = await client.http.post(getAPIUrl());
24855
24979
  if (client.cache)
24856
24980
  ingestInCache(referenceType === 'message' ? prepareMessagePayload(data) : data);
24857
- if (referenceType === 'message') {
24858
- fireEvent('message.flagged', data);
24859
- }
24860
- else {
24861
- // @ts-ignore
24862
- fireEvent(`${referenceType}.flagged`, data);
24863
- }
24981
+ fireEvent(`${referenceType}.flagged`, data);
24864
24982
  return !!data;
24865
24983
  };
24866
24984
 
@@ -24893,13 +25011,8 @@ const deleteReport = async (referenceType, referenceId) => {
24893
25011
  const { data } = await client.http.delete(getAPIUrl());
24894
25012
  if (client.cache)
24895
25013
  ingestInCache(referenceType === 'message' ? prepareMessagePayload(data) : data);
24896
- if (referenceType === 'message') {
24897
- fireEvent('message.unflagged', data);
24898
- }
24899
- else {
24900
- // @ts-ignore
24901
- fireEvent(`${referenceType}.unflagged`, data);
24902
- }
25014
+ // @ts-ignore
25015
+ fireEvent(`${referenceType}.unflagged`, data);
24903
25016
  return !!data;
24904
25017
  };
24905
25018
 
@@ -26341,22 +26454,29 @@ const liveChannels = (params, callback, config) => {
26341
26454
  if (params.membership && userId) {
26342
26455
  channels = filterByChannelMembership(channels, params.membership, userId);
26343
26456
  }
26344
- const sortBy = params.sortBy || 'lastCreated';
26345
- if (sortBy === 'lastCreated' || sortBy === 'firstCreated') {
26346
- channels = channels.sort(sortBy === 'lastCreated' ? sortByLastCreated : sortByFirstCreated);
26347
- }
26348
- /*
26349
- * The server returns channels with empty | null displayName's first before
26350
- * returning sorted list of channels with displayNames
26351
- *
26352
- * This section needs to be updated as displayNames can be null as well
26353
- */
26354
- if (sortBy === 'displayName') {
26355
- channels = channels
26356
- // this needs to be aligned with the backend data type
26357
- .map(c => (c.displayName ? c : Object.assign(Object.assign({}, c), { displayName: '' })))
26358
- // @ts-ignore
26359
- .sort(sortByDisplayName);
26457
+ switch (params.sortBy) {
26458
+ case 'firstCreated':
26459
+ channels = channels.sort(sortByFirstCreated);
26460
+ break;
26461
+ case 'lastCreated':
26462
+ channels = channels.sort(sortByLastCreated);
26463
+ break;
26464
+ case 'displayName':
26465
+ /*
26466
+ * The server returns channels with empty | null displayName's first before
26467
+ * returning sorted list of channels with displayNames
26468
+ *
26469
+ * This section needs to be updated as displayNames can be null as well
26470
+ */
26471
+ channels = channels
26472
+ // this needs to be aligned with the backend data type
26473
+ .map(c => (c.displayName ? c : Object.assign(Object.assign({}, c), { displayName: '' })))
26474
+ // @ts-ignore
26475
+ .sort(sortByDisplayName);
26476
+ break;
26477
+ default:
26478
+ channels = channels.sort(sortByLastActivity);
26479
+ break;
26360
26480
  }
26361
26481
  callback({
26362
26482
  onNextPage: onFetch,
@@ -26366,17 +26486,12 @@ const liveChannels = (params, callback, config) => {
26366
26486
  error: data.error,
26367
26487
  });
26368
26488
  };
26369
- const realtimeRouter = (action) => (channel) => {
26489
+ const realtimeRouter = (_) => (channel) => {
26370
26490
  var _a;
26371
26491
  const collection = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
26372
26492
  if (!collection)
26373
26493
  return;
26374
- if (action === 'onDelete' && params.isDeleted === false) {
26375
- collection.data = collection.data.filter(c => c !== channel.channelId);
26376
- }
26377
- else {
26378
- collection.data = [...new Set([channel.channelId, ...collection.data])];
26379
- }
26494
+ collection.data = [...new Set([channel.channelId, ...collection.data])];
26380
26495
  pushToCache(cacheKey, collection);
26381
26496
  responder(collection);
26382
26497
  };
@@ -26401,7 +26516,7 @@ const liveChannels = (params, callback, config) => {
26401
26516
  responder(data);
26402
26517
  }, queryOptions(policy));
26403
26518
  };
26404
- disposers.push(onChannelCreated(realtimeRouter('onCreate')), onChannelDeleted(realtimeRouter('onDelete')), onChannelUpdated(realtimeRouter('onUpdate')), onChannelMuted(realtimeRouter('onMute')), onChannelJoined(realtimeRouter('onJoin')), onChannelLeft(realtimeRouter('onLeft')), onChannelMemberAdded(realtimeRouter('onMemberAdded')), onChannelMemberRemoved(realtimeRouter('onMemberRemoved')), onMessageCreated(() => null));
26519
+ disposers.push(onChannelCreated(realtimeRouter()), onChannelDeleted(realtimeRouter()), onChannelUpdated(realtimeRouter()), onChannelMuted(realtimeRouter()), onChannelJoined(realtimeRouter()), onChannelLeft(realtimeRouter()), onChannelMemberAdded(realtimeRouter()), onChannelMemberRemoved(realtimeRouter()), onMessageCreated(() => null));
26405
26520
  onFetch();
26406
26521
  return () => {
26407
26522
  log(`liveChannels(tmpid: ${timestamp}) > dispose`);
@@ -28895,8 +29010,8 @@ const livePost = (postId, callback) => {
28895
29010
  *
28896
29011
  * Observe all mutations on a list of {@link Amity.Post} for a given target object
28897
29012
  *
28898
- * @param targetType the type of the target
28899
- * @param targetId the ID of the target
29013
+ * @param param.targetType the type of the target
29014
+ * @param param.targetId the ID of the target
28900
29015
  * @param callback the function to call when new data are available
28901
29016
  * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
28902
29017
  *
@@ -28930,6 +29045,9 @@ const livePosts = (params, callback, config) => {
28930
29045
  if (params.tags) {
28931
29046
  posts = posts.filter(p => { var _a; return (_a = p.tags) === null || _a === void 0 ? void 0 : _a.some(t => { var _a; return (_a = params.tags) === null || _a === void 0 ? void 0 : _a.includes(t); }); });
28932
29047
  }
29048
+ if (params.targetType === 'community' && params.feedType) {
29049
+ posts = filterByFeedType(posts, params.feedType);
29050
+ }
28933
29051
  callback({
28934
29052
  onNextPage: onFetch,
28935
29053
  data: posts,
@@ -28943,27 +29061,16 @@ const livePosts = (params, callback, config) => {
28943
29061
  const collection = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
28944
29062
  if (params.targetId !== post.targetId || params.targetType !== post.targetType || !collection)
28945
29063
  return;
28946
- if (['onCreate', 'onApproved'].includes(action)) {
28947
- collection.data = [...new Set([post.postId, ...collection.data])];
28948
- }
28949
- else if (['onDelete', 'onDeclined'].includes(action)) {
28950
- collection.data = collection.data.filter(p => p !== post.postId);
28951
- /*
28952
- * if isDeleted is true, collection should add deleted items to the
28953
- * begining of the collection
28954
- */
28955
- if (params.isDeleted)
28956
- collection.data.unshift(post.postId);
28957
- }
28958
29064
  /*
28959
- * FIX-ME
28960
- * This is a shortcoming as the feed object is not saved to the cache.
28961
- * The responder should pull the feed from cache once available and should
28962
- * match the collection to feedType param
28963
- * https://ekoapp.atlassian.net/browse/ASC-9382
29065
+ * This is not ideal, but currently this is the only way to update the
29066
+ * collection on post declined
28964
29067
  */
28965
- if (params.feedType === 'reviewing' && action === 'onApproved')
28966
- collection.data = collection.data.filter(p => p !== post.postId);
29068
+ if (action === 'onDeclined') {
29069
+ collection.data = collection.data.filter(postId => postId !== post.postId);
29070
+ }
29071
+ else {
29072
+ collection.data = [...new Set([post.postId, ...collection.data])];
29073
+ }
28967
29074
  pushToCache(cacheKey, collection);
28968
29075
  responder(collection);
28969
29076
  };
@@ -29791,4 +29898,4 @@ const createUserToken = async (apiKey, apiRegion, params) => {
29791
29898
  return { accessToken: data.accessToken };
29792
29899
  };
29793
29900
 
29794
- export { API_REGIONS, CommunityPostSettingMaps, CommunityPostSettings, ContentFeedType, DefaultCommunityPostSetting, FileType, MessageContentType, PostContentType, SubscriptionLevels, VERSION$1 as VERSION, VideoResolution, VideoSize, VideoTranscodingStatus, acceptFollower, addChannelMembers, addChannelMembersRole, addCommunityMembers, addCommunityMembersRoles, addReaction, approvePost, backupCache, banChannelMembers, closePoll, connectClient, createChannel, createClient, createComment, createCommunity, createFile, createImage, createMessage, createPoll, createPost, createQuery, createReport, createStream, createSubChannel, createUserToken, createVideo, declineFollower, declinePost, deleteChannel, deleteComment, deleteCommunity, deleteFile, deleteMessage, deletePoll, deletePost, deleteReport, deleteStream, deleteSubChannel, disableCache, disconnectClient, disposeStream, dropFromCache, enableCache, fileUrlWithSize, filterByChannelMembership, filterByPropEquality, filterByPropInclusion, follow, getActiveClient, getCategory, getChannel, getChannelTopic, getChannels, getComment, getCommentTopic, getComments, getCommunities, getCommunity, getCommunityTopic, getFeedSettings, getFile, getFollowInfo, getMessage, getMessageTopic, getMessages, getMyFollowersTopic, getMyFollowingsTopic, getNetworkTopic, getPoll, getPost, getPostTopic, getPosts, getRecommendedCommunities, getRole, getSmartFeedChannelTopic, getSmartFeedMessageTopic, getSmartFeedSubChannelTopic, getStream, getSubChannel, getSubChannelTopic, getSubChannels, getTopTrendingCommunities, getUser, getUserTopic, getUsers, isAfterBefore, isAfterBeforeRaw, isCachable, isConnected, isFetcher, isFresh, isLocal, isMutator, isOffline, isPaged, isReportedByMe, isSkipLimit, joinChannel, joinCommunity, leaveChannel, leaveCommunity, liveCategories, liveChannel, liveChannelMembers, liveChannels, liveComment, liveComments, liveCommunities, liveFollowers, liveFollowings, liveMessage, liveMessages, livePost, livePosts, liveReactions, liveSubChannel, liveSubChannels, liveUser, mergeInCache, observeChannel, observeChannels, observeComment, observeComments, observeCommunity, observeFile, observeFollowInfo, observeFollowers, observeFollowings, observeMessage, observeMessages, observePoll, observePost, observePosts, observeUser, onChannelCreated, onChannelDeleted, onChannelJoined, onChannelLeft, onChannelMemberAdded, onChannelMemberBanned, onChannelMemberRemoved, onChannelMemberUnbanned, onChannelMuted, onChannelUpdated, onClientBanned, onClientDisconnected, onCommentCreated, onCommentDeleted, onCommentFlagged, onCommentReactionAdded, onCommentReactionRemoved, onCommentUnflagged, onCommentUpdated, onCommunityCreated, onCommunityDeleted, onCommunityJoined, onCommunityLeft, onCommunityUpdated, onCommunityUserAdded, onCommunityUserBanned, onCommunityUserChanged, onCommunityUserRemoved, onCommunityUserUnbanned, onConnectionError, onFollowInfoUpdated, onFollowRequestAccepted, onFollowRequestCanceled, onFollowRequestDeclined, onFollowerDeleted, onFollowerRequested, onMessageCreated, onMessageDeleted, onMessageFlagCleared, onMessageFlagged, onMessageReactionAdded, onMessageReactionRemoved, onMessageUnflagged, onMessageUpdated, onPollDeleted, onPollUpdated, onPostApproved, onPostCreated, onPostDeclined, onPostDeleted, onPostFlagged, onPostReactionAdded, onPostReactionRemoved, onPostUnflagged, onPostUpdated, onReactionAdded, onReactionRemoved, onReactorAdded, onReactorRemoved, onSessionStateChange, onStreamRecorded, onStreamStarted, onStreamStopped, onSubChannelCreated, onSubChannelDeleted, onSubChannelUpdated, onUserDeleted, onUserFlagCleared, onUserFlagged, onUserFollowed, onUserUnflagged, onUserUnfollowed, onUserUpdated, pullFromCache, pushToCache, queryCache, queryCategories, queryChannelMembers, queryChannels, queryComments, queryCommunities, queryCommunityMembers, queryFollowers, queryFollowings, queryGlobalFeed, queryMessages, queryOptions, queryPosts, queryReactions, queryRoles, queryStreams, querySubChannels, queryUsers, removeChannelMembers, removeChannelMembersRole, removeCommunityMembers, removeCommunityMembersRoles, removeReaction, renewal, restoreCache, runQuery, sortByChannelSegment, sortByDisplayName, sortByFirstCreated, sortByLastActivity, sortByLastCreated, sortByName, sortBySegmentNumber, startReading, stopReading, subscribeTopic, toPage, toPageRaw, toToken, unbanChannelMembers, unfollow, updateChannel, updateComment, updateCommunity, updateMessage, updatePost, updateStream, updateSubChannel, updateUser, upsertInCache, votePoll, wipeCache };
29901
+ export { API_REGIONS, CommunityPostSettingMaps, CommunityPostSettings, ContentFeedType, DefaultCommunityPostSetting, FileType, MessageContentType, PostContentType, SubscriptionLevels, VERSION$1 as VERSION, VideoResolution, VideoSize, VideoTranscodingStatus, acceptFollower, addChannelMembers, addChannelMembersRole, addCommunityMembers, addCommunityMembersRoles, addReaction, approvePost, backupCache, banChannelMembers, closePoll, connectClient, createChannel, createClient, createComment, createCommunity, createFile, createImage, createMessage, createPoll, createPost, createQuery, createReport, createStream, createSubChannel, createUserToken, createVideo, declineFollower, declinePost, deleteChannel, deleteComment, deleteCommunity, deleteFile, deleteMessage, deletePoll, deletePost, deleteReport, deleteStream, deleteSubChannel, disableCache, disconnectClient, disposeStream, dropFromCache, enableCache, fileUrlWithSize, filterByChannelMembership, filterByFeedType, filterByPropEquality, filterByPropInclusion, follow, getActiveClient, getCategory, getChannel, getChannelTopic, getChannels, getComment, getCommentTopic, getComments, getCommunities, getCommunity, getCommunityTopic, getFeedSettings, getFile, getFollowInfo, getMessage, getMessageTopic, getMessages, getMyFollowersTopic, getMyFollowingsTopic, getNetworkTopic, getPoll, getPost, getPostTopic, getPosts, getRecommendedCommunities, getRole, getSmartFeedChannelTopic, getSmartFeedMessageTopic, getSmartFeedSubChannelTopic, getStream, getSubChannel, getSubChannelTopic, getSubChannels, getTopTrendingCommunities, getUser, getUserTopic, getUsers, isAfterBefore, isAfterBeforeRaw, isCachable, isConnected, isFetcher, isFresh, isLocal, isMutator, isOffline, isPaged, isReportedByMe, isSkip, joinChannel, joinCommunity, leaveChannel, leaveCommunity, liveCategories, liveChannel, liveChannelMembers, liveChannels, liveComment, liveComments, liveCommunities, liveFollowers, liveFollowings, liveMessage, liveMessages, livePost, livePosts, liveReactions, liveSubChannel, liveSubChannels, liveUser, liveUsers, mergeInCache, observeChannel, observeChannels, observeComment, observeComments, observeCommunity, observeFile, observeFollowInfo, observeFollowers, observeFollowings, observeMessage, observeMessages, observePoll, observePost, observePosts, observeUser, onChannelCreated, onChannelDeleted, onChannelJoined, onChannelLeft, onChannelMemberAdded, onChannelMemberBanned, onChannelMemberRemoved, onChannelMemberUnbanned, onChannelMuted, onChannelUpdated, onClientBanned, onClientDisconnected, onCommentCreated, onCommentDeleted, onCommentFlagged, onCommentReactionAdded, onCommentReactionRemoved, onCommentUnflagged, onCommentUpdated, onCommunityCreated, onCommunityDeleted, onCommunityJoined, onCommunityLeft, onCommunityUpdated, onCommunityUserAdded, onCommunityUserBanned, onCommunityUserChanged, onCommunityUserRemoved, onCommunityUserUnbanned, onConnectionError, onFollowInfoUpdated, onFollowRequestAccepted, onFollowRequestCanceled, onFollowRequestDeclined, onFollowerDeleted, onFollowerRequested, onMessageCreated, onMessageDeleted, onMessageFlagCleared, onMessageFlagged, onMessageReactionAdded, onMessageReactionRemoved, onMessageUnflagged, onMessageUpdated, onPollDeleted, onPollUpdated, onPostApproved, onPostCreated, onPostDeclined, onPostDeleted, onPostFlagged, onPostReactionAdded, onPostReactionRemoved, onPostUnflagged, onPostUpdated, onReactionAdded, onReactionRemoved, onReactorAdded, onReactorRemoved, onSessionStateChange, onStreamRecorded, onStreamStarted, onStreamStopped, onSubChannelCreated, onSubChannelDeleted, onSubChannelUpdated, onUserDeleted, onUserFlagCleared, onUserFlagged, onUserFollowed, onUserUnflagged, onUserUnfollowed, onUserUpdated, pullFromCache, pushToCache, queryCache, queryCategories, queryChannelMembers, queryChannels, queryComments, queryCommunities, queryCommunityMembers, queryFollowers, queryFollowings, queryGlobalFeed, queryMessages, queryOptions, queryPosts, queryReactions, queryRoles, queryStreams, querySubChannels, queryUsers, removeChannelMembers, removeChannelMembersRole, removeCommunityMembers, removeCommunityMembersRoles, removeReaction, renewal, restoreCache, runQuery, sortByChannelSegment, sortByDisplayName, sortByFirstCreated, sortByLastActivity, sortByLastCreated, sortByName, sortBySegmentNumber, startReading, stopReading, subscribeTopic, toPage, toPageRaw, toToken, unbanChannelMembers, unfollow, updateChannel, updateComment, updateCommunity, updateMessage, updatePost, updateStream, updateSubChannel, updateUser, upsertInCache, votePoll, wipeCache };