@amityco/ts-sdk 7.4.1-d23fab2f.0 → 7.4.1-fd0f791a.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 (188) hide show
  1. package/dist/@types/core/events.d.ts +7 -3
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/model.d.ts +2 -0
  4. package/dist/@types/core/model.d.ts.map +1 -1
  5. package/dist/@types/core/payload.d.ts +30 -1
  6. package/dist/@types/core/payload.d.ts.map +1 -1
  7. package/dist/@types/domains/community.d.ts +32 -2
  8. package/dist/@types/domains/community.d.ts.map +1 -1
  9. package/dist/@types/domains/invitation.d.ts +48 -3
  10. package/dist/@types/domains/invitation.d.ts.map +1 -1
  11. package/dist/@types/domains/joinRequest.d.ts +53 -0
  12. package/dist/@types/domains/joinRequest.d.ts.map +1 -0
  13. package/dist/@types/index.d.ts +1 -0
  14. package/dist/@types/index.d.ts.map +1 -1
  15. package/dist/communityRepository/api/getCommunities.d.ts +1 -1
  16. package/dist/communityRepository/api/getCommunities.d.ts.map +1 -1
  17. package/dist/communityRepository/api/getCommunity.d.ts +1 -1
  18. package/dist/communityRepository/api/getCommunity.d.ts.map +1 -1
  19. package/dist/communityRepository/api/getRecommendedCommunities.d.ts +3 -1
  20. package/dist/communityRepository/api/getRecommendedCommunities.d.ts.map +1 -1
  21. package/dist/communityRepository/api/getTrendingCommunities.d.ts +3 -1
  22. package/dist/communityRepository/api/getTrendingCommunities.d.ts.map +1 -1
  23. package/dist/communityRepository/api/joinCommunity.d.ts +3 -0
  24. package/dist/communityRepository/api/joinCommunity.d.ts.map +1 -1
  25. package/dist/communityRepository/api/updateCommunity.d.ts +2 -2
  26. package/dist/communityRepository/api/updateCommunity.d.ts.map +1 -1
  27. package/dist/communityRepository/internalAPI/getMyJoinRequest.d.ts +16 -0
  28. package/dist/communityRepository/internalAPI/getMyJoinRequest.d.ts.map +1 -0
  29. package/dist/communityRepository/internalAPI/joinCommunity.d.ts +16 -0
  30. package/dist/communityRepository/internalAPI/joinCommunity.d.ts.map +1 -0
  31. package/dist/communityRepository/joinRequest/events/index.d.ts +4 -0
  32. package/dist/communityRepository/joinRequest/events/index.d.ts.map +1 -0
  33. package/dist/communityRepository/joinRequest/events/onJoinRequestCreated.d.ts +17 -0
  34. package/dist/communityRepository/joinRequest/events/onJoinRequestCreated.d.ts.map +1 -0
  35. package/dist/communityRepository/joinRequest/events/onJoinRequestDeleted.d.ts +17 -0
  36. package/dist/communityRepository/joinRequest/events/onJoinRequestDeleted.d.ts.map +1 -0
  37. package/dist/communityRepository/joinRequest/events/onJoinRequestUpdated.d.ts +17 -0
  38. package/dist/communityRepository/joinRequest/events/onJoinRequestUpdated.d.ts.map +1 -0
  39. package/dist/communityRepository/joinRequest/internalAPI/approveJoinRequest.d.ts +16 -0
  40. package/dist/communityRepository/joinRequest/internalAPI/approveJoinRequest.d.ts.map +1 -0
  41. package/dist/communityRepository/joinRequest/internalAPI/cancelJoinRequest.d.ts +16 -0
  42. package/dist/communityRepository/joinRequest/internalAPI/cancelJoinRequest.d.ts.map +1 -0
  43. package/dist/communityRepository/joinRequest/internalAPI/rejectJoinRequest.d.ts +16 -0
  44. package/dist/communityRepository/joinRequest/internalAPI/rejectJoinRequest.d.ts.map +1 -0
  45. package/dist/communityRepository/observers/getJoinRequests/JoinRequestsLiveCollectionController.d.ts +14 -0
  46. package/dist/communityRepository/observers/getJoinRequests/JoinRequestsLiveCollectionController.d.ts.map +1 -0
  47. package/dist/communityRepository/observers/getJoinRequests/JoinRequestsPaginationController.d.ts +9 -0
  48. package/dist/communityRepository/observers/getJoinRequests/JoinRequestsPaginationController.d.ts.map +1 -0
  49. package/dist/communityRepository/observers/getJoinRequests/JoinRequestsQueryStreamController.d.ts +15 -0
  50. package/dist/communityRepository/observers/getJoinRequests/JoinRequestsQueryStreamController.d.ts.map +1 -0
  51. package/dist/communityRepository/observers/getJoinRequests/enum.d.ts +6 -0
  52. package/dist/communityRepository/observers/getJoinRequests/enum.d.ts.map +1 -0
  53. package/dist/communityRepository/observers/getJoinRequests.d.ts +12 -0
  54. package/dist/communityRepository/observers/getJoinRequests.d.ts.map +1 -0
  55. package/dist/communityRepository/observers/getRecommendedCommunities/RecommendedCommunitiesLiveCollectionController.d.ts.map +1 -1
  56. package/dist/communityRepository/observers/getTrendingCommunities/TrendingCommunitiesLiveCollectionController.d.ts.map +1 -1
  57. package/dist/communityRepository/observers/searchCommunities/SearchCommunitiesPaginationController.d.ts.map +1 -1
  58. package/dist/communityRepository/utils/payload.d.ts +1 -0
  59. package/dist/communityRepository/utils/payload.d.ts.map +1 -1
  60. package/dist/core/events.d.ts +3 -3
  61. package/dist/core/events.d.ts.map +1 -1
  62. package/dist/core/model/idResolvers.d.ts.map +1 -1
  63. package/dist/core/model/index.d.ts.map +1 -1
  64. package/dist/index.cjs.js +2608 -1576
  65. package/dist/index.esm.js +2432 -1400
  66. package/dist/index.umd.js +4 -4
  67. package/dist/invitationRepository/events/index.d.ts +2 -0
  68. package/dist/invitationRepository/events/index.d.ts.map +1 -1
  69. package/dist/invitationRepository/events/onLocalInvitationCreated.d.ts +1 -1
  70. package/dist/invitationRepository/events/onLocalInvitationCreated.d.ts.map +1 -1
  71. package/dist/invitationRepository/events/onLocalInvitationDeleted.d.ts +1 -1
  72. package/dist/invitationRepository/events/onLocalInvitationDeleted.d.ts.map +1 -1
  73. package/dist/invitationRepository/events/onLocalInvitationUpdated.d.ts +1 -1
  74. package/dist/invitationRepository/events/onLocalInvitationUpdated.d.ts.map +1 -1
  75. package/dist/invitationRepository/index.d.ts +1 -0
  76. package/dist/invitationRepository/index.d.ts.map +1 -1
  77. package/dist/invitationRepository/internalApi/createInvitations.d.ts.map +1 -1
  78. package/dist/invitationRepository/internalApi/getInvitation.d.ts +17 -0
  79. package/dist/invitationRepository/internalApi/getInvitation.d.ts.map +1 -0
  80. package/dist/invitationRepository/observers/getInvitations/InvitationsLiveCollectionController.d.ts +14 -0
  81. package/dist/invitationRepository/observers/getInvitations/InvitationsLiveCollectionController.d.ts.map +1 -0
  82. package/dist/invitationRepository/observers/getInvitations/InvitationsPaginationController.d.ts +5 -0
  83. package/dist/invitationRepository/observers/getInvitations/InvitationsPaginationController.d.ts.map +1 -0
  84. package/dist/invitationRepository/observers/getInvitations/InvitationsQueryStreamController.d.ts +15 -0
  85. package/dist/invitationRepository/observers/getInvitations/InvitationsQueryStreamController.d.ts.map +1 -0
  86. package/dist/invitationRepository/observers/getInvitations/enums.d.ts +6 -0
  87. package/dist/invitationRepository/observers/getInvitations/enums.d.ts.map +1 -0
  88. package/dist/invitationRepository/observers/getInvitations.d.ts +12 -0
  89. package/dist/invitationRepository/observers/getInvitations.d.ts.map +1 -0
  90. package/dist/invitationRepository/observers/getMyCommunityInvitations.d.ts +12 -0
  91. package/dist/invitationRepository/observers/getMyCommunityInvitations.d.ts.map +1 -0
  92. package/dist/invitationRepository/observers/getMyInvitations/MyInvitationsLiveCollectionController.d.ts +14 -0
  93. package/dist/invitationRepository/observers/getMyInvitations/MyInvitationsLiveCollectionController.d.ts.map +1 -0
  94. package/dist/invitationRepository/observers/getMyInvitations/MyInvitationsPaginationController.d.ts +5 -0
  95. package/dist/invitationRepository/observers/getMyInvitations/MyInvitationsPaginationController.d.ts.map +1 -0
  96. package/dist/invitationRepository/observers/getMyInvitations/MyInvitationsQueryStreamController.d.ts +15 -0
  97. package/dist/invitationRepository/observers/getMyInvitations/MyInvitationsQueryStreamController.d.ts.map +1 -0
  98. package/dist/invitationRepository/observers/index.d.ts +2 -0
  99. package/dist/invitationRepository/observers/index.d.ts.map +1 -0
  100. package/dist/invitationRepository/utils/convertRawInvitationToInternalInvitation.d.ts +2 -0
  101. package/dist/invitationRepository/utils/convertRawInvitationToInternalInvitation.d.ts.map +1 -0
  102. package/dist/invitationRepository/utils/index.d.ts +2 -0
  103. package/dist/invitationRepository/utils/index.d.ts.map +1 -0
  104. package/dist/invitationRepository/utils/prepareInvitationPayload.d.ts +2 -0
  105. package/dist/invitationRepository/utils/prepareInvitationPayload.d.ts.map +1 -0
  106. package/dist/invitationRepository/utils/prepareMyInvitationsPayload.d.ts +2 -0
  107. package/dist/invitationRepository/utils/prepareMyInvitationsPayload.d.ts.map +1 -0
  108. package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostQueryStreamController.d.ts.map +1 -1
  109. package/dist/postRepository/observers/getPinnedPosts/PinnedPostQueryStreamController.d.ts.map +1 -1
  110. package/dist/subChannelRepository/utils/prepareSubChannelPayload.d.ts.map +1 -1
  111. package/dist/utils/linkedObject/communityLinkedObject.d.ts +1 -1
  112. package/dist/utils/linkedObject/communityLinkedObject.d.ts.map +1 -1
  113. package/dist/utils/linkedObject/index.d.ts +3 -2
  114. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  115. package/dist/utils/linkedObject/invitationLinkedObject.d.ts +1 -1
  116. package/dist/utils/linkedObject/invitationLinkedObject.d.ts.map +1 -1
  117. package/dist/utils/linkedObject/joinRequestLinkedObject.d.ts +2 -0
  118. package/dist/utils/linkedObject/joinRequestLinkedObject.d.ts.map +1 -0
  119. package/dist/utils/tests/dummy/comment.d.ts +1 -1
  120. package/package.json +1 -1
  121. package/src/@types/core/events.ts +10 -4
  122. package/src/@types/core/model.ts +3 -0
  123. package/src/@types/core/payload.ts +39 -1
  124. package/src/@types/domains/community.ts +45 -2
  125. package/src/@types/domains/invitation.ts +67 -3
  126. package/src/@types/domains/joinRequest.ts +66 -0
  127. package/src/@types/index.ts +1 -0
  128. package/src/communityRepository/api/getCommunities.ts +5 -1
  129. package/src/communityRepository/api/getCommunity.ts +9 -1
  130. package/src/communityRepository/api/getRecommendedCommunities.ts +9 -3
  131. package/src/communityRepository/api/getTrendingCommunities.ts +9 -3
  132. package/src/communityRepository/api/joinCommunity.ts +4 -1
  133. package/src/communityRepository/api/updateCommunity.ts +9 -2
  134. package/src/communityRepository/internalAPI/getMyJoinRequest.ts +43 -0
  135. package/src/communityRepository/internalAPI/joinCommunity.ts +51 -0
  136. package/src/communityRepository/joinRequest/events/index.ts +3 -0
  137. package/src/communityRepository/joinRequest/events/onJoinRequestCreated.ts +33 -0
  138. package/src/communityRepository/joinRequest/events/onJoinRequestDeleted.ts +33 -0
  139. package/src/communityRepository/joinRequest/events/onJoinRequestUpdated.ts +33 -0
  140. package/src/communityRepository/joinRequest/internalAPI/approveJoinRequest.ts +52 -0
  141. package/src/communityRepository/joinRequest/internalAPI/cancelJoinRequest.ts +46 -0
  142. package/src/communityRepository/joinRequest/internalAPI/rejectJoinRequest.ts +52 -0
  143. package/src/communityRepository/observers/getJoinRequests/JoinRequestsLiveCollectionController.ts +126 -0
  144. package/src/communityRepository/observers/getJoinRequests/JoinRequestsPaginationController.ts +26 -0
  145. package/src/communityRepository/observers/getJoinRequests/JoinRequestsQueryStreamController.ts +108 -0
  146. package/src/communityRepository/observers/getJoinRequests/enum.ts +5 -0
  147. package/src/communityRepository/observers/getJoinRequests.ts +44 -0
  148. package/src/communityRepository/observers/getRecommendedCommunities/RecommendedCommunitiesLiveCollectionController.ts +2 -1
  149. package/src/communityRepository/observers/getTrendingCommunities/TrendingCommunitiesLiveCollectionController.ts +2 -1
  150. package/src/communityRepository/observers/searchCommunities/SearchCommunitiesPaginationController.ts +1 -0
  151. package/src/communityRepository/utils/communityWithMembership.ts +1 -1
  152. package/src/communityRepository/utils/payload.ts +27 -1
  153. package/src/core/liveCollection/PaginationController.ts +1 -1
  154. package/src/core/liveCollection/PaginationNoPageController.ts +1 -1
  155. package/src/core/model/idResolvers.ts +1 -0
  156. package/src/core/model/index.ts +1 -0
  157. package/src/invitationRepository/events/index.ts +2 -0
  158. package/src/invitationRepository/events/onLocalInvitationCreated.ts +1 -1
  159. package/src/invitationRepository/events/onLocalInvitationDeleted.ts +1 -1
  160. package/src/invitationRepository/events/onLocalInvitationUpdated.ts +1 -1
  161. package/src/invitationRepository/index.ts +1 -0
  162. package/src/invitationRepository/internalApi/acceptInvitation.ts +1 -1
  163. package/src/invitationRepository/internalApi/cancelInvitation.ts +1 -1
  164. package/src/invitationRepository/internalApi/createInvitations.ts +8 -2
  165. package/src/invitationRepository/internalApi/getInvitation.ts +47 -0
  166. package/src/invitationRepository/internalApi/rejectInvitation.ts +1 -1
  167. package/src/invitationRepository/observers/getInvitations/InvitationsLiveCollectionController.ts +148 -0
  168. package/src/invitationRepository/observers/getInvitations/InvitationsPaginationController.ts +19 -0
  169. package/src/invitationRepository/observers/getInvitations/InvitationsQueryStreamController.ts +97 -0
  170. package/src/invitationRepository/observers/getInvitations/enums.ts +5 -0
  171. package/src/invitationRepository/observers/getInvitations.ts +44 -0
  172. package/src/invitationRepository/observers/getMyCommunityInvitations.ts +48 -0
  173. package/src/invitationRepository/observers/getMyInvitations/MyInvitationsLiveCollectionController.ts +148 -0
  174. package/src/invitationRepository/observers/getMyInvitations/MyInvitationsPaginationController.ts +22 -0
  175. package/src/invitationRepository/observers/getMyInvitations/MyInvitationsQueryStreamController.ts +105 -0
  176. package/src/invitationRepository/observers/index.ts +1 -0
  177. package/src/invitationRepository/utils/convertRawInvitationToInternalInvitation.ts +8 -0
  178. package/src/invitationRepository/utils/index.ts +1 -0
  179. package/src/invitationRepository/utils/prepareInvitationPayload.ts +12 -0
  180. package/src/invitationRepository/utils/prepareMyInvitationsPayload.ts +12 -0
  181. package/src/messagePreview/utils/getChannelMessagePreviewWithUser.ts +3 -3
  182. package/src/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostQueryStreamController.ts +7 -1
  183. package/src/postRepository/observers/getPinnedPosts/PinnedPostQueryStreamController.ts +7 -1
  184. package/src/subChannelRepository/utils/prepareSubChannelPayload.ts +4 -0
  185. package/src/utils/linkedObject/communityLinkedObject.ts +43 -1
  186. package/src/utils/linkedObject/index.ts +2 -0
  187. package/src/utils/linkedObject/invitationLinkedObject.ts +25 -1
  188. package/src/utils/linkedObject/joinRequestLinkedObject.ts +31 -0
