@amityco/ts-sdk-react-native 6.28.2-fbfd068.0 → 6.28.3-54dff84.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 (37) hide show
  1. package/dist/@types/core/payload.d.ts +1 -1
  2. package/dist/@types/core/payload.d.ts.map +1 -1
  3. package/dist/commentRepository/observers/getComments.d.ts +1 -1
  4. package/dist/commentRepository/observers/getComments.d.ts.map +1 -1
  5. package/dist/communityRepository/utils/payload.d.ts +7 -0
  6. package/dist/communityRepository/utils/payload.d.ts.map +1 -1
  7. package/dist/index.cjs.js +284 -180
  8. package/dist/index.esm.js +284 -180
  9. package/dist/index.umd.js +2 -2
  10. package/dist/postRepository/internalApi/getPost.d.ts +5 -0
  11. package/dist/postRepository/internalApi/getPost.d.ts.map +1 -0
  12. package/dist/postRepository/internalApi/index.d.ts +13 -0
  13. package/dist/postRepository/internalApi/index.d.ts.map +1 -0
  14. package/dist/postRepository/observers/getPosts/PostLiveCollectionController.d.ts +14 -0
  15. package/dist/postRepository/observers/getPosts/PostLiveCollectionController.d.ts.map +1 -0
  16. package/dist/postRepository/observers/getPosts/PostPaginationController.d.ts +5 -0
  17. package/dist/postRepository/observers/getPosts/PostPaginationController.d.ts.map +1 -0
  18. package/dist/postRepository/observers/getPosts/PostQueryStreamController.d.ts +15 -0
  19. package/dist/postRepository/observers/getPosts/PostQueryStreamController.d.ts.map +1 -0
  20. package/dist/postRepository/observers/getPosts/enums.d.ts +12 -0
  21. package/dist/postRepository/observers/getPosts/enums.d.ts.map +1 -0
  22. package/dist/postRepository/observers/getPosts.d.ts.map +1 -1
  23. package/dist/postRepository/utils/payload.d.ts +2 -0
  24. package/dist/postRepository/utils/payload.d.ts.map +1 -0
  25. package/dist/utils/tests/dummy/post.d.ts +3 -3
  26. package/package.json +1 -1
  27. package/src/@types/core/payload.ts +1 -1
  28. package/src/commentRepository/observers/getComments.ts +1 -1
  29. package/src/communityRepository/utils/payload.ts +19 -3
  30. package/src/postRepository/internalApi/getPost.ts +65 -0
  31. package/src/postRepository/internalApi/index.ts +16 -0
  32. package/src/postRepository/observers/getPosts/PostLiveCollectionController.ts +190 -0
  33. package/src/postRepository/observers/getPosts/PostPaginationController.ts +45 -0
  34. package/src/postRepository/observers/getPosts/PostQueryStreamController.ts +102 -0
  35. package/src/postRepository/observers/getPosts/enums.ts +11 -0
  36. package/src/postRepository/observers/getPosts.ts +6 -197
  37. package/src/postRepository/utils/payload.ts +17 -0
@@ -1,42 +1,8 @@
1
- /* eslint-disable no-use-before-define */
2
- import { getResolver } from '~/core/model';
3
1
  import { getActiveClient } from '~/client/api';
4
- import { dropFromCache, pullFromCache, pushToCache } from '~/cache/api';
5
- import { getPost as _getPost } from '../api/getPost';
2
+ import { dropFromCache } from '~/cache/api';
6
3
 
