@amityco/ts-sdk 7.5.4-ec2fdd4.0 → 7.6.1-09fb578a.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 (159) hide show
  1. package/dist/@types/core/events.d.ts +6 -1
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/payload.d.ts +25 -0
  4. package/dist/@types/core/payload.d.ts.map +1 -1
  5. package/dist/@types/domains/channel.d.ts +6 -0
  6. package/dist/@types/domains/channel.d.ts.map +1 -1
  7. package/dist/@types/domains/group.d.ts +2 -0
  8. package/dist/@types/domains/group.d.ts.map +1 -1
  9. package/dist/@types/domains/liveReaction.d.ts +20 -0
  10. package/dist/@types/domains/liveReaction.d.ts.map +1 -0
  11. package/dist/@types/domains/post.d.ts +3 -0
  12. package/dist/@types/domains/post.d.ts.map +1 -1
  13. package/dist/@types/domains/stream.d.ts +9 -1
  14. package/dist/@types/domains/stream.d.ts.map +1 -1
  15. package/dist/@types/index.d.ts +1 -0
  16. package/dist/@types/index.d.ts.map +1 -1
  17. package/dist/channelRepository/api/createChannel.d.ts +3 -1
  18. package/dist/channelRepository/api/createChannel.d.ts.map +1 -1
  19. package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.d.ts.map +1 -1
  20. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberLiveCollectionController.d.ts.map +1 -1
  21. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.d.ts +2 -2
  22. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.d.ts.map +1 -1
  23. package/dist/channelRepository/events/index.d.ts +1 -1
  24. package/dist/channelRepository/events/index.d.ts.map +1 -1
  25. package/dist/channelRepository/events/onChannelSetMuted.d.ts +2 -0
  26. package/dist/channelRepository/events/onChannelSetMuted.d.ts.map +1 -0
  27. package/dist/channelRepository/events/onChannelSetUserMuted.d.ts +2 -0
  28. package/dist/channelRepository/events/onChannelSetUserMuted.d.ts.map +1 -0
  29. package/dist/channelRepository/internalApi/getChannel.d.ts.map +1 -1
  30. package/dist/channelRepository/observers/getChannels/ChannelLiveCollectionController.d.ts.map +1 -1
  31. package/dist/client/api/login.d.ts.map +1 -1
  32. package/dist/core/events.d.ts +3 -3
  33. package/dist/core/events.d.ts.map +1 -1
  34. package/dist/core/subscription.d.ts +2 -1
  35. package/dist/core/subscription.d.ts.map +1 -1
  36. package/dist/index.cjs.js +6267 -5651
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.esm.js +6191 -5577
  40. package/dist/index.umd.js +3 -3
  41. package/dist/liveReactionRepository/api/createReaction.d.ts +20 -0
  42. package/dist/liveReactionRepository/api/createReaction.d.ts.map +1 -0
  43. package/dist/liveReactionRepository/api/index.d.ts +2 -0
  44. package/dist/liveReactionRepository/api/index.d.ts.map +1 -0
  45. package/dist/liveReactionRepository/events/index.d.ts +2 -0
  46. package/dist/liveReactionRepository/events/index.d.ts.map +1 -0
  47. package/dist/liveReactionRepository/events/onLiveReactionCreated.d.ts +17 -0
  48. package/dist/liveReactionRepository/events/onLiveReactionCreated.d.ts.map +1 -0
  49. package/dist/liveReactionRepository/events/onLiveReactionCreatedLocal.d.ts +17 -0
  50. package/dist/liveReactionRepository/events/onLiveReactionCreatedLocal.d.ts.map +1 -0
  51. package/dist/liveReactionRepository/index.d.ts +4 -0
  52. package/dist/liveReactionRepository/index.d.ts.map +1 -0
  53. package/dist/liveReactionRepository/internalApi/createLiveReaction.d.ts +20 -0
  54. package/dist/liveReactionRepository/internalApi/createLiveReaction.d.ts.map +1 -0
  55. package/dist/liveReactionRepository/observers/getReactions.d.ts +19 -0
  56. package/dist/liveReactionRepository/observers/getReactions.d.ts.map +1 -0
  57. package/dist/liveReactionRepository/observers/index.d.ts +2 -0
  58. package/dist/liveReactionRepository/observers/index.d.ts.map +1 -0
  59. package/dist/liveReactionRepository/service/ReactionSyncEngine.d.ts +26 -0
  60. package/dist/liveReactionRepository/service/ReactionSyncEngine.d.ts.map +1 -0
  61. package/dist/liveReactionRepository/utils/ReactionSyncEngineOnLoginHandler.d.ts +3 -0
  62. package/dist/liveReactionRepository/utils/ReactionSyncEngineOnLoginHandler.d.ts.map +1 -0
  63. package/dist/messagePreview/utils/getChannelMessagePreviewWithUser.d.ts +4 -0
  64. package/dist/messagePreview/utils/getChannelMessagePreviewWithUser.d.ts.map +1 -1
  65. package/dist/messageRepository/api/deleteMessage.d.ts.map +1 -1
  66. package/dist/messageRepository/observers/getMessage.d.ts.map +1 -1
  67. package/dist/messageRepository/observers/getMessages/MessageLiveCollectionController.d.ts.map +1 -1
  68. package/dist/messageRepository/observers/getMessages/MessageQueryStreamController.d.ts.map +1 -1
  69. package/dist/postRepository/api/createPost.d.ts.map +1 -1
  70. package/dist/postRepository/utils/payload.d.ts.map +1 -1
  71. package/dist/streamRepository/api/createStream.d.ts +1 -1
  72. package/dist/streamRepository/api/createStream.d.ts.map +1 -1
  73. package/dist/streamRepository/api/editStream.d.ts +18 -0
  74. package/dist/streamRepository/api/editStream.d.ts.map +1 -0
  75. package/dist/streamRepository/api/index.d.ts +1 -0
  76. package/dist/streamRepository/api/index.d.ts.map +1 -1
  77. package/dist/streamRepository/api/updateStream.d.ts +4 -1
  78. package/dist/streamRepository/api/updateStream.d.ts.map +1 -1
  79. package/dist/streamRepository/events/onStreamViewerBanned.d.ts +17 -0
  80. package/dist/streamRepository/events/onStreamViewerBanned.d.ts.map +1 -0
  81. package/dist/streamRepository/events/onStreamViewerUnbanned.d.ts +17 -0
  82. package/dist/streamRepository/events/onStreamViewerUnbanned.d.ts.map +1 -0
  83. package/dist/streamRepository/internalApi/getLiveChat.d.ts +16 -0
  84. package/dist/streamRepository/internalApi/getLiveChat.d.ts.map +1 -0
  85. package/dist/streamRepository/internalApi/getStream.d.ts +2 -2
  86. package/dist/streamRepository/internalApi/getStream.d.ts.map +1 -1
  87. package/dist/streamRepository/observers/getStreamById.d.ts.map +1 -1
  88. package/dist/streamRepository/observers/getStreams/GetStreamsLiveCollectionController.d.ts.map +1 -1
  89. package/dist/utils/linkedObject/channelLinkedObject.d.ts.map +1 -1
  90. package/dist/utils/linkedObject/channelMemberLinkedObject.d.ts +2 -0
  91. package/dist/utils/linkedObject/channelMemberLinkedObject.d.ts.map +1 -0
  92. package/dist/utils/linkedObject/index.d.ts +1 -0
  93. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  94. package/dist/utils/linkedObject/postLinkedObject.d.ts.map +1 -1
  95. package/dist/utils/linkedObject/streamLinkedObject.d.ts.map +1 -1
  96. package/dist/utils/postTypePredicate.d.ts +5 -3
  97. package/dist/utils/postTypePredicate.d.ts.map +1 -1
  98. package/dist/utils/tests/dummy/community.d.ts +2 -0
  99. package/dist/utils/tests/dummy/community.d.ts.map +1 -1
  100. package/package.json +1 -1
  101. package/src/@types/core/events.ts +9 -1
  102. package/src/@types/core/payload.ts +32 -0
  103. package/src/@types/domains/channel.ts +7 -0
  104. package/src/@types/domains/group.ts +2 -0
  105. package/src/@types/domains/liveReaction.ts +25 -0
  106. package/src/@types/domains/post.ts +3 -0
  107. package/src/@types/domains/stream.ts +12 -1
  108. package/src/@types/index.ts +1 -0
  109. package/src/channelRepository/api/createChannel.ts +12 -9
  110. package/src/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.ts +5 -1
  111. package/src/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberLiveCollectionController.ts +2 -1
  112. package/src/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.ts +2 -2
  113. package/src/channelRepository/events/index.ts +1 -1
  114. package/src/channelRepository/events/onChannelSetMuted.ts +48 -0
  115. package/src/channelRepository/events/onChannelSetUserMuted.ts +67 -0
  116. package/src/channelRepository/internalApi/getChannel.ts +0 -1
  117. package/src/channelRepository/observers/getChannel.ts +2 -2
  118. package/src/channelRepository/observers/getChannels/ChannelLiveCollectionController.ts +2 -2
  119. package/src/channelRepository/utils/constructChannelObject.ts +2 -2
  120. package/src/client/api/login.ts +2 -0
  121. package/src/core/events.ts +1 -0
  122. package/src/core/subscription.ts +10 -6
  123. package/src/index.ts +2 -0
  124. package/src/liveReactionRepository/api/createReaction.ts +58 -0
  125. package/src/liveReactionRepository/api/index.ts +1 -0
  126. package/src/liveReactionRepository/events/index.ts +1 -0
  127. package/src/liveReactionRepository/events/onLiveReactionCreated.ts +37 -0
  128. package/src/liveReactionRepository/events/onLiveReactionCreatedLocal.ts +29 -0
  129. package/src/liveReactionRepository/index.ts +3 -0
  130. package/src/liveReactionRepository/internalApi/createLiveReaction.ts +42 -0
  131. package/src/liveReactionRepository/observers/getReactions.ts +59 -0
  132. package/src/liveReactionRepository/observers/index.ts +1 -0
  133. package/src/liveReactionRepository/service/ReactionSyncEngine.ts +138 -0
  134. package/src/liveReactionRepository/utils/ReactionSyncEngineOnLoginHandler.ts +19 -0
  135. package/src/messageRepository/api/deleteMessage.ts +16 -0
  136. package/src/messageRepository/observers/getMessage.ts +2 -0
  137. package/src/messageRepository/observers/getMessages/MessageLiveCollectionController.ts +2 -0
  138. package/src/messageRepository/observers/getMessages/MessageQueryStreamController.ts +13 -0
  139. package/src/postRepository/api/createPost.ts +3 -2
  140. package/src/postRepository/utils/payload.ts +37 -1
  141. package/src/streamRepository/api/createStream.ts +4 -1
  142. package/src/streamRepository/api/editStream.ts +51 -0
  143. package/src/streamRepository/api/index.ts +1 -0
  144. package/src/streamRepository/api/updateStream.ts +8 -1
  145. package/src/streamRepository/events/onStreamViewerBanned.ts +58 -0
  146. package/src/streamRepository/events/onStreamViewerUnbanned.ts +47 -0
  147. package/src/streamRepository/internalApi/getLiveChat.ts +59 -0
  148. package/src/streamRepository/internalApi/getStream.ts +3 -3
  149. package/src/streamRepository/observers/getStreamById.ts +2 -0
  150. package/src/streamRepository/observers/getStreams/GetStreamsLiveCollectionController.ts +5 -1
  151. package/src/utils/linkedObject/channelLinkedObject.ts +19 -0
  152. package/src/utils/linkedObject/channelMemberLinkedObject.ts +20 -0
  153. package/src/utils/linkedObject/index.ts +2 -0
  154. package/src/utils/linkedObject/postLinkedObject.ts +32 -2
  155. package/src/utils/linkedObject/streamLinkedObject.ts +4 -0
  156. package/src/utils/postTypePredicate.ts +26 -3
  157. package/dist/channelRepository/events/onChannelMuted.d.ts +0 -2
  158. package/dist/channelRepository/events/onChannelMuted.d.ts.map +0 -1
  159. package/src/channelRepository/events/onChannelMuted.ts +0 -39
