@amityco/ts-sdk 7.8.0 → 7.8.1-1d9a9fe7.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 (63) hide show
  1. package/.env +26 -26
  2. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.d.ts +32 -0
  3. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.d.ts.map +1 -1
  4. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.js +22 -1
  5. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.js.map +1 -1
  6. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.d.ts +1 -0
  7. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.d.ts.map +1 -1
  8. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.js +1 -0
  9. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.js.map +1 -1
  10. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.d.ts +1 -0
  11. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.d.ts.map +1 -1
  12. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.js +1 -0
  13. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.js.map +1 -1
  14. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts +14 -0
  15. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts.map +1 -0
  16. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.js +129 -0
  17. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.js.map +1 -0
  18. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts +5 -0
  19. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts.map +1 -0
  20. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.js +15 -0
  21. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.js.map +1 -0
  22. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts +15 -0
  23. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts.map +1 -0
  24. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.js +78 -0
  25. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.js.map +1 -0
  26. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.d.ts +23 -0
  27. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.d.ts.map +1 -0
  28. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.js +46 -0
  29. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.js.map +1 -0
  30. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.d.ts +2 -0
  31. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.d.ts.map +1 -0
  32. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.js +2 -0
  33. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.js.map +1 -0
  34. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/tsconfig.tsbuildinfo +1 -1
  35. package/dist/@types/domains/feed.d.ts +32 -0
  36. package/dist/@types/domains/feed.d.ts.map +1 -1
  37. package/dist/@types/index.d.ts +1 -0
  38. package/dist/@types/index.d.ts.map +1 -1
  39. package/dist/feedRepository/index.d.ts +1 -0
  40. package/dist/feedRepository/index.d.ts.map +1 -1
  41. package/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts +14 -0
  42. package/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts.map +1 -0
  43. package/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts +5 -0
  44. package/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts.map +1 -0
  45. package/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts +15 -0
  46. package/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts.map +1 -0
  47. package/dist/feedRepository/observers/getUserFeed.d.ts +23 -0
  48. package/dist/feedRepository/observers/getUserFeed.d.ts.map +1 -0
  49. package/dist/feedRepository/observers/index.d.ts +2 -0
  50. package/dist/feedRepository/observers/index.d.ts.map +1 -0
  51. package/dist/index.cjs.js +1217 -957
  52. package/dist/index.esm.js +1359 -1099
  53. package/dist/index.umd.js +4 -4
  54. package/package.json +1 -1
  55. package/src/@types/domains/feed.ts +44 -0
  56. package/src/@types/index.ts +1 -0
  57. package/src/feedRepository/index.ts +1 -0
  58. package/src/feedRepository/observers/getUserFeed/LiveCollectionController.ts +192 -0
  59. package/src/feedRepository/observers/getUserFeed/PaginationController.ts +37 -0
  60. package/src/feedRepository/observers/getUserFeed/QueryStreamController.ts +119 -0
  61. package/src/feedRepository/observers/getUserFeed.ts +56 -0
  62. package/src/feedRepository/observers/index.ts +1 -0
  63. package/tsconfig.tsbuildinfo +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amityco/ts-sdk",
3
- "version": "7.8.0",
3
+ "version": "7.8.1-1d9a9fe7.0",
4
4
  "license": "CC-BY-ND-4.0",
5
5
  "author": "amity.co <developers@amity.co> (https://amity.co)",
6
6
  "description": "Amity Social Cloud Typescript SDK",
@@ -1,7 +1,35 @@
1
1
  export {};
2
2
 