7
- import {
8
- createQuery,
9
- filterByFeedType,
10
- filterByPostDataTypes,
11
- filterByPropEquality,
12
- queryOptions,
13
- runQuery,
14
- sortByFirstCreated,
15
- sortByLastCreated,
16
- } from '~/core/query';
17
-
18
- import {
19
- COLLECTION_DEFAULT_CACHING_POLICY,
20
- COLLECTION_DEFAULT_PAGINATION_LIMIT,
21
- ENABLE_CACHE_MESSAGE,
22
- } from '~/utils/constants';
23
-
24
- import { CACHE_SHORTEN_LIFESPAN } from '~/cache/utils';
25
- import { LinkedObject } from '~/utils/linkedObject';
26
- import {
27
- onPostApproved,
28
- onPostCreated,
29
- onPostDeclined,
30
- onPostDeleted,
31
- onPostFlagged,
32
- onPostReactionAdded,
33
- onPostReactionRemoved,
34
- onPostUnflagged,
35
- onPostUpdated,
36
- } from '../events';
37
- import { queryPosts } from '../api/queryPosts';
38
- import { convertEventPayload } from '~/utils/event';
39
- import { onCommentCreated, onCommentDeleted } from '~/commentRepository';
4
+ import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
5
+ import { PostLiveCollectionController } from './getPosts/PostLiveCollectionController';
40
6
 