@@ -0,0 +1,126 @@
1
+ import hash from 'object-hash';
2
+ import { pullFromCache, pushToCache } from '~/cache/api';
3
+ import { JoinRequestsPaginationController } from './JoinRequestsPaginationController';
4
+ import { JoinRequestsQueryStreamController } from './JoinRequestsQueryStreamController';
5
+ import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
6
+ import { sortByFirstCreated, sortByLastCreated } from '~/core/query';
7
+ import { prepareCommunityJoinRequestPayload } from '~/communityRepository/utils';
8
+ import { EnumJoinRequestAction } from './enum';
9
+ import { isNonNullable } from '~/utils';
10
+ import { joinRequestLinkedObject } from '~/utils/linkedObject/joinRequestLinkedObject';
11
+ import {
12
+ onJoinRequestCreated,
13
+ onJoinRequestDeleted,
14
+ onJoinRequestUpdated,
15
+ } from '~/communityRepository/joinRequest/events/';
16
+
17
+ export class JoinRequestsLiveCollectionController extends LiveCollectionController<
18
+ 'joinRequest',
19
+ Amity.JoinRequestLiveCollection,
20
+ Amity.JoinRequest,
21
+ JoinRequestsPaginationController
22
+ > {
23
+ private queryStreamController: JoinRequestsQueryStreamController;
24
+
25
+ private query: Amity.JoinRequestLiveCollection;
26
+
27
+ constructor(
28
+ query: Amity.JoinRequestLiveCollection,
29
+ callback: Amity.LiveCollectionCallback<Amity.JoinRequest>,
30
+ ) {
31
+ const queryStreamId = hash(query);
32
+ const cacheKey = ['joinRequest', 'collection', queryStreamId];
33
+ const paginationController = new JoinRequestsPaginationController(query);
34
+
35
+ super(paginationController, queryStreamId, cacheKey, callback);
36
+
37
+ this.query = query;
38
+ this.queryStreamController = new JoinRequestsQueryStreamController(
39
+ this.query,
40
+ this.cacheKey,
41
+ this.notifyChange.bind(this),
42
+ prepareCommunityJoinRequestPayload,
43
+ );
44
+
45
+ this.callback = callback.bind(this);
46
+ this.loadPage({ initial: true });
47
+ }
48
+
49
+ protected setup() {
50
+ const collection = pullFromCache<Amity.JoinRequestLiveCollectionCache>(this.cacheKey)?.data;
51
+ if (!collection) {
52
+ pushToCache(this.cacheKey, {
53
+ data: [],
54
+ params: this.query,
55
+ });
56
+ }
57
+ }
58
+
59
+ protected async persistModel(queryPayload: Amity.CommunityJoinRequestPayload & Amity.Pagination) {
60
+ await this.queryStreamController.saveToMainDB(queryPayload);
61
+ }
62
+
63
+ protected persistQueryStream({
64
+ response,
65
+ direction,
66
+ refresh,
67
+ }: Amity.LiveCollectionPersistQueryStreamParams<'joinRequest'>) {
68
+ const joinRequestResponse = response as unknown as Amity.CommunityJoinRequestPayload &
69
+ Partial<Amity.Pagination>;
70
+ this.queryStreamController.appendToQueryStream(joinRequestResponse, direction, refresh);
71
+ }
72
+
73
+ startSubscription() {
74
+ return this.queryStreamController.subscribeRTE([
75
+ { fn: onJoinRequestCreated, action: EnumJoinRequestAction.OnLocalJoinRequestCreated },
76
+ { fn: onJoinRequestUpdated, action: EnumJoinRequestAction.OnLocalJoinRequestUpdated },
77
+ { fn: onJoinRequestDeleted, action: EnumJoinRequestAction.OnLocalJoinRequestDeleted },
78
+ ]);
79
+ }
80
+
81
+ notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {
82
+ const collection = pullFromCache<Amity.JoinRequestLiveCollectionCache>(this.cacheKey)?.data;
83
+ if (!collection) return;
84
+
85
+ const data = this.applyFilter(
86
+ collection.data
87
+ .map(id => pullFromCache<Amity.InternalJoinRequest>(['joinRequest', 'get', id])!)
88
+ .filter(isNonNullable)
89
+ .map(({ data }) => data)
90
+ .map(joinRequestLinkedObject),
91
+ );
92
+
93
+ if (!this.shouldNotify(data) && origin === 'event') return;
94
+
95
+ this.callback({
96
+ onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),
97
+ data,
98
+ hasNextPage: !!this.paginationController.getNextToken(),
99
+ loading,
100
+ error,
101
+ });
102
+ }
103
+
104
+ applyFilter(data: Amity.JoinRequest[]) {
105
+ let joinRequest = data;
106
+
107
+ if (this.query.status) {
108
+ joinRequest = joinRequest.filter(joinRequest => joinRequest.status === this.query.status);
109
+ }
110
+
111
+ const sortFn = (() => {
112
+ switch (this.query.sortBy) {
113
+ case 'firstCreated':
114
+ return sortByFirstCreated;
115
+ case 'lastCreated':
116
+ return sortByLastCreated;
117
+ default:
118
+ return sortByLastCreated;
119
+ }
120
+ })();
121
+
122
+ joinRequest = joinRequest.sort(sortFn);
123
+
124
+ return joinRequest;
125
+ }
126
+ }
@@ -0,0 +1,26 @@
1
+ import { PaginationController } from '~/core/liveCollection/PaginationController';
2
+ import { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';
3
+
4
+ /**
5
+ * TODO: handle cache receive cache option, and cache policy
6
+ * TODO: check if querybyIds is supported
7
+ */
8
+ export class JoinRequestsPaginationController extends PaginationController<
9
+ 'joinRequest',
10
+ Amity.JoinRequestLiveCollection
11
+ > {
12
+ async getRequest(queryParams: Amity.JoinRequestLiveCollection, token: string | undefined) {
13
+ const { limit = COLLECTION_DEFAULT_PAGINATION_LIMIT, communityId, ...params } = queryParams;
14
+ const options = token ? { token } : { limit };
15
+
16
+ const { data: queryResponse } = await this.http.get<
17
+ Amity.CommunityJoinRequestPayload & Amity.Pagination
18
+ >(`/api/v4/communities/${communityId}/join`, {
19
+ params: {
20
+ ...params,
21
+ options,
22
+ },
23
+ });
24
+ return queryResponse;
25
+ }
26
+ }
@@ -0,0 +1,108 @@
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/api/activeClient';
6
+ import { EnumJoinRequestAction } from './enum';
7
+
8
+ export class JoinRequestsQueryStreamController extends QueryStreamController<
9
+ Amity.CommunityJoinRequestPayload,
10
+ Amity.JoinRequestLiveCollection
11
+ > {
12
+ private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
13
+
14
+ private preparePayload: (
15
+ response: Amity.CommunityJoinRequestPayload,
16
+ ) => Amity.ProcessedJoinRequestPayload;
17
+
18
+ constructor(
19
+ query: Amity.JoinRequestLiveCollection,
20
+ cacheKey: string[],
21
+ notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
22
+ preparePayload: (
23
+ response: Amity.CommunityJoinRequestPayload,
24
+ ) => Amity.ProcessedJoinRequestPayload,
25
+ ) {
26
+ super(query, cacheKey);
27
+ this.notifyChange = notifyChange;
28
+ this.preparePayload = preparePayload;
29
+ }
30
+
31
+ async saveToMainDB(response: Amity.CommunityJoinRequestPayload) {
32
+ const processedPayload = await this.preparePayload(response);
33
+
34
+ const client = getActiveClient();
35
+ const cachedAt = client.cache && Date.now();
36
+
37
+ if (client.cache) {
38
+ ingestInCache(processedPayload, { cachedAt });
39
+ }
40
+ }
41
+
42
+ appendToQueryStream(
43
+ response: Amity.CommunityJoinRequestPayload & Partial<Amity.Pagination>,
44
+ direction: Amity.LiveCollectionPageDirection,
45
+ refresh = false,
46
+ ) {
47
+ if (refresh) {
48
+ pushToCache(this.cacheKey, {
49
+ data: response.joinRequests.map(joinRequest =>
50
+ getResolver('joinRequest')({ joinRequestId: joinRequest._id }),
51
+ ),
52
+ });
53
+ } else {
54
+ const collection = pullFromCache<Amity.JoinRequestLiveCollectionCache>(this.cacheKey)?.data;
55
+
56
+ const joinRequests = collection?.data ?? [];
57
+
58
+ pushToCache(this.cacheKey, {
59
+ ...collection,
60
+ data: [
61
+ ...new Set([
62
+ ...joinRequests,
63
+ ...response.joinRequests.map(joinRequest =>
64
+ getResolver('joinRequest')({ joinRequestId: joinRequest._id }),
65
+ ),
66
+ ]),
67
+ ],
68
+ });
69
+ }
70
+ }
71
+
72
+ reactor(action: EnumJoinRequestAction) {
73
+ return (joinRequest: Amity.InternalJoinRequest[]) => {
74
+ const collection = pullFromCache<Amity.JoinRequestLiveCollectionCache>(this.cacheKey)?.data;
75
+ if (!collection) return;
76
+
77
+ if (action === EnumJoinRequestAction.OnLocalJoinRequestUpdated) {
78
+ const isExist = collection.data.find(id => id === joinRequest[0].joinRequestId);
79
+ if (!isExist) return;
80
+ }
81
+
82
+ if (action === EnumJoinRequestAction.OnLocalJoinRequestCreated) {
83
+ collection.data = [
84
+ ...new Set([
85
+ ...joinRequest.map(joinRequest => joinRequest.joinRequestId),
86
+ ...collection.data,
87
+ ]),
88
+ ];
89
+ }
90
+
91
+ if (action === EnumJoinRequestAction.OnLocalJoinRequestDeleted) {
92
+ collection.data = collection.data.filter(id => id !== joinRequest[0].joinRequestId);
93
+ }
94
+
95
+ pushToCache(this.cacheKey, collection);
96
+ this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
97
+ };
98
+ }
99
+
100
+ subscribeRTE(
101
+ createSubscriber: {
102
+ fn: (reactor: Amity.Listener<Amity.InternalJoinRequest[]>) => Amity.Unsubscriber;
103
+ action: EnumJoinRequestAction;
104
+ }[],
105
+ ) {
106
+ return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
107
+ }
108
+ }
@@ -0,0 +1,5 @@
1
+ export enum EnumJoinRequestAction {
2
+ OnLocalJoinRequestCreated = 'OnLocalJoinRequestCreated',
3
+ OnLocalJoinRequestUpdated = 'OnLocalJoinRequestUpdated',
4
+ OnLocalJoinRequestDeleted = 'OnLocalJoinRequestDeleted',
5
+ }
@@ -0,0 +1,44 @@
1
+ import { dropFromCache } from '~/cache/api/dropFromCache';
2
+ import { getActiveClient } from '~/client/api/activeClient';
3
+ import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
4
+ import { JoinRequestsLiveCollectionController } from './getJoinRequests/JoinRequestsLiveCollectionController';
5
+
6
+ /**
7
+ * Get Join Requests
8
+ *
9
+ * @param params the query parameters
10
+ * @param callback the callback to be called when the join request are updated
11
+ * @returns joinRequests
12
+ *
13
+ * @category joinRequest Live Collection
14
+ *
15
+ */
16
+ export const getJoinRequests = (
17
+ params: Amity.JoinRequestLiveCollection,
18
+ callback: Amity.LiveCollectionCallback<Amity.JoinRequest>,
19
+ config?: Amity.LiveCollectionConfig,
20
+ ) => {
21
+ const { log, cache } = getActiveClient();
22
+
23
+ if (!cache) {
24
+ console.log(ENABLE_CACHE_MESSAGE);
25
+ }
26
+
27
+ const timestamp = Date.now();
28
+ log(`getJoinRequests: (tmpid: ${timestamp}) > listen`);
29
+
30
+ const joinRequestLiveCollection = new JoinRequestsLiveCollectionController(params, callback);
31
+
32
+ const disposers = joinRequestLiveCollection.startSubscription();
33
+
34
+ const cacheKey = joinRequestLiveCollection.getCacheKey();
35
+
36
+ disposers.push(() => {
37
+ dropFromCache(cacheKey);
38
+ });
39
+
40
+ return () => {
41
+ log(`getJoinRequests (tmpid: ${timestamp}) > dispose`);
42
+ disposers.forEach(fn => fn());
43
+ };
44
+ };
@@ -15,6 +15,7 @@ import {
15
15
  onCommunityUserChanged,
16
16
  } from '~/communityRepository/communityMembership';
17
17
  import { isNonNullable } from '~/utils';
18
+ import { communityLinkedObject } from '~/utils/linkedObject/communityLinkedObject';
18
19
 
19
20
  export class RecommendedCommunityLiveCollectionController extends LiveCollectionController<
20
21
  'community',
@@ -94,7 +95,7 @@ export class RecommendedCommunityLiveCollectionController extends LiveCollection
94
95
  collection.data
95
96
  .map(id => pullFromCache<Amity.Community>(['community', 'get', id]))
96
97
  .filter(isNonNullable)
97
- .map(({ data }) => data) ?? [];
98
+ .map(({ data }) => communityLinkedObject(data)) ?? [];
98
99
 
99
100
  if (!this.shouldNotify(data) && origin === 'event') return;
100
101
 
@@ -15,6 +15,7 @@ import {
15
15
  onCommunityUserChanged,
16
16
  } from '~/communityRepository/communityMembership';
17
17
  import { isNonNullable } from '~/utils';
18
+ import { communityLinkedObject } from '~/utils/linkedObject/communityLinkedObject';
18
19
 
19
20
  export class TrendingCommunityLiveCollectionController extends LiveCollectionController<
20
21
  'community',
@@ -94,7 +95,7 @@ export class TrendingCommunityLiveCollectionController extends LiveCollectionCon
94
95
  collection.data
95
96
  .map(id => pullFromCache<Amity.Community>(['community', 'get', id]))
96
97
  .filter(isNonNullable)
97
- .map(({ data }) => data) ?? [];
98
+ .map(({ data }) => communityLinkedObject(data)) ?? [];
98
99
 
99
100
  if (!this.shouldNotify(data) && origin === 'event') return;
100
101
 
@@ -22,6 +22,7 @@ export class CommunitiesPaginationController extends PaginationController<
22
22
  isDeleted: inferIsDeleted(params.includeDeleted),
23
23
  keyword: params.displayName,
24
24
  filter: params.membership,
25
+ includeDiscoverablePrivateCommunity: params.includeDiscoverablePrivateCommunity ?? true,
25
26
  options,
26
27
  },