@@ -8,6 +8,7 @@ import { onStreamTerminated } from '~/streamRepository/events/onStreamTerminated
8
8
  import { LinkedObject } from '~/utils/linkedObject';
9
9
  import { getStream as _getStream } from '../internalApi/getStream';
10
10
  import { onStreamRecorded, onStreamStarted, onStreamStopped } from '../events';
11
+ import { onStreamViewerBanned } from '../events/onStreamViewerBanned';
11
12
 
12
13
  /* begin_public_function
13
14
  id: stream.get
@@ -45,6 +46,7 @@ export const getStreamById = (
45
46
  onStreamStopped,
46
47
  onStreamFlagged,
47
48
  onStreamTerminated,
49
+ onStreamViewerBanned,
48
50
  ]);
49
51
  };
50
52
  /* end_public_function */
@@ -12,6 +12,8 @@ import {
12
12
  } from '~/streamRepository/events';
13
13
  import { GetStreamsPageController } from '~/streamRepository/observers/getStreams/GetStreamsPageController';
14
14
  import { GetStreamsQueryStreamController } from '~/streamRepository/observers/getStreams/GetStreamsQueryStreamController';
15
+ import { onStreamViewerBanned } from '~/streamRepository/events/onStreamViewerBanned';
16
+ import { onStreamViewerUnbanned } from '~/streamRepository/events/onStreamViewerUnbanned';
15
17
 