41
7
  /* begin_public_function
42
8
  id: post.query
@@ -76,168 +42,11 @@ export const getPosts = (
76
42
  const timestamp = Date.now();
77
43
  log(`getPosts(tmpid: ${timestamp}) > listen`);
78
44
 
79
- const { limit: queryLimit, ...queryParams } = params;
80
-
81
- const limit = queryLimit ?? COLLECTION_DEFAULT_PAGINATION_LIMIT;
82
- const { policy = COLLECTION_DEFAULT_CACHING_POLICY } = config ?? {};
83
-
84
- const disposers: Amity.Unsubscriber[] = [];
85
- const cacheKey = [
86
- 'post',
87
- 'collection',
88
- { targetId: params.targetId, targetType: params.targetType },
89
- ];
90
-
91
- const responder = (data: Amity.PostLiveCollectionCache) => {
92
- let posts: Amity.Post[] =
93
- data.data
94
- .map(postId => pullFromCache<Amity.InternalPost>(['post', 'get', postId])!)
95
- .filter(Boolean)
96
- .map(({ data }) => LinkedObject.post(data)) ?? [];
97
-
98
- const sortBy = params.sortBy ? params.sortBy : 'lastCreated';
99
- posts = posts.sort(sortBy === 'lastCreated' ? sortByLastCreated : sortByFirstCreated);
100
-
101
- if (!params.includeDeleted) {
102
- posts = filterByPropEquality(posts, 'isDeleted', false);
103
- }
104
-
105
- if (params.tags) {
106
- posts = posts.filter(p => p.tags?.some(t => params.tags?.includes(t)));
107
- }
108
-
109
- if (params.targetType === 'community' && params.feedType) {
110
- posts = filterByFeedType(posts, params.feedType);
111
- }
112
-
113
- if (params.dataTypes?.length) {
114
- posts = filterByPostDataTypes(posts, params.dataTypes);
115
- }
116
-
117
- callback({
118
- onNextPage: onFetch,
119
- data: posts,
120
- hasNextPage: !!data.params?.page,
121
- loading: data.loading,
122
- error: data.error,
123
- });
124
- };
125
-
126
- const realtimeRouter = (action: Amity.PostActionType) => (post: Amity.InternalPost) => {
127
- const collection = pullFromCache<Amity.PostLiveCollectionCache>(cacheKey)?.data;
128
-
129
- if (!collection) return;
130
-
131
- if (post.parentPostId && post.isDeleted) {
132
- const parentPost = pullFromCache<Amity.InternalPost>([
133
- 'post',
134
- 'get',
135
- post.parentPostId,
136
- ])?.data;
137
-
138
- if (!parentPost || parentPost?.targetId !== params.targetId) return;
139
-
140
- parentPost.children = parentPost.children.filter(childId => childId !== post.postId);
141
- pushToCache(['post', 'get', parentPost.postId], parentPost);
142
- } else {
143
- if (params.targetId !== post.targetId) return;
144
- if (params.targetType !== post.targetType) return;
145
- }
146
-
147
- /*
148
- * This is not ideal, but currently this is the only way to update the
149
- * collection on post declined
150
- */
151
- if (action === 'onDeclined') {
152
- collection.data = collection.data.filter(postId => postId !== post.postId);
153
- } else {
154
- collection.data = [...new Set([post.postId, ...collection.data])];
155
- }
156
-
157
- pushToCache(cacheKey, collection);
158
-
159
- responder(collection);
160
- };
161
-
162
- const onFetch = (initial = false) => {
163
- const collection = pullFromCache<Amity.PostLiveCollectionCache>(cacheKey)?.data;
164
-
165
- const posts = collection?.data ?? [];
166
-
167
- if (!initial && posts.length > 0 && !collection?.params?.page) return;
168
-
169
- const query = createQuery(queryPosts, {
170
- ...queryParams,
171
- limit: initial ? limit : undefined,
172
- page: !initial ? collection?.params.page : undefined,
173
- });
174
-
175
- runQuery(
176
- query,
177
- ({ data: result, error, loading, paging }) => {
178
- const data = {
179
- loading,
180
- error,
181
- params: { page: paging?.next },
182
- data: posts,
183
- };
184
-
185
- if (result) {
186
- data.data = initial
187
- ? result.map(getResolver('post'))
188
- : [...new Set([...posts, ...result.map(getResolver('post'))])];
189
- }
190
-
191
- pushToCache(cacheKey, data);
192
-
193
- responder(data);
194
- },
195
- queryOptions(policy, CACHE_SHORTEN_LIFESPAN),
196
- );
197
- };
198
-
199
- disposers.push(
200
- onPostCreated(realtimeRouter('onCreate')),
201
- onPostApproved(realtimeRouter('onApproved')),
202
- onPostDeclined(realtimeRouter('onDeclined')),
203
- onPostDeleted(realtimeRouter('onDelete')),
204
-
205
- onPostUpdated(realtimeRouter('onUpdate')),
206
- onPostFlagged(realtimeRouter('onFlagged')),
207
- onPostUnflagged(realtimeRouter('onUnflagged')),
208
- onPostReactionAdded(realtimeRouter('onReactionAdded')),
209
- onPostReactionRemoved(realtimeRouter('onReactionRemoved')),
210
- convertEventPayload(
211
- (callback: Amity.Listener<Amity.InternalComment>) => {
212
- return onCommentCreated(async (comment: Amity.InternalComment) => {
213
- const currentCollection = pullFromCache<Amity.PostLiveCollectionCache>(cacheKey)?.data;
214
-
215
- if (!currentCollection || currentCollection.data.includes(comment.referenceId)) return;
216
-
217
- await _getPost(comment.referenceId);
218
- callback(comment);
219
- });
220
- },
221
- 'referenceId',
222
- 'post',
223
- )(realtimeRouter('onUpdate')),
224
- convertEventPayload(
225
- (callback: Amity.Listener<Amity.InternalComment>) => {
226
- return onCommentDeleted(async (comment: Amity.InternalComment) => {
227
- const currentCollection = pullFromCache<Amity.PostLiveCollectionCache>(cacheKey)?.data;
228
-
229
- if (!currentCollection || currentCollection.data.includes(comment.referenceId)) return;
45
+ const postsLiveCollection = new PostLiveCollectionController(params, callback);
46
+ const disposers = postsLiveCollection.startSubscription();
230
47
 
231
- await _getPost(comment.referenceId);
232
- callback(comment);
233
- });
234
- },
235
- 'referenceId',
236
- 'post',
237
- )(realtimeRouter('onUpdate')),
238
- );
48
+ const cacheKey = postsLiveCollection.getCacheKey();
239
49
 
240
- onFetch(true);
241
50
  disposers.push(() => dropFromCache(cacheKey));
242
51
 
243
52
  return () => {
@@ -0,0 +1,17 @@
1
+ import { convertCommunityPayload } from '~/communityRepository/utils';
2
+
3
+ export const preparePostPayload = (postPayload: Amity.PostPayload): Amity.ProcessedPostPayload => {
4
+ const { posts } = postPayload;
5
+
6
+ const { communities, communityUsers } = convertCommunityPayload({
7
+ communities: postPayload.communities,
8
+ communityUsers: postPayload.communityUsers,
9
+ });
10
+
11
+ return {
12
+ ...postPayload,
13
+ posts,
14
+ communities,
15
+ communityUsers,
16
+ };
17
+ };