3
+ export const enum FeedDataTypeEnum {
4
+ Text = 'text',
5
+ Video = 'video',
6
+ Image = 'image',
7
+ File = 'file',
8
+ LiveStream = 'liveStream',
9
+ Clip = 'clip',
10
+ Poll = 'poll',
11
+ }
12
+
13
+ export const enum FeedSortByEnum {
14
+ LastCreated = 'lastCreated',
15
+ FirstCreated = 'firstCreated',
16
+ LastUpdated = 'lastUpdated',
17
+ FirstUpdated = 'firstUpdated',
18
+ }
19
+
20
+ export const enum FeedSourceEnum {
21
+ Community = 'community',
22
+ User = 'user',
23
+ }
24
+
3
25
  declare global {
4
26
  namespace Amity {
27
+ type FeedDataType = FeedDataTypeEnum;
28
+
29
+ type FeedSortBy = FeedSortByEnum;
30
+
31
+ type FeedSource = FeedSourceEnum;
32
+
5
33
  type Feed = {
6
34
  feedId: string;
7
35
  feedType: 'reviewing' | 'published';
@@ -15,5 +43,21 @@ declare global {
15
43
  queryToken?: string;
16
44
  resolveParent?: boolean;
17
45
  };
46
+
47
+ type QueryUserFeed = {
48
+ userId: string;
49
+ includeDeleted?: boolean;
50
+ sortBy?: Amity.FeedSortBy;
51
+ dataTypes?: Amity.FeedDataType[];
52
+ matchingOnlyParentPost?: boolean;
53
+ feedSources?: Amity.FeedSource[];
54
+ };
55
+
56
+ type UserFeedLiveCollection = Amity.LiveCollectionParams<QueryUserFeed>;
57
+
58
+ type UserFeedLiveCollectionCache = Amity.LiveCollectionCache<
59
+ Amity.InternalPost['postId'],
60
+ QueryUserFeed
61
+ >;
18
62
  }
19
63
  }
@@ -44,3 +44,4 @@ export * from './domains/joinRequest';
44
44
  export * from './domains/pin';
45
45
  export * from './domains/pinnedPost';
46
46
  export * from './domains/liveReaction';
47
+ export * from './domains/feed';
@@ -1 +1,2 @@
1
1
  export * from './api';
2
+ export * from './observers';
@@ -0,0 +1,192 @@
1
+ import hash from 'object-hash';
2
+ import { pullFromCache, pushToCache } from '~/cache/api';
3
+ import { UserFeedPaginationController } from './PaginationController';
4
+ import { UserFeedQueryStreamController } from './QueryStreamController';
5
+ import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
6
+ import {
7
+ onPostCreated,
8
+ onPostUpdated,
9
+ onPostDeleted,
10
+ onPostFlagged,
11
+ onPostUnflagged,
12
+ onPostReactionAdded,
13
+ onPostReactionRemoved,
14
+ onPostApproved,
15
+ onPostDeclined,
16
+ } from '~/postRepository/events';
17
+ import {
18
+ filterByPostDataTypes,
19
+ filterByPropEquality,
20
+ sortByFirstCreated,
21
+ sortByLastCreated,
22
+ } from '~/core/query';
23
+ import { isNonNullable } from '~/utils';
24
+ import { EnumPostActions } from '~/postRepository/observers/enums';
25
+ import { LinkedObject } from '~/utils/linkedObject';
26
+ import { preparePostPayload } from '~/postRepository/utils/payload';
27
+ import { convertEventPayload } from '~/utils/event';
28
+ import { onCommentCreated, onCommentDeleted } from '~/commentRepository';
29
+ import { getPost } from '~/postRepository/internalApi/getPost';
30
+ import { onPostUpdatedLocal } from '~/postRepository/events/onPostUpdatedLocal';
31
+ import { onLocalPostReactionAdded } from '~/postRepository/events/onLocalPostReactionAdded';
32
+ import { onLocalPostReactionRemoved } from '~/postRepository/events/onLocalPostReactionRemoved';
33
+ import { onLocalPostDeleted } from '~/postRepository/events/onLocalPostDeleted';
34
+
35
+ export class UserFeedLiveCollectionController extends LiveCollectionController<
36
+ 'post',
37
+ Amity.UserFeedLiveCollection,
38
+ Amity.Post,
39
+ UserFeedPaginationController
40
+ > {
41
+ private queryStreamController: UserFeedQueryStreamController;
42
+
43
+ private query: Amity.UserFeedLiveCollection;
44
+
45
+ constructor(
46
+ query: Amity.UserFeedLiveCollection,
47
+ callback: Amity.LiveCollectionCallback<Amity.Post>,
48
+ ) {
49
+ const queryStreamId = hash(query);
50
+ const cacheKey = ['userFeed', 'collection', queryStreamId];
51
+ const paginationController = new UserFeedPaginationController(query);
52
+
53
+ super(paginationController, queryStreamId, cacheKey, callback);
54
+
55
+ this.query = query;
56
+ this.queryStreamController = new UserFeedQueryStreamController(
57
+ this.query,
58
+ this.cacheKey,
59
+ this.notifyChange.bind(this),
60
+ preparePostPayload,
61
+ );
62
+
63
+ this.callback = callback.bind(this);
64
+ this.loadPage({ initial: true });
65
+ }
66
+
67
+ protected setup() {
68
+ const collection = pullFromCache<Amity.UserFeedLiveCollectionCache>(this.cacheKey)?.data;
69
+ if (!collection) {
70
+ pushToCache(this.cacheKey, {
71
+ data: [],
72
+ params: {},
73
+ });
74
+ }
75
+ }
76
+
77
+ protected async persistModel(queryPayload: Amity.PostPayload & Amity.Pagination) {
78
+ await this.queryStreamController.saveToMainDB(queryPayload);
79
+ }
80
+
81
+ protected persistQueryStream({
82
+ response,
83
+ direction,
84
+ refresh,
85
+ }: Amity.LiveCollectionPersistQueryStreamParams<'post'>) {
86
+ this.queryStreamController.appendToQueryStream(response, direction, refresh);
87
+ }
88
+
89
+ startSubscription() {
90
+ return this.queryStreamController.subscribeRTE([
91
+ { fn: onPostCreated, action: EnumPostActions.OnPostCreated },
92
+ { fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },
93
+ { fn: onPostUpdatedLocal, action: EnumPostActions.OnPostUpdated },
94
+ { fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },
95
+ { fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },
96
+ { fn: onPostUnflagged, action: EnumPostActions.OnPostUnflagged },
97
+ { fn: onPostApproved, action: EnumPostActions.OnPostApproved },
98
+ { fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },
99
+ { fn: onPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
100
+ { fn: onPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
101
+ { fn: onLocalPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
102
+ { fn: onLocalPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
103
+ { fn: onLocalPostDeleted, action: EnumPostActions.OnPostDeleted },
104
+ {
105
+ fn: convertEventPayload(
106
+ (callback: Amity.Listener<Amity.InternalComment>) => {
107
+ return onCommentCreated(async (comment: Amity.InternalComment) => {
108
+ const currentCollection = pullFromCache<Amity.UserFeedLiveCollectionCache>(
109
+ this.cacheKey,
110
+ )?.data;
111
+
112
+ if (!currentCollection || currentCollection.data.includes(comment.referenceId))
113
+ return;
114
+
115
+ await getPost(comment.referenceId);
116
+ callback(comment);
117
+ });
118
+ },
119
+ 'referenceId',
120
+ 'post',
121
+ ),
122
+ action: EnumPostActions.OnPostUpdated,
123
+ },
124
+ {
125
+ fn: convertEventPayload(
126
+ (callback: Amity.Listener<Amity.InternalComment>) => {
127
+ return onCommentDeleted(async (comment: Amity.InternalComment) => {
128
+ const currentCollection = pullFromCache<Amity.UserFeedLiveCollectionCache>(
129
+ this.cacheKey,
130
+ )?.data;
131
+
132
+ if (!currentCollection || currentCollection.data.includes(comment.referenceId))
133
+ return;
134
+
135
+ await getPost(comment.referenceId);
136
+ callback(comment);
137
+ });
138
+ },
139
+ 'referenceId',
140
+ 'post',
141
+ ),
142
+ action: EnumPostActions.OnPostUpdated,
143
+ },
144
+ ]);
145
+ }
146
+
147
+ notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {
148
+ const collection = pullFromCache<Amity.UserFeedLiveCollectionCache>(this.cacheKey)?.data;
149
+ if (!collection) return;
150
+
151
+ const data = this.applyFilter(
152
+ collection.data
153
+ .map(id => pullFromCache<Amity.InternalPost>(['post', 'get', id])!)
154
+ .filter(isNonNullable)
155
+ .map(({ data }) => data) ?? [],
156
+ ).map(LinkedObject.post);
157
+
158
+ if (!this.shouldNotify(data) && origin === 'event') return;
159
+
160
+ this.callback({
161
+ onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),
162
+ data,
163
+ hasNextPage: !!this.paginationController.getNextToken(),
164
+ loading,
165
+ error,
166
+ });
167
+ }
168
+
169
+ applyFilter(data: Amity.InternalPost[]) {
170
+ let posts = data;
171
+
172
+ if (!this.query.includeDeleted) {
173
+ posts = filterByPropEquality(posts, 'isDeleted', false);
174
+ }
175
+
176
+ if (this.query.dataTypes?.length) {
177
+ posts = filterByPostDataTypes(posts, this.query.dataTypes);
178
+ }
179
+
180
+ switch (this.query.sortBy) {
181
+ case 'firstCreated':
182
+ posts = posts.sort(sortByFirstCreated);
183
+ break;
184
+ case 'lastCreated':
185
+ default:
186
+ posts = posts.sort(sortByLastCreated);
187
+ break;
188
+ }
189
+
190
+ return posts;
191
+ }
192
+ }
@@ -0,0 +1,37 @@
1
+ import { PaginationController } from '~/core/liveCollection/PaginationController';
2
+ import { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';
3
+ import { inferIsDeleted } from '~/utils/inferIsDeleted';
4
+
5
+ export class UserFeedPaginationController extends PaginationController<
6
+ 'post',
7
+ Amity.UserFeedLiveCollection
8
+ > {
9
+ async getRequest(queryParams: Amity.UserFeedLiveCollection, token: string | undefined) {
10
+ const {
11
+ userId,
12
+ feedSources,
13
+ dataTypes,
14
+ includeDeleted,
15
+ matchingOnlyParentPost,
16
+ limit = COLLECTION_DEFAULT_PAGINATION_LIMIT,
17
+ ...params
18
+ } = queryParams;
19
+
20
+ const options = token ? { token } : { limit };
21
+
22
+ const { data: queryResponse } = await this.http.get<Amity.PostPayload & Amity.Pagination>(
23
+ `/api/v4/user-feeds/${userId}`,
24
+ {
25
+ params: {
26
+ ...params,
27
+ options,
28
+ dataTypes: dataTypes?.length ? dataTypes : undefined,
29
+ includePostedFeed: feedSources,
30
+ isDeleted: inferIsDeleted(includeDeleted),
31
+ matchingOnlyParentPost: matchingOnlyParentPost ?? !dataTypes?.length,
32
+ },
33
+ },
34
+ );
35
+ return queryResponse;
36
+ }
37
+ }
@@ -0,0 +1,119 @@
1
+ import { getResolver } from '~/core/model';
2
+ import { getActiveClient } from '~/client';
3
+ import { pullFromCache, pushToCache } from '~/cache/api';
4
+ import { ingestInCache } from '~/cache/api/ingestInCache';
5
+ import { EnumPostActions } from '~/postRepository/observers/enums';
6
+ import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
7
+
8
+ export class UserFeedQueryStreamController extends QueryStreamController<
9
+ Amity.PostPayload,
10
+ Amity.UserFeedLiveCollection
11
+ > {
12
+ private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
13
+
14
+ private preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload;
15
+
16
+ constructor(
17
+ query: Amity.UserFeedLiveCollection,
18
+ cacheKey: string[],
19
+ notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
20
+ preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload,
21
+ ) {
22
+ super(query, cacheKey);
23
+ this.notifyChange = notifyChange;
24
+ this.preparePayload = preparePayload;
25
+ }
26
+
27
+ async saveToMainDB(response: Amity.PostPayload) {
28
+ const processedPayload = await this.preparePayload(response);
29
+
30
+ const client = getActiveClient();
31
+ const cachedAt = client.cache && Date.now();
32
+
33
+ if (client.cache) {
34
+ ingestInCache(processedPayload, { cachedAt });
35
+ }
36
+ }
37
+
38
+ appendToQueryStream(
39
+ response: Amity.PostPayload & Partial<Amity.Pagination>,
40
+ direction: Amity.LiveCollectionPageDirection,
41
+ refresh = false,
42
+ ) {
43
+ if (refresh) {
44
+ pushToCache(this.cacheKey, {
45
+ data: response.posts.map(getResolver('post')),
46
+ });
47
+ } else {
48
+ const collection = pullFromCache<Amity.UserFeedLiveCollectionCache>(this.cacheKey)?.data;
49
+
50
+ const posts = collection?.data ?? [];
51
+
52
+ pushToCache(this.cacheKey, {
53
+ ...collection,
54
+ data: [...new Set([...posts, ...response.posts.map(getResolver('post'))])],
55
+ });
56
+ }
57
+ }
58
+
59
+ reactor(action: EnumPostActions) {
60
+ return (post: Amity.InternalPost) => {
61
+ const collection = pullFromCache<Amity.UserFeedLiveCollectionCache>(this.cacheKey)?.data;
62
+
63
+ if (!collection) return;
64
+
65
+ // if the collection is parent post collection and
66
+ // post is not included in the collection or post is child post
67
+ if (
68
+ (!this.query.dataTypes || this.query.dataTypes.length === 0) &&
69
+ !collection.data.includes(post.parentPostId ? post.parentPostId : post.postId)
70
+ )
71
+ return;
72
+
73
+ if (action === EnumPostActions.OnPostDeleted) {
74
+ collection.data = collection.data.filter(postId => postId !== post.postId);
75
+ }
76
+
77
+ if (post.parentPostId && post.isDeleted) {
78
+ const parentPost = pullFromCache<Amity.InternalPost>([
79
+ 'post',
80
+ 'get',
81
+ post.parentPostId,
82
+ ])?.data;
83
+
84
+ if (!parentPost) return;
85
+
86
+ parentPost.children = parentPost.children.filter(childId => childId !== post.postId);
87
+ pushToCache(['post', 'get', parentPost.postId], parentPost);
88
+ }
89
+
90
+ if (action === EnumPostActions.OnPostDeclined) {
91
+ collection.data = collection.data.filter(postId => postId !== post.postId);
92
+ }
93
+
94
+ if (action === EnumPostActions.OnPostCreated || action === EnumPostActions.OnPostApproved) {
95
+ if (
96
+ this.query.dataTypes &&
97
+ this.query.dataTypes.length > 0 &&
98
+ !this.query.dataTypes.includes(post.dataType)
99
+ ) {
100
+ return;
101
+ }
102
+
103
+ collection.data = [...new Set([post.postId, ...collection.data])];
104
+ }
105
+
106
+ pushToCache(this.cacheKey, collection);
107
+ this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
108
+ };
109
+ }
110
+
111
+ subscribeRTE(
112
+ createSubscriber: {
113
+ fn: (reactor: (post: Amity.InternalPost) => void) => Amity.Unsubscriber;
114
+ action: EnumPostActions;
115
+ }[],
116
+ ) {
117
+ return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
118
+ }
119
+ }
@@ -0,0 +1,56 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { dropFromCache } from '~/cache/api/dropFromCache';
3
+ import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
4
+ import { UserFeedLiveCollectionController } from './getUserFeed/LiveCollectionController';
5
+
6
+ /* begin_public_function
7
+ id: feed.query.user_feed
8
+ */
9
+ /**
10
+ * ```js
11
+ * import { FeedRepository } from '@amityco/ts-sdk'
12
+ *
13
+ * let posts = []
14
+ * const unsubscribe = FeedRepository.getUserFeed({
15
+ * userId: string,
16
+ * feedSources: ['user', 'community'],
17
+ * }, response => response => processResponse(response))
18
+ * ```
19
+ *
20
+ * Observe all mutations on a list of {@link Amity.Post} for a given user and feedSources
21
+ *
22
+ * @param params.userId the ID of the user
23
+ * @param params.feedSources the sources of the feed
24
+ * @param callback the function to call when new data are available
25
+ * @param config
26
+ * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
27
+ *
28
+ * @category Posts Live Collection
29
+ */
30
+ export const getUserFeed = (
31
+ params: Amity.UserFeedLiveCollection,
32
+ callback: Amity.LiveCollectionCallback<Amity.Post>,
33
+ config?: Amity.LiveCollectionConfig,
34
+ ): Amity.Unsubscriber => {
35
+ const { log, cache } = getActiveClient();
36
+
37
+ if (!cache) {
38
+ console.log(ENABLE_CACHE_MESSAGE);
39
+ }
40
+
41
+ const timestamp = Date.now();
42
+ log(`getUserFeed(tmpid: ${timestamp}) > listen`);
43
+
44
+ const userFeedLiveCollection = new UserFeedLiveCollectionController(params, callback);
45
+ const disposers = userFeedLiveCollection.startSubscription();
46
+
47
+ const cacheKey = userFeedLiveCollection.getCacheKey();
48
+
49
+ disposers.push(() => dropFromCache(cacheKey));
50
+
51
+ return () => {
52
+ log(`getUserFeed(tmpid: ${timestamp}) > dispose`);
53
+ disposers.forEach(fn => fn());
54
+ };
55
+ };
56
+ /* end_public_function */
@@ -0,0 +1 @@
1
+ export * from './getUserFeed';