16
18
  export class GetStreamsLiveCollectionController extends LiveCollectionController<
17
19
  'stream',
@@ -77,6 +79,8 @@ export class GetStreamsLiveCollectionController extends LiveCollectionController
77
79
  { fn: onStreamStopped, action: 'onStreamStopped' },
78
80
  { fn: onStreamFlagged, action: 'onStreamFlagged' },
79
81
  { fn: onStreamTerminated, action: 'onStreamTerminated' },
82
+ { fn: onStreamViewerBanned, action: 'onStreamViewerBanned' },
83
+ { fn: onStreamViewerUnbanned, action: 'onStreamViewerUnbanned' },
80
84
  ]);
81
85
  }
82
86
 
@@ -102,7 +106,7 @@ export class GetStreamsLiveCollectionController extends LiveCollectionController
102
106
  this.queryStreamController.appendToQueryStream(response, direction, refresh);
103
107
  }
104
108
 
105
- private applyFilter = (data: Amity.InternalStream[]): Amity.InternalStream[] => {
109
+ private applyFilter = (data: Amity.Stream[]): Amity.Stream[] => {
106
110
  let streams = filterByPropEquality(data, 'isDeleted', this.query.isDeleted);
107
111
 
108
112
  streams = streams.sort(
@@ -1,8 +1,27 @@
1
1
  import { markAsRead } from '~/channelRepository/internalApi/markAsRead';
2
2
  import { shallowClone } from '../shallowClone';
3
+ import { queryCache } from '~/cache/api';
4
+ import { channelMemberLinkedObject } from './channelMemberLinkedObject';
3
5
 
4
6
  export const channelLinkedObject = (channel: Amity.InternalChannel): Amity.Channel => {
7
+ let previewMembers: Amity.Membership<'channel'>[] = [];
8
+
9
+ if (channel.type === 'conversation') {
10
+ const channelUsers = queryCache<Amity.Membership<'channel'>>(['channelUsers', 'get']);
11
+ if (channelUsers && channelUsers?.length > 0) {
12
+ previewMembers = (
13
+ channelUsers?.filter(({ data }) => data.channelId === channel.channelId) ?? []
14
+ )
15
+ // sort in ascending order by userInternalId
16
+ .sort((a, b) => a.data.userInternalId.localeCompare(b.data.userInternalId))
17
+ // Select only first 4 members
18
+ .slice(0, 4)
19
+ .map(({ data }) => channelMemberLinkedObject(data));
20
+ }
21
+ }
22
+
5
23
  return shallowClone(channel, {
6
24
  markAsRead: () => markAsRead(channel.channelInternalId),
25
+ previewMembers,
7
26
  });
8
27
  };
@@ -0,0 +1,20 @@
1
+ import { pullFromCache } from '~/cache/api/pullFromCache';
2
+ import { userLinkedObject } from './userLinkedObject';
3
+
4
+ export const channelMemberLinkedObject = (
5
+ channelMember: Amity.Membership<'channel'>,
6
+ ): Amity.Membership<'channel'> => {
7
+ const getUser = (): Amity.User | undefined => {
8
+ const cacheKey = ['user', 'get', channelMember.userId];
9
+ const internalUser = pullFromCache<Amity.InternalUser>(cacheKey)?.data;
10
+
11
+ return internalUser ? userLinkedObject(internalUser) : undefined;
12
+ };
13
+
14
+ return {
15
+ ...channelMember,
16
+ get user() {
17
+ return getUser();
18
+ },
19
+ };
20
+ };
@@ -14,6 +14,7 @@ import { notificationTrayLinkedObject } from './notificationTrayLinkedObject';
14
14
  import { communityLinkedObject } from './communityLinkedObject';
15
15
  import { invitationLinkedObject } from './invitationLinkedObject';
16
16
  import { joinRequestLinkedObject } from './joinRequestLinkedObject';
17
+ import { channelMemberLinkedObject } from './channelMemberLinkedObject';
17
18
 
18
19
  export const LinkedObject = {
19
20
  ad: adLinkedObject,
@@ -32,4 +33,5 @@ export const LinkedObject = {
32
33
  community: communityLinkedObject,
33
34
  invitation: invitationLinkedObject,
34
35
  joinRequest: joinRequestLinkedObject,
36
+ channelMember: channelMemberLinkedObject,
35
37
  };
@@ -2,12 +2,23 @@ import { pullFromCache } from '~/cache/api';
2
2
  import { commentLinkedObject } from '~/utils/linkedObject/commentLinkedObject';
3
3
  import AnalyticsEngine from '../../analytic/service/analytic/AnalyticsEngine';
4
4
  import { userLinkedObject } from './userLinkedObject';
5
- import { isAmityFilePost, isAmityImagePost, isAmityVideoPost } from '../postTypePredicate';
5
+ import {
6
+ isAmityFilePost,
7
+ isAmityImagePost,
8
+ isAmityLivestreamPost,
9
+ isAmityPollPost,
10
+ isAmityVideoPost,
11
+ } from '../postTypePredicate';
12
+ import { streamLinkedObject } from './streamLinkedObject';
13
+ import { isNonNullable } from '..';
6
14
 
7
15
  export const postLinkedObject = (post: Amity.InternalPost): Amity.Post => {
8
16
  return {
9
17
  ...post,
10
-
18
+ childrenPosts: post.children
19
+ .map(childPost => pullFromCache<Amity.InternalPost>(['post', 'get', childPost])?.data)
20
+ .filter(isNonNullable)
21
+ .map(postLinkedObject),
11
22
  analytics: {
12
23
  markAsViewed: () => {
13
24
  const analyticsEngineInstance = AnalyticsEngine.getInstance();
@@ -64,5 +75,24 @@ export const postLinkedObject = (post: Amity.InternalPost): Amity.Post => {
64
75
  ? pullFromCache<Amity.File<'file'>>(['file', 'get', post?.data?.fileId])?.data
65
76
  : undefined;
66
77
  },
78
+
79
+ getLivestreamInfo(): Amity.Stream | undefined {
80
+ if (!isAmityLivestreamPost(post)) return;
81
+ const cache = pullFromCache<Amity.InternalStream>([
82
+ 'stream',
83
+ 'get',
84
+ post?.data?.streamId,
85
+ ])?.data;
86
+ if (!cache) return;
87
+
88
+ return streamLinkedObject(cache);
89
+ },
90
+
91
+ getPollInfo(): Amity.Poll | undefined {
92
+ if (!isAmityPollPost(post)) return;
93
+ const cache = pullFromCache<Amity.Poll>(['poll', 'get', post?.data?.pollId])?.data;
94
+ if (!cache) return;
95
+ return cache;
96
+ },
67
97
  };
68
98
  };
@@ -1,4 +1,5 @@
1
1
  import { pullFromCache } from '~/cache/api';
2
+ import { getLiveChat as _getLiveChat } from '~/streamRepository/internalApi/getLiveChat';
2
3
 
3
4
  export const streamLinkedObject = (stream: Amity.InternalStream): Amity.Stream => {
4
5
  return {
@@ -18,5 +19,8 @@ export const streamLinkedObject = (stream: Amity.InternalStream): Amity.Stream =
18
19
  get user() {
19
20
  return pullFromCache<Amity.User>(['user', 'get', stream.userId])?.data;
20
21
  },
22
+ getLiveChat: () => _getLiveChat(stream),
23
+ isBanned: !stream.watcherUrl,
24
+ watcherUrl: null,
21
25
  };
22
26
  };
@@ -1,5 +1,6 @@
1
- export function isAmityImagePost(post: Amity.InternalPost): post is Amity.Post<'image'> {
1
+ export function isAmityImagePost(post?: Amity.InternalPost): post is Amity.Post<'image'> {
2
2
  return !!(
3
+ post &&
3
4
  post.data &&
4
5
  typeof post.data !== 'string' &&
5
6
  'fileId' in post.data &&
@@ -7,8 +8,9 @@ export function isAmityImagePost(post: Amity.InternalPost): post is Amity.Post<'
7
8
  );
8
9
  }
9
10
 
10
- export function isAmityFilePost(post: Amity.InternalPost): post is Amity.Post<'file'> {
11
+ export function isAmityFilePost(post?: Amity.InternalPost): post is Amity.Post<'file'> {
11
12
  return !!(
13
+ post &&
12
14
  post.data &&
13
15
  typeof post.data !== 'string' &&
14
16
  'fileId' in post.data &&
@@ -16,8 +18,9 @@ export function isAmityFilePost(post: Amity.InternalPost): post is Amity.Post<'f
16
18
  );
17
19
  }
18
20
 
19
- export function isAmityVideoPost(post: Amity.InternalPost): post is Amity.Post<'video'> {
21
+ export function isAmityVideoPost(post?: Amity.InternalPost): post is Amity.Post<'video'> {
20
22
  return !!(
23
+ post &&
21
24
  post.data &&
22
25
  typeof post.data !== 'string' &&
23
26
  'videoFileId' in post.data &&
@@ -25,3 +28,23 @@ export function isAmityVideoPost(post: Amity.InternalPost): post is Amity.Post<'
25
28
  post.dataType === 'video'
26
29
  );
27
30
  }
31
+
32
+ export function isAmityLivestreamPost(post?: Amity.InternalPost): post is Amity.Post<'liveStream'> {
33
+ return !!(
34
+ post &&
35
+ post.data &&
36
+ typeof post.data !== 'string' &&
37
+ 'streamId' in post.data &&
38
+ post.dataType === 'liveStream'
39
+ );
40
+ }
41
+
42
+ export function isAmityPollPost(post?: Amity.InternalPost): post is Amity.Post<'poll'> {
43
+ return !!(
44
+ post &&
45
+ post.data &&
46
+ typeof post.data !== 'string' &&
47
+ 'pollId' in post.data &&
48
+ post.dataType === 'poll'
49
+ );
50
+ }
@@ -1,2 +0,0 @@
1
- export declare const onChannelMuted: (callback: Amity.Listener<Amity.StaticInternalChannel>) => () => void;
2
- //# sourceMappingURL=onChannelMuted.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"onChannelMuted.d.ts","sourceRoot":"","sources":["../../../src/channelRepository/events/onChannelMuted.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,cAAc,aAAc,MAAM,QAAQ,CAAC,MAAM,qBAAqB,CAAC,eAgBnF,CAAC"}
@@ -1,39 +0,0 @@
1
- import { getActiveClient } from '~/client/api/activeClient';
2
- import { createEventSubscriber } from '~/core/events';
3
-
4
- import { ingestInCache } from '~/cache/api/ingestInCache';
5
-
6
- import { prepareChannelPayload } from '../utils';
7
- import { constructChannelDynamicValue } from '../utils/constructChannelDynamicValue';
8
-
9
- type CallbackFn = Amity.Listener<Amity.StaticInternalChannel>;
10
- const callbacks: CallbackFn[] = [];
11
- let mainDisposer: (() => void) | null = null;
12
-
13
- const dispose = (cb: CallbackFn) => {
14
- const index = callbacks.indexOf(cb);
15
- if (index > -1) {
16
- callbacks.splice(index, 1);
17
- }
18
- if (callbacks.length === 0) {
19
- mainDisposer?.();
20
- }
21
- };
22
-
23
- export const onChannelMuted = (callback: Amity.Listener<Amity.StaticInternalChannel>) => {
24
- if (callbacks.length === 0) {
25
- const client = getActiveClient();
26
-
27
- const filter = async (payload: Amity.ChannelPayload) => {
28
- const data = await prepareChannelPayload(payload);
29
-
30
- ingestInCache(data);
31
- callbacks.forEach(cb => cb(data.channels[0]));
32
- };
33
-
34
- mainDisposer = createEventSubscriber(client, 'onChannelMuted', 'channel.setMuted', filter);
35
- }
36
-
37
- callbacks.push(callback);
38
- return () => dispose(callback);
39
- };