@amityco/ts-sdk-react-native 6.32.7-289cad7.0 → 6.32.7-686c44c.0

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 (96) hide show
  1. package/dist/@types/core/events.d.ts +16 -2
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/payload.d.ts +3 -0
  4. package/dist/@types/core/payload.d.ts.map +1 -1
  5. package/dist/@types/domains/message.d.ts +1 -0
  6. package/dist/@types/domains/message.d.ts.map +1 -1
  7. package/dist/@types/domains/pinnedPost.d.ts +1 -0
  8. package/dist/@types/domains/pinnedPost.d.ts.map +1 -1
  9. package/dist/@types/domains/reaction.d.ts +8 -2
  10. package/dist/@types/domains/reaction.d.ts.map +1 -1
  11. package/dist/@types/domains/user.d.ts +4 -0
  12. package/dist/@types/domains/user.d.ts.map +1 -1
  13. package/dist/communityRepository/communityMembership/events/utils.d.ts.map +1 -1
  14. package/dist/communityRepository/utils/communityWithMembership.d.ts.map +1 -1
  15. package/dist/feedRepository/api/queryGlobalFeed.d.ts.map +1 -1
  16. package/dist/index.cjs.js +919 -570
  17. package/dist/index.esm.js +919 -570
  18. package/dist/index.umd.js +3 -3
  19. package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostLiveCollectionController.d.ts +13 -0
  20. package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostLiveCollectionController.d.ts.map +1 -0
  21. package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostPaginationController.d.ts +13 -0
  22. package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostPaginationController.d.ts.map +1 -0
  23. package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostQueryStreamController.d.ts +15 -0
  24. package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostQueryStreamController.d.ts.map +1 -0
  25. package/dist/postRepository/observers/getGlobalPinnedPosts.d.ts +10 -0
  26. package/dist/postRepository/observers/getGlobalPinnedPosts.d.ts.map +1 -0
  27. package/dist/postRepository/observers/index.d.ts +1 -0
  28. package/dist/postRepository/observers/index.d.ts.map +1 -1
  29. package/dist/reactionRepository/api/addReaction.d.ts.map +1 -1
  30. package/dist/reactionRepository/api/removeReaction.d.ts.map +1 -1
  31. package/dist/reactionRepository/events/onReactorAddedLocal.d.ts +19 -0
  32. package/dist/reactionRepository/events/onReactorAddedLocal.d.ts.map +1 -0
  33. package/dist/reactionRepository/events/onReactorRemovedLocal.d.ts +19 -0
  34. package/dist/reactionRepository/events/onReactorRemovedLocal.d.ts.map +1 -0
  35. package/dist/reactionRepository/observers/getReactions/ReactionLiveCollectionController.d.ts +13 -0
  36. package/dist/reactionRepository/observers/getReactions/ReactionLiveCollectionController.d.ts.map +1 -0
  37. package/dist/reactionRepository/observers/getReactions/ReactionPaginationController.d.ts +5 -0
  38. package/dist/reactionRepository/observers/getReactions/ReactionPaginationController.d.ts.map +1 -0
  39. package/dist/reactionRepository/observers/getReactions/ReactionQueryStreamController.d.ts +14 -0
  40. package/dist/reactionRepository/observers/getReactions/ReactionQueryStreamController.d.ts.map +1 -0
  41. package/dist/reactionRepository/observers/{getReactions.d.ts → getReactions/getReactions.d.ts} +1 -1
  42. package/dist/reactionRepository/observers/getReactions/getReactions.d.ts.map +1 -0
  43. package/dist/reactionRepository/observers/getReactions/index.d.ts +2 -0
  44. package/dist/reactionRepository/observers/getReactions/index.d.ts.map +1 -0
  45. package/dist/reactionRepository/observers/index.d.ts +1 -1
  46. package/dist/reactionRepository/observers/index.d.ts.map +1 -1
  47. package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.d.ts.map +1 -1
  48. package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.d.ts +1 -1
  49. package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.d.ts.map +1 -1
  50. package/dist/userRepository/constants/index.d.ts +5 -0
  51. package/dist/userRepository/constants/index.d.ts.map +1 -0
  52. package/dist/userRepository/index.d.ts +1 -0
  53. package/dist/userRepository/index.d.ts.map +1 -1
  54. package/dist/userRepository/observers/getBlockedUsers/BlockedUserLiveCollectionController.d.ts.map +1 -1
  55. package/dist/userRepository/observers/getBlockedUsers/BlockedUserQueryStreamController.d.ts +3 -2
  56. package/dist/userRepository/observers/getBlockedUsers/BlockedUserQueryStreamController.d.ts.map +1 -1
  57. package/dist/utils/linkedObject/messageLinkedObject.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/src/@types/core/events.ts +18 -6
  60. package/src/@types/core/payload.ts +4 -0
  61. package/src/@types/domains/message.ts +1 -0
  62. package/src/@types/domains/pin.ts +1 -1
  63. package/src/@types/domains/pinnedPost.ts +2 -0
  64. package/src/@types/domains/reaction.ts +9 -3
  65. package/src/@types/domains/user.ts +6 -0
  66. package/src/communityRepository/communityMembership/events/utils.ts +4 -2
  67. package/src/communityRepository/utils/communityWithMembership.ts +15 -8
  68. package/src/feedRepository/api/queryGlobalFeed.ts +4 -1
  69. package/src/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostLiveCollectionController.ts +96 -0
  70. package/src/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostPaginationController.ts +19 -0
  71. package/src/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostQueryStreamController.ts +88 -0
  72. package/src/postRepository/observers/getGlobalPinnedPosts.ts +42 -0
  73. package/src/postRepository/observers/index.ts +1 -0
  74. package/src/reactionRepository/api/addReaction.ts +23 -1
  75. package/src/reactionRepository/api/removeReaction.ts +25 -2
  76. package/src/reactionRepository/events/onReactorAddedLocal.ts +95 -0
  77. package/src/reactionRepository/events/onReactorRemovedLocal.ts +94 -0
  78. package/src/reactionRepository/observers/getReactions/ReactionLiveCollectionController.ts +111 -0
  79. package/src/reactionRepository/observers/getReactions/ReactionPaginationController.ts +30 -0
  80. package/src/reactionRepository/observers/getReactions/ReactionQueryStreamController.ts +92 -0
  81. package/src/reactionRepository/observers/getReactions/getReactions.ts +57 -0
  82. package/src/reactionRepository/observers/getReactions/index.ts +1 -0
  83. package/src/reactionRepository/observers/index.ts +1 -1
  84. package/src/storyRepository/events/onStoryReactionAdded.ts +3 -3
  85. package/src/storyRepository/events/onStoryReactionRemoved.ts +3 -3
  86. package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts +5 -0
  87. package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.ts +5 -2
  88. package/src/userRepository/constants/index.ts +4 -0
  89. package/src/userRepository/index.ts +1 -0
  90. package/src/userRepository/observers/getBlockedUsers/BlockedUserLiveCollectionController.ts +12 -1
  91. package/src/userRepository/observers/getBlockedUsers/BlockedUserQueryStreamController.ts +13 -5
  92. package/src/userRepository/relationship/follow/observers/getFollowers/FollowerLiveCollectionController.ts +1 -1
  93. package/src/userRepository/relationship/follow/observers/getFollowings/FollowingLiveCollectionController.ts +1 -1
  94. package/src/utils/linkedObject/messageLinkedObject.ts +4 -0
  95. package/dist/reactionRepository/observers/getReactions.d.ts.map +0 -1
  96. package/src/reactionRepository/observers/getReactions.ts +0 -146
