@amityco/ts-sdk 7.7.1-f6f69f8.0 → 7.8.1-5d16a58a.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.
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.d.ts +31 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.d.ts.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.js +21 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.js.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.d.ts +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.d.ts.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.js +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.js.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts +14 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.js +129 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.js.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts +5 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.js +15 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.js.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts +15 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.js +78 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.js.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.d.ts +23 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.d.ts.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.js +46 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.js.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.d.ts +2 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.d.ts.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.js +2 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.js.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/tsconfig.tsbuildinfo +1 -1
- package/dist/@types/domains/feed.d.ts +31 -0
- package/dist/@types/domains/feed.d.ts.map +1 -1
- package/dist/feedRepository/index.d.ts +1 -0
- package/dist/feedRepository/index.d.ts.map +1 -1
- package/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts +14 -0
- package/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts.map +1 -0
- package/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts +5 -0
- package/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts.map +1 -0
- package/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts +15 -0
- package/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts.map +1 -0
- package/dist/feedRepository/observers/getUserFeed.d.ts +23 -0
- package/dist/feedRepository/observers/getUserFeed.d.ts.map +1 -0
- package/dist/feedRepository/observers/index.d.ts +2 -0
- package/dist/feedRepository/observers/index.d.ts.map +1 -0
- package/dist/index.cjs.js +1298 -1061
- package/dist/index.esm.js +1335 -1098
- package/dist/index.umd.js +2 -2
- package/package.json +1 -1
- package/src/@types/domains/feed.ts +43 -0
- package/src/feedRepository/index.ts +1 -0
- package/src/feedRepository/observers/getUserFeed/LiveCollectionController.ts +192 -0
- package/src/feedRepository/observers/getUserFeed/PaginationController.ts +37 -0
- package/src/feedRepository/observers/getUserFeed/QueryStreamController.ts +119 -0
- package/src/feedRepository/observers/getUserFeed.ts +56 -0
- package/src/feedRepository/observers/index.ts +1 -0
- package/tsconfig.tsbuildinfo +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -139,8 +139,8 @@ var JoinResultStatusEnum;
|
|
|
139
139
|
|
|
140
140
|
function getVersion() {
|
|
141
141
|
try {
|
|
142
|
-
// the string ''v7.
|
|
143
|
-
return 'v7.
|
|
142
|
+
// the string ''v7.8.0-esm'' should be replaced by actual value by @rollup/plugin-replace
|
|
143
|
+
return 'v7.8.0-esm';
|
|
144
144
|
}
|
|
145
145
|
catch (error) {
|
|
146
146
|
return '__dev__';
|
|
@@ -39267,1010 +39267,1035 @@ getCustomRankingGlobalFeed.locally = (query) => {
|
|
|
39267
39267
|
: undefined;
|
|
39268
39268
|
};
|
|
39269
39269
|
|
|
39270
|
-
|
|
39271
|
-
|
|
39272
|
-
|
|
39273
|
-
|
|
39274
|
-
}
|
|
39270
|
+
class UserFeedPaginationController extends PaginationController {
|
|
39271
|
+
async getRequest(queryParams, token) {
|
|
39272
|
+
const { userId, feedSources, dataTypes, includeDeleted, matchingOnlyParentPost, limit = COLLECTION_DEFAULT_PAGINATION_LIMIT } = queryParams, params = __rest(queryParams, ["userId", "feedSources", "dataTypes", "includeDeleted", "matchingOnlyParentPost", "limit"]);
|
|
39273
|
+
const options = token ? { token } : { limit };
|
|
39274
|
+
const { data: queryResponse } = await this.http.get(`/api/v4/user-feeds/${userId}`, {
|
|
39275
|
+
params: Object.assign(Object.assign({}, params), { options, dataTypes: (dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length) ? dataTypes : undefined, includePostedFeed: feedSources, isDeleted: inferIsDeleted(includeDeleted), matchingOnlyParentPost: matchingOnlyParentPost !== null && matchingOnlyParentPost !== void 0 ? matchingOnlyParentPost : !(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length) }),
|
|
39276
|
+
});
|
|
39277
|
+
return queryResponse;
|
|
39278
|
+
}
|
|
39279
|
+
}
|
|
39280
|
+
|
|
39281
|
+
var EnumPostActions;
|
|
39282
|
+
(function (EnumPostActions) {
|
|
39283
|
+
EnumPostActions["OnPostCreated"] = "onPostCreated";
|
|
39284
|
+
EnumPostActions["OnPostUpdated"] = "onPostUpdated";
|
|
39285
|
+
EnumPostActions["OnPostDeleted"] = "onPostDeleted";
|
|
39286
|
+
EnumPostActions["OnPostFlagged"] = "onPostFlagged";
|
|
39287
|
+
EnumPostActions["OnPostUnflagged"] = "onPostUnflagged";
|
|
39288
|
+
EnumPostActions["OnPostReactionAdded"] = "onPostReactionAdded";
|
|
39289
|
+
EnumPostActions["OnPostReactionRemoved"] = "onPostReactionRemoved";
|
|
39290
|
+
EnumPostActions["OnPostApproved"] = "onPostApproved";
|
|
39291
|
+
EnumPostActions["OnPostDeclined"] = "onPostDeclined";
|
|
39292
|
+
})(EnumPostActions || (EnumPostActions = {}));
|
|
39293
|
+
|
|
39294
|
+
class UserFeedQueryStreamController extends QueryStreamController {
|
|
39295
|
+
constructor(query, cacheKey, notifyChange, preparePayload) {
|
|
39296
|
+
super(query, cacheKey);
|
|
39297
|
+
this.notifyChange = notifyChange;
|
|
39298
|
+
this.preparePayload = preparePayload;
|
|
39299
|
+
}
|
|
39300
|
+
async saveToMainDB(response) {
|
|
39301
|
+
const processedPayload = await this.preparePayload(response);
|
|
39302
|
+
const client = getActiveClient();
|
|
39303
|
+
const cachedAt = client.cache && Date.now();
|
|
39304
|
+
if (client.cache) {
|
|
39305
|
+
ingestInCache(processedPayload, { cachedAt });
|
|
39306
|
+
}
|
|
39307
|
+
}
|
|
39308
|
+
appendToQueryStream(response, direction, refresh = false) {
|
|
39309
|
+
var _a, _b;
|
|
39310
|
+
if (refresh) {
|
|
39311
|
+
pushToCache(this.cacheKey, {
|
|
39312
|
+
data: response.posts.map(getResolver('post')),
|
|
39313
|
+
});
|
|
39314
|
+
}
|
|
39315
|
+
else {
|
|
39316
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
39317
|
+
const posts = (_b = collection === null || collection === void 0 ? void 0 : collection.data) !== null && _b !== void 0 ? _b : [];
|
|
39318
|
+
pushToCache(this.cacheKey, Object.assign(Object.assign({}, collection), { data: [...new Set([...posts, ...response.posts.map(getResolver('post'))])] }));
|
|
39319
|
+
}
|
|
39320
|
+
}
|
|
39321
|
+
reactor(action) {
|
|
39322
|
+
return (post) => {
|
|
39323
|
+
var _a, _b;
|
|
39324
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
39325
|
+
if (!collection)
|
|
39326
|
+
return;
|
|
39327
|
+
// if the collection is parent post collection and
|
|
39328
|
+
// post is not included in the collection or post is child post
|
|
39329
|
+
if ((!this.query.dataTypes || this.query.dataTypes.length === 0) &&
|
|
39330
|
+
!collection.data.includes(post.parentPostId ? post.parentPostId : post.postId))
|
|
39331
|
+
return;
|
|
39332
|
+
if (action === EnumPostActions.OnPostDeleted) {
|
|
39333
|
+
collection.data = collection.data.filter(postId => postId !== post.postId);
|
|
39334
|
+
}
|
|
39335
|
+
if (post.parentPostId && post.isDeleted) {
|
|
39336
|
+
const parentPost = (_b = pullFromCache([
|
|
39337
|
+
'post',
|
|
39338
|
+
'get',
|
|
39339
|
+
post.parentPostId,
|
|
39340
|
+
])) === null || _b === void 0 ? void 0 : _b.data;
|
|
39341
|
+
if (!parentPost)
|
|
39342
|
+
return;
|
|
39343
|
+
parentPost.children = parentPost.children.filter(childId => childId !== post.postId);
|
|
39344
|
+
pushToCache(['post', 'get', parentPost.postId], parentPost);
|
|
39345
|
+
}
|
|
39346
|
+
if (action === EnumPostActions.OnPostDeclined) {
|
|
39347
|
+
collection.data = collection.data.filter(postId => postId !== post.postId);
|
|
39348
|
+
}
|
|
39349
|
+
if (action === EnumPostActions.OnPostCreated || action === EnumPostActions.OnPostApproved) {
|
|
39350
|
+
if (this.query.dataTypes &&
|
|
39351
|
+
this.query.dataTypes.length > 0 &&
|
|
39352
|
+
!this.query.dataTypes.includes(post.dataType)) {
|
|
39353
|
+
return;
|
|
39354
|
+
}
|
|
39355
|
+
collection.data = [...new Set([post.postId, ...collection.data])];
|
|
39356
|
+
}
|
|
39357
|
+
pushToCache(this.cacheKey, collection);
|
|
39358
|
+
this.notifyChange({ origin: "event" /* Amity.LiveDataOrigin.EVENT */, loading: false });
|
|
39359
|
+
};
|
|
39360
|
+
}
|
|
39361
|
+
subscribeRTE(createSubscriber) {
|
|
39362
|
+
return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
|
|
39363
|
+
}
|
|
39364
|
+
}
|
|
39275
39365
|
|
|
39276
39366
|
/* begin_public_function
|
|
39277
|
-
id:
|
|
39367
|
+
id: comment.get_by_ids
|
|
39278
39368
|
*/
|
|
39279
39369
|
/**
|
|
39280
39370
|
* ```js
|
|
39281
|
-
* import {
|
|
39282
|
-
* const
|
|
39371
|
+
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
39372
|
+
* const comments = await CommentRepository.getCommentByIds(['foo', 'bar'])
|
|
39283
39373
|
* ```
|
|
39284
39374
|
*
|
|
39285
|
-
* Fetches a collection of {@link Amity.
|
|
39375
|
+
* Fetches a collection of {@link Amity.Comment} objects
|
|
39286
39376
|
*
|
|
39287
|
-
* @param
|
|
39288
|
-
* @returns the associated collection of {@link Amity.
|
|
39377
|
+
* @param commentIds the IDs of the {@link Amity.Comment} to fetch
|
|
39378
|
+
* @returns the associated collection of {@link Amity.Comment} objects
|
|
39289
39379
|
*
|
|
39290
|
-
* @category
|
|
39380
|
+
* @category Comment API
|
|
39291
39381
|
* @async
|
|
39292
39382
|
*/
|
|
39293
|
-
const
|
|
39383
|
+
const getCommentByIds = async (commentIds) => {
|
|
39294
39384
|
const client = getActiveClient();
|
|
39295
|
-
client.log('
|
|
39296
|
-
const
|
|
39297
|
-
let
|
|
39385
|
+
client.log('comment/getCommentByIds', commentIds);
|
|
39386
|
+
const encodedCommentIds = commentIds.map(commentId => encodeURIComponent(commentId));
|
|
39387
|
+
let data;
|
|
39298
39388
|
try {
|
|
39299
39389
|
// API-FIX: endpoint should not be /list, parameters should be querystring.
|
|
39300
|
-
const response = await client.http.get(`/api/v3/
|
|
39301
|
-
params: {
|
|
39390
|
+
const response = await client.http.get(`/api/v3/comments/list`, {
|
|
39391
|
+
params: { commentIds: encodedCommentIds },
|
|
39302
39392
|
});
|
|
39303
|
-
|
|
39393
|
+
data = response.data;
|
|
39304
39394
|
}
|
|
39305
39395
|
catch (error) {
|
|
39306
|
-
|
|
39396
|
+
commentIds.forEach(commentId => {
|
|
39307
39397
|
if (checkIfShouldGoesToTombstone(error === null || error === void 0 ? void 0 : error.code)) {
|
|
39308
|
-
pushToTombstone('
|
|
39398
|
+
pushToTombstone('comment', commentId);
|
|
39309
39399
|
}
|
|
39310
39400
|
});
|
|
39311
39401
|
throw error;
|
|
39312
39402
|
}
|
|
39313
|
-
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
39314
39403
|
const cachedAt = client.cache && Date.now();
|
|
39315
39404
|
if (client.cache)
|
|
39316
39405
|
ingestInCache(data, { cachedAt });
|
|
39317
39406
|
return {
|
|
39318
|
-
data: data.
|
|
39407
|
+
data: data.comments.map(comment => LinkedObject.comment(comment)),
|
|
39319
39408
|
cachedAt,
|
|
39320
39409
|
};
|
|
39321
39410
|
};
|
|
39322
39411
|
/* end_public_function */
|
|
39323
39412
|
/**
|
|
39324
39413
|
* ```js
|
|
39325
|
-
* import {
|
|
39326
|
-
* const
|
|
39414
|
+
* import { getCommentByIds } from '@amityco/ts-sdk'
|
|
39415
|
+
* const comments = getCommentByIds.locally(['foo', 'bar'])
|
|
39327
39416
|
* ```
|
|
39328
39417
|
*
|
|
39329
|
-
* Fetches a collection of {@link Amity.
|
|
39418
|
+
* Fetches a collection of {@link Amity.Comment} objects from cache
|
|
39330
39419
|
*
|
|
39331
|
-
* @param
|
|
39332
|
-
* @returns the associated collection of {@link Amity.
|
|
39420
|
+
* @param commentIds the IDs of the {@link Amity.Comment} to fetch
|
|
39421
|
+
* @returns the associated collection of {@link Amity.Comment} objects
|
|
39333
39422
|
*
|
|
39334
|
-
* @category
|
|
39423
|
+
* @category Comment API
|
|
39335
39424
|
*/
|
|
39336
|
-
|
|
39425
|
+
getCommentByIds.locally = (commentIds) => {
|
|
39337
39426
|
var _a;
|
|
39338
39427
|
const client = getActiveClient();
|
|
39339
|
-
client.log('
|
|
39428
|
+
client.log('comment/getCommentByIds.locally', commentIds);
|
|
39340
39429
|
if (!client.cache)
|
|
39341
39430
|
return;
|
|
39342
|
-
const cached =
|
|
39343
|
-
.map(
|
|
39431
|
+
const cached = commentIds
|
|
39432
|
+
.map(commentId => pullFromCache(['comment', 'get', commentId]))
|
|
39344
39433
|
.filter(Boolean);
|
|
39345
|
-
const
|
|
39434
|
+
const comments = cached.map(({ data }) => data);
|
|
39346
39435
|
const oldest = (_a = cached.sort((a, b) => (a.cachedAt < b.cachedAt ? -1 : 1))) === null || _a === void 0 ? void 0 : _a[0];
|
|
39347
|
-
if ((cached === null || cached === void 0 ? void 0 : cached.length) <
|
|
39436
|
+
if ((cached === null || cached === void 0 ? void 0 : cached.length) < commentIds.length)
|
|
39348
39437
|
return;
|
|
39349
39438
|
return {
|
|
39350
|
-
data:
|
|
39439
|
+
data: comments.map(comment => LinkedObject.comment(comment)),
|
|
39351
39440
|
cachedAt: oldest.cachedAt,
|
|
39352
39441
|
};
|
|
39353
39442
|
};
|
|
39354
39443
|
|
|
39355
39444
|
/* begin_public_function
|
|
39356
|
-
id:
|
|
39445
|
+
id: comment.create
|
|
39357
39446
|
*/
|
|
39358
39447
|
/**
|
|
39359
39448
|
* ```js
|
|
39360
|
-
* import {
|
|
39361
|
-
* const
|
|
39362
|
-
* targetType: 'user',
|
|
39363
|
-
* targetId: 'foobar',
|
|
39364
|
-
* data: { text: 'hello world' }
|
|
39365
|
-
* }))
|
|
39449
|
+
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
39450
|
+
* const newComment = await CommentRepository.createComment(bundle)
|
|
39366
39451
|
* ```
|
|
39367
39452
|
*
|
|
39368
|
-
* Creates an {@link Amity.
|
|
39453
|
+
* Creates an {@link Amity.Comment}
|
|
39369
39454
|
*
|
|
39370
|
-
* @param bundle The data necessary to create a new {@link Amity.
|
|
39371
|
-
* @returns The newly created {@link Amity.
|
|
39455
|
+
* @param bundle The data necessary to create a new {@link Amity.Comment}
|
|
39456
|
+
* @returns The newly created {@link Amity.Comment}
|
|
39372
39457
|
*
|
|
39373
|
-
* @category
|
|
39458
|
+
* @category Comment API
|
|
39374
39459
|
* @async
|
|
39375
39460
|
*/
|
|
39376
|
-
const
|
|
39461
|
+
const createComment = async (bundle) => {
|
|
39462
|
+
var _a;
|
|
39377
39463
|
const client = getActiveClient();
|
|
39378
|
-
client.log('
|
|
39379
|
-
|
|
39380
|
-
|
|
39381
|
-
|
|
39382
|
-
|
|
39383
|
-
|
|
39384
|
-
fireEvent('post.created', payload);
|
|
39385
|
-
const data = preparePostPayload(payload);
|
|
39464
|
+
client.log('comment/createComment', bundle);
|
|
39465
|
+
const { data } = await client.http.post('/api/v3/comments', bundle);
|
|
39466
|
+
const { comments } = data;
|
|
39467
|
+
// BE always returns an array of comments If it got record 0 from BE it might have a problem on creation logic
|
|
39468
|
+
if (comments.length === 0)
|
|
39469
|
+
throw new Error('Comment not created');
|
|
39386
39470
|
const cachedAt = client.cache && Date.now();
|
|
39387
39471
|
if (client.cache)
|
|
39388
39472
|
ingestInCache(data, { cachedAt });
|
|
39389
|
-
|
|
39473
|
+
if (['post', 'content'].includes(bundle.referenceType)) {
|
|
39474
|
+
const post = (_a = pullFromCache(['post', 'get', bundle.referenceId])) === null || _a === void 0 ? void 0 : _a.data;
|
|
39475
|
+
if (post) {
|
|
39476
|
+
post.commentsCount += 1;
|
|
39477
|
+
fireEvent('local.post.updated', {
|
|
39478
|
+
posts: [post],
|
|
39479
|
+
categories: [],
|
|
39480
|
+
comments: [],
|
|
39481
|
+
communities: [],
|
|
39482
|
+
communityUsers: data.communityUsers,
|
|
39483
|
+
feeds: [],
|
|
39484
|
+
files: data.files,
|
|
39485
|
+
postChildren: [],
|
|
39486
|
+
users: data.users,
|
|
39487
|
+
videoStreamings: [],
|
|
39488
|
+
});
|
|
39489
|
+
}
|
|
39490
|
+
}
|
|
39491
|
+
else if (bundle.referenceType === 'story') {
|
|
39492
|
+
const storyIndex = pullFromCache([
|
|
39493
|
+
"story-reference" /* STORY_KEY_CACHE.STORY_ID_TO_REFERENCE_ID */,
|
|
39494
|
+
bundle.referenceId,
|
|
39495
|
+
]);
|
|
39496
|
+
if (storyIndex === null || storyIndex === void 0 ? void 0 : storyIndex.data) {
|
|
39497
|
+
const cacheStory = pullFromCache([
|
|
39498
|
+
"story" /* STORY_KEY_CACHE.STORY */,
|
|
39499
|
+
'get',
|
|
39500
|
+
storyIndex.data,
|
|
39501
|
+
]);
|
|
39502
|
+
if (cacheStory === null || cacheStory === void 0 ? void 0 : cacheStory.data) {
|
|
39503
|
+
fireEvent('story.updated', {
|
|
39504
|
+
stories: [
|
|
39505
|
+
Object.assign(Object.assign({}, cacheStory.data), { commentsCount: cacheStory.data.commentsCount + 1, comments: [...new Set([...cacheStory.data.comments, comments[0].commentId])] }),
|
|
39506
|
+
],
|
|
39507
|
+
categories: [],
|
|
39508
|
+
comments,
|
|
39509
|
+
communities: [],
|
|
39510
|
+
communityUsers: data.communityUsers,
|
|
39511
|
+
files: data.files,
|
|
39512
|
+
users: data.users,
|
|
39513
|
+
});
|
|
39514
|
+
}
|
|
39515
|
+
}
|
|
39516
|
+
}
|
|
39517
|
+
fireEvent('local.comment.created', data);
|
|
39390
39518
|
return {
|
|
39391
|
-
data: LinkedObject.
|
|
39519
|
+
data: LinkedObject.comment(comments[0]),
|
|
39392
39520
|
cachedAt,
|
|
39393
39521
|
};
|
|
39394
39522
|
};
|
|
39395
39523
|
/* end_public_function */
|
|
39396
39524
|
|
|
39397
39525
|
/* begin_public_function
|
|
39398
|
-
id:
|
|
39526
|
+
id: comment.update_comment
|
|
39399
39527
|
*/
|
|
39400
39528
|
/**
|
|
39401
39529
|
* ```js
|
|
39402
|
-
* import {
|
|
39403
|
-
* const updated = await
|
|
39530
|
+
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
39531
|
+
* const updated = await CommentRepository.updateComment(commentId, {
|
|
39404
39532
|
* data: { text: 'hello world' }
|
|
39405
39533
|
* })
|
|
39406
39534
|
* ```
|
|
39407
39535
|
*
|
|
39408
|
-
* Updates an {@link Amity.
|
|
39536
|
+
* Updates an {@link Amity.Comment}
|
|
39409
39537
|
*
|
|
39410
|
-
* @param
|
|
39538
|
+
* @param commentId The ID of the {@link Amity.Comment} to edit
|
|
39411
39539
|
* @param patch The patch data to apply
|
|
39412
|
-
* @returns the updated {@link Amity.
|
|
39540
|
+
* @returns the updated {@link Amity.Comment} object
|
|
39413
39541
|
*
|
|
39414
|
-
* @category
|
|
39542
|
+
* @category Comment API
|
|
39415
39543
|
* @async
|
|
39416
39544
|
*/
|
|
39417
|
-
const
|
|
39545
|
+
const updateComment = async (commentId, patch) => {
|
|
39418
39546
|
const client = getActiveClient();
|
|
39419
|
-
client.log('user/
|
|
39420
|
-
const { data
|
|
39421
|
-
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
39547
|
+
client.log('user/updateComment', patch);
|
|
39548
|
+
const { data } = await client.http.put(`/api/v3/comments/${encodeURIComponent(commentId)}`, patch);
|
|
39422
39549
|
const cachedAt = client.cache && Date.now();
|
|
39423
39550
|
if (client.cache)
|
|
39424
39551
|
ingestInCache(data, { cachedAt });
|
|
39425
|
-
fireEvent('
|
|
39426
|
-
const {
|
|
39552
|
+
fireEvent('comment.updated', data);
|
|
39553
|
+
const { comments } = data;
|
|
39427
39554
|
return {
|
|
39428
|
-
data: LinkedObject.
|
|
39555
|
+
data: LinkedObject.comment(comments.find(comment => comment.commentId === commentId)),
|
|
39429
39556
|
cachedAt,
|
|
39430
39557
|
};
|
|
39431
39558
|
};
|
|
39432
39559
|
/* end_public_function */
|
|
39433
39560
|
|
|
39561
|
+
// Due to we have optimistic logic, we will use referenceId as a id in SDK instead of storyId
|
|
39562
|
+
const applyMissingField = (rawData, isCreated = false) => {
|
|
39563
|
+
const { storyId, referenceId } = rawData;
|
|
39564
|
+
if (!isCreated) {
|
|
39565
|
+
if (referenceId)
|
|
39566
|
+
return Object.assign(Object.assign({}, rawData), { syncState: "synced" /* Amity.SyncState.Synced */ });
|
|
39567
|
+
}
|
|
39568
|
+
return Object.assign(Object.assign({}, rawData), { syncState: "synced" /* Amity.SyncState.Synced */, referenceId: storyId });
|
|
39569
|
+
};
|
|
39570
|
+
const convertRawStoryToInternal = (data, isCreated = false) => {
|
|
39571
|
+
const { stories } = data;
|
|
39572
|
+
const storiesData = stories.map(story => applyMissingField(story, isCreated));
|
|
39573
|
+
return Object.assign(Object.assign({}, data), { stories: storiesData });
|
|
39574
|
+
};
|
|
39575
|
+
|
|
39576
|
+
const getStoryByStoryId$1 = async (storyId) => {
|
|
39577
|
+
const client = getActiveClient();
|
|
39578
|
+
client.log('story/getStoryByStoryId', storyId);
|
|
39579
|
+
// Get story referenceId from cache
|
|
39580
|
+
const cacheReferenceId = pullFromCache([
|
|
39581
|
+
"story-reference" /* STORY_KEY_CACHE.STORY_ID_TO_REFERENCE_ID */,
|
|
39582
|
+
storyId,
|
|
39583
|
+
]);
|
|
39584
|
+
if (cacheReferenceId === null || cacheReferenceId === void 0 ? void 0 : cacheReferenceId.data) {
|
|
39585
|
+
const { data: referenceId } = cacheReferenceId;
|
|
39586
|
+
isInTombstone('story', referenceId);
|
|
39587
|
+
}
|
|
39588
|
+
let data;
|
|
39589
|
+
try {
|
|
39590
|
+
const response = await client.http.get(`/api/v4/stories/${storyId}`);
|
|
39591
|
+
data = convertRawStoryToInternal(response.data);
|
|
39592
|
+
}
|
|
39593
|
+
catch (error) {
|
|
39594
|
+
if (checkIfShouldGoesToTombstone(error === null || error === void 0 ? void 0 : error.code)) {
|
|
39595
|
+
pushToTombstone('story', storyId);
|
|
39596
|
+
}
|
|
39597
|
+
throw error;
|
|
39598
|
+
}
|
|
39599
|
+
const cachedAt = client.cache && Date.now();
|
|
39600
|
+
if (client.cache) {
|
|
39601
|
+
ingestInCache(data, { cachedAt });
|
|
39602
|
+
}
|
|
39603
|
+
return {
|
|
39604
|
+
data: data.stories[0],
|
|
39605
|
+
cachedAt,
|
|
39606
|
+
};
|
|
39607
|
+
};
|
|
39608
|
+
getStoryByStoryId$1.locally = (storyId) => {
|
|
39609
|
+
const client = getActiveClient();
|
|
39610
|
+
client.log('story/getStorybyStoryId', storyId);
|
|
39611
|
+
// Get story referenceId from cache
|
|
39612
|
+
const cacheReferenceId = pullFromCache([
|
|
39613
|
+
"story-reference" /* STORY_KEY_CACHE.STORY_ID_TO_REFERENCE_ID */,
|
|
39614
|
+
storyId,
|
|
39615
|
+
]);
|
|
39616
|
+
if (cacheReferenceId === null || cacheReferenceId === void 0 ? void 0 : cacheReferenceId.data) {
|
|
39617
|
+
const { data: referenceId } = cacheReferenceId;
|
|
39618
|
+
isInTombstone('story', referenceId);
|
|
39619
|
+
}
|
|
39620
|
+
const cachedAt = client.cache && Date.now();
|
|
39621
|
+
const storyCache = pullFromCache(['story', 'get', storyId]);
|
|
39622
|
+
if (!storyCache)
|
|
39623
|
+
return;
|
|
39624
|
+
return {
|
|
39625
|
+
data: storyCache.data,
|
|
39626
|
+
cachedAt,
|
|
39627
|
+
};
|
|
39628
|
+
};
|
|
39629
|
+
|
|
39630
|
+
/* begin_public_function
|
|
39631
|
+
id: comment.soft_delete, comment.hard_delete
|
|
39632
|
+
*/
|
|
39434
39633
|
/**
|
|
39435
39634
|
* ```js
|
|
39436
|
-
* import {
|
|
39437
|
-
* const success = await
|
|
39635
|
+
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
39636
|
+
* const success = await CommentRepository.deleteComment('foobar')
|
|
39438
39637
|
* ```
|
|
39439
39638
|
*
|
|
39440
|
-
* Deletes a {@link Amity.
|
|
39639
|
+
* Deletes a {@link Amity.Comment}
|
|
39441
39640
|
*
|
|
39442
|
-
* @param
|
|
39443
|
-
* @return A success boolean if the {@link Amity.
|
|
39641
|
+
* @param commentId The {@link Amity.Comment} ID to delete
|
|
39642
|
+
* @return A success boolean if the {@link Amity.Comment} was deleted
|
|
39444
39643
|
*
|
|
39445
|
-
* @
|
|
39644
|
+
* @category Comment API
|
|
39446
39645
|
* @async
|
|
39447
39646
|
*/
|
|
39448
|
-
const
|
|
39647
|
+
const deleteComment = async (commentId, permanent = false) => {
|
|
39449
39648
|
var _a;
|
|
39450
39649
|
const client = getActiveClient();
|
|
39451
|
-
const
|
|
39452
|
-
|
|
39650
|
+
const comment = await getComment$2(commentId);
|
|
39651
|
+
// API-FIX: This endpoint has not been implemented yet.
|
|
39652
|
+
await client.http.delete(`/api/v4/comments/${encodeURIComponent(commentId)}`, {
|
|
39453
39653
|
params: {
|
|
39454
|
-
|
|
39654
|
+
commentId,
|
|
39455
39655
|
permanent,
|
|
39456
39656
|
},
|
|
39457
39657
|
});
|
|
39458
|
-
//
|
|
39459
|
-
|
|
39460
|
-
|
|
39461
|
-
|
|
39462
|
-
|
|
39463
|
-
|
|
39464
|
-
const communityUsersCache = (_a = queryCache(['communityUsers', 'get'])) !== null && _a !== void 0 ? _a : [];
|
|
39465
|
-
const communityUsers = communityUsersCache
|
|
39466
|
-
.filter(({ key }) => {
|
|
39467
|
-
// cache key is ['communityUsers', 'get', `${communityId}#`${userId}`}]
|
|
39468
|
-
if (key[0] !== 'communityUsers')
|
|
39469
|
-
return false;
|
|
39470
|
-
if (key[1] !== 'get')
|
|
39471
|
-
return false;
|
|
39472
|
-
if (typeof key[2] === 'string')
|
|
39473
|
-
return key[2].includes(community.data.communityId);
|
|
39474
|
-
return false;
|
|
39475
|
-
})
|
|
39476
|
-
.map(({ data }) => data);
|
|
39477
|
-
fireEvent('community.updated', {
|
|
39478
|
-
communities: [community.data],
|
|
39658
|
+
// to support hard deletion
|
|
39659
|
+
const deleted = Object.assign(Object.assign({}, comment.data), { isDeleted: true });
|
|
39660
|
+
if (comment.data.referenceType === 'story') {
|
|
39661
|
+
const story = await getStoryByStoryId$1(comment.data.referenceId);
|
|
39662
|
+
fireEvent('local.story.updated', {
|
|
39663
|
+
stories: [story.data],
|
|
39479
39664
|
categories: [],
|
|
39480
|
-
|
|
39481
|
-
|
|
39665
|
+
comments: [],
|
|
39666
|
+
communities: [],
|
|
39667
|
+
communityUsers: [],
|
|
39482
39668
|
files: [],
|
|
39483
39669
|
users: [],
|
|
39484
39670
|
});
|
|
39485
39671
|
}
|
|
39486
|
-
// to support hard deletion
|
|
39487
|
-
const deleted = Object.assign(Object.assign({}, post.data), { isDeleted: true });
|
|
39488
|
-
if (permanent) {
|
|
39489
|
-
setTimeout(() => {
|
|
39490
|
-
pushToTombstone('post', postId);
|
|
39491
|
-
}, 0);
|
|
39492
|
-
}
|
|
39493
39672
|
else {
|
|
39494
|
-
|
|
39673
|
+
const post = (_a = pullFromCache(['post', 'get', comment.data.referenceId])) === null || _a === void 0 ? void 0 : _a.data;
|
|
39674
|
+
if (post) {
|
|
39675
|
+
let removeCount;
|
|
39676
|
+
if (!deleted.parentId) {
|
|
39677
|
+
// NOTE: delete the parent comment will remove all children comments
|
|
39678
|
+
removeCount = deleted.childrenNumber + 1;
|
|
39679
|
+
}
|
|
39680
|
+
else
|
|
39681
|
+
removeCount = 1;
|
|
39682
|
+
post.commentsCount -= removeCount;
|
|
39683
|
+
fireEvent('local.post.updated', {
|
|
39684
|
+
posts: [post],
|
|
39685
|
+
categories: [],
|
|
39686
|
+
comments: [],
|
|
39687
|
+
communities: [],
|
|
39688
|
+
communityUsers: [],
|
|
39689
|
+
feeds: [],
|
|
39690
|
+
files: [],
|
|
39691
|
+
postChildren: [],
|
|
39692
|
+
users: [],
|
|
39693
|
+
videoStreamings: [],
|
|
39694
|
+
});
|
|
39695
|
+
}
|
|
39495
39696
|
}
|
|
39496
|
-
fireEvent('local.
|
|
39497
|
-
|
|
39498
|
-
|
|
39499
|
-
comments: [],
|
|
39500
|
-
communities: [],
|
|
39501
|
-
communityUsers: [],
|
|
39502
|
-
feeds: [],
|
|
39697
|
+
fireEvent('local.comment.deleted', {
|
|
39698
|
+
comments: [deleted],
|
|
39699
|
+
commentChildren: [],
|
|
39503
39700
|
files: [],
|
|
39504
|
-
postChildren: [],
|
|
39505
39701
|
users: [],
|
|
39506
|
-
|
|
39702
|
+
communityUsers: [],
|
|
39507
39703
|
});
|
|
39508
|
-
|
|
39704
|
+
if (permanent) {
|
|
39705
|
+
scheduleTask(() => pushToTombstone('comment', commentId));
|
|
39706
|
+
}
|
|
39707
|
+
else {
|
|
39708
|
+
upsertInCache(['comment', 'get', commentId], { isDeleted: true });
|
|
39709
|
+
}
|
|
39710
|
+
return deleted;
|
|
39509
39711
|
};
|
|
39712
|
+
/* end_public_function */
|
|
39510
39713
|
|
|
39511
39714
|
/* begin_public_function
|
|
39512
|
-
id:
|
|
39715
|
+
id: comment.soft_delete
|
|
39513
39716
|
*/
|
|
39514
39717
|
/**
|
|
39515
39718
|
* ```js
|
|
39516
|
-
* import {
|
|
39517
|
-
* const success = await
|
|
39719
|
+
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
39720
|
+
* const success = await CommentRepository.softDeleteComment('foobar')
|
|
39518
39721
|
* ```
|
|
39519
39722
|
*
|
|
39520
|
-
*
|
|
39723
|
+
* Deletes a {@link Amity.Comment}
|
|
39521
39724
|
*
|
|
39522
|
-
* @param
|
|
39523
|
-
* @return A success boolean if the {@link Amity.
|
|
39725
|
+
* @param commentId The {@link Amity.Comment} ID to delete
|
|
39726
|
+
* @return A success boolean if the {@link Amity.Comment} was deleted
|
|
39524
39727
|
*
|
|
39525
|
-
* @category
|
|
39728
|
+
* @category Comment API
|
|
39526
39729
|
* @async
|
|
39527
39730
|
*/
|
|
39528
|
-
const
|
|
39731
|
+
const softDeleteComment = async (commentId) => {
|
|
39529
39732
|
const client = getActiveClient();
|
|
39530
|
-
client.log('
|
|
39531
|
-
const softDeleted =
|
|
39532
|
-
return
|
|
39733
|
+
client.log('comment/softDeleteComment', commentId);
|
|
39734
|
+
const softDeleted = deleteComment(commentId);
|
|
39735
|
+
return softDeleted;
|
|
39533
39736
|
};
|
|
39534
39737
|
/* end_public_function */
|
|
39535
39738
|
|
|
39536
39739
|
/* begin_public_function
|
|
39537
|
-
id:
|
|
39740
|
+
id: comment.hard_delete
|
|
39538
39741
|
*/
|
|
39539
39742
|
/**
|
|
39540
39743
|
* ```js
|
|
39541
|
-
* import {
|
|
39542
|
-
* const success = await
|
|
39744
|
+
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
39745
|
+
* const success = await CommentRepository.hardDeleteComment('foobar')
|
|
39543
39746
|
* ```
|
|
39544
39747
|
*
|
|
39545
|
-
*
|
|
39748
|
+
* Deletes a {@link Amity.Comment}
|
|
39546
39749
|
*
|
|
39547
|
-
* @param
|
|
39548
|
-
* @return A success boolean if the {@link Amity.
|
|
39750
|
+
* @param commentId The {@link Amity.Comment} ID to delete
|
|
39751
|
+
* @return A success boolean if the {@link Amity.Comment} was deleted
|
|
39549
39752
|
*
|
|
39550
|
-
* @category
|
|
39753
|
+
* @category Comment API
|
|
39551
39754
|
* @async
|
|
39552
39755
|
*/
|
|
39553
|
-
const
|
|
39756
|
+
const hardDeleteComment = async (commentId) => {
|
|
39554
39757
|
const client = getActiveClient();
|
|
39555
|
-
client.log('
|
|
39556
|
-
const hardDeleted =
|
|
39557
|
-
return
|
|
39758
|
+
client.log('comment/hardDeleteComment', commentId);
|
|
39759
|
+
const hardDeleted = deleteComment(commentId, true);
|
|
39760
|
+
return hardDeleted;
|
|
39558
39761
|
};
|
|
39559
39762
|
/* end_public_function */
|
|
39560
39763
|
|
|
39561
39764
|
/* begin_public_function
|
|
39562
|
-
id:
|
|
39765
|
+
id: comment.flag
|
|
39563
39766
|
*/
|
|
39564
39767
|
/**
|
|
39565
39768
|
* ```js
|
|
39566
|
-
* import {
|
|
39567
|
-
*
|
|
39568
|
-
* const { data: post } = await approvePost('postId')
|
|
39769
|
+
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
39770
|
+
* const flagged = await CommentRepository.flagComment(commentId, reason)
|
|
39569
39771
|
* ```
|
|
39570
39772
|
*
|
|
39571
|
-
*
|
|
39572
|
-
*
|
|
39573
|
-
* @
|
|
39574
|
-
* @return A {@link Amity.Post} that was approved
|
|
39773
|
+
* @param commentId The ID of the comment to flag
|
|
39774
|
+
* @param reason the reason to flag the comment
|
|
39775
|
+
* @returns the created report result
|
|
39575
39776
|
*
|
|
39576
|
-
* @category
|
|
39777
|
+
* @category Comment API
|
|
39577
39778
|
* @async
|
|
39578
|
-
*/
|
|
39579
|
-
const
|
|
39779
|
+
* */
|
|
39780
|
+
const flagComment = async (commentId, reason) => {
|
|
39580
39781
|
const client = getActiveClient();
|
|
39581
|
-
client.log('
|
|
39582
|
-
const { data: payload } = await client.http.post(`/api/v3/posts/${encodeURIComponent(postId)}/approve`);
|
|
39583
|
-
fireEvent('post.approved', payload);
|
|
39584
|
-
// fire virtual event for community update
|
|
39585
|
-
if (payload.posts[0].targetType === 'community') {
|
|
39586
|
-
fireEvent('community.updated', payload);
|
|
39587
|
-
}
|
|
39588
|
-
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
39589
|
-
const cachedAt = client.cache && Date.now();
|
|
39590
|
-
if (client.cache)
|
|
39591
|
-
ingestInCache(data, { cachedAt });
|
|
39592
|
-
return {
|
|
39593
|
-
data: LinkedObject.post(data.posts.find(post => post.postId === postId)),
|
|
39594
|
-
cachedAt,
|
|
39595
|
-
};
|
|
39596
|
-
};
|
|
39597
|
-
/* end_public_function */
|
|
39598
|
-
|
|
39599
|
-
/* begin_public_function
|
|
39600
|
-
id: post.decline
|
|
39601
|
-
*/
|
|
39602
|
-
/**
|
|
39603
|
-
* ```js
|
|
39604
|
-
* import { declinePost } from '@amityco/ts-sdk'
|
|
39605
|
-
*
|
|
39606
|
-
* const {data: post} = await declinePost('postId')
|
|
39607
|
-
* ```
|
|
39608
|
-
*
|
|
39609
|
-
* Declines a {@link Amity.Post}
|
|
39610
|
-
*
|
|
39611
|
-
* @param postId The {@link Amity.Post} ID to be declined
|
|
39612
|
-
* @return A {@link Amity.Post} that was declined
|
|
39613
|
-
*
|
|
39614
|
-
* @category Post API
|
|
39615
|
-
* @async
|
|
39616
|
-
*/
|
|
39617
|
-
const declinePost = async (postId) => {
|
|
39618
|
-
const client = getActiveClient();
|
|
39619
|
-
client.log('post/declinePost', postId);
|
|
39620
|
-
const { data: payload } = await client.http.post(`/api/v3/posts/${encodeURIComponent(postId)}/decline`);
|
|
39621
|
-
// fire virtual event
|
|
39622
|
-
if (payload.posts[0].targetType === 'community') {
|
|
39623
|
-
fireEvent('community.updated', payload);
|
|
39624
|
-
}
|
|
39625
|
-
fireEvent('post.declined', payload);
|
|
39626
|
-
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
39627
|
-
const cachedAt = client.cache && Date.now();
|
|
39628
|
-
if (client.cache)
|
|
39629
|
-
ingestInCache(data, { cachedAt });
|
|
39630
|
-
return {
|
|
39631
|
-
data: LinkedObject.post(payload.posts.find(post => post.postId === postId)),
|
|
39632
|
-
cachedAt,
|
|
39633
|
-
};
|
|
39634
|
-
};
|
|
39635
|
-
/* end_public_function */
|
|
39636
|
-
|
|
39637
|
-
/* begin_public_function
|
|
39638
|
-
id: post.flag
|
|
39639
|
-
*/
|
|
39640
|
-
/**
|
|
39641
|
-
* ```js
|
|
39642
|
-
* import { PostRepository } from '@amityco/ts-sdk'
|
|
39643
|
-
* const flagged = await PostRepository.flagPost(postId, reason)
|
|
39644
|
-
* ```
|
|
39645
|
-
*
|
|
39646
|
-
* @param postId of the post to flag
|
|
39647
|
-
* @param reason the reason to flag the post
|
|
39648
|
-
* @returns a boolean
|
|
39649
|
-
*
|
|
39650
|
-
* @category Post API
|
|
39651
|
-
* @async
|
|
39652
|
-
* */
|
|
39653
|
-
const flagPost = async (postId, reason) => {
|
|
39654
|
-
const client = getActiveClient();
|
|
39655
|
-
client.log('post/flagPost', postId);
|
|
39782
|
+
client.log('comment/flagComment', commentId);
|
|
39656
39783
|
const isPredefinedReason = reason &&
|
|
39657
39784
|
Object.entries(ContentFlagReasonEnum).some(([key, value]) => key !== ContentFlagReasonEnum.Others && value === reason);
|
|
39658
39785
|
const body = {
|
|
39659
39786
|
reason: reason && isPredefinedReason ? reason : ContentFlagReasonEnum.Others,
|
|
39660
39787
|
detail: reason && !isPredefinedReason ? reason : '',
|
|
39661
39788
|
};
|
|
39662
|
-
const { data: payload } = await client.http.post(`/api/v3/
|
|
39789
|
+
const { data: payload } = await client.http.post(`/api/v3/comments/${encodeURIComponent(commentId)}/flag`, body);
|
|
39663
39790
|
if (client.cache) {
|
|
39664
|
-
ingestInCache(
|
|
39791
|
+
ingestInCache(payload);
|
|
39665
39792
|
}
|
|
39666
|
-
fireEvent('
|
|
39793
|
+
fireEvent('comment.flagged', payload);
|
|
39667
39794
|
return !!payload;
|
|
39668
39795
|
};
|
|
39669
39796
|
/* end_public_function */
|
|
39670
39797
|
|
|
39671
39798
|
/* begin_public_function
|
|
39672
|
-
id:
|
|
39799
|
+
id: comment.unflag
|
|
39673
39800
|
*/
|
|
39674
39801
|
/**
|
|
39675
39802
|
* ```js
|
|
39676
|
-
* import {
|
|
39677
|
-
* const unflagged = await
|
|
39803
|
+
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
39804
|
+
* const unflagged = await CommentRepository.unflagComment('commentId')
|
|
39678
39805
|
* ```
|
|
39679
39806
|
*
|
|
39680
|
-
* @param
|
|
39681
|
-
* @returns the
|
|
39807
|
+
* @param commentId The ID of comment to unflag
|
|
39808
|
+
* @returns the unflagged result
|
|
39682
39809
|
*
|
|
39683
|
-
* @category
|
|
39810
|
+
* @category Comment API
|
|
39684
39811
|
* @async
|
|
39685
39812
|
* */
|
|
39686
|
-
const
|
|
39813
|
+
const unflagComment = async (commentId) => {
|
|
39687
39814
|
const client = getActiveClient();
|
|
39688
|
-
client.log('
|
|
39689
|
-
const { data: payload } = await client.http.delete(`/api/v3/
|
|
39815
|
+
client.log('comment/unflagComment', commentId);
|
|
39816
|
+
const { data: payload } = await client.http.delete(`/api/v3/comments/${encodeURIComponent(commentId)}/unflag`);
|
|
39690
39817
|
if (client.cache) {
|
|
39691
|
-
ingestInCache(
|
|
39818
|
+
ingestInCache(payload);
|
|
39692
39819
|
}
|
|
39693
|
-
fireEvent('
|
|
39820
|
+
fireEvent('comment.unflagged', payload);
|
|
39694
39821
|
return !!payload;
|
|
39695
39822
|
};
|
|
39696
39823
|
/* end_public_function */
|
|
39697
39824
|
|
|
39698
39825
|
/* begin_public_function
|
|
39699
|
-
id:
|
|
39826
|
+
id: comment.check_flag_by_me
|
|
39700
39827
|
*/
|
|
39701
39828
|
/**
|
|
39702
39829
|
* ```js
|
|
39703
|
-
* import {
|
|
39704
|
-
* const isReported = await
|
|
39830
|
+
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
39831
|
+
* const isReported = await CommentRepository.isCommentFlaggedByMe('commentId')
|
|
39705
39832
|
* ```
|
|
39706
39833
|
*
|
|
39707
|
-
* @param
|
|
39708
|
-
* @returns `true` if the
|
|
39834
|
+
* @param commentId The ID of the comment to check if flagged by current user
|
|
39835
|
+
* @returns `true` if the comment is flagged by me, `false` if doesn't.
|
|
39709
39836
|
*
|
|
39710
|
-
* @category
|
|
39837
|
+
* @category Comment API
|
|
39711
39838
|
* @async
|
|
39712
39839
|
* */
|
|
39713
|
-
const
|
|
39840
|
+
const isCommentFlaggedByMe = async (commentId) => {
|
|
39714
39841
|
const client = getActiveClient();
|
|
39715
|
-
client.log('
|
|
39716
|
-
const { data: { result }, } = await client.http.get(`/api/v3/
|
|
39842
|
+
client.log('comment/isCommentFlaggedByMe', commentId);
|
|
39843
|
+
const { data: { result }, } = await client.http.get(`/api/v3/comments/${commentId}/isflagbyme`);
|
|
39717
39844
|
return result;
|
|
39718
39845
|
};
|
|
39719
39846
|
/* end_public_function */
|
|
39720
39847
|
|
|
39721
|
-
|
|
39722
|
-
id: post.create.clip_post
|
|
39723
|
-
*/
|
|
39724
|
-
/**
|
|
39725
|
-
* ```js
|
|
39726
|
-
* import { PostRepository } from '@amityco/ts-sdk'
|
|
39727
|
-
* const created = await PostRepository.createClipPost({
|
|
39728
|
-
* targetType: 'user',
|
|
39729
|
-
* targetId: 'foobar',
|
|
39730
|
-
* dataType: 'clip',
|
|
39731
|
-
* data: { text: 'hello world' },
|
|
39732
|
-
* attachments: [{ type: 'clip', fileId: 'fileId123', displayMode: 'fill', isMuted: false }]
|
|
39733
|
-
* }))
|
|
39734
|
-
* ```
|
|
39735
|
-
*
|
|
39736
|
-
* Creates an {@link Amity.Post}
|
|
39737
|
-
*
|
|
39738
|
-
* @param bundle The data necessary to create a new {@link Amity.Post}
|
|
39739
|
-
* @returns The newly created {@link Amity.Post}
|
|
39740
|
-
*
|
|
39741
|
-
* @category Post API
|
|
39742
|
-
* @async
|
|
39743
|
-
*/
|
|
39744
|
-
const createClipPost = async (bundle) => {
|
|
39745
|
-
const client = getActiveClient();
|
|
39746
|
-
client.log('post/createPost', bundle);
|
|
39747
|
-
const { data: payload } = await client.http.post('/api/v4/posts', bundle);
|
|
39748
|
-
fireEvent('post.created', payload);
|
|
39749
|
-
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
39750
|
-
const cachedAt = client.cache && Date.now();
|
|
39751
|
-
if (client.cache)
|
|
39752
|
-
ingestInCache(data, { cachedAt });
|
|
39753
|
-
const { posts } = data;
|
|
39754
|
-
return {
|
|
39755
|
-
data: LinkedObject.post(posts[0]),
|
|
39756
|
-
cachedAt,
|
|
39757
|
-
};
|
|
39758
|
-
};
|
|
39759
|
-
/* end_public_function */
|
|
39760
|
-
|
|
39761
|
-
/* begin_public_function
|
|
39762
|
-
id: comment.get_by_ids
|
|
39763
|
-
*/
|
|
39764
|
-
/**
|
|
39765
|
-
* ```js
|
|
39766
|
-
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
39767
|
-
* const comments = await CommentRepository.getCommentByIds(['foo', 'bar'])
|
|
39768
|
-
* ```
|
|
39769
|
-
*
|
|
39770
|
-
* Fetches a collection of {@link Amity.Comment} objects
|
|
39771
|
-
*
|
|
39772
|
-
* @param commentIds the IDs of the {@link Amity.Comment} to fetch
|
|
39773
|
-
* @returns the associated collection of {@link Amity.Comment} objects
|
|
39774
|
-
*
|
|
39775
|
-
* @category Comment API
|
|
39776
|
-
* @async
|
|
39777
|
-
*/
|
|
39778
|
-
const getCommentByIds = async (commentIds) => {
|
|
39848
|
+
const getComment$1 = async (commentId) => {
|
|
39779
39849
|
const client = getActiveClient();
|
|
39780
|
-
client.log('comment/
|
|
39781
|
-
|
|
39850
|
+
client.log('comment/getComment', commentId);
|
|
39851
|
+
isInTombstone('comment', commentId);
|
|
39782
39852
|
let data;
|
|
39783
39853
|
try {
|
|
39784
39854
|
// API-FIX: endpoint should not be /list, parameters should be querystring.
|
|
39785
|
-
const response = await client.http.get(`/api/v3/comments
|
|
39786
|
-
params: { commentIds: encodedCommentIds },
|
|
39787
|
-
});
|
|
39855
|
+
const response = await client.http.get(`/api/v3/comments/${encodeURIComponent(commentId)}`);
|
|
39788
39856
|
data = response.data;
|
|
39789
39857
|
}
|
|
39790
39858
|
catch (error) {
|
|
39791
|
-
|
|
39792
|
-
|
|
39793
|
-
|
|
39794
|
-
}
|
|
39795
|
-
});
|
|
39859
|
+
if (checkIfShouldGoesToTombstone(error === null || error === void 0 ? void 0 : error.code)) {
|
|
39860
|
+
pushToTombstone('comment', commentId);
|
|
39861
|
+
}
|
|
39796
39862
|
throw error;
|
|
39797
39863
|
}
|
|
39798
39864
|
const cachedAt = client.cache && Date.now();
|
|
39799
39865
|
if (client.cache)
|
|
39800
39866
|
ingestInCache(data, { cachedAt });
|
|
39867
|
+
const { comments } = data;
|
|
39801
39868
|
return {
|
|
39802
|
-
data:
|
|
39869
|
+
data: comments.find(comment => comment.commentId === commentId),
|
|
39803
39870
|
cachedAt,
|
|
39804
39871
|
};
|
|
39805
39872
|
};
|
|
39806
|
-
|
|
39807
|
-
/**
|
|
39808
|
-
* ```js
|
|
39809
|
-
* import { getCommentByIds } from '@amityco/ts-sdk'
|
|
39810
|
-
* const comments = getCommentByIds.locally(['foo', 'bar'])
|
|
39811
|
-
* ```
|
|
39812
|
-
*
|
|
39813
|
-
* Fetches a collection of {@link Amity.Comment} objects from cache
|
|
39814
|
-
*
|
|
39815
|
-
* @param commentIds the IDs of the {@link Amity.Comment} to fetch
|
|
39816
|
-
* @returns the associated collection of {@link Amity.Comment} objects
|
|
39817
|
-
*
|
|
39818
|
-
* @category Comment API
|
|
39819
|
-
*/
|
|
39820
|
-
getCommentByIds.locally = (commentIds) => {
|
|
39821
|
-
var _a;
|
|
39873
|
+
getComment$1.locally = (commentId) => {
|
|
39822
39874
|
const client = getActiveClient();
|
|
39823
|
-
client.log('comment/
|
|
39875
|
+
client.log('comment/getComment.locally', commentId);
|
|
39824
39876
|
if (!client.cache)
|
|
39825
39877
|
return;
|
|
39826
|
-
const cached =
|
|
39827
|
-
|
|
39828
|
-
.filter(Boolean);
|
|
39829
|
-
const comments = cached.map(({ data }) => data);
|
|
39830
|
-
const oldest = (_a = cached.sort((a, b) => (a.cachedAt < b.cachedAt ? -1 : 1))) === null || _a === void 0 ? void 0 : _a[0];
|
|
39831
|
-
if ((cached === null || cached === void 0 ? void 0 : cached.length) < commentIds.length)
|
|
39878
|
+
const cached = pullFromCache(['comment', 'get', commentId]);
|
|
39879
|
+
if (!cached)
|
|
39832
39880
|
return;
|
|
39833
39881
|
return {
|
|
39834
|
-
data:
|
|
39835
|
-
cachedAt:
|
|
39882
|
+
data: cached.data,
|
|
39883
|
+
cachedAt: cached.cachedAt,
|
|
39836
39884
|
};
|
|
39837
39885
|
};
|
|
39838
39886
|
|
|
39839
|
-
/* begin_public_function
|
|
39840
|
-
id: comment.create
|
|
39841
|
-
*/
|
|
39842
39887
|
/**
|
|
39843
39888
|
* ```js
|
|
39844
|
-
* import {
|
|
39845
|
-
* const
|
|
39889
|
+
* import { onCommentDeleteLocal } from '@amityco/ts-sdk'
|
|
39890
|
+
* const dispose = onCommentDeleteLocal(comment => {
|
|
39891
|
+
* // ...
|
|
39892
|
+
* })
|
|
39846
39893
|
* ```
|
|
39847
39894
|
*
|
|
39848
|
-
*
|
|
39895
|
+
* Fired when a {@link Amity.InternalComment} has been deleted
|
|
39849
39896
|
*
|
|
39850
|
-
* @param
|
|
39851
|
-
* @returns
|
|
39897
|
+
* @param callback The function to call when the event was fired
|
|
39898
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
39852
39899
|
*
|
|
39853
|
-
* @category Comment
|
|
39854
|
-
* @async
|
|
39900
|
+
* @category Comment Events
|
|
39855
39901
|
*/
|
|
39856
|
-
const
|
|
39857
|
-
var _a;
|
|
39858
|
-
const client = getActiveClient();
|
|
39859
|
-
client.log('comment/createComment', bundle);
|
|
39860
|
-
const { data } = await client.http.post('/api/v3/comments', bundle);
|
|
39861
|
-
const { comments } = data;
|
|
39862
|
-
// BE always returns an array of comments If it got record 0 from BE it might have a problem on creation logic
|
|
39863
|
-
if (comments.length === 0)
|
|
39864
|
-
throw new Error('Comment not created');
|
|
39865
|
-
const cachedAt = client.cache && Date.now();
|
|
39866
|
-
if (client.cache)
|
|
39867
|
-
ingestInCache(data, { cachedAt });
|
|
39868
|
-
if (['post', 'content'].includes(bundle.referenceType)) {
|
|
39869
|
-
const post = (_a = pullFromCache(['post', 'get', bundle.referenceId])) === null || _a === void 0 ? void 0 : _a.data;
|
|
39870
|
-
if (post) {
|
|
39871
|
-
post.commentsCount += 1;
|
|
39872
|
-
fireEvent('local.post.updated', {
|
|
39873
|
-
posts: [post],
|
|
39874
|
-
categories: [],
|
|
39875
|
-
comments: [],
|
|
39876
|
-
communities: [],
|
|
39877
|
-
communityUsers: data.communityUsers,
|
|
39878
|
-
feeds: [],
|
|
39879
|
-
files: data.files,
|
|
39880
|
-
postChildren: [],
|
|
39881
|
-
users: data.users,
|
|
39882
|
-
videoStreamings: [],
|
|
39883
|
-
});
|
|
39884
|
-
}
|
|
39885
|
-
}
|
|
39886
|
-
else if (bundle.referenceType === 'story') {
|
|
39887
|
-
const storyIndex = pullFromCache([
|
|
39888
|
-
"story-reference" /* STORY_KEY_CACHE.STORY_ID_TO_REFERENCE_ID */,
|
|
39889
|
-
bundle.referenceId,
|
|
39890
|
-
]);
|
|
39891
|
-
if (storyIndex === null || storyIndex === void 0 ? void 0 : storyIndex.data) {
|
|
39892
|
-
const cacheStory = pullFromCache([
|
|
39893
|
-
"story" /* STORY_KEY_CACHE.STORY */,
|
|
39894
|
-
'get',
|
|
39895
|
-
storyIndex.data,
|
|
39896
|
-
]);
|
|
39897
|
-
if (cacheStory === null || cacheStory === void 0 ? void 0 : cacheStory.data) {
|
|
39898
|
-
fireEvent('story.updated', {
|
|
39899
|
-
stories: [
|
|
39900
|
-
Object.assign(Object.assign({}, cacheStory.data), { commentsCount: cacheStory.data.commentsCount + 1, comments: [...new Set([...cacheStory.data.comments, comments[0].commentId])] }),
|
|
39901
|
-
],
|
|
39902
|
-
categories: [],
|
|
39903
|
-
comments,
|
|
39904
|
-
communities: [],
|
|
39905
|
-
communityUsers: data.communityUsers,
|
|
39906
|
-
files: data.files,
|
|
39907
|
-
users: data.users,
|
|
39908
|
-
});
|
|
39909
|
-
}
|
|
39910
|
-
}
|
|
39911
|
-
}
|
|
39912
|
-
fireEvent('local.comment.created', data);
|
|
39913
|
-
return {
|
|
39914
|
-
data: LinkedObject.comment(comments[0]),
|
|
39915
|
-
cachedAt,
|
|
39916
|
-
};
|
|
39917
|
-
};
|
|
39918
|
-
/* end_public_function */
|
|
39902
|
+
const onCommentDeleteLocal = (callback) => createLocalCommentEventSubscriber('local.comment.deleted', callback);
|
|
39919
39903
|
|
|
39920
|
-
/* begin_public_function
|
|
39921
|
-
id: comment.update_comment
|
|
39922
|
-
*/
|
|
39923
39904
|
/**
|
|
39924
39905
|
* ```js
|
|
39925
|
-
* import {
|
|
39926
|
-
* const
|
|
39927
|
-
*
|
|
39906
|
+
* import { onLocalCommentReactionAdded } from '@amityco/ts-sdk'
|
|
39907
|
+
* const dispose = onLocalCommentReactionAdded(comment => {
|
|
39908
|
+
* // ...
|
|
39928
39909
|
* })
|
|
39929
39910
|
* ```
|
|
39930
39911
|
*
|
|
39931
|
-
*
|
|
39912
|
+
* Fired when a {@link Amity.InternalComment} has been reacted
|
|
39932
39913
|
*
|
|
39933
|
-
* @param
|
|
39934
|
-
* @
|
|
39935
|
-
* @returns the updated {@link Amity.Comment} object
|
|
39914
|
+
* @param callback The function to call when the event was fired
|
|
39915
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
39936
39916
|
*
|
|
39937
|
-
* @category Comment
|
|
39938
|
-
* @async
|
|
39917
|
+
* @category Comment Events
|
|
39939
39918
|
*/
|
|
39940
|
-
const
|
|
39941
|
-
const client = getActiveClient();
|
|
39942
|
-
client.log('user/updateComment', patch);
|
|
39943
|
-
const { data } = await client.http.put(`/api/v3/comments/${encodeURIComponent(commentId)}`, patch);
|
|
39944
|
-
const cachedAt = client.cache && Date.now();
|
|
39945
|
-
if (client.cache)
|
|
39946
|
-
ingestInCache(data, { cachedAt });
|
|
39947
|
-
fireEvent('comment.updated', data);
|
|
39948
|
-
const { comments } = data;
|
|
39949
|
-
return {
|
|
39950
|
-
data: LinkedObject.comment(comments.find(comment => comment.commentId === commentId)),
|
|
39951
|
-
cachedAt,
|
|
39952
|
-
};
|
|
39953
|
-
};
|
|
39954
|
-
/* end_public_function */
|
|
39955
|
-
|
|
39956
|
-
// Due to we have optimistic logic, we will use referenceId as a id in SDK instead of storyId
|
|
39957
|
-
const applyMissingField = (rawData, isCreated = false) => {
|
|
39958
|
-
const { storyId, referenceId } = rawData;
|
|
39959
|
-
if (!isCreated) {
|
|
39960
|
-
if (referenceId)
|
|
39961
|
-
return Object.assign(Object.assign({}, rawData), { syncState: "synced" /* Amity.SyncState.Synced */ });
|
|
39962
|
-
}
|
|
39963
|
-
return Object.assign(Object.assign({}, rawData), { syncState: "synced" /* Amity.SyncState.Synced */, referenceId: storyId });
|
|
39964
|
-
};
|
|
39965
|
-
const convertRawStoryToInternal = (data, isCreated = false) => {
|
|
39966
|
-
const { stories } = data;
|
|
39967
|
-
const storiesData = stories.map(story => applyMissingField(story, isCreated));
|
|
39968
|
-
return Object.assign(Object.assign({}, data), { stories: storiesData });
|
|
39969
|
-
};
|
|
39970
|
-
|
|
39971
|
-
const getStoryByStoryId$1 = async (storyId) => {
|
|
39919
|
+
const onLocalCommentReactionAdded = (callback) => {
|
|
39972
39920
|
const client = getActiveClient();
|
|
39973
|
-
|
|
39974
|
-
|
|
39975
|
-
|
|
39976
|
-
|
|
39977
|
-
|
|
39978
|
-
|
|
39979
|
-
|
|
39980
|
-
const { data: referenceId } = cacheReferenceId;
|
|
39981
|
-
isInTombstone('story', referenceId);
|
|
39982
|
-
}
|
|
39983
|
-
let data;
|
|
39984
|
-
try {
|
|
39985
|
-
const response = await client.http.get(`/api/v4/stories/${storyId}`);
|
|
39986
|
-
data = convertRawStoryToInternal(response.data);
|
|
39987
|
-
}
|
|
39988
|
-
catch (error) {
|
|
39989
|
-
if (checkIfShouldGoesToTombstone(error === null || error === void 0 ? void 0 : error.code)) {
|
|
39990
|
-
pushToTombstone('story', storyId);
|
|
39921
|
+
const filter = ({ comment }) => {
|
|
39922
|
+
if (!client.cache) {
|
|
39923
|
+
callback(comment);
|
|
39924
|
+
}
|
|
39925
|
+
else {
|
|
39926
|
+
upsertInCache(['comment', 'get', comment.commentId], comment);
|
|
39927
|
+
callback(commentLinkedObject(comment));
|
|
39991
39928
|
}
|
|
39992
|
-
throw error;
|
|
39993
|
-
}
|
|
39994
|
-
const cachedAt = client.cache && Date.now();
|
|
39995
|
-
if (client.cache) {
|
|
39996
|
-
ingestInCache(data, { cachedAt });
|
|
39997
|
-
}
|
|
39998
|
-
return {
|
|
39999
|
-
data: data.stories[0],
|
|
40000
|
-
cachedAt,
|
|
40001
|
-
};
|
|
40002
|
-
};
|
|
40003
|
-
getStoryByStoryId$1.locally = (storyId) => {
|
|
40004
|
-
const client = getActiveClient();
|
|
40005
|
-
client.log('story/getStorybyStoryId', storyId);
|
|
40006
|
-
// Get story referenceId from cache
|
|
40007
|
-
const cacheReferenceId = pullFromCache([
|
|
40008
|
-
"story-reference" /* STORY_KEY_CACHE.STORY_ID_TO_REFERENCE_ID */,
|
|
40009
|
-
storyId,
|
|
40010
|
-
]);
|
|
40011
|
-
if (cacheReferenceId === null || cacheReferenceId === void 0 ? void 0 : cacheReferenceId.data) {
|
|
40012
|
-
const { data: referenceId } = cacheReferenceId;
|
|
40013
|
-
isInTombstone('story', referenceId);
|
|
40014
|
-
}
|
|
40015
|
-
const cachedAt = client.cache && Date.now();
|
|
40016
|
-
const storyCache = pullFromCache(['story', 'get', storyId]);
|
|
40017
|
-
if (!storyCache)
|
|
40018
|
-
return;
|
|
40019
|
-
return {
|
|
40020
|
-
data: storyCache.data,
|
|
40021
|
-
cachedAt,
|
|
40022
39929
|
};
|
|
39930
|
+
return createEventSubscriber(client, 'local.comment.addReaction', 'local.comment.addReaction', filter);
|
|
40023
39931
|
};
|
|
40024
39932
|
|
|
40025
|
-
/* begin_public_function
|
|
40026
|
-
id: comment.soft_delete, comment.hard_delete
|
|
40027
|
-
*/
|
|
40028
39933
|
/**
|
|
40029
39934
|
* ```js
|
|
40030
|
-
* import {
|
|
40031
|
-
* const
|
|
39935
|
+
* import { onLocalCommentReactionRemoved } from '@amityco/ts-sdk'
|
|
39936
|
+
* const dispose = onLocalCommentReactionRemoved(comment => {
|
|
39937
|
+
* // ...
|
|
39938
|
+
* })
|
|
40032
39939
|
* ```
|
|
40033
39940
|
*
|
|
40034
|
-
*
|
|
39941
|
+
* Fired when a {@link Amity.InternalComment} has been reacted
|
|
40035
39942
|
*
|
|
40036
|
-
* @param
|
|
40037
|
-
* @
|
|
39943
|
+
* @param callback The function to call when the event was fired
|
|
39944
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
40038
39945
|
*
|
|
40039
|
-
* @category Comment
|
|
40040
|
-
* @async
|
|
39946
|
+
* @category Comment Events
|
|
40041
39947
|
*/
|
|
40042
|
-
const
|
|
40043
|
-
var _a;
|
|
39948
|
+
const onLocalCommentReactionRemoved = (callback) => {
|
|
40044
39949
|
const client = getActiveClient();
|
|
40045
|
-
const
|
|
40046
|
-
|
|
40047
|
-
|
|
40048
|
-
params: {
|
|
40049
|
-
commentId,
|
|
40050
|
-
permanent,
|
|
40051
|
-
},
|
|
40052
|
-
});
|
|
40053
|
-
// to support hard deletion
|
|
40054
|
-
const deleted = Object.assign(Object.assign({}, comment.data), { isDeleted: true });
|
|
40055
|
-
if (comment.data.referenceType === 'story') {
|
|
40056
|
-
const story = await getStoryByStoryId$1(comment.data.referenceId);
|
|
40057
|
-
fireEvent('local.story.updated', {
|
|
40058
|
-
stories: [story.data],
|
|
40059
|
-
categories: [],
|
|
40060
|
-
comments: [],
|
|
40061
|
-
communities: [],
|
|
40062
|
-
communityUsers: [],
|
|
40063
|
-
files: [],
|
|
40064
|
-
users: [],
|
|
40065
|
-
});
|
|
40066
|
-
}
|
|
40067
|
-
else {
|
|
40068
|
-
const post = (_a = pullFromCache(['post', 'get', comment.data.referenceId])) === null || _a === void 0 ? void 0 : _a.data;
|
|
40069
|
-
if (post) {
|
|
40070
|
-
let removeCount;
|
|
40071
|
-
if (!deleted.parentId) {
|
|
40072
|
-
// NOTE: delete the parent comment will remove all children comments
|
|
40073
|
-
removeCount = deleted.childrenNumber + 1;
|
|
40074
|
-
}
|
|
40075
|
-
else
|
|
40076
|
-
removeCount = 1;
|
|
40077
|
-
post.commentsCount -= removeCount;
|
|
40078
|
-
fireEvent('local.post.updated', {
|
|
40079
|
-
posts: [post],
|
|
40080
|
-
categories: [],
|
|
40081
|
-
comments: [],
|
|
40082
|
-
communities: [],
|
|
40083
|
-
communityUsers: [],
|
|
40084
|
-
feeds: [],
|
|
40085
|
-
files: [],
|
|
40086
|
-
postChildren: [],
|
|
40087
|
-
users: [],
|
|
40088
|
-
videoStreamings: [],
|
|
40089
|
-
});
|
|
39950
|
+
const filter = ({ comment }) => {
|
|
39951
|
+
if (!client.cache) {
|
|
39952
|
+
callback(comment);
|
|
40090
39953
|
}
|
|
40091
|
-
|
|
40092
|
-
|
|
40093
|
-
|
|
40094
|
-
|
|
40095
|
-
|
|
40096
|
-
|
|
40097
|
-
communityUsers: [],
|
|
40098
|
-
});
|
|
40099
|
-
if (permanent) {
|
|
40100
|
-
scheduleTask(() => pushToTombstone('comment', commentId));
|
|
40101
|
-
}
|
|
40102
|
-
else {
|
|
40103
|
-
upsertInCache(['comment', 'get', commentId], { isDeleted: true });
|
|
40104
|
-
}
|
|
40105
|
-
return deleted;
|
|
39954
|
+
else {
|
|
39955
|
+
upsertInCache(['comment', 'get', comment.commentId], comment);
|
|
39956
|
+
callback(commentLinkedObject(comment));
|
|
39957
|
+
}
|
|
39958
|
+
};
|
|
39959
|
+
return createEventSubscriber(client, 'local.comment.removeReaction', 'local.comment.removeReaction', filter);
|
|
40106
39960
|
};
|
|
40107
|
-
/* end_public_function */
|
|
40108
39961
|
|
|
40109
39962
|
/* begin_public_function
|
|
40110
|
-
id: comment.
|
|
39963
|
+
id: comment.get
|
|
40111
39964
|
*/
|
|
40112
39965
|
/**
|
|
40113
39966
|
* ```js
|
|
40114
|
-
* import { CommentRepository } from '@amityco/ts-sdk'
|
|
40115
|
-
*
|
|
39967
|
+
* import { CommentRepository } from '@amityco/ts-sdk';
|
|
39968
|
+
*
|
|
39969
|
+
* let comment;
|
|
39970
|
+
*
|
|
39971
|
+
* const unsub = CommentRepository.getComment(commentId, response => {
|
|
39972
|
+
* comment = response.data;
|
|
39973
|
+
* });
|
|
40116
39974
|
* ```
|
|
40117
39975
|
*
|
|
40118
|
-
*
|
|
39976
|
+
* Observe all mutation on a given {@link Amity.Comment}
|
|
40119
39977
|
*
|
|
40120
|
-
* @param commentId
|
|
40121
|
-
* @
|
|
39978
|
+
* @param commentId the ID of the comment to observe
|
|
39979
|
+
* @param callback the function to call when new data are available
|
|
39980
|
+
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the comment
|
|
40122
39981
|
*
|
|
40123
|
-
* @category Comment
|
|
40124
|
-
* @async
|
|
39982
|
+
* @category Comment Live Object
|
|
40125
39983
|
*/
|
|
40126
|
-
const
|
|
40127
|
-
|
|
40128
|
-
|
|
40129
|
-
|
|
40130
|
-
|
|
39984
|
+
const getComment = (commentId, callback) => {
|
|
39985
|
+
return liveObject(commentId, callback, 'commentId', getComment$1, [
|
|
39986
|
+
onCommentDeleteLocal,
|
|
39987
|
+
onCommentDeleted,
|
|
39988
|
+
onCommentFlagged,
|
|
39989
|
+
onCommentReactionAdded,
|
|
39990
|
+
onCommentReactionRemoved,
|
|
39991
|
+
onCommentUnflagged,
|
|
39992
|
+
onCommentUpdated,
|
|
39993
|
+
onLocalCommentReactionAdded,
|
|
39994
|
+
onLocalCommentReactionRemoved,
|
|
39995
|
+
]);
|
|
40131
39996
|
};
|
|
40132
39997
|
/* end_public_function */
|
|
40133
39998
|
|
|
40134
|
-
|
|
40135
|
-
|
|
40136
|
-
|
|
39999
|
+
class CommentPaginationController extends PaginationController {
|
|
40000
|
+
async getRequest(queryParams, token) {
|
|
40001
|
+
const { limit = COLLECTION_DEFAULT_PAGINATION_LIMIT, includeDeleted } = queryParams, params = __rest(queryParams, ["limit", "includeDeleted"]);
|
|
40002
|
+
const baseOptions = {
|
|
40003
|
+
type: params.sortBy || queryParams.limit ? 'pagination' : undefined,
|
|
40004
|
+
};
|
|
40005
|
+
const options = token ? Object.assign(Object.assign({}, baseOptions), { token }) : Object.assign(Object.assign({}, baseOptions), { limit });
|
|
40006
|
+
const { data: queryResponse } = await this.http.get(`/api/v3/comments`, {
|
|
40007
|
+
params: Object.assign(Object.assign({}, params), { isDeleted: inferIsDeleted(includeDeleted), options }),
|
|
40008
|
+
});
|
|
40009
|
+
return queryResponse;
|
|
40010
|
+
}
|
|
40011
|
+
}
|
|
40012
|
+
|
|
40013
|
+
var EnumCommentActions;
|
|
40014
|
+
(function (EnumCommentActions) {
|
|
40015
|
+
EnumCommentActions["OnCommentCreated"] = "onCommentCreated";
|
|
40016
|
+
EnumCommentActions["OnCommentUpdated"] = "onCommentUpdated";
|
|
40017
|
+
EnumCommentActions["OnCommentDeleted"] = "onCommentDeleted";
|
|
40018
|
+
EnumCommentActions["OnCommentFlagged"] = "onCommentFlagged";
|
|
40019
|
+
EnumCommentActions["OnCommentUnflagged"] = "onCommentUnflagged";
|
|
40020
|
+
EnumCommentActions["OnCommentReactionAdded"] = "onCommentReactionAdded";
|
|
40021
|
+
EnumCommentActions["OnCommentReactionRemoved"] = "onCommentReactionRemoved";
|
|
40022
|
+
})(EnumCommentActions || (EnumCommentActions = {}));
|
|
40023
|
+
|
|
40024
|
+
class CommentQueryStreamController extends QueryStreamController {
|
|
40025
|
+
constructor(query, cacheKey, notifyChange, preparePayload) {
|
|
40026
|
+
super(query, cacheKey);
|
|
40027
|
+
this.notifyChange = notifyChange;
|
|
40028
|
+
this.preparePayload = preparePayload;
|
|
40029
|
+
}
|
|
40030
|
+
async saveToMainDB(response) {
|
|
40031
|
+
const processedPayload = await this.preparePayload(response);
|
|
40032
|
+
const client = getActiveClient();
|
|
40033
|
+
const cachedAt = client.cache && Date.now();
|
|
40034
|
+
if (client.cache) {
|
|
40035
|
+
ingestInCache(processedPayload, { cachedAt });
|
|
40036
|
+
}
|
|
40037
|
+
}
|
|
40038
|
+
appendToQueryStream(response, direction, refresh = false) {
|
|
40039
|
+
var _a, _b;
|
|
40040
|
+
if (refresh) {
|
|
40041
|
+
pushToCache(this.cacheKey, {
|
|
40042
|
+
data: response.comments.map(getResolver('comment')),
|
|
40043
|
+
});
|
|
40044
|
+
}
|
|
40045
|
+
else {
|
|
40046
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
40047
|
+
const comments = (_b = collection === null || collection === void 0 ? void 0 : collection.data) !== null && _b !== void 0 ? _b : [];
|
|
40048
|
+
pushToCache(this.cacheKey, Object.assign(Object.assign({}, collection), { data: [...new Set([...comments, ...response.comments.map(getResolver('comment'))])] }));
|
|
40049
|
+
}
|
|
40050
|
+
}
|
|
40051
|
+
reactor(action) {
|
|
40052
|
+
return (comment) => {
|
|
40053
|
+
var _a;
|
|
40054
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
40055
|
+
if (this.query.referenceId !== comment.referenceId ||
|
|
40056
|
+
this.query.referenceType !== comment.referenceType ||
|
|
40057
|
+
!collection) {
|
|
40058
|
+
return;
|
|
40059
|
+
}
|
|
40060
|
+
if (this.query.parentId && this.query.parentId !== comment.parentId) {
|
|
40061
|
+
return;
|
|
40062
|
+
}
|
|
40063
|
+
if (!this.query.parentId && comment.parentId) {
|
|
40064
|
+
return;
|
|
40065
|
+
}
|
|
40066
|
+
if (action === EnumCommentActions.OnCommentCreated) {
|
|
40067
|
+
collection.data = [...new Set([comment.commentId, ...collection.data])];
|
|
40068
|
+
}
|
|
40069
|
+
pushToCache(this.cacheKey, collection);
|
|
40070
|
+
this.notifyChange({ origin: "event" /* Amity.LiveDataOrigin.EVENT */, loading: false });
|
|
40071
|
+
};
|
|
40072
|
+
}
|
|
40073
|
+
subscribeRTE(createSubscriber) {
|
|
40074
|
+
return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
|
|
40075
|
+
}
|
|
40076
|
+
}
|
|
40077
|
+
|
|
40137
40078
|
/**
|
|
40138
40079
|
* ```js
|
|
40139
|
-
* import {
|
|
40140
|
-
* const
|
|
40080
|
+
* import { onCommentCreated } from '@amityco/ts-sdk'
|
|
40081
|
+
* const dispose = onCommentCreated(comment => {
|
|
40082
|
+
* // ...
|
|
40083
|
+
* })
|
|
40141
40084
|
* ```
|
|
40142
40085
|
*
|
|
40143
|
-
*
|
|
40086
|
+
* Fired when a {@link Amity.InternalComment} has been created
|
|
40144
40087
|
*
|
|
40145
|
-
* @param
|
|
40146
|
-
* @
|
|
40088
|
+
* @param callback The function to call when the event was fired
|
|
40089
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
40147
40090
|
*
|
|
40148
|
-
* @category Comment
|
|
40149
|
-
* @async
|
|
40091
|
+
* @category Comment Events
|
|
40150
40092
|
*/
|
|
40151
|
-
const
|
|
40152
|
-
|
|
40153
|
-
client.log('comment/hardDeleteComment', commentId);
|
|
40154
|
-
const hardDeleted = deleteComment(commentId, true);
|
|
40155
|
-
return hardDeleted;
|
|
40093
|
+
const onCommentCreatedLocal = (callback) => {
|
|
40094
|
+
return createLocalCommentEventSubscriber('local.comment.created', callback);
|
|
40156
40095
|
};
|
|
40157
|
-
/* end_public_function */
|
|
40158
40096
|
|
|
40159
|
-
|
|
40160
|
-
|
|
40161
|
-
|
|
40162
|
-
|
|
40163
|
-
|
|
40164
|
-
|
|
40165
|
-
|
|
40166
|
-
|
|
40167
|
-
|
|
40168
|
-
|
|
40169
|
-
* @param reason the reason to flag the comment
|
|
40170
|
-
* @returns the created report result
|
|
40171
|
-
*
|
|
40172
|
-
* @category Comment API
|
|
40173
|
-
* @async
|
|
40174
|
-
* */
|
|
40175
|
-
const flagComment = async (commentId, reason) => {
|
|
40176
|
-
const client = getActiveClient();
|
|
40177
|
-
client.log('comment/flagComment', commentId);
|
|
40178
|
-
const isPredefinedReason = reason &&
|
|
40179
|
-
Object.entries(ContentFlagReasonEnum).some(([key, value]) => key !== ContentFlagReasonEnum.Others && value === reason);
|
|
40180
|
-
const body = {
|
|
40181
|
-
reason: reason && isPredefinedReason ? reason : ContentFlagReasonEnum.Others,
|
|
40182
|
-
detail: reason && !isPredefinedReason ? reason : '',
|
|
40183
|
-
};
|
|
40184
|
-
const { data: payload } = await client.http.post(`/api/v3/comments/${encodeURIComponent(commentId)}/flag`, body);
|
|
40185
|
-
if (client.cache) {
|
|
40186
|
-
ingestInCache(payload);
|
|
40097
|
+
class CommentLiveCollectionController extends LiveCollectionController {
|
|
40098
|
+
constructor(query, callback) {
|
|
40099
|
+
const queryStreamId = hash(query);
|
|
40100
|
+
const cacheKey = ['comments', 'collection', queryStreamId];
|
|
40101
|
+
const paginationController = new CommentPaginationController(query);
|
|
40102
|
+
super(paginationController, queryStreamId, cacheKey, callback);
|
|
40103
|
+
this.query = query;
|
|
40104
|
+
this.queryStreamController = new CommentQueryStreamController(this.query, this.cacheKey, this.notifyChange.bind(this), prepareCommentPayload);
|
|
40105
|
+
this.callback = callback.bind(this);
|
|
40106
|
+
this.loadPage({ initial: true });
|
|
40187
40107
|
}
|
|
40188
|
-
|
|
40189
|
-
|
|
40190
|
-
|
|
40191
|
-
|
|
40108
|
+
setup() {
|
|
40109
|
+
var _a;
|
|
40110
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
40111
|
+
if (!collection) {
|
|
40112
|
+
pushToCache(this.cacheKey, {
|
|
40113
|
+
data: [],
|
|
40114
|
+
params: {},
|
|
40115
|
+
});
|
|
40116
|
+
}
|
|
40117
|
+
}
|
|
40118
|
+
async persistModel(queryPayload) {
|
|
40119
|
+
await this.queryStreamController.saveToMainDB(queryPayload);
|
|
40120
|
+
}
|
|
40121
|
+
persistQueryStream({ response, direction, refresh, }) {
|
|
40122
|
+
this.queryStreamController.appendToQueryStream(response, direction, refresh);
|
|
40123
|
+
}
|
|
40124
|
+
startSubscription() {
|
|
40125
|
+
return this.queryStreamController.subscribeRTE([
|
|
40126
|
+
{ fn: onCommentCreatedLocal, action: EnumCommentActions.OnCommentCreated },
|
|
40127
|
+
{ fn: onCommentDeleteLocal, action: EnumCommentActions.OnCommentDeleted },
|
|
40128
|
+
{ fn: onCommentCreated, action: EnumCommentActions.OnCommentCreated },
|
|
40129
|
+
{ fn: onCommentUpdated, action: EnumCommentActions.OnCommentUpdated },
|
|
40130
|
+
{ fn: onCommentDeleted, action: EnumCommentActions.OnCommentDeleted },
|
|
40131
|
+
{ fn: onCommentFlagged, action: EnumCommentActions.OnCommentFlagged },
|
|
40132
|
+
{ fn: onCommentUnflagged, action: EnumCommentActions.OnCommentUnflagged },
|
|
40133
|
+
{ fn: onCommentReactionAdded, action: EnumCommentActions.OnCommentReactionAdded },
|
|
40134
|
+
{ fn: onCommentReactionRemoved, action: EnumCommentActions.OnCommentReactionRemoved },
|
|
40135
|
+
{ fn: onLocalCommentReactionAdded, action: EnumCommentActions.OnCommentReactionAdded },
|
|
40136
|
+
{ fn: onLocalCommentReactionRemoved, action: EnumCommentActions.OnCommentReactionRemoved },
|
|
40137
|
+
]);
|
|
40138
|
+
}
|
|
40139
|
+
notifyChange({ origin, loading, error }) {
|
|
40140
|
+
var _a, _b;
|
|
40141
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
40142
|
+
if (!collection)
|
|
40143
|
+
return;
|
|
40144
|
+
const data = this.applyFilter((_b = collection.data
|
|
40145
|
+
.map(id => pullFromCache(['comment', 'get', id]))
|
|
40146
|
+
.filter(isNonNullable)
|
|
40147
|
+
.map(({ data }) => data)) !== null && _b !== void 0 ? _b : []).map(LinkedObject.comment);
|
|
40148
|
+
if (!this.shouldNotify(data) && origin === 'event')
|
|
40149
|
+
return;
|
|
40150
|
+
this.callback({
|
|
40151
|
+
onNextPage: () => this.loadPage({ direction: "next" /* Amity.LiveCollectionPageDirection.NEXT */ }),
|
|
40152
|
+
data,
|
|
40153
|
+
hasNextPage: !!this.paginationController.getNextToken(),
|
|
40154
|
+
loading,
|
|
40155
|
+
error,
|
|
40156
|
+
});
|
|
40157
|
+
}
|
|
40158
|
+
applyFilter(data) {
|
|
40159
|
+
let comments = data;
|
|
40160
|
+
if (!this.query.includeDeleted) {
|
|
40161
|
+
comments = filterByPropEquality(comments, 'isDeleted', false);
|
|
40162
|
+
}
|
|
40163
|
+
if (this.query.parentId) {
|
|
40164
|
+
comments = comments.filter(comment => comment.parentId === this.query.parentId);
|
|
40165
|
+
}
|
|
40166
|
+
if (typeof this.query.hasFlag === 'boolean') {
|
|
40167
|
+
if (this.query.hasFlag) {
|
|
40168
|
+
comments = comments.filter(comment => comment.hashFlag != null);
|
|
40169
|
+
}
|
|
40170
|
+
else {
|
|
40171
|
+
comments = comments.filter(comment => comment.hashFlag == null);
|
|
40172
|
+
}
|
|
40173
|
+
}
|
|
40174
|
+
if (this.query.dataTypes) {
|
|
40175
|
+
if (this.query.dataTypes.matchType === 'exact') {
|
|
40176
|
+
comments = comments.filter(comment => {
|
|
40177
|
+
var _a, _b;
|
|
40178
|
+
const sortedDataTypesQueryValue = ((_a = this.query.dataTypes) === null || _a === void 0 ? void 0 : _a.values.sort()) || [];
|
|
40179
|
+
const sortedDataTypesCommentValue = ((_b = comment.dataTypes) === null || _b === void 0 ? void 0 : _b.sort()) || [];
|
|
40180
|
+
if (sortedDataTypesCommentValue.length !== sortedDataTypesQueryValue.length) {
|
|
40181
|
+
return false;
|
|
40182
|
+
}
|
|
40183
|
+
return sortedDataTypesQueryValue.every((value, index) => value === sortedDataTypesCommentValue[index]);
|
|
40184
|
+
});
|
|
40185
|
+
}
|
|
40186
|
+
if (this.query.dataTypes.matchType === 'any') {
|
|
40187
|
+
comments = comments.filter(comment => { var _a; return (_a = this.query.dataTypes) === null || _a === void 0 ? void 0 : _a.values.some(value => { var _a; return (_a = comment.dataTypes) === null || _a === void 0 ? void 0 : _a.includes(value); }); });
|
|
40188
|
+
}
|
|
40189
|
+
}
|
|
40190
|
+
switch (this.query.sortBy) {
|
|
40191
|
+
case 'firstCreated':
|
|
40192
|
+
comments = comments.sort(sortByFirstCreated);
|
|
40193
|
+
break;
|
|
40194
|
+
case 'lastCreated':
|
|
40195
|
+
default:
|
|
40196
|
+
comments = comments.sort(sortByLastCreated);
|
|
40197
|
+
break;
|
|
40198
|
+
}
|
|
40199
|
+
return comments;
|
|
40200
|
+
}
|
|
40201
|
+
}
|
|
40192
40202
|
|
|
40193
40203
|
/* begin_public_function
|
|
40194
|
-
id: comment.
|
|
40204
|
+
id: comment.query
|
|
40195
40205
|
*/
|
|
40196
40206
|
/**
|
|
40197
40207
|
* ```js
|
|
40198
|
-
* import {
|
|
40199
|
-
*
|
|
40208
|
+
* import { getComments } from '@amityco/ts-sdk'
|
|
40209
|
+
*
|
|
40210
|
+
* let comments = []
|
|
40211
|
+
* const unsub = getComments({
|
|
40212
|
+
* referenceType: Amity.InternalComment['referenceType'];
|
|
40213
|
+
* referenceId: Amity.InternalComment['referenceId'];
|
|
40214
|
+
* }, response => merge(comments, response.data))
|
|
40200
40215
|
* ```
|
|
40201
40216
|
*
|
|
40202
|
-
*
|
|
40203
|
-
* @returns the unflagged result
|
|
40217
|
+
* Observe all mutations on a list of {@link Amity.InternalComment} for a given target object
|
|
40204
40218
|
*
|
|
40205
|
-
* @
|
|
40206
|
-
* @
|
|
40207
|
-
*
|
|
40208
|
-
|
|
40209
|
-
|
|
40210
|
-
|
|
40211
|
-
|
|
40212
|
-
|
|
40213
|
-
|
|
40219
|
+
* @param referenceType the type of the target
|
|
40220
|
+
* @param referenceId the ID of the target
|
|
40221
|
+
* @param callback the function to call when new data are available
|
|
40222
|
+
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
|
|
40223
|
+
*
|
|
40224
|
+
* @category Comments Live Collection
|
|
40225
|
+
*/
|
|
40226
|
+
const getComments = (params, callback, config) => {
|
|
40227
|
+
const { log, cache } = getActiveClient();
|
|
40228
|
+
if (!cache) {
|
|
40229
|
+
console.log('For using Live Collection feature you need to enable Cache!');
|
|
40214
40230
|
}
|
|
40215
|
-
|
|
40216
|
-
|
|
40231
|
+
const timestamp = Date.now();
|
|
40232
|
+
log(`getComments(tmpid: ${timestamp}) > listen`);
|
|
40233
|
+
const commentsLiveCollection = new CommentLiveCollectionController(params, callback);
|
|
40234
|
+
const disposers = commentsLiveCollection.startSubscription();
|
|
40235
|
+
const cacheKey = commentsLiveCollection.getCacheKey();
|
|
40236
|
+
disposers.push(() => dropFromCache(cacheKey));
|
|
40237
|
+
return () => {
|
|
40238
|
+
log(`getComments(tmpid: ${timestamp}) > dispose`);
|
|
40239
|
+
disposers.forEach(fn => fn());
|
|
40240
|
+
};
|
|
40217
40241
|
};
|
|
40218
40242
|
/* end_public_function */
|
|
40219
40243
|
|
|
40220
|
-
|
|
40221
|
-
|
|
40222
|
-
|
|
40223
|
-
|
|
40224
|
-
|
|
40225
|
-
|
|
40226
|
-
|
|
40227
|
-
|
|
40228
|
-
|
|
40229
|
-
|
|
40230
|
-
|
|
40231
|
-
|
|
40232
|
-
|
|
40233
|
-
|
|
40234
|
-
|
|
40235
|
-
|
|
40236
|
-
|
|
40237
|
-
|
|
40238
|
-
|
|
40239
|
-
|
|
40240
|
-
};
|
|
40241
|
-
/* end_public_function */
|
|
40244
|
+
var index$a = /*#__PURE__*/Object.freeze({
|
|
40245
|
+
__proto__: null,
|
|
40246
|
+
getCommentByIds: getCommentByIds,
|
|
40247
|
+
createComment: createComment,
|
|
40248
|
+
updateComment: updateComment,
|
|
40249
|
+
deleteComment: deleteComment,
|
|
40250
|
+
softDeleteComment: softDeleteComment,
|
|
40251
|
+
hardDeleteComment: hardDeleteComment,
|
|
40252
|
+
flagComment: flagComment,
|
|
40253
|
+
unflagComment: unflagComment,
|
|
40254
|
+
isCommentFlaggedByMe: isCommentFlaggedByMe,
|
|
40255
|
+
onCommentCreated: onCommentCreated,
|
|
40256
|
+
onCommentUpdated: onCommentUpdated,
|
|
40257
|
+
onCommentDeleted: onCommentDeleted,
|
|
40258
|
+
onCommentFlagged: onCommentFlagged,
|
|
40259
|
+
onCommentUnflagged: onCommentUnflagged,
|
|
40260
|
+
onCommentReactionAdded: onCommentReactionAdded,
|
|
40261
|
+
onCommentReactionRemoved: onCommentReactionRemoved,
|
|
40262
|
+
getComment: getComment,
|
|
40263
|
+
getComments: getComments
|
|
40264
|
+
});
|
|
40242
40265
|
|
|
40243
|
-
const
|
|
40266
|
+
const getPost$1 = async (postId) => {
|
|
40244
40267
|
const client = getActiveClient();
|
|
40245
|
-
client.log('
|
|
40246
|
-
isInTombstone('
|
|
40247
|
-
let
|
|
40268
|
+
client.log('post/getPost', postId);
|
|
40269
|
+
isInTombstone('post', postId);
|
|
40270
|
+
let payload;
|
|
40248
40271
|
try {
|
|
40249
40272
|
// API-FIX: endpoint should not be /list, parameters should be querystring.
|
|
40250
|
-
const response = await client.http.get(`/api/v3/
|
|
40251
|
-
|
|
40273
|
+
const response = await client.http.get(`/api/v3/posts/${encodeURIComponent(postId)}`);
|
|
40274
|
+
payload = response.data;
|
|
40252
40275
|
}
|
|
40253
40276
|
catch (error) {
|
|
40254
40277
|
if (checkIfShouldGoesToTombstone(error === null || error === void 0 ? void 0 : error.code)) {
|
|
40255
|
-
pushToTombstone('
|
|
40278
|
+
pushToTombstone('post', postId);
|
|
40256
40279
|
}
|
|
40257
40280
|
throw error;
|
|
40258
40281
|
}
|
|
40282
|
+
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
40259
40283
|
const cachedAt = client.cache && Date.now();
|
|
40260
40284
|
if (client.cache)
|
|
40261
40285
|
ingestInCache(data, { cachedAt });
|
|
40262
|
-
const {
|
|
40286
|
+
const { posts } = data;
|
|
40287
|
+
const result = posts.find(post => post.postId === postId);
|
|
40263
40288
|
return {
|
|
40264
|
-
data:
|
|
40289
|
+
data: result,
|
|
40265
40290
|
cachedAt,
|
|
40266
40291
|
};
|
|
40267
40292
|
};
|
|
40268
|
-
|
|
40293
|
+
getPost$1.locally = (postId) => {
|
|
40269
40294
|
const client = getActiveClient();
|
|
40270
|
-
client.log('
|
|
40295
|
+
client.log('post/getPost.locally', postId);
|
|
40271
40296
|
if (!client.cache)
|
|
40272
40297
|
return;
|
|
40273
|
-
const cached = pullFromCache(['
|
|
40298
|
+
const cached = pullFromCache(['post', 'get', postId]);
|
|
40274
40299
|
if (!cached)
|
|
40275
40300
|
return;
|
|
40276
40301
|
return {
|
|
@@ -40281,474 +40306,740 @@ getComment$1.locally = (commentId) => {
|
|
|
40281
40306
|
|
|
40282
40307
|
/**
|
|
40283
40308
|
* ```js
|
|
40284
|
-
* import {
|
|
40285
|
-
* const dispose =
|
|
40309
|
+
* import { onPostUpdatedLocal } from '@amityco/ts-sdk'
|
|
40310
|
+
* const dispose = onPostUpdatedLocal(post => {
|
|
40286
40311
|
* // ...
|
|
40287
40312
|
* })
|
|
40288
40313
|
* ```
|
|
40289
40314
|
*
|
|
40290
|
-
* Fired when a {@link Amity.
|
|
40315
|
+
* Fired when a {@link Amity.InternalPost} has been updated
|
|
40291
40316
|
*
|
|
40292
40317
|
* @param callback The function to call when the event was fired
|
|
40293
40318
|
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
40294
40319
|
*
|
|
40295
|
-
* @category
|
|
40320
|
+
* @category Post Events
|
|
40296
40321
|
*/
|
|
40297
|
-
const
|
|
40322
|
+
const onPostUpdatedLocal = (callback) => createLocalPostEventSubscriber('local.post.updated', callback);
|
|
40298
40323
|
|
|
40299
40324
|
/**
|
|
40300
40325
|
* ```js
|
|
40301
|
-
* import {
|
|
40302
|
-
* const dispose =
|
|
40326
|
+
* import { onLocalPostReactionAdded } from '@amityco/ts-sdk'
|
|
40327
|
+
* const dispose = onPostReactionAdded(post => {
|
|
40303
40328
|
* // ...
|
|
40304
40329
|
* })
|
|
40305
40330
|
* ```
|
|
40306
40331
|
*
|
|
40307
|
-
* Fired when a {@link Amity.
|
|
40332
|
+
* Fired when a {@link Amity.InternalPost} has been reacted
|
|
40308
40333
|
*
|
|
40309
40334
|
* @param callback The function to call when the event was fired
|
|
40310
40335
|
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
40311
40336
|
*
|
|
40312
|
-
* @category
|
|
40337
|
+
* @category Post Events
|
|
40313
40338
|
*/
|
|
40314
|
-
const
|
|
40339
|
+
const onLocalPostReactionAdded = (callback) => {
|
|
40315
40340
|
const client = getActiveClient();
|
|
40316
|
-
const filter = ({
|
|
40341
|
+
const filter = ({ post }) => {
|
|
40317
40342
|
if (!client.cache) {
|
|
40318
|
-
callback(
|
|
40343
|
+
callback(post);
|
|
40319
40344
|
}
|
|
40320
40345
|
else {
|
|
40321
|
-
upsertInCache(['
|
|
40322
|
-
callback(
|
|
40346
|
+
upsertInCache(['post', 'get', post.postId], post);
|
|
40347
|
+
callback(post);
|
|
40323
40348
|
}
|
|
40324
40349
|
};
|
|
40325
|
-
return createEventSubscriber(client, 'local.
|
|
40350
|
+
return createEventSubscriber(client, 'local.post.addReaction', 'local.post.addReaction', filter);
|
|
40326
40351
|
};
|
|
40327
40352
|
|
|
40328
40353
|
/**
|
|
40329
40354
|
* ```js
|
|
40330
|
-
* import {
|
|
40331
|
-
* const dispose =
|
|
40355
|
+
* import { onLocalPostReactionRemoved } from '@amityco/ts-sdk'
|
|
40356
|
+
* const dispose = onPostReactionRemoved(post => {
|
|
40332
40357
|
* // ...
|
|
40333
40358
|
* })
|
|
40334
40359
|
* ```
|
|
40335
40360
|
*
|
|
40336
|
-
* Fired when a {@link Amity.
|
|
40361
|
+
* Fired when a {@link Amity.InternalPost} has been reacted
|
|
40337
40362
|
*
|
|
40338
40363
|
* @param callback The function to call when the event was fired
|
|
40339
40364
|
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
40340
40365
|
*
|
|
40341
|
-
* @category
|
|
40366
|
+
* @category Post Events
|
|
40342
40367
|
*/
|
|
40343
|
-
const
|
|
40368
|
+
const onLocalPostReactionRemoved = (callback) => {
|
|
40344
40369
|
const client = getActiveClient();
|
|
40345
|
-
const filter = ({
|
|
40370
|
+
const filter = ({ post }) => {
|
|
40346
40371
|
if (!client.cache) {
|
|
40347
|
-
callback(
|
|
40372
|
+
callback(post);
|
|
40348
40373
|
}
|
|
40349
40374
|
else {
|
|
40350
|
-
upsertInCache(['
|
|
40351
|
-
callback(
|
|
40375
|
+
upsertInCache(['post', 'get', post.postId], post);
|
|
40376
|
+
callback(post);
|
|
40352
40377
|
}
|
|
40353
40378
|
};
|
|
40354
|
-
return createEventSubscriber(client, 'local.
|
|
40379
|
+
return createEventSubscriber(client, 'local.post.removeReaction', 'local.post.removeReaction', filter);
|
|
40355
40380
|
};
|
|
40356
40381
|
|
|
40382
|
+
/**
|
|
40383
|
+
* ```js
|
|
40384
|
+
* import { onLocalPostDeleted } from '@amityco/ts-sdk'
|
|
40385
|
+
* const dispose = onLocalPostDeleted(post => {
|
|
40386
|
+
* // ...
|
|
40387
|
+
* })
|
|
40388
|
+
* ```
|
|
40389
|
+
*
|
|
40390
|
+
* Fired when a {@link Amity.InternalPost} has been deleted
|
|
40391
|
+
*
|
|
40392
|
+
* @param callback The function to call when the event was fired
|
|
40393
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
40394
|
+
*
|
|
40395
|
+
* @category Post Events
|
|
40396
|
+
*/
|
|
40397
|
+
const onLocalPostDeleted = (callback) => createLocalPostEventSubscriber('local.post.deleted', callback);
|
|
40398
|
+
|
|
40399
|
+
class UserFeedLiveCollectionController extends LiveCollectionController {
|
|
40400
|
+
constructor(query, callback) {
|
|
40401
|
+
const queryStreamId = hash(query);
|
|
40402
|
+
const cacheKey = ['userFeed', 'collection', queryStreamId];
|
|
40403
|
+
const paginationController = new UserFeedPaginationController(query);
|
|
40404
|
+
super(paginationController, queryStreamId, cacheKey, callback);
|
|
40405
|
+
this.query = query;
|
|
40406
|
+
this.queryStreamController = new UserFeedQueryStreamController(this.query, this.cacheKey, this.notifyChange.bind(this), preparePostPayload);
|
|
40407
|
+
this.callback = callback.bind(this);
|
|
40408
|
+
this.loadPage({ initial: true });
|
|
40409
|
+
}
|
|
40410
|
+
setup() {
|
|
40411
|
+
var _a;
|
|
40412
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
40413
|
+
if (!collection) {
|
|
40414
|
+
pushToCache(this.cacheKey, {
|
|
40415
|
+
data: [],
|
|
40416
|
+
params: {},
|
|
40417
|
+
});
|
|
40418
|
+
}
|
|
40419
|
+
}
|
|
40420
|
+
async persistModel(queryPayload) {
|
|
40421
|
+
await this.queryStreamController.saveToMainDB(queryPayload);
|
|
40422
|
+
}
|
|
40423
|
+
persistQueryStream({ response, direction, refresh, }) {
|
|
40424
|
+
this.queryStreamController.appendToQueryStream(response, direction, refresh);
|
|
40425
|
+
}
|
|
40426
|
+
startSubscription() {
|
|
40427
|
+
return this.queryStreamController.subscribeRTE([
|
|
40428
|
+
{ fn: onPostCreated, action: EnumPostActions.OnPostCreated },
|
|
40429
|
+
{ fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },
|
|
40430
|
+
{ fn: onPostUpdatedLocal, action: EnumPostActions.OnPostUpdated },
|
|
40431
|
+
{ fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },
|
|
40432
|
+
{ fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },
|
|
40433
|
+
{ fn: onPostUnflagged, action: EnumPostActions.OnPostUnflagged },
|
|
40434
|
+
{ fn: onPostApproved, action: EnumPostActions.OnPostApproved },
|
|
40435
|
+
{ fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },
|
|
40436
|
+
{ fn: onPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
|
|
40437
|
+
{ fn: onPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
|
|
40438
|
+
{ fn: onLocalPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
|
|
40439
|
+
{ fn: onLocalPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
|
|
40440
|
+
{ fn: onLocalPostDeleted, action: EnumPostActions.OnPostDeleted },
|
|
40441
|
+
{
|
|
40442
|
+
fn: convertEventPayload((callback) => {
|
|
40443
|
+
return onCommentCreated(async (comment) => {
|
|
40444
|
+
var _a;
|
|
40445
|
+
const currentCollection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
40446
|
+
if (!currentCollection || currentCollection.data.includes(comment.referenceId))
|
|
40447
|
+
return;
|
|
40448
|
+
await getPost$1(comment.referenceId);
|
|
40449
|
+
callback(comment);
|
|
40450
|
+
});
|
|
40451
|
+
}, 'referenceId', 'post'),
|
|
40452
|
+
action: EnumPostActions.OnPostUpdated,
|
|
40453
|
+
},
|
|
40454
|
+
{
|
|
40455
|
+
fn: convertEventPayload((callback) => {
|
|
40456
|
+
return onCommentDeleted(async (comment) => {
|
|
40457
|
+
var _a;
|
|
40458
|
+
const currentCollection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
40459
|
+
if (!currentCollection || currentCollection.data.includes(comment.referenceId))
|
|
40460
|
+
return;
|
|
40461
|
+
await getPost$1(comment.referenceId);
|
|
40462
|
+
callback(comment);
|
|
40463
|
+
});
|
|
40464
|
+
}, 'referenceId', 'post'),
|
|
40465
|
+
action: EnumPostActions.OnPostUpdated,
|
|
40466
|
+
},
|
|
40467
|
+
]);
|
|
40468
|
+
}
|
|
40469
|
+
notifyChange({ origin, loading, error }) {
|
|
40470
|
+
var _a, _b;
|
|
40471
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
40472
|
+
if (!collection)
|
|
40473
|
+
return;
|
|
40474
|
+
const data = this.applyFilter((_b = collection.data
|
|
40475
|
+
.map(id => pullFromCache(['post', 'get', id]))
|
|
40476
|
+
.filter(isNonNullable)
|
|
40477
|
+
.map(({ data }) => data)) !== null && _b !== void 0 ? _b : []).map(LinkedObject.post);
|
|
40478
|
+
if (!this.shouldNotify(data) && origin === 'event')
|
|
40479
|
+
return;
|
|
40480
|
+
this.callback({
|
|
40481
|
+
onNextPage: () => this.loadPage({ direction: "next" /* Amity.LiveCollectionPageDirection.NEXT */ }),
|
|
40482
|
+
data,
|
|
40483
|
+
hasNextPage: !!this.paginationController.getNextToken(),
|
|
40484
|
+
loading,
|
|
40485
|
+
error,
|
|
40486
|
+
});
|
|
40487
|
+
}
|
|
40488
|
+
applyFilter(data) {
|
|
40489
|
+
var _a;
|
|
40490
|
+
let posts = data;
|
|
40491
|
+
if (!this.query.includeDeleted) {
|
|
40492
|
+
posts = filterByPropEquality(posts, 'isDeleted', false);
|
|
40493
|
+
}
|
|
40494
|
+
if ((_a = this.query.dataTypes) === null || _a === void 0 ? void 0 : _a.length) {
|
|
40495
|
+
posts = filterByPostDataTypes(posts, this.query.dataTypes);
|
|
40496
|
+
}
|
|
40497
|
+
switch (this.query.sortBy) {
|
|
40498
|
+
case 'firstCreated':
|
|
40499
|
+
posts = posts.sort(sortByFirstCreated);
|
|
40500
|
+
break;
|
|
40501
|
+
case 'lastCreated':
|
|
40502
|
+
default:
|
|
40503
|
+
posts = posts.sort(sortByLastCreated);
|
|
40504
|
+
break;
|
|
40505
|
+
}
|
|
40506
|
+
return posts;
|
|
40507
|
+
}
|
|
40508
|
+
}
|
|
40509
|
+
|
|
40357
40510
|
/* begin_public_function
|
|
40358
|
-
id:
|
|
40511
|
+
id: feed.query.user_feed
|
|
40359
40512
|
*/
|
|
40360
40513
|
/**
|
|
40361
40514
|
* ```js
|
|
40362
|
-
* import {
|
|
40363
|
-
*
|
|
40364
|
-
* let comment;
|
|
40515
|
+
* import { FeedRepository } from '@amityco/ts-sdk'
|
|
40365
40516
|
*
|
|
40366
|
-
*
|
|
40367
|
-
*
|
|
40368
|
-
*
|
|
40517
|
+
* let posts = []
|
|
40518
|
+
* const unsubscribe = FeedRepository.getUserFeed({
|
|
40519
|
+
* userId: string,
|
|
40520
|
+
* feedSources: ['user', 'community'],
|
|
40521
|
+
* }, response => response => processResponse(response))
|
|
40369
40522
|
* ```
|
|
40370
40523
|
*
|
|
40371
|
-
* Observe all
|
|
40524
|
+
* Observe all mutations on a list of {@link Amity.Post} for a given user and feedSources
|
|
40372
40525
|
*
|
|
40373
|
-
* @param
|
|
40526
|
+
* @param params.userId the ID of the user
|
|
40527
|
+
* @param params.feedSources the sources of the feed
|
|
40374
40528
|
* @param callback the function to call when new data are available
|
|
40375
|
-
* @
|
|
40529
|
+
* @param config
|
|
40530
|
+
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
|
|
40376
40531
|
*
|
|
40377
|
-
* @category
|
|
40532
|
+
* @category Posts Live Collection
|
|
40378
40533
|
*/
|
|
40379
|
-
const
|
|
40380
|
-
|
|
40381
|
-
|
|
40382
|
-
|
|
40383
|
-
|
|
40384
|
-
|
|
40385
|
-
|
|
40386
|
-
|
|
40387
|
-
|
|
40388
|
-
|
|
40389
|
-
|
|
40390
|
-
|
|
40534
|
+
const getUserFeed = (params, callback, config) => {
|
|
40535
|
+
const { log, cache } = getActiveClient();
|
|
40536
|
+
if (!cache) {
|
|
40537
|
+
console.log(ENABLE_CACHE_MESSAGE);
|
|
40538
|
+
}
|
|
40539
|
+
const timestamp = Date.now();
|
|
40540
|
+
log(`getUserFeed(tmpid: ${timestamp}) > listen`);
|
|
40541
|
+
const userFeedLiveCollection = new UserFeedLiveCollectionController(params, callback);
|
|
40542
|
+
const disposers = userFeedLiveCollection.startSubscription();
|
|
40543
|
+
const cacheKey = userFeedLiveCollection.getCacheKey();
|
|
40544
|
+
disposers.push(() => dropFromCache(cacheKey));
|
|
40545
|
+
return () => {
|
|
40546
|
+
log(`getUserFeed(tmpid: ${timestamp}) > dispose`);
|
|
40547
|
+
disposers.forEach(fn => fn());
|
|
40548
|
+
};
|
|
40391
40549
|
};
|
|
40392
40550
|
/* end_public_function */
|
|
40393
40551
|
|
|
40394
|
-
|
|
40395
|
-
|
|
40396
|
-
|
|
40397
|
-
|
|
40398
|
-
|
|
40399
|
-
|
|
40400
|
-
|
|
40401
|
-
|
|
40402
|
-
|
|
40552
|
+
var index$9 = /*#__PURE__*/Object.freeze({
|
|
40553
|
+
__proto__: null,
|
|
40554
|
+
queryGlobalFeed: queryGlobalFeed,
|
|
40555
|
+
getCustomRankingGlobalFeed: getCustomRankingGlobalFeed,
|
|
40556
|
+
getUserFeed: getUserFeed
|
|
40557
|
+
});
|
|
40558
|
+
|
|
40559
|
+
/* begin_public_function
|
|
40560
|
+
id: post.get_by_ids
|
|
40561
|
+
*/
|
|
40562
|
+
/**
|
|
40563
|
+
* ```js
|
|
40564
|
+
* import { getPostByIds } from '@amityco/ts-sdk'
|
|
40565
|
+
* const { data: posts } = await getPostByIds(['foo', 'bar'])
|
|
40566
|
+
* ```
|
|
40567
|
+
*
|
|
40568
|
+
* Fetches a collection of {@link Amity.Post} objects
|
|
40569
|
+
*
|
|
40570
|
+
* @param postIds the IDs of the {@link Amity.Post} to fetch
|
|
40571
|
+
* @returns the associated collection of {@link Amity.Post} objects
|
|
40572
|
+
*
|
|
40573
|
+
* @category Post API
|
|
40574
|
+
* @async
|
|
40575
|
+
*/
|
|
40576
|
+
const getPostByIds = async (postIds) => {
|
|
40577
|
+
const client = getActiveClient();
|
|
40578
|
+
client.log('post/getPostByIds', postIds);
|
|
40579
|
+
const encodedPostIds = postIds.map(postId => encodeURIComponent(postId));
|
|
40580
|
+
let payload;
|
|
40581
|
+
try {
|
|
40582
|
+
// API-FIX: endpoint should not be /list, parameters should be querystring.
|
|
40583
|
+
const response = await client.http.get(`/api/v3/posts/list`, {
|
|
40584
|
+
params: { postIds: encodedPostIds },
|
|
40403
40585
|
});
|
|
40404
|
-
|
|
40586
|
+
payload = response.data;
|
|
40405
40587
|
}
|
|
40406
|
-
|
|
40407
|
-
|
|
40408
|
-
|
|
40409
|
-
(
|
|
40410
|
-
|
|
40411
|
-
|
|
40412
|
-
|
|
40413
|
-
EnumCommentActions["OnCommentFlagged"] = "onCommentFlagged";
|
|
40414
|
-
EnumCommentActions["OnCommentUnflagged"] = "onCommentUnflagged";
|
|
40415
|
-
EnumCommentActions["OnCommentReactionAdded"] = "onCommentReactionAdded";
|
|
40416
|
-
EnumCommentActions["OnCommentReactionRemoved"] = "onCommentReactionRemoved";
|
|
40417
|
-
})(EnumCommentActions || (EnumCommentActions = {}));
|
|
40418
|
-
|
|
40419
|
-
class CommentQueryStreamController extends QueryStreamController {
|
|
40420
|
-
constructor(query, cacheKey, notifyChange, preparePayload) {
|
|
40421
|
-
super(query, cacheKey);
|
|
40422
|
-
this.notifyChange = notifyChange;
|
|
40423
|
-
this.preparePayload = preparePayload;
|
|
40588
|
+
catch (error) {
|
|
40589
|
+
postIds.forEach(postId => {
|
|
40590
|
+
if (checkIfShouldGoesToTombstone(error === null || error === void 0 ? void 0 : error.code)) {
|
|
40591
|
+
pushToTombstone('post', postId);
|
|
40592
|
+
}
|
|
40593
|
+
});
|
|
40594
|
+
throw error;
|
|
40424
40595
|
}
|
|
40425
|
-
|
|
40426
|
-
|
|
40427
|
-
|
|
40428
|
-
|
|
40429
|
-
|
|
40430
|
-
|
|
40431
|
-
|
|
40596
|
+
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
40597
|
+
const cachedAt = client.cache && Date.now();
|
|
40598
|
+
if (client.cache)
|
|
40599
|
+
ingestInCache(data, { cachedAt });
|
|
40600
|
+
return {
|
|
40601
|
+
data: data.posts.map(LinkedObject.post),
|
|
40602
|
+
cachedAt,
|
|
40603
|
+
};
|
|
40604
|
+
};
|
|
40605
|
+
/* end_public_function */
|
|
40606
|
+
/**
|
|
40607
|
+
* ```js
|
|
40608
|
+
* import { getPostByIds } from '@amityco/ts-sdk'
|
|
40609
|
+
* const { data: posts } = getPostByIds.locally(['foo', 'bar'])
|
|
40610
|
+
* ```
|
|
40611
|
+
*
|
|
40612
|
+
* Fetches a collection of {@link Amity.Post} objects from cache
|
|
40613
|
+
*
|
|
40614
|
+
* @param postIds the IDs of the {@link Amity.Post} to fetch
|
|
40615
|
+
* @returns the associated collection of {@link Amity.Post} objects
|
|
40616
|
+
*
|
|
40617
|
+
* @category Post API
|
|
40618
|
+
*/
|
|
40619
|
+
getPostByIds.locally = (postIds) => {
|
|
40620
|
+
var _a;
|
|
40621
|
+
const client = getActiveClient();
|
|
40622
|
+
client.log('post/getPostByIds.locally', postIds);
|
|
40623
|
+
if (!client.cache)
|
|
40624
|
+
return;
|
|
40625
|
+
const cached = postIds
|
|
40626
|
+
.map(postId => pullFromCache(['post', 'get', postId]))
|
|
40627
|
+
.filter(Boolean);
|
|
40628
|
+
const posts = cached.map(({ data }) => data);
|
|
40629
|
+
const oldest = (_a = cached.sort((a, b) => (a.cachedAt < b.cachedAt ? -1 : 1))) === null || _a === void 0 ? void 0 : _a[0];
|
|
40630
|
+
if ((cached === null || cached === void 0 ? void 0 : cached.length) < postIds.length)
|
|
40631
|
+
return;
|
|
40632
|
+
return {
|
|
40633
|
+
data: posts.map(LinkedObject.post),
|
|
40634
|
+
cachedAt: oldest.cachedAt,
|
|
40635
|
+
};
|
|
40636
|
+
};
|
|
40637
|
+
|
|
40638
|
+
/* begin_public_function
|
|
40639
|
+
id: post.create.text_post, post.create.image_post, post.create.file_post, post.create.video_post, post.create.poll_post, post.create.livestream_post, post.create.custom_post
|
|
40640
|
+
*/
|
|
40641
|
+
/**
|
|
40642
|
+
* ```js
|
|
40643
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
40644
|
+
* const created = await PostRepository.createPost({
|
|
40645
|
+
* targetType: 'user',
|
|
40646
|
+
* targetId: 'foobar',
|
|
40647
|
+
* data: { text: 'hello world' }
|
|
40648
|
+
* }))
|
|
40649
|
+
* ```
|
|
40650
|
+
*
|
|
40651
|
+
* Creates an {@link Amity.Post}
|
|
40652
|
+
*
|
|
40653
|
+
* @param bundle The data necessary to create a new {@link Amity.Post}
|
|
40654
|
+
* @returns The newly created {@link Amity.Post}
|
|
40655
|
+
*
|
|
40656
|
+
* @category Post API
|
|
40657
|
+
* @async
|
|
40658
|
+
*/
|
|
40659
|
+
const createPost = async (bundle) => {
|
|
40660
|
+
const client = getActiveClient();
|
|
40661
|
+
client.log('post/createPost', bundle);
|
|
40662
|
+
if (!bundle.dataType || ['text', 'image', 'file', 'video'].includes(bundle.dataType)) {
|
|
40663
|
+
// eslint-disable-next-line no-param-reassign
|
|
40664
|
+
delete bundle.dataType;
|
|
40432
40665
|
}
|
|
40433
|
-
|
|
40434
|
-
|
|
40435
|
-
|
|
40436
|
-
|
|
40437
|
-
|
|
40438
|
-
|
|
40439
|
-
|
|
40440
|
-
|
|
40441
|
-
|
|
40442
|
-
|
|
40443
|
-
|
|
40444
|
-
|
|
40666
|
+
const { data: payload } = await client.http.post('/api/v4/posts', bundle);
|
|
40667
|
+
fireEvent('post.created', payload);
|
|
40668
|
+
const data = preparePostPayload(payload);
|
|
40669
|
+
const cachedAt = client.cache && Date.now();
|
|
40670
|
+
if (client.cache)
|
|
40671
|
+
ingestInCache(data, { cachedAt });
|
|
40672
|
+
const { posts } = data;
|
|
40673
|
+
return {
|
|
40674
|
+
data: LinkedObject.post(posts[0]),
|
|
40675
|
+
cachedAt,
|
|
40676
|
+
};
|
|
40677
|
+
};
|
|
40678
|
+
/* end_public_function */
|
|
40679
|
+
|
|
40680
|
+
/* begin_public_function
|
|
40681
|
+
id: post.edit, post.edit.custom_post
|
|
40682
|
+
*/
|
|
40683
|
+
/**
|
|
40684
|
+
* ```js
|
|
40685
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
40686
|
+
* const updated = await PostRepository.editPost(postId, {
|
|
40687
|
+
* data: { text: 'hello world' }
|
|
40688
|
+
* })
|
|
40689
|
+
* ```
|
|
40690
|
+
*
|
|
40691
|
+
* Updates an {@link Amity.Post}
|
|
40692
|
+
*
|
|
40693
|
+
* @param postId The ID of the {@link Amity.Post} to edit
|
|
40694
|
+
* @param patch The patch data to apply
|
|
40695
|
+
* @returns the updated {@link Amity.Post} object
|
|
40696
|
+
*
|
|
40697
|
+
* @category Post API
|
|
40698
|
+
* @async
|
|
40699
|
+
*/
|
|
40700
|
+
const editPost = async (postId, patch) => {
|
|
40701
|
+
const client = getActiveClient();
|
|
40702
|
+
client.log('user/editPost', patch);
|
|
40703
|
+
const { data: payload } = await client.http.put(`/api/v4/posts/${encodeURIComponent(postId)}`, patch);
|
|
40704
|
+
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
40705
|
+
const cachedAt = client.cache && Date.now();
|
|
40706
|
+
if (client.cache)
|
|
40707
|
+
ingestInCache(data, { cachedAt });
|
|
40708
|
+
fireEvent('local.post.updated', data);
|
|
40709
|
+
const { posts } = data;
|
|
40710
|
+
return {
|
|
40711
|
+
data: LinkedObject.post(posts.find(post => post.postId === postId)),
|
|
40712
|
+
cachedAt,
|
|
40713
|
+
};
|
|
40714
|
+
};
|
|
40715
|
+
/* end_public_function */
|
|
40716
|
+
|
|
40717
|
+
/**
|
|
40718
|
+
* ```js
|
|
40719
|
+
* import { deletePost } from '@amityco/ts-sdk'
|
|
40720
|
+
* const success = await deletePost('foobar')
|
|
40721
|
+
* ```
|
|
40722
|
+
*
|
|
40723
|
+
* Deletes a {@link Amity.Post}
|
|
40724
|
+
*
|
|
40725
|
+
* @param postId The {@link Amity.Post} ID to delete
|
|
40726
|
+
* @return A success boolean if the {@link Amity.Post} was deleted
|
|
40727
|
+
*
|
|
40728
|
+
* @private
|
|
40729
|
+
* @async
|
|
40730
|
+
*/
|
|
40731
|
+
const deletePost = async (postId, permanent = false) => {
|
|
40732
|
+
var _a;
|
|
40733
|
+
const client = getActiveClient();
|
|
40734
|
+
const post = await getPost$2(postId);
|
|
40735
|
+
await client.http.delete(`/api/v4/posts/${encodeURIComponent(postId)}`, {
|
|
40736
|
+
params: {
|
|
40737
|
+
postId,
|
|
40738
|
+
permanent,
|
|
40739
|
+
},
|
|
40740
|
+
});
|
|
40741
|
+
// there is currently a limitation which doesn't allow us to fire event to tell that community
|
|
40742
|
+
// has been updated. reason is that, when the object is deleted, we don't have its `communityId`
|
|
40743
|
+
// and so we cannot refetch the community or advertise on events. hopefully this should be solved
|
|
40744
|
+
// later when realtime events covers that for us.
|
|
40745
|
+
if (post.data.targetType === 'community') {
|
|
40746
|
+
const community = await getCommunity$1(post.data.targetId);
|
|
40747
|
+
const communityUsersCache = (_a = queryCache(['communityUsers', 'get'])) !== null && _a !== void 0 ? _a : [];
|
|
40748
|
+
const communityUsers = communityUsersCache
|
|
40749
|
+
.filter(({ key }) => {
|
|
40750
|
+
// cache key is ['communityUsers', 'get', `${communityId}#`${userId}`}]
|
|
40751
|
+
if (key[0] !== 'communityUsers')
|
|
40752
|
+
return false;
|
|
40753
|
+
if (key[1] !== 'get')
|
|
40754
|
+
return false;
|
|
40755
|
+
if (typeof key[2] === 'string')
|
|
40756
|
+
return key[2].includes(community.data.communityId);
|
|
40757
|
+
return false;
|
|
40758
|
+
})
|
|
40759
|
+
.map(({ data }) => data);
|
|
40760
|
+
fireEvent('community.updated', {
|
|
40761
|
+
communities: [community.data],
|
|
40762
|
+
categories: [],
|
|
40763
|
+
communityUsers,
|
|
40764
|
+
feeds: [],
|
|
40765
|
+
files: [],
|
|
40766
|
+
users: [],
|
|
40767
|
+
});
|
|
40445
40768
|
}
|
|
40446
|
-
|
|
40447
|
-
|
|
40448
|
-
|
|
40449
|
-
|
|
40450
|
-
|
|
40451
|
-
|
|
40452
|
-
!collection) {
|
|
40453
|
-
return;
|
|
40454
|
-
}
|
|
40455
|
-
if (this.query.parentId && this.query.parentId !== comment.parentId) {
|
|
40456
|
-
return;
|
|
40457
|
-
}
|
|
40458
|
-
if (!this.query.parentId && comment.parentId) {
|
|
40459
|
-
return;
|
|
40460
|
-
}
|
|
40461
|
-
if (action === EnumCommentActions.OnCommentCreated) {
|
|
40462
|
-
collection.data = [...new Set([comment.commentId, ...collection.data])];
|
|
40463
|
-
}
|
|
40464
|
-
pushToCache(this.cacheKey, collection);
|
|
40465
|
-
this.notifyChange({ origin: "event" /* Amity.LiveDataOrigin.EVENT */, loading: false });
|
|
40466
|
-
};
|
|
40769
|
+
// to support hard deletion
|
|
40770
|
+
const deleted = Object.assign(Object.assign({}, post.data), { isDeleted: true });
|
|
40771
|
+
if (permanent) {
|
|
40772
|
+
setTimeout(() => {
|
|
40773
|
+
pushToTombstone('post', postId);
|
|
40774
|
+
}, 0);
|
|
40467
40775
|
}
|
|
40468
|
-
|
|
40469
|
-
|
|
40776
|
+
else {
|
|
40777
|
+
upsertInCache(['post', 'get', postId], { isDeleted: true });
|
|
40470
40778
|
}
|
|
40471
|
-
|
|
40779
|
+
fireEvent('local.post.deleted', {
|
|
40780
|
+
posts: [deleted],
|
|
40781
|
+
categories: [],
|
|
40782
|
+
comments: [],
|
|
40783
|
+
communities: [],
|
|
40784
|
+
communityUsers: [],
|
|
40785
|
+
feeds: [],
|
|
40786
|
+
files: [],
|
|
40787
|
+
postChildren: [],
|
|
40788
|
+
users: [],
|
|
40789
|
+
videoStreamings: [],
|
|
40790
|
+
});
|
|
40791
|
+
return LinkedObject.post(deleted);
|
|
40792
|
+
};
|
|
40472
40793
|
|
|
40794
|
+
/* begin_public_function
|
|
40795
|
+
id: post.soft_delete
|
|
40796
|
+
*/
|
|
40473
40797
|
/**
|
|
40474
40798
|
* ```js
|
|
40475
|
-
* import {
|
|
40476
|
-
* const
|
|
40477
|
-
* // ...
|
|
40478
|
-
* })
|
|
40799
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
40800
|
+
* const success = await PostRepository.softDeletePost('foobar')
|
|
40479
40801
|
* ```
|
|
40480
40802
|
*
|
|
40481
|
-
*
|
|
40803
|
+
* Soft deletes a {@link Amity.Post}
|
|
40482
40804
|
*
|
|
40483
|
-
* @param
|
|
40484
|
-
* @
|
|
40805
|
+
* @param postId The {@link Amity.Post} ID to soft delete
|
|
40806
|
+
* @return A success boolean if the {@link Amity.Post} was deleted
|
|
40485
40807
|
*
|
|
40486
|
-
* @category
|
|
40808
|
+
* @category Post API
|
|
40809
|
+
* @async
|
|
40487
40810
|
*/
|
|
40488
|
-
const
|
|
40489
|
-
|
|
40811
|
+
const softDeletePost = async (postId) => {
|
|
40812
|
+
const client = getActiveClient();
|
|
40813
|
+
client.log('post/softDeletePost', postId);
|
|
40814
|
+
const softDeleted = await deletePost(postId, false);
|
|
40815
|
+
return LinkedObject.post(softDeleted);
|
|
40490
40816
|
};
|
|
40817
|
+
/* end_public_function */
|
|
40491
40818
|
|
|
40492
|
-
|
|
40493
|
-
|
|
40494
|
-
|
|
40495
|
-
|
|
40496
|
-
|
|
40497
|
-
|
|
40498
|
-
|
|
40499
|
-
|
|
40500
|
-
|
|
40501
|
-
|
|
40502
|
-
|
|
40503
|
-
|
|
40504
|
-
|
|
40505
|
-
|
|
40506
|
-
|
|
40507
|
-
|
|
40508
|
-
|
|
40509
|
-
|
|
40510
|
-
|
|
40511
|
-
|
|
40512
|
-
|
|
40513
|
-
|
|
40514
|
-
|
|
40515
|
-
|
|
40516
|
-
persistQueryStream({ response, direction, refresh, }) {
|
|
40517
|
-
this.queryStreamController.appendToQueryStream(response, direction, refresh);
|
|
40518
|
-
}
|
|
40519
|
-
startSubscription() {
|
|
40520
|
-
return this.queryStreamController.subscribeRTE([
|
|
40521
|
-
{ fn: onCommentCreatedLocal, action: EnumCommentActions.OnCommentCreated },
|
|
40522
|
-
{ fn: onCommentDeleteLocal, action: EnumCommentActions.OnCommentDeleted },
|
|
40523
|
-
{ fn: onCommentCreated, action: EnumCommentActions.OnCommentCreated },
|
|
40524
|
-
{ fn: onCommentUpdated, action: EnumCommentActions.OnCommentUpdated },
|
|
40525
|
-
{ fn: onCommentDeleted, action: EnumCommentActions.OnCommentDeleted },
|
|
40526
|
-
{ fn: onCommentFlagged, action: EnumCommentActions.OnCommentFlagged },
|
|
40527
|
-
{ fn: onCommentUnflagged, action: EnumCommentActions.OnCommentUnflagged },
|
|
40528
|
-
{ fn: onCommentReactionAdded, action: EnumCommentActions.OnCommentReactionAdded },
|
|
40529
|
-
{ fn: onCommentReactionRemoved, action: EnumCommentActions.OnCommentReactionRemoved },
|
|
40530
|
-
{ fn: onLocalCommentReactionAdded, action: EnumCommentActions.OnCommentReactionAdded },
|
|
40531
|
-
{ fn: onLocalCommentReactionRemoved, action: EnumCommentActions.OnCommentReactionRemoved },
|
|
40532
|
-
]);
|
|
40533
|
-
}
|
|
40534
|
-
notifyChange({ origin, loading, error }) {
|
|
40535
|
-
var _a, _b;
|
|
40536
|
-
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
40537
|
-
if (!collection)
|
|
40538
|
-
return;
|
|
40539
|
-
const data = this.applyFilter((_b = collection.data
|
|
40540
|
-
.map(id => pullFromCache(['comment', 'get', id]))
|
|
40541
|
-
.filter(isNonNullable)
|
|
40542
|
-
.map(({ data }) => data)) !== null && _b !== void 0 ? _b : []).map(LinkedObject.comment);
|
|
40543
|
-
if (!this.shouldNotify(data) && origin === 'event')
|
|
40544
|
-
return;
|
|
40545
|
-
this.callback({
|
|
40546
|
-
onNextPage: () => this.loadPage({ direction: "next" /* Amity.LiveCollectionPageDirection.NEXT */ }),
|
|
40547
|
-
data,
|
|
40548
|
-
hasNextPage: !!this.paginationController.getNextToken(),
|
|
40549
|
-
loading,
|
|
40550
|
-
error,
|
|
40551
|
-
});
|
|
40552
|
-
}
|
|
40553
|
-
applyFilter(data) {
|
|
40554
|
-
let comments = data;
|
|
40555
|
-
if (!this.query.includeDeleted) {
|
|
40556
|
-
comments = filterByPropEquality(comments, 'isDeleted', false);
|
|
40557
|
-
}
|
|
40558
|
-
if (this.query.parentId) {
|
|
40559
|
-
comments = comments.filter(comment => comment.parentId === this.query.parentId);
|
|
40560
|
-
}
|
|
40561
|
-
if (typeof this.query.hasFlag === 'boolean') {
|
|
40562
|
-
if (this.query.hasFlag) {
|
|
40563
|
-
comments = comments.filter(comment => comment.hashFlag != null);
|
|
40564
|
-
}
|
|
40565
|
-
else {
|
|
40566
|
-
comments = comments.filter(comment => comment.hashFlag == null);
|
|
40567
|
-
}
|
|
40568
|
-
}
|
|
40569
|
-
if (this.query.dataTypes) {
|
|
40570
|
-
if (this.query.dataTypes.matchType === 'exact') {
|
|
40571
|
-
comments = comments.filter(comment => {
|
|
40572
|
-
var _a, _b;
|
|
40573
|
-
const sortedDataTypesQueryValue = ((_a = this.query.dataTypes) === null || _a === void 0 ? void 0 : _a.values.sort()) || [];
|
|
40574
|
-
const sortedDataTypesCommentValue = ((_b = comment.dataTypes) === null || _b === void 0 ? void 0 : _b.sort()) || [];
|
|
40575
|
-
if (sortedDataTypesCommentValue.length !== sortedDataTypesQueryValue.length) {
|
|
40576
|
-
return false;
|
|
40577
|
-
}
|
|
40578
|
-
return sortedDataTypesQueryValue.every((value, index) => value === sortedDataTypesCommentValue[index]);
|
|
40579
|
-
});
|
|
40580
|
-
}
|
|
40581
|
-
if (this.query.dataTypes.matchType === 'any') {
|
|
40582
|
-
comments = comments.filter(comment => { var _a; return (_a = this.query.dataTypes) === null || _a === void 0 ? void 0 : _a.values.some(value => { var _a; return (_a = comment.dataTypes) === null || _a === void 0 ? void 0 : _a.includes(value); }); });
|
|
40583
|
-
}
|
|
40584
|
-
}
|
|
40585
|
-
switch (this.query.sortBy) {
|
|
40586
|
-
case 'firstCreated':
|
|
40587
|
-
comments = comments.sort(sortByFirstCreated);
|
|
40588
|
-
break;
|
|
40589
|
-
case 'lastCreated':
|
|
40590
|
-
default:
|
|
40591
|
-
comments = comments.sort(sortByLastCreated);
|
|
40592
|
-
break;
|
|
40593
|
-
}
|
|
40594
|
-
return comments;
|
|
40595
|
-
}
|
|
40596
|
-
}
|
|
40819
|
+
/* begin_public_function
|
|
40820
|
+
id: post.hard_delete
|
|
40821
|
+
*/
|
|
40822
|
+
/**
|
|
40823
|
+
* ```js
|
|
40824
|
+
* import { hardDeletePost } from '@amityco/ts-sdk'
|
|
40825
|
+
* const success = await hardDeletePost('foobar')
|
|
40826
|
+
* ```
|
|
40827
|
+
*
|
|
40828
|
+
* Hard deletes a {@link Amity.Post}
|
|
40829
|
+
*
|
|
40830
|
+
* @param postId The {@link Amity.Post} ID to be hard delete
|
|
40831
|
+
* @return A success boolean if the {@link Amity.Post} was deleted
|
|
40832
|
+
*
|
|
40833
|
+
* @category Post API
|
|
40834
|
+
* @async
|
|
40835
|
+
*/
|
|
40836
|
+
const hardDeletePost = async (postId) => {
|
|
40837
|
+
const client = getActiveClient();
|
|
40838
|
+
client.log('post/hardDeletePost', postId);
|
|
40839
|
+
const hardDeleted = await deletePost(postId, true);
|
|
40840
|
+
return LinkedObject.post(hardDeleted);
|
|
40841
|
+
};
|
|
40842
|
+
/* end_public_function */
|
|
40597
40843
|
|
|
40598
40844
|
/* begin_public_function
|
|
40599
|
-
id:
|
|
40845
|
+
id: post.approve
|
|
40600
40846
|
*/
|
|
40601
40847
|
/**
|
|
40602
40848
|
* ```js
|
|
40603
|
-
* import {
|
|
40849
|
+
* import { approvePost } from '@amityco/ts-sdk'
|
|
40604
40850
|
*
|
|
40605
|
-
*
|
|
40606
|
-
* const unsub = getComments({
|
|
40607
|
-
* referenceType: Amity.InternalComment['referenceType'];
|
|
40608
|
-
* referenceId: Amity.InternalComment['referenceId'];
|
|
40609
|
-
* }, response => merge(comments, response.data))
|
|
40851
|
+
* const { data: post } = await approvePost('postId')
|
|
40610
40852
|
* ```
|
|
40611
40853
|
*
|
|
40612
|
-
*
|
|
40854
|
+
* Approves a {@link Amity.Post}
|
|
40613
40855
|
*
|
|
40614
|
-
* @param
|
|
40615
|
-
* @
|
|
40616
|
-
* @param callback the function to call when new data are available
|
|
40617
|
-
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
|
|
40856
|
+
* @param postId The {@link Amity.Post} ID to be approved
|
|
40857
|
+
* @return A {@link Amity.Post} that was approved
|
|
40618
40858
|
*
|
|
40619
|
-
* @category
|
|
40859
|
+
* @category Post API
|
|
40860
|
+
* @async
|
|
40620
40861
|
*/
|
|
40621
|
-
const
|
|
40622
|
-
const
|
|
40623
|
-
|
|
40624
|
-
|
|
40862
|
+
const approvePost = async (postId) => {
|
|
40863
|
+
const client = getActiveClient();
|
|
40864
|
+
client.log('post/approvePost', postId);
|
|
40865
|
+
const { data: payload } = await client.http.post(`/api/v3/posts/${encodeURIComponent(postId)}/approve`);
|
|
40866
|
+
fireEvent('post.approved', payload);
|
|
40867
|
+
// fire virtual event for community update
|
|
40868
|
+
if (payload.posts[0].targetType === 'community') {
|
|
40869
|
+
fireEvent('community.updated', payload);
|
|
40625
40870
|
}
|
|
40626
|
-
const
|
|
40627
|
-
|
|
40628
|
-
|
|
40629
|
-
|
|
40630
|
-
|
|
40631
|
-
|
|
40632
|
-
|
|
40633
|
-
log(`getComments(tmpid: ${timestamp}) > dispose`);
|
|
40634
|
-
disposers.forEach(fn => fn());
|
|
40871
|
+
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
40872
|
+
const cachedAt = client.cache && Date.now();
|
|
40873
|
+
if (client.cache)
|
|
40874
|
+
ingestInCache(data, { cachedAt });
|
|
40875
|
+
return {
|
|
40876
|
+
data: LinkedObject.post(data.posts.find(post => post.postId === postId)),
|
|
40877
|
+
cachedAt,
|
|
40635
40878
|
};
|
|
40636
40879
|
};
|
|
40637
40880
|
/* end_public_function */
|
|
40638
40881
|
|
|
40639
|
-
|
|
40640
|
-
|
|
40641
|
-
|
|
40642
|
-
createComment: createComment,
|
|
40643
|
-
updateComment: updateComment,
|
|
40644
|
-
deleteComment: deleteComment,
|
|
40645
|
-
softDeleteComment: softDeleteComment,
|
|
40646
|
-
hardDeleteComment: hardDeleteComment,
|
|
40647
|
-
flagComment: flagComment,
|
|
40648
|
-
unflagComment: unflagComment,
|
|
40649
|
-
isCommentFlaggedByMe: isCommentFlaggedByMe,
|
|
40650
|
-
onCommentCreated: onCommentCreated,
|
|
40651
|
-
onCommentUpdated: onCommentUpdated,
|
|
40652
|
-
onCommentDeleted: onCommentDeleted,
|
|
40653
|
-
onCommentFlagged: onCommentFlagged,
|
|
40654
|
-
onCommentUnflagged: onCommentUnflagged,
|
|
40655
|
-
onCommentReactionAdded: onCommentReactionAdded,
|
|
40656
|
-
onCommentReactionRemoved: onCommentReactionRemoved,
|
|
40657
|
-
getComment: getComment,
|
|
40658
|
-
getComments: getComments
|
|
40659
|
-
});
|
|
40660
|
-
|
|
40882
|
+
/* begin_public_function
|
|
40883
|
+
id: post.decline
|
|
40884
|
+
*/
|
|
40661
40885
|
/**
|
|
40662
40886
|
* ```js
|
|
40663
|
-
* import {
|
|
40664
|
-
*
|
|
40665
|
-
*
|
|
40666
|
-
* })
|
|
40887
|
+
* import { declinePost } from '@amityco/ts-sdk'
|
|
40888
|
+
*
|
|
40889
|
+
* const {data: post} = await declinePost('postId')
|
|
40667
40890
|
* ```
|
|
40668
40891
|
*
|
|
40669
|
-
*
|
|
40892
|
+
* Declines a {@link Amity.Post}
|
|
40670
40893
|
*
|
|
40671
|
-
* @param
|
|
40672
|
-
* @
|
|
40894
|
+
* @param postId The {@link Amity.Post} ID to be declined
|
|
40895
|
+
* @return A {@link Amity.Post} that was declined
|
|
40673
40896
|
*
|
|
40674
|
-
* @category Post
|
|
40897
|
+
* @category Post API
|
|
40898
|
+
* @async
|
|
40675
40899
|
*/
|
|
40676
|
-
const
|
|
40900
|
+
const declinePost = async (postId) => {
|
|
40901
|
+
const client = getActiveClient();
|
|
40902
|
+
client.log('post/declinePost', postId);
|
|
40903
|
+
const { data: payload } = await client.http.post(`/api/v3/posts/${encodeURIComponent(postId)}/decline`);
|
|
40904
|
+
// fire virtual event
|
|
40905
|
+
if (payload.posts[0].targetType === 'community') {
|
|
40906
|
+
fireEvent('community.updated', payload);
|
|
40907
|
+
}
|
|
40908
|
+
fireEvent('post.declined', payload);
|
|
40909
|
+
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
40910
|
+
const cachedAt = client.cache && Date.now();
|
|
40911
|
+
if (client.cache)
|
|
40912
|
+
ingestInCache(data, { cachedAt });
|
|
40913
|
+
return {
|
|
40914
|
+
data: LinkedObject.post(payload.posts.find(post => post.postId === postId)),
|
|
40915
|
+
cachedAt,
|
|
40916
|
+
};
|
|
40917
|
+
};
|
|
40918
|
+
/* end_public_function */
|
|
40677
40919
|
|
|
40920
|
+
/* begin_public_function
|
|
40921
|
+
id: post.flag
|
|
40922
|
+
*/
|
|
40678
40923
|
/**
|
|
40679
40924
|
* ```js
|
|
40680
|
-
* import {
|
|
40681
|
-
* const
|
|
40682
|
-
* // ...
|
|
40683
|
-
* })
|
|
40925
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
40926
|
+
* const flagged = await PostRepository.flagPost(postId, reason)
|
|
40684
40927
|
* ```
|
|
40685
40928
|
*
|
|
40686
|
-
*
|
|
40687
|
-
*
|
|
40688
|
-
* @
|
|
40689
|
-
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
40929
|
+
* @param postId of the post to flag
|
|
40930
|
+
* @param reason the reason to flag the post
|
|
40931
|
+
* @returns a boolean
|
|
40690
40932
|
*
|
|
40691
|
-
* @category Post
|
|
40692
|
-
|
|
40693
|
-
|
|
40933
|
+
* @category Post API
|
|
40934
|
+
* @async
|
|
40935
|
+
* */
|
|
40936
|
+
const flagPost = async (postId, reason) => {
|
|
40694
40937
|
const client = getActiveClient();
|
|
40695
|
-
|
|
40696
|
-
|
|
40697
|
-
|
|
40698
|
-
|
|
40699
|
-
|
|
40700
|
-
|
|
40701
|
-
callback(post);
|
|
40702
|
-
}
|
|
40938
|
+
client.log('post/flagPost', postId);
|
|
40939
|
+
const isPredefinedReason = reason &&
|
|
40940
|
+
Object.entries(ContentFlagReasonEnum).some(([key, value]) => key !== ContentFlagReasonEnum.Others && value === reason);
|
|
40941
|
+
const body = {
|
|
40942
|
+
reason: reason && isPredefinedReason ? reason : ContentFlagReasonEnum.Others,
|
|
40943
|
+
detail: reason && !isPredefinedReason ? reason : '',
|
|
40703
40944
|
};
|
|
40704
|
-
|
|
40945
|
+
const { data: payload } = await client.http.post(`/api/v3/posts/${encodeURIComponent(postId)}/flag`, body);
|
|
40946
|
+
if (client.cache) {
|
|
40947
|
+
ingestInCache(prepareMembershipPayload(payload, 'communityUsers'));
|
|
40948
|
+
}
|
|
40949
|
+
fireEvent('post.flagged', payload);
|
|
40950
|
+
return !!payload;
|
|
40705
40951
|
};
|
|
40952
|
+
/* end_public_function */
|
|
40706
40953
|
|
|
40954
|
+
/* begin_public_function
|
|
40955
|
+
id: post.unflag
|
|
40956
|
+
*/
|
|
40707
40957
|
/**
|
|
40708
40958
|
* ```js
|
|
40709
|
-
* import {
|
|
40710
|
-
* const
|
|
40711
|
-
* // ...
|
|
40712
|
-
* })
|
|
40959
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
40960
|
+
* const unflagged = await PostRepository.unflagPost(postId)
|
|
40713
40961
|
* ```
|
|
40714
40962
|
*
|
|
40715
|
-
*
|
|
40963
|
+
* @param postId of the post to unflag
|
|
40964
|
+
* @returns the unflag post result
|
|
40716
40965
|
*
|
|
40717
|
-
* @
|
|
40718
|
-
* @
|
|
40966
|
+
* @category Post API
|
|
40967
|
+
* @async
|
|
40968
|
+
* */
|
|
40969
|
+
const unflagPost = async (postId) => {
|
|
40970
|
+
const client = getActiveClient();
|
|
40971
|
+
client.log('post/unflagPost', postId);
|
|
40972
|
+
const { data: payload } = await client.http.delete(`/api/v3/posts/${encodeURIComponent(postId)}/unflag`);
|
|
40973
|
+
if (client.cache) {
|
|
40974
|
+
ingestInCache(prepareMembershipPayload(payload, 'communityUsers'));
|
|
40975
|
+
}
|
|
40976
|
+
fireEvent('post.unflagged', payload);
|
|
40977
|
+
return !!payload;
|
|
40978
|
+
};
|
|
40979
|
+
/* end_public_function */
|
|
40980
|
+
|
|
40981
|
+
/* begin_public_function
|
|
40982
|
+
id: post.check_flag_by_me
|
|
40983
|
+
*/
|
|
40984
|
+
/**
|
|
40985
|
+
* ```js
|
|
40986
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
40987
|
+
* const isReported = await PostRepository.isPostFlaggedByMe('post', postId)
|
|
40988
|
+
* ```
|
|
40719
40989
|
*
|
|
40720
|
-
* @
|
|
40721
|
-
|
|
40722
|
-
|
|
40990
|
+
* @param postId of the post to check if flagged by current user
|
|
40991
|
+
* @returns `true` if the post is flagged by me, `false` if doesn't.
|
|
40992
|
+
*
|
|
40993
|
+
* @category Post API
|
|
40994
|
+
* @async
|
|
40995
|
+
* */
|
|
40996
|
+
const isPostFlaggedByMe = async (postId) => {
|
|
40723
40997
|
const client = getActiveClient();
|
|
40724
|
-
|
|
40725
|
-
|
|
40726
|
-
|
|
40727
|
-
}
|
|
40728
|
-
else {
|
|
40729
|
-
upsertInCache(['post', 'get', post.postId], post);
|
|
40730
|
-
callback(post);
|
|
40731
|
-
}
|
|
40732
|
-
};
|
|
40733
|
-
return createEventSubscriber(client, 'local.post.removeReaction', 'local.post.removeReaction', filter);
|
|
40998
|
+
client.log('post/isPostFlaggedByMe', postId);
|
|
40999
|
+
const { data: { result }, } = await client.http.get(`/api/v3/posts/${postId}/isflagbyme`);
|
|
41000
|
+
return result;
|
|
40734
41001
|
};
|
|
41002
|
+
/* end_public_function */
|
|
40735
41003
|
|
|
41004
|
+
/* begin_public_function
|
|
41005
|
+
id: post.create.clip_post
|
|
41006
|
+
*/
|
|
40736
41007
|
/**
|
|
40737
41008
|
* ```js
|
|
40738
|
-
* import {
|
|
40739
|
-
* const
|
|
40740
|
-
*
|
|
40741
|
-
*
|
|
41009
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
41010
|
+
* const created = await PostRepository.createClipPost({
|
|
41011
|
+
* targetType: 'user',
|
|
41012
|
+
* targetId: 'foobar',
|
|
41013
|
+
* dataType: 'clip',
|
|
41014
|
+
* data: { text: 'hello world' },
|
|
41015
|
+
* attachments: [{ type: 'clip', fileId: 'fileId123', displayMode: 'fill', isMuted: false }]
|
|
41016
|
+
* }))
|
|
40742
41017
|
* ```
|
|
40743
41018
|
*
|
|
40744
|
-
*
|
|
41019
|
+
* Creates an {@link Amity.Post}
|
|
40745
41020
|
*
|
|
40746
|
-
* @param
|
|
40747
|
-
* @returns
|
|
41021
|
+
* @param bundle The data necessary to create a new {@link Amity.Post}
|
|
41022
|
+
* @returns The newly created {@link Amity.Post}
|
|
40748
41023
|
*
|
|
40749
|
-
* @category Post
|
|
41024
|
+
* @category Post API
|
|
41025
|
+
* @async
|
|
40750
41026
|
*/
|
|
40751
|
-
const
|
|
41027
|
+
const createClipPost = async (bundle) => {
|
|
41028
|
+
const client = getActiveClient();
|
|
41029
|
+
client.log('post/createPost', bundle);
|
|
41030
|
+
const { data: payload } = await client.http.post('/api/v4/posts', bundle);
|
|
41031
|
+
fireEvent('post.created', payload);
|
|
41032
|
+
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
41033
|
+
const cachedAt = client.cache && Date.now();
|
|
41034
|
+
if (client.cache)
|
|
41035
|
+
ingestInCache(data, { cachedAt });
|
|
41036
|
+
const { posts } = data;
|
|
41037
|
+
return {
|
|
41038
|
+
data: LinkedObject.post(posts[0]),
|
|
41039
|
+
cachedAt,
|
|
41040
|
+
};
|
|
41041
|
+
};
|
|
41042
|
+
/* end_public_function */
|
|
40752
41043
|
|
|
40753
41044
|
/* begin_public_function
|
|
40754
41045
|
id: post.get
|
|
@@ -40772,7 +41063,7 @@ const onLocalPostDeleted = (callback) => createLocalPostEventSubscriber('local.p
|
|
|
40772
41063
|
*
|
|
40773
41064
|
* @category Post Live Object
|
|
40774
41065
|
*/
|
|
40775
|
-
const getPost
|
|
41066
|
+
const getPost = (postId, callback) => {
|
|
40776
41067
|
const responder = (snapshot) => {
|
|
40777
41068
|
const { data } = snapshot;
|
|
40778
41069
|
callback(Object.assign(Object.assign({}, snapshot), { data: data ? LinkedObject.post(snapshot.data) : data }));
|
|
@@ -40861,19 +41152,6 @@ class PostPaginationController extends PaginationController {
|
|
|
40861
41152
|
}
|
|
40862
41153
|
}
|
|
40863
41154
|
|
|
40864
|
-
var EnumPostActions;
|
|
40865
|
-
(function (EnumPostActions) {
|
|
40866
|
-
EnumPostActions["OnPostCreated"] = "onPostCreated";
|
|
40867
|
-
EnumPostActions["OnPostUpdated"] = "onPostUpdated";
|
|
40868
|
-
EnumPostActions["OnPostDeleted"] = "onPostDeleted";
|
|
40869
|
-
EnumPostActions["OnPostFlagged"] = "onPostFlagged";
|
|
40870
|
-
EnumPostActions["OnPostUnflagged"] = "onPostUnflagged";
|
|
40871
|
-
EnumPostActions["OnPostReactionAdded"] = "onPostReactionAdded";
|
|
40872
|
-
EnumPostActions["OnPostReactionRemoved"] = "onPostReactionRemoved";
|
|
40873
|
-
EnumPostActions["OnPostApproved"] = "onPostApproved";
|
|
40874
|
-
EnumPostActions["OnPostDeclined"] = "onPostDeclined";
|
|
40875
|
-
})(EnumPostActions || (EnumPostActions = {}));
|
|
40876
|
-
|
|
40877
41155
|
class PostQueryStreamController extends QueryStreamController {
|
|
40878
41156
|
constructor(query, cacheKey, notifyChange, preparePayload) {
|
|
40879
41157
|
super(query, cacheKey);
|
|
@@ -40939,47 +41217,6 @@ class PostQueryStreamController extends QueryStreamController {
|
|
|
40939
41217
|
}
|
|
40940
41218
|
}
|
|
40941
41219
|
|
|
40942
|
-
const getPost = async (postId) => {
|
|
40943
|
-
const client = getActiveClient();
|
|
40944
|
-
client.log('post/getPost', postId);
|
|
40945
|
-
isInTombstone('post', postId);
|
|
40946
|
-
let payload;
|
|
40947
|
-
try {
|
|
40948
|
-
// API-FIX: endpoint should not be /list, parameters should be querystring.
|
|
40949
|
-
const response = await client.http.get(`/api/v3/posts/${encodeURIComponent(postId)}`);
|
|
40950
|
-
payload = response.data;
|
|
40951
|
-
}
|
|
40952
|
-
catch (error) {
|
|
40953
|
-
if (checkIfShouldGoesToTombstone(error === null || error === void 0 ? void 0 : error.code)) {
|
|
40954
|
-
pushToTombstone('post', postId);
|
|
40955
|
-
}
|
|
40956
|
-
throw error;
|
|
40957
|
-
}
|
|
40958
|
-
const data = prepareMembershipPayload(payload, 'communityUsers');
|
|
40959
|
-
const cachedAt = client.cache && Date.now();
|
|
40960
|
-
if (client.cache)
|
|
40961
|
-
ingestInCache(data, { cachedAt });
|
|
40962
|
-
const { posts } = data;
|
|
40963
|
-
const result = posts.find(post => post.postId === postId);
|
|
40964
|
-
return {
|
|
40965
|
-
data: result,
|
|
40966
|
-
cachedAt,
|
|
40967
|
-
};
|
|
40968
|
-
};
|
|
40969
|
-
getPost.locally = (postId) => {
|
|
40970
|
-
const client = getActiveClient();
|
|
40971
|
-
client.log('post/getPost.locally', postId);
|
|
40972
|
-
if (!client.cache)
|
|
40973
|
-
return;
|
|
40974
|
-
const cached = pullFromCache(['post', 'get', postId]);
|
|
40975
|
-
if (!cached)
|
|
40976
|
-
return;
|
|
40977
|
-
return {
|
|
40978
|
-
data: cached.data,
|
|
40979
|
-
cachedAt: cached.cachedAt,
|
|
40980
|
-
};
|
|
40981
|
-
};
|
|
40982
|
-
|
|
40983
41220
|
class PostLiveCollectionController extends LiveCollectionController {
|
|
40984
41221
|
constructor(query, callback) {
|
|
40985
41222
|
const queryStreamId = hash(query);
|
|
@@ -41029,7 +41266,7 @@ class PostLiveCollectionController extends LiveCollectionController {
|
|
|
41029
41266
|
const currentCollection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
41030
41267
|
if (!currentCollection || currentCollection.data.includes(comment.referenceId))
|
|
41031
41268
|
return;
|
|
41032
|
-
await getPost(comment.referenceId);
|
|
41269
|
+
await getPost$1(comment.referenceId);
|
|
41033
41270
|
callback(comment);
|
|
41034
41271
|
});
|
|
41035
41272
|
}, 'referenceId', 'post'),
|
|
@@ -41042,7 +41279,7 @@ class PostLiveCollectionController extends LiveCollectionController {
|
|
|
41042
41279
|
const currentCollection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
41043
41280
|
if (!currentCollection || currentCollection.data.includes(comment.referenceId))
|
|
41044
41281
|
return;
|
|
41045
|
-
await getPost(comment.referenceId);
|
|
41282
|
+
await getPost$1(comment.referenceId);
|
|
41046
41283
|
callback(comment);
|
|
41047
41284
|
});
|
|
41048
41285
|
}, 'referenceId', 'post'),
|
|
@@ -41668,7 +41905,7 @@ var index$8 = /*#__PURE__*/Object.freeze({
|
|
|
41668
41905
|
onPostUnflagged: onPostUnflagged,
|
|
41669
41906
|
onPostReactionAdded: onPostReactionAdded,
|
|
41670
41907
|
onPostReactionRemoved: onPostReactionRemoved,
|
|
41671
|
-
getPost: getPost
|
|
41908
|
+
getPost: getPost,
|
|
41672
41909
|
getPosts: getPosts,
|
|
41673
41910
|
getPinnedPosts: getPinnedPosts,
|
|
41674
41911
|
getGlobalPinnedPosts: getGlobalPinnedPosts,
|
|
@@ -44866,4 +45103,4 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
44866
45103
|
getReactions: getReactions
|
|
44867
45104
|
});
|
|
44868
45105
|
|
|
44869
|
-
export { API_REGIONS, index$3 as AdRepository, index$b as CategoryRepository, index$f as ChannelRepository, index$o as Client, index$
|
|
45106
|
+
export { API_REGIONS, index$3 as AdRepository, index$b as CategoryRepository, index$f as ChannelRepository, index$o as Client, index$a as CommentRepository, CommunityPostSettingMaps, CommunityPostSettings, index$c as CommunityRepository, ContentFeedType, ContentFlagReasonEnum, DefaultCommunityPostSetting, index$9 as FeedRepository, FileAccessTypeEnum, index$l as FileRepository, FileType, index$1 as InvitationRepository, InvitationSortByEnum, InvitationStatusEnum, InvitationTypeEnum, JoinRequestStatusEnum, JoinResultStatusEnum, index as LiveReactionRepository, index$5 as LiveStreamPlayer, MembershipAcceptanceTypeEnum, MessageContentType, index$j as MessageRepository, index$6 as PollRepository, PostContentType, index$8 as PostRepository, index$k as ReactionRepository, index$4 as StoryRepository, index$7 as StreamRepository, index$i as SubChannelRepository, SubscriptionLevels, index$m as UserRepository, VERSION, VideoResolution, VideoSize, VideoTranscodingStatus, backupCache, createQuery, createReport, createUserToken, deleteReport, disableCache, dropFromCache, enableCache, filterByChannelMembership, filterByCommunityMembership, filterByFeedType, filterByPostDataTypes, filterByPropEquality, filterByPropInclusion, filterByPropIntersection, filterBySearchTerm, filterByStringComparePartially, getChannelTopic, getCommentTopic, getCommunityStoriesTopic, getCommunityTopic, getLiveReactionTopic, getLiveStreamTopic, getMarkedMessageTopic, getMarkerUserFeedTopic, getMessageTopic, getMyFollowersTopic, getMyFollowingsTopic, getNetworkTopic, getPostTopic, getRole, getSmartFeedChannelTopic, getSmartFeedMessageTopic, getSmartFeedSubChannelTopic, getStoryTopic, getSubChannelTopic, getUserTopic, isAfterBefore, isAfterBeforeRaw, isCachable, isFetcher, isFresh, isLocal, isMutator, isOffline, isPaged, isReportedByMe, isSkip, mergeInCache, index$2 as notificationTray, onChannelMarkerFetched, onFeedMarkerFetched, onFeedMarkerUpdated, onMessageMarked, onMessageMarkerFetched, onSubChannelMarkerFetched, onSubChannelMarkerUpdated, onUserMarkerFetched, onUserMarkerFetchedLegacy, pullFromCache, pushToCache, queryCache, queryOptions, queryRoles, restoreCache, runQuery, sortByChannelSegment, sortByDisplayName, sortByFirstCreated, sortByFirstUpdated, sortByLastActivity, sortByLastCreated, sortByLastUpdated, sortByLocalSortingDate, sortByName, sortBySegmentNumber, subscribeTopic, toPage, toPageRaw, toToken, upsertInCache, wipeCache };
|