27
28
  },
@@ -1,5 +1,5 @@
1
1
  import { pullFromCache } from '~/cache/api';
2
- import { getActiveUser } from '~/client';
2
+ import { getActiveUser } from '~/client/api/activeUser';
3
3
 
4
4
  /*
5
5
  * verifies membership status
@@ -1,5 +1,6 @@
1
1
  import { CommunityPostSettingMaps, DefaultCommunityPostSetting } from '~/@types';
2
2
  import { updateMembershipStatus } from './communityWithMembership';
3
+ import { convertRawUserToInternalUser } from '~/userRepository/utils/convertRawUserToInternalUser';
3
4
 
4
5
  const getMatchPostSetting = (value: {
5
6
  needApprovalOnPostCreation: Amity.RawCommunity['needApprovalOnPostCreation'];
@@ -29,10 +30,13 @@ export const prepareCommunityPayload = (
29
30
  ): Amity.ProcessedCommunityPayload => {
30
31
  const communitiesWithPostSetting = addPostSetting({ communities: rawPayload.communities });
31
32
 
33
+ // Convert users to internal format
34
+ const internalUsers = rawPayload.users.map(convertRawUserToInternalUser);
35
+
32
36
  // map users with community
33
37
  const mappedCommunityUsers: Array<Amity.Membership<'community'>> = rawPayload.communityUsers.map(
34
38
  communityUser => {
35
- const user = rawPayload.users.find(user => user.userId === communityUser.userId)!;
39
+ const user = internalUsers.find(user => user.userId === communityUser.userId)!;
36
40
 
37
41
  return {
38
42
  ...communityUser,
@@ -48,11 +52,33 @@ export const prepareCommunityPayload = (
48
52
 
49
53
  return {
50
54
  ...rawPayload,
55
+ users: rawPayload.users.map(convertRawUserToInternalUser),
51
56
  communities: communityWithMembershipStatus,
52
57
  communityUsers: mappedCommunityUsers,
53
58
  };
54
59
  };
55
60
 
61
+ export const prepareCommunityJoinRequestPayload = (
62
+ rawPayload: Amity.CommunityJoinRequestPayload,
63
+ ): Amity.ProcessedJoinRequestPayload => {
64
+ const mappedJoinRequests: Array<Amity.InternalJoinRequest> = rawPayload.joinRequests.map(
65
+ joinRequest => {
66
+ return {
67
+ ...joinRequest,
68
+ joinRequestId: joinRequest._id,
69
+ };
70
+ },
71
+ );
72
+
73
+ const users = rawPayload.users.map(convertRawUserToInternalUser);
74
+
75
+ return {
76
+ ...rawPayload,
77
+ joinRequests: mappedJoinRequests,
78
+ users,
79
+ };
80
+ };
81
+
56
82
  export const prepareCommunityMembershipPayload = (
57
83
  rawPayload: Amity.CommunityMembershipPayload,
58
84
  ): Amity.ProcessedCommunityMembershipPayload => {
@@ -1,5 +1,5 @@
1
1
  import { AxiosInstance } from 'axios';
2
- import { getActiveClient } from '~/client/api';
2
+ import { getActiveClient } from '~/client/api/activeClient';
3
3
 
4
4
  export abstract class PaginationController<
5
5
  TPayloadDomain extends keyof Amity.Payloads,
@@ -1,5 +1,5 @@
1
1
  import { AxiosInstance } from 'axios';
2
- import { getActiveClient } from '~/client/api';
2
+ import { getActiveClient } from '~/client/api/activeClient';
3
3
 
4
4
  export abstract class PaginationNoPageController<
5
5
  TPayloadDomain extends keyof Amity.Payloads,
@@ -66,6 +66,7 @@ const idResolvers: Resolvers = {
66
66
  notificationTraySeen: ({ userId }) => userId,
67
67
 
68
68
  invitation: ({ _id }) => _id,
69
+ joinRequest: ({ joinRequestId }) => joinRequestId,
69
70
  };
70
71
 
71
72
  /**
@@ -56,6 +56,7 @@ export const PAYLOAD2MODEL: Record<string, Amity.Domain> = {
56
56
  notificationTrayItems: 'notificationTrayItem',
57
57
 
58
58
  invitations: 'invitation',
59
+ joinRequests: 'joinRequest',
59
60
  };
60
61
 
61
62
  /** hidden */
