@amityco/ts-sdk 7.8.1-b470fee3.0 → 7.8.1-eaa1fd4d.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 (73) hide show
  1. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.d.ts +32 -0
  2. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.d.ts.map +1 -1
  3. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.js +22 -1
  4. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.js.map +1 -1
  5. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.d.ts +1 -0
  6. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.d.ts.map +1 -1
  7. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.js +1 -0
  8. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.js.map +1 -1
  9. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.d.ts +1 -0
  10. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.d.ts.map +1 -1
  11. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.js +1 -0
  12. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.js.map +1 -1
  13. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.d.ts +1 -1
  14. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.d.ts.map +1 -1
  15. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.js +1 -1
  16. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.js.map +1 -1
  17. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts +13 -0
  18. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts.map +1 -0
  19. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.js +108 -0
  20. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.js.map +1 -0
  21. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts +5 -0
  22. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts.map +1 -0
  23. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.js +15 -0
  24. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.js.map +1 -0
  25. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts +15 -0
  26. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts.map +1 -0
  27. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.js +78 -0
  28. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.js.map +1 -0
  29. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.d.ts +23 -0
  30. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.d.ts.map +1 -0
  31. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.js +46 -0
  32. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.js.map +1 -0
  33. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.d.ts +1 -0
  34. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.d.ts.map +1 -1
  35. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.js +1 -0
  36. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.js.map +1 -1
  37. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/liveReactionRepository/api/createReaction.d.ts.map +1 -1
  38. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/liveReactionRepository/api/createReaction.js.map +1 -1
  39. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/tsconfig.tsbuildinfo +1 -1
  40. package/dist/@types/domains/feed.d.ts +32 -0
  41. package/dist/@types/domains/feed.d.ts.map +1 -1
  42. package/dist/@types/index.d.ts +1 -0
  43. package/dist/@types/index.d.ts.map +1 -1
  44. package/dist/client/api/index.d.ts +1 -0
  45. package/dist/client/api/index.d.ts.map +1 -1
  46. package/dist/feedRepository/index.d.ts +1 -1
  47. package/dist/feedRepository/index.d.ts.map +1 -1
  48. package/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts +13 -0
  49. package/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts.map +1 -0
  50. package/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts +5 -0
  51. package/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts.map +1 -0
  52. package/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts +15 -0
  53. package/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts.map +1 -0
  54. package/dist/feedRepository/observers/getUserFeed.d.ts +23 -0
  55. package/dist/feedRepository/observers/getUserFeed.d.ts.map +1 -0
  56. package/dist/feedRepository/observers/index.d.ts +1 -0
  57. package/dist/feedRepository/observers/index.d.ts.map +1 -1
  58. package/dist/index.cjs.js +242 -1
  59. package/dist/index.esm.js +243 -2
  60. package/dist/index.umd.js +4 -4
  61. package/dist/liveReactionRepository/api/createReaction.d.ts.map +1 -1
  62. package/package.json +1 -1
  63. package/src/@types/domains/feed.ts +44 -0
  64. package/src/@types/index.ts +1 -0
  65. package/src/client/api/index.ts +2 -0
  66. package/src/feedRepository/index.ts +1 -1
  67. package/src/feedRepository/observers/getUserFeed/LiveCollectionController.ts +162 -0
  68. package/src/feedRepository/observers/getUserFeed/PaginationController.ts +37 -0
  69. package/src/feedRepository/observers/getUserFeed/QueryStreamController.ts +119 -0
  70. package/src/feedRepository/observers/getUserFeed.ts +56 -0
  71. package/src/feedRepository/observers/index.ts +1 -0
  72. package/src/liveReactionRepository/api/createReaction.ts +0 -1
  73. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"createReaction.d.ts","sourceRoot":"","sources":["../../../src/liveReactionRepository/api/createReaction.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc;iBAMZ,MAAM;cACT,MAAM;MACd,QAAQ,OAAO,CAyBlB,CAAC"}