@@ -0,0 +1,92 @@
1
+ import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
2
+ import { pullFromCache, pushToCache } from '~/cache/api';
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { getResolver } from '~/core/model';
5
+ import { getActiveClient } from '~/client';
6
+
7
+ export class ReactionQueryStreamController extends QueryStreamController<
8
+ Amity.ReactionPayload,
9
+ Amity.ReactionLiveCollection
10
+ > {
11
+ private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
12
+
13
+ private preparePayload: (response: Amity.ReactionPayload) => Amity.ReactionPayload;
14
+
15
+ constructor(
16
+ query: Amity.ReactionLiveCollection,
17
+ cacheKey: string[],
18
+ notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
19
+ preparePayload: (response: Amity.ReactionPayload) => Amity.ReactionPayload,
20
+ ) {
21
+ super(query, cacheKey);
22
+ this.notifyChange = notifyChange;
23
+ this.preparePayload = preparePayload;
24
+ }
25
+
26
+ async saveToMainDB(response: Amity.ReactionPayload) {
27
+ const processedPayload = await this.preparePayload(response);
28
+
29
+ const client = getActiveClient();
30
+ const cachedAt = client.cache && Date.now();
31
+
32
+ if (client.cache) {
33
+ const { reactions, ...restPayload } = processedPayload;
34
+ ingestInCache(
35
+ {
36
+ ...restPayload,
37
+ reactions,
38
+ reactors: reactions[0]?.reactors,
39
+ },
40
+ { cachedAt },
41
+ );
42
+ }
43
+ }
44
+
45
+ appendToQueryStream(
46
+ response: Amity.ReactionPayload & Partial<Amity.Pagination>,
47
+ direction: Amity.LiveCollectionPageDirection,
48
+ refresh = false,
49
+ ) {
50
+ const reactors = response.reactions[0]?.reactors ?? [];
51
+
52
+ if (refresh) {
53
+ pushToCache(this.cacheKey, {
54
+ data: reactors.map(getResolver('reactor')),
55
+ });
56
+ } else {
57
+ const collection = pullFromCache<Amity.ReactionLiveCollectionCache>(this.cacheKey)?.data;
58
+
59
+ const reactions = collection?.data ?? [];
60
+
61
+ pushToCache(this.cacheKey, {
62
+ ...collection,
63
+ data: [...new Set([...reactions, ...reactors.map(getResolver('reactor'))])],
64
+ });
65
+ }
66
+ }
67
+
68
+ reactor(action: Amity.ReactionActionTypeEnum) {
69
+ return (reaction: Amity.InternalReactor) => {
70
+ const collection = pullFromCache<Amity.ReactionLiveCollectionCache>(this.cacheKey)?.data;
71
+ if (!collection) return;
72
+
73
+ if (action === Amity.ReactionActionTypeEnum.OnAdded) {
74
+ collection.data = [...new Set([reaction.reactionId, ...collection.data])];
75
+ } else if (action === Amity.ReactionActionTypeEnum.OnRemoved) {
76
+ collection.data = collection.data.filter(p => p !== reaction.reactionId);
77
+ }
78
+
79
+ pushToCache(this.cacheKey, collection);
80
+ this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
81
+ };
82
+ }
83
+
84
+ subscribeRTE(
85
+ createSubscriber: {
86
+ fn: (reactor: (reaction: Amity.InternalReactor) => void) => Amity.Unsubscriber;
87
+ action: Amity.ReactionActionTypeEnum;
88
+ }[],
89
+ ) {
90
+ return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
91
+ }
92
+ }
@@ -0,0 +1,57 @@
1
+ /* eslint-disable no-use-before-define */
2
+
3
+ import { getActiveClient } from '~/client/api';
4
+ import { dropFromCache } from '~/cache/api';
5
+ import { ReactionLiveCollectionController } from './ReactionLiveCollectionController';
6
+
7
+ /* begin_public_function
8
+ id: reaction.query
9
+ */
10
+ /**
11
+ * ```js
12
+ * import { getReactions } from '@amityco/ts-sdk'
13
+ *
14
+ * let reactions = []
15
+ * const unsub = liveReactions({
16
+ * referenceId: Amity.Reaction['referenceId'],
17
+ * referenceType: Amity.Reaction['referenceType'],
18
+ * }, response => merge(reactions, response.data))
19
+ * ```
20
+ *
21
+ * Observe all mutations on a list of {@link Amity.InternalReactor} for a given target object
22
+ *
23
+ * @param params for querying reactions
24
+ * @param callback the function to call when new data are available
25
+ * @param config the live collection configuration
26
+ * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
27
+ *
28
+ * @category Reactions Live Collection
29
+ */
30
+ export const getReactions = (
31
+ params: Amity.ReactionLiveCollection,
32
+ callback: Amity.LiveCollectionCallback<Amity.Reactor>,
33
+ config?: Amity.LiveCollectionConfig,
34
+ ): Amity.Unsubscriber => {
35
+ const { log, cache } = getActiveClient();
36
+
37
+ // if (!cache) {
38
+ // console.log('For using Live Collection feature you need to enable Cache!');
39
+ // }
40
+
41
+ const timestamp = Date.now();
42
+ log(`getReactions(tmpid: ${timestamp}) > listen`);
43
+
44
+ const reactionLiveCollection = new ReactionLiveCollectionController(params, callback);
45
+ const disposers = reactionLiveCollection.startSubscription();
46
+ const cacheKey = reactionLiveCollection.getCacheKey();
47
+
48
+ disposers.push(() => {
49
+ dropFromCache(cacheKey);
50
+ });
51
+
52
+ return () => {
53
+ log(`getReactions(tmpid: ${timestamp}) > dispose`);
54
+ disposers.forEach(fn => fn());
55
+ };
56
+ };
57
+ /* end_public_function */
@@ -0,0 +1 @@
1
+ export * from './getReactions';
@@ -1 +1 @@
1
- export * from './getReactions';
1
+ export { getReactions } from './getReactions';
@@ -30,9 +30,9 @@ export const onStoryReactionAdded = (callback: Amity.Listener<Amity.InternalStor
30
30
  export const onStoryReactionAddedLocal = (callback: Amity.Listener<Amity.InternalStory[]>) => {
31
31
  const client = getActiveClient();
32
32
 
33
- const filter = async (payload: Amity.StoryPayload) => {
34
- ingestInCache(payload);
35
- callback(payload.stories);
33
+ const filter = async (payload: Amity.LocalEvents['local.story.reactionAdded']) => {
34
+ ingestInCache({ stories: [payload.story] });
35
+ callback([payload.story]);
36
36
  };
37
37
 
38
38
  const disposers = [
@@ -30,9 +30,9 @@ export const onStoryReactionRemoved = (callback: Amity.Listener<Amity.InternalSt
30
30
  export const onStoryReactionRemovedLocal = (callback: Amity.Listener<Amity.InternalStory[]>) => {
31
31
  const client = getActiveClient();
32
32
 
33
- const filter = async (payload: Amity.StoryPayload) => {
34
- ingestInCache(payload);
35
- callback(payload.stories);
33
+ const filter = async (payload: Amity.LocalEvents['local.story.reactionAdded']) => {
34
+ ingestInCache({ stories: [payload.story] });
35
+ callback([payload.story]);
36
36
  };
37
37
 
38
38
  const disposers = [
@@ -10,6 +10,7 @@ import { onStoryDeleted, onStoryDeletedLocal } from '~/storyRepository/events/on
10
10
  import { onStoryError } from '~/storyRepository/events/onStoryError';
11
11
  import { GlobalStoryQueryStreamController } from './GlobalStoryQueryStreamController';
12
12
  import { GlobalStoryPageController } from './GlobalStoryPageController';
13
+ import { prepareCommunityPayload } from '~/communityRepository/utils';
13
14
 
14
15
  type StoryTargetBySeenState = {
15
16
  seen: Amity.StoryTarget[];
@@ -44,6 +45,10 @@ export class GlobalStoryLiveCollectionController extends LiveCollectionControlle
44
45
  this.cacheKey,
45
46
  this.notifyChange.bind(this),
46
47
  paginationController,
48
+ (data: Amity.GlobalStoryFeedPayload) => {
49
+ const { feeds, ...rest } = prepareCommunityPayload({ ...data, feeds: [] });
50
+ return { ...data, ...rest };
51
+ },
47
52
  );
48
53
 
49
54
  this.paginationController = paginationController;
@@ -20,7 +20,9 @@ export class GlobalStoryQueryStreamController extends QueryStreamController<
20
20
  > {
21
21
  private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
22
22
 
23
- private preparePayload: (response: Amity.GlobalStoryFeedPayload) => Amity.GlobalStoryFeedPayload;
23
+ private preparePayload: (
24
+ response: Amity.GlobalStoryFeedPayload,
25
+ ) => Amity.ProcessedGlobalStoryFeed;
24
26
 
25
27
  private paginationController: GlobalStoryPageController;
26
28
 
@@ -29,13 +31,14 @@ export class GlobalStoryQueryStreamController extends QueryStreamController<
29
31
  cacheKey: string[],
30
32
  notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
31
33
  paginationController: GlobalStoryPageController,
34
+ preparePayload: (response: Amity.GlobalStoryFeedPayload) => Amity.ProcessedGlobalStoryFeed,
32
35
  ) {
33
36
  super(query, cacheKey);
34
37
  this.notifyChange = notifyChange;
35
38
  this.paginationController = paginationController;
36
39
 
37
40
  // Fix ESLint, "Expected 'this' to be used by class method"
38
- this.preparePayload = payload => payload;
41
+ this.preparePayload = preparePayload;
39
42
  }
40
43
 
41
44
  saveToMainDB(response: Amity.GlobalStoryFeedPayload) {
@@ -0,0 +1,4 @@
1
+ export enum AmityUserSearchMatchType {
2
+ DEFAULT = 'default',
3
+ PARTIAL = 'partial',
4
+ }
@@ -3,3 +3,4 @@ export * as Relationship from './relationship';
3
3
  export * from './api';
4
4
  export * from './events';
5
5
  export * from './observers';
6
+ export * from './constants';
@@ -8,6 +8,9 @@ import { prepareBlockedUserPayload } from '~/userRepository/utils/prepareBlocked
8
8
  import { LinkedObject } from '~/utils/linkedObject';
9
9
  import { onUserDeleted } from '~/userRepository/events';
10
10
  import { EnumUserActions } from '../enums';
11
+ import { onLocalUserFollowed, onUserFollowed } from '~/userRepository/relationship/follow/events';
12
+ import { convertEventPayload } from '~/utils/event';
13
+ import { EnumFollowActions } from '~/userRepository/relationship/follow/enums';
11
14
 
12
15
  export class BlockedUserLiveCollectionController extends LiveCollectionController<
13
16
  'blockUser',
@@ -69,6 +72,15 @@ export class BlockedUserLiveCollectionController extends LiveCollectionControlle
69
72
  fn: onUserDeleted,
70
73
  action: EnumUserActions.OnUserDeleted,
71
74
  },
75
+ // In the case of unblocking a user, we need to subscribe to the follow events
76
+ {
77
+ fn: convertEventPayload(onLocalUserFollowed, 'to', 'user'),
78
+ action: EnumFollowActions.OnFollowed,
79
+ },
80
+ {
81
+ fn: convertEventPayload(onUserFollowed, 'to', 'user'),
82
+ action: EnumFollowActions.OnFollowed,
83
+ },
72
84
  ]);
73
85
  }
74
86
 
@@ -83,7 +95,6 @@ export class BlockedUserLiveCollectionController extends LiveCollectionControlle
83
95
  .map(({ data }) => data)
84
96
  .map(LinkedObject.user) ?? [],
85
97
  );
86
-
87
98
  if (!this.shouldNotify(data) && origin === 'event') return;
88
99
 
89
100
  this.callback({
@@ -4,6 +4,7 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
4
4
  import { getResolver } from '~/core/model';
5
5
  import { getActiveClient } from '~/client';
6
6
  import { EnumUserActions } from '../enums';
7
+ import { EnumFollowActions } from '~/userRepository/relationship/follow/enums';
7
8
 
8
9
  export class BlockedUserQueryStreamController extends QueryStreamController<
9
10
  Amity.BlockedUserPayload,
@@ -56,11 +57,18 @@ export class BlockedUserQueryStreamController extends QueryStreamController<
56
57
  }
57
58
  }
58
59
 
59
- reactor(action: EnumUserActions) {
60
- return (followStatus: Amity.InternalUser) => {
61
- const collection = pullFromCache<Amity.BlockedUserLiveCollectionCache>(this.cacheKey)?.data;
60
+ reactor(action: EnumUserActions | EnumFollowActions) {
61
+ return (targetUser: Amity.InternalUser) => {
62
+ if (action === EnumFollowActions.OnFollowed) {
63
+ const collection = pullFromCache<Amity.BlockedUserLiveCollectionCache>(this.cacheKey)?.data;
64
+ const updatedCollection = collection?.data.filter(id => id !== targetUser.userId);
65
+
66
+ pushToCache(this.cacheKey, {
67
+ ...collection,
68
+ data: updatedCollection,
69
+ });
70
+ }
62
71
 
63
- pushToCache(this.cacheKey, collection);
64
72
  this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
65
73
  };
66
74
  }
@@ -68,7 +76,7 @@ export class BlockedUserQueryStreamController extends QueryStreamController<
68
76
  subscribeRTE(
69
77
  createSubscriber: {
70
78
  fn: (reactor: (user: Amity.InternalUser) => void) => Amity.Unsubscriber;
71
- action: EnumUserActions;
79
+ action: EnumUserActions | EnumFollowActions;
72
80
  }[],
73
81
  ) {
74
82
  return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
@@ -34,7 +34,7 @@ export class FollowerLiveCollectionController extends LiveCollectionController<
34
34
  query: Amity.FollowerLiveCollection,
35
35
  callback: Amity.LiveCollectionCallback<Amity.FollowStatus>,
36
36
  ) {
37
- const queryStreamId = hash(query);
37
+ const queryStreamId = hash({ ...query, type: 'follower' });
38
38
  const cacheKey = ['follow', 'collection', queryStreamId];
39
39
  const paginationController = new FollowerPaginationController(query);
40
40
 
@@ -36,7 +36,7 @@ export class FollowingLiveCollectionController extends LiveCollectionController<
36
36
  query: Amity.FollowingLiveCollection,
37
37
  callback: Amity.LiveCollectionCallback<Amity.FollowStatus>,
38
38
  ) {
39
- const queryStreamId = hash(query);
39
+ const queryStreamId = hash({ ...query, type: 'following' });
40
40
  const cacheKey = ['follow', 'collection', queryStreamId];
41
41
  const paginationController = new FollowingPaginationController(query);
42
42
 
@@ -1,3 +1,4 @@
1
+ import { pullFromCache } from '~/cache/api';
1
2
  import { getMessageReadCount } from '~/messageRepository/utils/getMessageReadCount';
2
3
  import { markReadMessage } from '~/messageRepository/utils/markReadMessage';
3
4
 
@@ -11,6 +12,9 @@ export const messageLinkedObject = (message: Amity.InternalMessage): Amity.Messa
11
12
  get deliveredCount() {
12
13
  return getMessageReadCount(message).deliveredCount;
13
14
  },
15
+ get creator() {
16
+ return pullFromCache<Amity.InternalUser>(['user', 'get', message.creatorId])?.data;
17
+ },
14
18
  markRead: () => markReadMessage(message),
15
19
  };
16
20
  };
@@ -1 +0,0 @@
1
- {"version":3,"file":"getReactions.d.ts","sourceRoot":"","sources":["../../../src/reactionRepository/observers/getReactions.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,YAAY,WACf,MAAM,sBAAsB,YAC1B,MAAM,sBAAsB,CAAC,MAAM,OAAO,CAAC,WAC5C,MAAM,oBAAoB,KAClC,MAAM,YAsGR,CAAC"}
@@ -1,146 +0,0 @@
1
- /* eslint-disable no-use-before-define */
2
- import { getResolver } from '~/core/model';
3
- import { getActiveClient } from '~/client/api';
4
- import { pullFromCache, pushToCache } from '~/cache/api';
5
- import { createQuery, queryOptions, runQuery } from '~/core/query';
6
-
7
- import {
8
- COLLECTION_DEFAULT_CACHING_POLICY,
9
- COLLECTION_DEFAULT_PAGINATION_LIMIT,
10
- } from '~/utils/constants';
11
-
12
- import { LinkedObject } from '~/utils/linkedObject';
13
- import { onReactorAdded, onReactorRemoved } from '../events';
14
- import { queryReactor } from '../api/queryReactor';
15
-
16
- /* begin_public_function
17
- id: reaction.query
18
- */
19
- /**
20
- * ```js
21
- * import { getReactions } from '@amityco/ts-sdk-react-native'
22
- *
23
- * let reactions = []
24
- * const unsub = liveReactions({
25
- * referenceId: Amity.Reaction['referenceId'],
26
- * referenceType: Amity.Reaction['referenceType'],
27
- * }, response => merge(reactions, response.data))
28
- * ```
29
- *
30
- * Observe all mutations on a list of {@link Amity.InternalReactor} for a given target object
31
- *
32
- * @param params for querying reactions
33
- * @param callback the function to call when new data are available
34
- * @param config the live collection configuration
35
- * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
36
- *
37
- * @category Reactions Live Collection
38
- */
39
- export const getReactions = (
40
- params: Amity.ReactionLiveCollection,
41
- callback: Amity.LiveCollectionCallback<Amity.Reactor>,
42
- config?: Amity.LiveCollectionConfig,
43
- ): Amity.Unsubscriber => {
44
- const { log, cache } = getActiveClient();
45
-
46
- if (!cache) {
47
- console.log('For using Live Collection feature you need to enable Cache!');
48
- }
49
-
50
- const timestamp = Date.now();
51
- log(`liveReactions(tmpid: ${timestamp}) > listen`);
52
-
53
- const { limit: queryLimit, ...queryParams } = params;
54
-
55
- const limit = queryLimit ?? COLLECTION_DEFAULT_PAGINATION_LIMIT;
56
- const { policy = COLLECTION_DEFAULT_CACHING_POLICY } = config ?? {};
57
-
58
- const disposers: Amity.Unsubscriber[] = [];
59
- const cacheKey = [
60
- 'reaction',
61
- 'collection',
62
- { referenceId: params.referenceId, referenceType: params.referenceType },
63
- ];
64
-
65
- const responder = (data: Amity.ReactionLiveCollectionCache) => {
66
- const reactions: Amity.Reactor[] =
67
- data.data
68
- .map(reactorId => pullFromCache<Amity.InternalReactor>(['reactor', 'get', reactorId])!)
69
- .filter(Boolean)
70
- .map(({ data }) => LinkedObject.reactor(data)) ?? [];
71
-
72
- callback({
73
- onNextPage: onFetch,
74
- data: reactions,
75
- hasNextPage: !!data.params?.page,
76
- loading: data.loading,
77
- error: data.error,
78
- });
79
- };
80
-
81
- const realtimeRouter =
82
- (action: Amity.ReactionActionType) => (reaction: Amity.InternalReactor) => {
83
- const collection = pullFromCache<Amity.ReactionLiveCollectionCache>(cacheKey)?.data;
84
- if (!collection) return;
85
-
86
- if (action === 'onAdded') {
87
- collection.data = [...new Set([reaction.reactionId, ...collection.data])];
88
- } else if (action === 'onRemoved') {
89
- collection.data = collection.data.filter(p => p !== reaction.reactionId);
90
- }
91
-
92
- pushToCache(cacheKey, collection);
93
- responder(collection);
94
- };
95
-
96
- const onFetch = (initial = false) => {
97
- const collection = pullFromCache<Amity.ReactionLiveCollectionCache>(cacheKey)?.data;
98
-
99
- const reactions = collection?.data ?? [];
100
-
101
- if (!initial && reactions.length > 0 && !collection?.params?.page) return;
102
-
103
- const query = createQuery(queryReactor, {
104
- ...queryParams,
105
- page: (!initial ? collection?.params.page : undefined) ?? { limit },
106
- });
107
-
108
- runQuery(
109
- query,
110
- ({ data: result, error, loading, nextPage: page }) => {
111
- const data = {
112
- loading,
113
- error,
114
- params: { page },
115
- data: reactions,
116
- };
117
-
118
- if (result) {
119
- data.data = [...new Set([...reactions, ...result.map(getResolver('reactor'))])];
120
- }
121
-
122
- pushToCache(cacheKey, data);
123
-
124
- responder(data);
125
- },
126
- queryOptions(policy),
127
- );
128
- };
129
-
130
- disposers.push(
131
- onReactorAdded(queryParams.referenceType, queryParams.referenceId, realtimeRouter('onAdded')),
132
- onReactorRemoved(
133
- queryParams.referenceType,
134
- queryParams.referenceId,
135
- realtimeRouter('onRemoved'),
136
- ),
137
- );
138
-
139
- onFetch(true);
140
-
141
- return () => {
142
- log(`liveReactions(tmpid: ${timestamp}) > dispose`);
143
- disposers.forEach(fn => fn());
144
- };
145
- };
146
- /* end_public_function */