@@ -1 +1,3 @@
1
1
  export * from './onLocalInvitationCreated';
2
+ export * from './onLocalInvitationUpdated';
3
+ export * from './onLocalInvitationDeleted';
@@ -17,7 +17,7 @@ import { createEventSubscriber } from '~/core/events';
17
17
  * @category Invitation Events
18
18
  */
19
19
  export const onLocalInvitationCreated = (
20
- callback: Amity.Listener<Amity.InvitationPayload>,
20
+ callback: Amity.Listener<Amity.InternalInvitation[]>,
21
21
  ): Amity.Unsubscriber => {
22
22
  const client = getActiveClient();
23
23
 
@@ -17,7 +17,7 @@ import { getActiveClient } from '~/client/api/activeClient';
17
17
  * @category Invitation Events
18
18
  */
19
19
  export const onLocalInvitationDeleted = (
20
- callback: Amity.Listener<Amity.InvitationPayload>,
20
+ callback: Amity.Listener<Amity.InternalInvitation[]>,
21
21
  ): Amity.Unsubscriber => {
22
22
  const client = getActiveClient();
23
23
 
@@ -17,7 +17,7 @@ import { createEventSubscriber } from '~/core/events';
17
17
  * @category Invitation Events
18
18
  */
19
19
  export const onLocalInvitationUpdated = (
20
- callback: Amity.Listener<Amity.InvitationPayload>,
20
+ callback: Amity.Listener<Amity.InternalInvitation[]>,
21
21
  ): Amity.Unsubscriber => {
22
22
  const client = getActiveClient();
23
23
 
@@ -1 +1,2 @@
1
1
  export * from './events';
2
+ export * from './observers';
@@ -37,7 +37,7 @@ export const acceptInvitation = async (invitationId: Amity.Invitation['_id']): P
37
37
  if (invitation) {
38
38
  upsertInCache(['invitation', 'get', invitationId], { status: InvitationStatusEnum.Approved });
39
39
 
40
- fireEvent('local.invitation.updated', { invitations: [invitation] });
40
+ fireEvent('local.invitation.updated', [invitation]);
41
41
  }
42
42
 
43
43
  return data.success;
@@ -36,7 +36,7 @@ export const cancelInvitation = async (invitationId: Amity.Invitation['_id']): P
36
36
  if (invitation) {
37
37
  dropFromCache(['invitation', 'get', invitationId]);
38
38
 
39
- fireEvent('local.invitation.deleted', { invitations: [invitation] });
39
+ fireEvent('local.invitation.deleted', [invitation]);
40
40
  }
41
41
 
42
42
  return data.success;
@@ -1,6 +1,7 @@
1
1
  import { fireEvent } from '~/core/events';
2
2
  import { getActiveClient } from '~/client/api/activeClient';
3
3
  import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { prepareInvitationPayload } from '../utils';
4
5
 
5
6
  /* begin_public_function
6
7
  id: invitation.createInvitations
@@ -30,13 +31,18 @@ export const createInvitations = async (
30
31
  const client = getActiveClient();
31
32
  client.log('invitation/createInvitations', bundle);
32
33
 
33
- const { data } = await client.http.post<Amity.InvitationPayload>('/api/v1/invitations', bundle);
34
+ const { data: payload } = await client.http.post<Amity.InvitationPayload>(
35
+ '/api/v1/invitations',
36
+ bundle,
37
+ );
38
+
39
+ const data = prepareInvitationPayload(payload);
34
40
 
35
41
  const cachedAt = client.cache && Date.now();
36
42
 
37
43
  if (client.cache) ingestInCache(data, { cachedAt });
38
44
 
39
- fireEvent('local.invitation.created', data);
45
+ fireEvent('local.invitation.created', data.invitations);
40
46
 
41
47
  return {
42
48
  data: data.invitations,
@@ -0,0 +1,47 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { ingestInCache } from '~/cache/api/ingestInCache';
3
+ import { prepareMyInvitationsPayload } from '../utils/prepareMyInvitationsPayload';
4
+ import { invitationLinkedObject } from '~/utils/linkedObject/invitationLinkedObject';
5
+
6
+ /* begin_public_function
7
+ id: invitation.get
8
+ */
9
+ /**
10
+ * ```js
11
+ * import { getInvitation } from '@amityco/ts-sdk'
12
+ * const { invitation } = await getInvitation(targetType, targetId)
13
+ * ```
14
+ *
15
+ * Get a {@link Amity.Invitation} object
16
+ *
17
+ * @param targetType The type of the target of the {@link Amity.Invitation}
18
+ * @param targetId The ID of the target of the {@link Amity.Invitation}
19
+ * @returns A {@link Amity.Invitation} object
20
+ *
21
+ * @category Invitation API
22
+ * @async
23
+ */
24
+ export const getInvitation = async (
25
+ targetType: Amity.Invitation['targetType'],
26
+ targetId: Amity.Invitation['targetId'],
27
+ ): Promise<Amity.Cached<Amity.Invitation | undefined>> => {
28
+ const client = getActiveClient();
29
+ client.log('invitation/getInvitation', targetType, targetId);
30
+
31
+ const { data: payload } = await client.http.get<Amity.MyInvitationsPayload>(
32
+ `/api/v1/invitations/me`,
33
+ { params: { targetType, targetId } },
34
+ );
35
+
36
+ const data = prepareMyInvitationsPayload(payload);
37
+
38
+ const cachedAt = client.cache && Date.now();
39
+
40
+ if (client.cache) ingestInCache(data, { cachedAt });
41
+
42
+ return {
43
+ data: data.invitations[0] ? invitationLinkedObject(data.invitations[0]) : undefined,
44
+ cachedAt,
45
+ };
46
+ };
47
+ /* end_public_function */
@@ -37,7 +37,7 @@ export const rejectInvitation = async (invitationId: Amity.Invitation['_id']): P
37
37
  if (invitation) {
38
38
  upsertInCache(['invitation', 'get', invitationId], { status: InvitationStatusEnum.Rejected });
39
39
 
40
- fireEvent('local.invitation.updated', { invitations: [invitation] });
40
+ fireEvent('local.invitation.updated', [invitation]);
41
41
  }
42
42
 
43
43
  return data.success;