1
+ {"version":3,"file":"createReaction.d.ts","sourceRoot":"","sources":["../../../src/liveReactionRepository/api/createReaction.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc;iBAMZ,MAAM;cACT,MAAM;MACd,QAAQ,OAAO,CAwBlB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amityco/ts-sdk",
3
- "version": "7.8.1-b470fee3.0",
3
+ "version": "7.8.1-eaa1fd4d.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';
@@ -31,5 +59,21 @@ declare global {
31
59
  Amity.InternalPost['postId'],
32
60
  QueryGlobalFeed
33
61
  >;
62
+
63
+ type QueryUserFeed = {
64
+ userId: string;
65
+ includeDeleted?: boolean;
66
+ sortBy?: Amity.FeedSortBy;
67
+ dataTypes?: Amity.FeedDataType[];
68
+ matchingOnlyParentPost?: boolean;
69
+ feedSources?: Amity.FeedSource[];
70
+ };
71
+
72
+ type UserFeedLiveCollection = Amity.LiveCollectionParams<QueryUserFeed>;
73
+
74
+ type UserFeedLiveCollectionCache = Amity.LiveCollectionCache<
75
+ Amity.InternalPost['postId'],
76
+ QueryUserFeed
77
+ >;
34
78
  }
35
79
  }
@@ -44,4 +44,5 @@ 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';
47
48
  export * from './domains/hashtag';
@@ -22,4 +22,6 @@ export * from './setUploadedFileAccessType';
22
22
 
23
23
  export * from './fetchLinkPreview';
24
24
 
25
+ export * from './getSocialSettings';
26
+
25
27
  export * from './getShareableLinkConfiguration';
@@ -1,2 +1,2 @@
1
1
  export { queryGlobalFeed } from './api';
2
- export { getCustomRankingGlobalFeed, getGlobalFeed } from './observers';
2
+ export { getCustomRankingGlobalFeed, getGlobalFeed, getUserFeed } from './observers';
@@ -0,0 +1,162 @@
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 { isNonNullable } from '~/utils';
18
+ import { EnumPostActions } from '~/postRepository/observers/enums';
19
+ import { LinkedObject } from '~/utils/linkedObject';
20
+ import { preparePostPayload } from '~/postRepository/utils/payload';
21
+ import { convertEventPayload } from '~/utils/event';
22
+ import { onCommentCreated, onCommentDeleted } from '~/commentRepository';
23
+ import { getPost } from '~/postRepository/internalApi/getPost';
24
+ import { onPostUpdatedLocal } from '~/postRepository/events/onPostUpdatedLocal';
25
+ import { onLocalPostReactionAdded } from '~/postRepository/events/onLocalPostReactionAdded';
26
+ import { onLocalPostReactionRemoved } from '~/postRepository/events/onLocalPostReactionRemoved';
27
+ import { onLocalPostDeleted } from '~/postRepository/events/onLocalPostDeleted';
28
+
29
+ export class UserFeedLiveCollectionController extends LiveCollectionController<
30
+ 'post',
31
+ Amity.UserFeedLiveCollection,
32
+ Amity.Post,
33
+ UserFeedPaginationController
34
+ > {
35
+ private queryStreamController: UserFeedQueryStreamController;
36
+
37
+ private query: Amity.UserFeedLiveCollection;
38
+
39
+ constructor(
40
+ query: Amity.UserFeedLiveCollection,
41
+ callback: Amity.LiveCollectionCallback<Amity.Post>,
42
+ ) {
43
+ const queryStreamId = hash(query);
44
+ const cacheKey = ['userFeed', 'collection', queryStreamId];
45
+ const paginationController = new UserFeedPaginationController(query);
46
+
47
+ super(paginationController, queryStreamId, cacheKey, callback);
48
+
49
+ this.query = query;
50
+ this.queryStreamController = new UserFeedQueryStreamController(
51
+ this.query,
52
+ this.cacheKey,
53
+ this.notifyChange.bind(this),
54
+ preparePostPayload,
55
+ );
56
+
57
+ this.callback = callback.bind(this);
58
+ this.loadPage({ initial: true });
59
+ }
60
+
61
+ protected setup() {
62
+ const collection = pullFromCache<Amity.UserFeedLiveCollectionCache>(this.cacheKey)?.data;
63
+ if (!collection) {
64
+ pushToCache(this.cacheKey, {
65
+ data: [],
66
+ params: {},
67
+ });
68
+ }
69
+ }
70
+
71
+ protected async persistModel(queryPayload: Amity.PostPayload & Amity.Pagination) {
72
+ await this.queryStreamController.saveToMainDB(queryPayload);
73
+ }
74
+
75
+ protected persistQueryStream({
76
+ response,
77
+ direction,
78
+ refresh,
79
+ }: Amity.LiveCollectionPersistQueryStreamParams<'post'>) {
80
+ this.queryStreamController.appendToQueryStream(response, direction, refresh);
81
+ }
82
+
83
+ startSubscription() {
84
+ return this.queryStreamController.subscribeRTE([
85
+ { fn: onPostCreated, action: EnumPostActions.OnPostCreated },
86
+ { fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },
87
+ { fn: onPostUpdatedLocal, action: EnumPostActions.OnPostUpdated },
88
+ { fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },
89
+ { fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },
90
+ { fn: onPostUnflagged, action: EnumPostActions.OnPostUnflagged },
91
+ { fn: onPostApproved, action: EnumPostActions.OnPostApproved },
92
+ { fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },
93
+ { fn: onPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
94
+ { fn: onPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
95
+ { fn: onLocalPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
96
+ { fn: onLocalPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
97
+ { fn: onLocalPostDeleted, action: EnumPostActions.OnPostDeleted },
98
+ {
99
+ fn: convertEventPayload(
100
+ (callback: Amity.Listener<Amity.InternalComment>) => {
101
+ return onCommentCreated(async (comment: Amity.InternalComment) => {
102
+ const currentCollection = pullFromCache<Amity.UserFeedLiveCollectionCache>(
103
+ this.cacheKey,
104
+ )?.data;
105
+
106
+ if (!currentCollection || currentCollection.data.includes(comment.referenceId))
107
+ return;
108
+
109
+ await getPost(comment.referenceId);
110
+ callback(comment);
111
+ });
112
+ },
113
+ 'referenceId',
114
+ 'post',
115
+ ),
116
+ action: EnumPostActions.OnPostUpdated,
117
+ },
118
+ {
119
+ fn: convertEventPayload(
120
+ (callback: Amity.Listener<Amity.InternalComment>) => {
121
+ return onCommentDeleted(async (comment: Amity.InternalComment) => {
122
+ const currentCollection = pullFromCache<Amity.UserFeedLiveCollectionCache>(
123
+ this.cacheKey,
124
+ )?.data;
125
+
126
+ if (!currentCollection || currentCollection.data.includes(comment.referenceId))
127
+ return;
128
+
129
+ await getPost(comment.referenceId);
130
+ callback(comment);
131
+ });
132
+ },
133
+ 'referenceId',
134
+ 'post',
135
+ ),
136
+ action: EnumPostActions.OnPostUpdated,
137
+ },
138
+ ]);
139
+ }
140
+
141
+ notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {
142
+ const collection = pullFromCache<Amity.UserFeedLiveCollectionCache>(this.cacheKey)?.data;
143
+ if (!collection) return;
144
+
145
+ const data = (
146
+ collection.data
147
+ .map(id => pullFromCache<Amity.InternalPost>(['post', 'get', id])!)
148
+ .filter(isNonNullable)
149
+ .map(({ data }) => data) ?? []
150
+ ).map(LinkedObject.post);
151
+
152
+ if (!this.shouldNotify(data) && origin === 'event') return;
153
+
154
+ this.callback({
155
+ onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),
156
+ data,
157
+ hasNextPage: !!this.paginationController.getNextToken(),
158
+ loading,
159
+ error,
160
+ });
161
+ }
162
+ }
@@ -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 */
@@ -1,2 +1,3 @@
1
1
  export { getCustomRankingGlobalFeed } from './getCustomRankingGlobalFeed';
2
2
  export { getGlobalFeed } from './getGlobalFeed';
3
+ export { getUserFeed } from './getUserFeed';
@@ -48,7 +48,6 @@ export const createReaction = async ({
48
48
  occurredAt: new Date().toISOString(),
49
49
  };
50
50
 
51
-
52
51
  reactionSynceEngine.createLiveReaction(reaction);
53
52
 
54
53
  fireEvent('local.liveReaction.created', [{ ...reaction, userId: client.userId!, referenceId }]);