@amityco/ts-sdk 7.7.1-c7691770.0 → 7.7.1-cfb204b8.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/hashtag.d.ts +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/hashtag.js.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/post.d.ts +3 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/post.d.ts.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/post.js.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/getPostsByHashtag.d.ts +15 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/getPostsByHashtag.d.ts.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/getPostsByHashtag.js +61 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/getPostsByHashtag.js.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/index.d.ts +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/index.d.ts.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/index.js +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/index.js.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/queryPosts.js +2 -2
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/queryPosts.js.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.d.ts +14 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.d.ts.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.js +126 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.js.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.d.ts +5 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.d.ts.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.js +26 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.js.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.d.ts +15 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.d.ts.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.js +65 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.js.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/index.d.ts +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/index.d.ts.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/index.js +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/index.js.map +1 -1
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/searchPostsByHashtag.d.ts +22 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/searchPostsByHashtag.d.ts.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/searchPostsByHashtag.js +45 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/searchPostsByHashtag.js.map +1 -0
- package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/tsconfig.tsbuildinfo +1 -1
- package/dist/@types/domains/hashtag.d.ts +1 -1
- package/dist/@types/domains/post.d.ts +3 -1
- package/dist/@types/domains/post.d.ts.map +1 -1
- package/dist/index.cjs.js +288 -1
- package/dist/index.esm.js +288 -1
- package/dist/index.umd.js +4 -4
- package/dist/postRepository/api/getPostsByHashtag.d.ts +15 -0
- package/dist/postRepository/api/getPostsByHashtag.d.ts.map +1 -0
- package/dist/postRepository/api/index.d.ts +1 -0
- package/dist/postRepository/api/index.d.ts.map +1 -1
- package/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.d.ts +14 -0
- package/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.d.ts.map +1 -0
- package/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.d.ts +5 -0
- package/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.d.ts.map +1 -0
- package/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.d.ts +15 -0
- package/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.d.ts.map +1 -0
- package/dist/postRepository/observers/index.d.ts +1 -0
- package/dist/postRepository/observers/index.d.ts.map +1 -1
- package/dist/postRepository/observers/searchPostsByHashtag.d.ts +22 -0
- package/dist/postRepository/observers/searchPostsByHashtag.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/@types/domains/hashtag.ts +1 -1
- package/src/@types/domains/post.ts +7 -1
- package/src/postRepository/api/getPostsByHashtag.ts +78 -0
- package/src/postRepository/api/index.ts +2 -0
- package/src/postRepository/api/queryPosts.ts +2 -2
- package/src/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.ts +180 -0
- package/src/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.ts +45 -0
- package/src/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.ts +99 -0
- package/src/postRepository/observers/index.ts +1 -0
- package/src/postRepository/observers/searchPostsByHashtag.ts +56 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -9,7 +9,7 @@ export declare const PostContentType: Readonly<{
|
|
|
9
9
|
}>;
|
|
10
10
|
declare global {
|
|
11
11
|
namespace Amity {
|
|
12
|
-
type PostTargetType = Amity.Feed['targetType'] | 'content';
|
|
12
|
+
type PostTargetType = Amity.Feed['targetType'] | 'content' | 'all';
|
|
13
13
|
type PostContentType = ValueOf<typeof PostContentType> | string;
|
|
14
14
|
type PostActionType = 'onFetch' | 'onCreate' | 'onUpdate' | 'onDelete' | 'onApproved' | 'onDeclined' | 'onFlagged' | 'onUnflagged' | 'onReactionAdded' | 'onReactionRemoved';
|
|
15
15
|
type RawPost<T extends PostContentType = any> = {
|
|
@@ -77,7 +77,9 @@ declare global {
|
|
|
77
77
|
matchingOnlyParentPost?: boolean;
|
|
78
78
|
page?: string;
|
|
79
79
|
limit?: number;
|
|
80
|
+
hashtags?: string[];
|
|
80
81
|
};
|
|
82
|
+
type QueryPostsWithHashtags = Pick<Amity.QueryPosts, 'dataTypes' | 'matchingOnlyParentPost' | 'sortBy' | 'page' | 'limit' | 'hashtags'>;
|
|
81
83
|
type PostLiveCollection = Amity.LiveCollectionParams<Omit<QueryPosts, 'sortBy' | 'page'> & {
|
|
82
84
|
sortBy?: 'lastCreated' | 'firstCreated';
|
|
83
85
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../src/@types/domains/post.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;;;;;;;EAQ1B,CAAC;AAEH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,KAAK,CAAC;QAEd,KAAK,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../src/@types/domains/post.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -23672,6 +23672,60 @@ const createClipPost = async (bundle) => {
|
|
|
23672
23672
|
};
|
|
23673
23673
|
/* end_public_function */
|
|
23674
23674
|
|
|
23675
|
+
/**
|
|
23676
|
+
* ```js
|
|
23677
|
+
* import { PostRepository } from '@amityco/ts-sdk';
|
|
23678
|
+
* const { data: posts, prevPage, nextPage } = await PostRepository.searchPostsByHashtag({ hashtags: ['amity'], limit: 10 });
|
|
23679
|
+
* ```
|
|
23680
|
+
*
|
|
23681
|
+
* Queries a paginable list of {@link Amity.Post} objects
|
|
23682
|
+
*
|
|
23683
|
+
* @param query The query parameters
|
|
23684
|
+
* @returns posts
|
|
23685
|
+
* @category Post API
|
|
23686
|
+
* @async
|
|
23687
|
+
*/
|
|
23688
|
+
const getPostsByHashtag = async (query) => {
|
|
23689
|
+
const client = getActiveClient();
|
|
23690
|
+
client.log('post/queryByHashtag', query);
|
|
23691
|
+
const { page, limit = 10 } = query, params = __rest(query, ["page", "limit"]);
|
|
23692
|
+
const { dataTypes, matchingOnlyParentPost, hashtags } = params;
|
|
23693
|
+
const options = (() => {
|
|
23694
|
+
if (page)
|
|
23695
|
+
return { token: page };
|
|
23696
|
+
if (limit)
|
|
23697
|
+
return { limit };
|
|
23698
|
+
return undefined;
|
|
23699
|
+
})();
|
|
23700
|
+
// API-FIX: parameters should be querystring. (1)
|
|
23701
|
+
// API-FIX: backend should answer Amity.Response (2)
|
|
23702
|
+
// const { data } = await client.http.get<Amity.Response<Amity.PagedResponse<Amity.PostPayload>>>(
|
|
23703
|
+
const { data } = await client.http.get(`/api/v1/search/posts`, {
|
|
23704
|
+
params: Object.assign(Object.assign({}, params), { hashtags,
|
|
23705
|
+
/*
|
|
23706
|
+
* when creating post like image, file, video BE will create 2 posts
|
|
23707
|
+
* 1. parent post to store text with dataType=text
|
|
23708
|
+
* 2. child post to store dataTypes post data
|
|
23709
|
+
*
|
|
23710
|
+
* By default, BE queries only parent post
|
|
23711
|
+
*/
|
|
23712
|
+
matchingOnlyParentPost: matchingOnlyParentPost !== null && matchingOnlyParentPost !== void 0 ? matchingOnlyParentPost : !(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length), options }),
|
|
23713
|
+
});
|
|
23714
|
+
// API-FIX: backend should answer Amity.Response (2)
|
|
23715
|
+
// const { paging, posts } = unwrapPayload(data)
|
|
23716
|
+
// unpacking
|
|
23717
|
+
const { paging } = data, payload = __rest(data, ["paging"]);
|
|
23718
|
+
const preparedPayload = prepareMembershipPayload(payload, 'communityUsers');
|
|
23719
|
+
const { posts } = payload;
|
|
23720
|
+
const cachedAt = client.cache && Date.now();
|
|
23721
|
+
if (client.cache) {
|
|
23722
|
+
ingestInCache(preparedPayload, { cachedAt });
|
|
23723
|
+
const cacheKey = ['post', 'query', Object.assign(Object.assign({}, params), { options })];
|
|
23724
|
+
pushToCache(cacheKey, { posts: posts.map(getResolver('post')), paging });
|
|
23725
|
+
}
|
|
23726
|
+
return { data: posts.map(LinkedObject.post), cachedAt, paging };
|
|
23727
|
+
};
|
|
23728
|
+
|
|
23675
23729
|
/* begin_public_function
|
|
23676
23730
|
id: comment.get_by_ids
|
|
23677
23731
|
*/
|
|
@@ -25559,6 +25613,237 @@ const semanticSearchPosts = (params, callback, config) => {
|
|
|
25559
25613
|
};
|
|
25560
25614
|
};
|
|
25561
25615
|
|
|
25616
|
+
class SearchPostPaginationController extends PaginationController {
|
|
25617
|
+
async getRequest(queryParams, token) {
|
|
25618
|
+
const { limit = COLLECTION_DEFAULT_PAGINATION_LIMIT, matchingOnlyParentPost, hashtags } = queryParams, params = __rest(queryParams, ["limit", "matchingOnlyParentPost", "hashtags"]);
|
|
25619
|
+
const { dataTypes } = params;
|
|
25620
|
+
const baseOptions = {
|
|
25621
|
+
type: params.sortBy || queryParams.limit ? 'pagination' : undefined,
|
|
25622
|
+
};
|
|
25623
|
+
const options = token ? Object.assign(Object.assign({}, baseOptions), { token }) : Object.assign(Object.assign({}, baseOptions), { limit });
|
|
25624
|
+
const { data: queryResponse } = await this.http.get(`/api/v1/search/posts`, {
|
|
25625
|
+
params: Object.assign(Object.assign({}, params), { hashtags,
|
|
25626
|
+
/*
|
|
25627
|
+
* when creating post like image, file, video BE will create 2 posts
|
|
25628
|
+
* 1. parent post to store text with dataType=text
|
|
25629
|
+
* 2. child post to store dataTypes post data
|
|
25630
|
+
*
|
|
25631
|
+
* By default, BE queries only parent post
|
|
25632
|
+
*/
|
|
25633
|
+
matchingOnlyParentPost: matchingOnlyParentPost !== null && matchingOnlyParentPost !== void 0 ? matchingOnlyParentPost : !(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length), options }),
|
|
25634
|
+
});
|
|
25635
|
+
return queryResponse;
|
|
25636
|
+
}
|
|
25637
|
+
}
|
|
25638
|
+
|
|
25639
|
+
class SearchPostQueryStreamController extends QueryStreamController {
|
|
25640
|
+
constructor(query, cacheKey, notifyChange, preparePayload) {
|
|
25641
|
+
super(query, cacheKey);
|
|
25642
|
+
this.notifyChange = notifyChange;
|
|
25643
|
+
this.preparePayload = preparePayload;
|
|
25644
|
+
}
|
|
25645
|
+
async saveToMainDB(response) {
|
|
25646
|
+
const processedPayload = await this.preparePayload(response);
|
|
25647
|
+
const client = getActiveClient();
|
|
25648
|
+
const cachedAt = client.cache && Date.now();
|
|
25649
|
+
if (client.cache) {
|
|
25650
|
+
ingestInCache(processedPayload, { cachedAt });
|
|
25651
|
+
}
|
|
25652
|
+
}
|
|
25653
|
+
appendToQueryStream(response, direction, refresh = false) {
|
|
25654
|
+
var _a, _b;
|
|
25655
|
+
if (refresh) {
|
|
25656
|
+
pushToCache(this.cacheKey, {
|
|
25657
|
+
data: response.posts.map(getResolver('post')),
|
|
25658
|
+
});
|
|
25659
|
+
}
|
|
25660
|
+
else {
|
|
25661
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
25662
|
+
const posts = (_b = collection === null || collection === void 0 ? void 0 : collection.data) !== null && _b !== void 0 ? _b : [];
|
|
25663
|
+
pushToCache(this.cacheKey, Object.assign(Object.assign({}, collection), { data: [...new Set([...posts, ...response.posts.map(getResolver('post'))])] }));
|
|
25664
|
+
}
|
|
25665
|
+
}
|
|
25666
|
+
reactor(action) {
|
|
25667
|
+
return (post) => {
|
|
25668
|
+
var _a, _b;
|
|
25669
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
25670
|
+
if (!collection)
|
|
25671
|
+
return;
|
|
25672
|
+
if (post.parentPostId && post.isDeleted) {
|
|
25673
|
+
const parentPost = (_b = pullFromCache([
|
|
25674
|
+
'post',
|
|
25675
|
+
'get',
|
|
25676
|
+
post.parentPostId,
|
|
25677
|
+
])) === null || _b === void 0 ? void 0 : _b.data;
|
|
25678
|
+
if (!parentPost)
|
|
25679
|
+
return;
|
|
25680
|
+
parentPost.children = parentPost.children.filter(childId => childId !== post.postId);
|
|
25681
|
+
pushToCache(['post', 'get', parentPost.postId], parentPost);
|
|
25682
|
+
}
|
|
25683
|
+
if (action === EnumPostActions.OnPostDeclined) {
|
|
25684
|
+
collection.data = collection.data.filter(postId => postId !== post.postId);
|
|
25685
|
+
}
|
|
25686
|
+
if (action === EnumPostActions.OnPostCreated || action === EnumPostActions.OnPostApproved) {
|
|
25687
|
+
collection.data = [...new Set([post.postId, ...collection.data])];
|
|
25688
|
+
}
|
|
25689
|
+
pushToCache(this.cacheKey, collection);
|
|
25690
|
+
this.notifyChange({ origin: "event" /* Amity.LiveDataOrigin.EVENT */, loading: false });
|
|
25691
|
+
};
|
|
25692
|
+
}
|
|
25693
|
+
subscribeRTE(createSubscriber) {
|
|
25694
|
+
return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
|
|
25695
|
+
}
|
|
25696
|
+
}
|
|
25697
|
+
|
|
25698
|
+
class SearchPostLiveCollectionController extends LiveCollectionController {
|
|
25699
|
+
constructor(query, callback) {
|
|
25700
|
+
const queryStreamId = hash__default["default"](query);
|
|
25701
|
+
const cacheKey = ['posts', 'collection', queryStreamId];
|
|
25702
|
+
const paginationController = new SearchPostPaginationController(query);
|
|
25703
|
+
super(paginationController, queryStreamId, cacheKey, callback);
|
|
25704
|
+
this.query = query;
|
|
25705
|
+
this.queryStreamController = new SearchPostQueryStreamController(this.query, this.cacheKey, this.notifyChange.bind(this), preparePostPayload);
|
|
25706
|
+
this.callback = callback.bind(this);
|
|
25707
|
+
this.loadPage({ initial: true });
|
|
25708
|
+
}
|
|
25709
|
+
setup() {
|
|
25710
|
+
var _a;
|
|
25711
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
25712
|
+
if (!collection) {
|
|
25713
|
+
pushToCache(this.cacheKey, {
|
|
25714
|
+
data: [],
|
|
25715
|
+
params: {},
|
|
25716
|
+
});
|
|
25717
|
+
}
|
|
25718
|
+
}
|
|
25719
|
+
async persistModel(queryPayload) {
|
|
25720
|
+
await this.queryStreamController.saveToMainDB(queryPayload);
|
|
25721
|
+
}
|
|
25722
|
+
persistQueryStream({ response, direction, refresh, }) {
|
|
25723
|
+
this.queryStreamController.appendToQueryStream(response, direction, refresh);
|
|
25724
|
+
}
|
|
25725
|
+
startSubscription() {
|
|
25726
|
+
return this.queryStreamController.subscribeRTE([
|
|
25727
|
+
{ fn: onPostCreated, action: EnumPostActions.OnPostCreated },
|
|
25728
|
+
{ fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },
|
|
25729
|
+
{ fn: onPostUpdatedLocal, action: EnumPostActions.OnPostUpdated },
|
|
25730
|
+
{ fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },
|
|
25731
|
+
{ fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },
|
|
25732
|
+
{ fn: onPostUnflagged, action: EnumPostActions.OnPostUnflagged },
|
|
25733
|
+
{ fn: onPostApproved, action: EnumPostActions.OnPostApproved },
|
|
25734
|
+
{ fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },
|
|
25735
|
+
{ fn: onPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
|
|
25736
|
+
{ fn: onPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
|
|
25737
|
+
{ fn: onLocalPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
|
|
25738
|
+
{ fn: onLocalPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
|
|
25739
|
+
{ fn: onLocalPostDeleted, action: EnumPostActions.OnPostDeleted },
|
|
25740
|
+
{
|
|
25741
|
+
fn: convertEventPayload((callback) => {
|
|
25742
|
+
return onCommentCreated(async (comment) => {
|
|
25743
|
+
var _a;
|
|
25744
|
+
const currentCollection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
25745
|
+
if (!currentCollection || currentCollection.data.includes(comment.referenceId))
|
|
25746
|
+
return;
|
|
25747
|
+
await getPost(comment.referenceId);
|
|
25748
|
+
callback(comment);
|
|
25749
|
+
});
|
|
25750
|
+
}, 'referenceId', 'post'),
|
|
25751
|
+
action: EnumPostActions.OnPostUpdated,
|
|
25752
|
+
},
|
|
25753
|
+
{
|
|
25754
|
+
fn: convertEventPayload((callback) => {
|
|
25755
|
+
return onCommentDeleted(async (comment) => {
|
|
25756
|
+
var _a;
|
|
25757
|
+
const currentCollection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
25758
|
+
if (!currentCollection || currentCollection.data.includes(comment.referenceId))
|
|
25759
|
+
return;
|
|
25760
|
+
await getPost(comment.referenceId);
|
|
25761
|
+
callback(comment);
|
|
25762
|
+
});
|
|
25763
|
+
}, 'referenceId', 'post'),
|
|
25764
|
+
action: EnumPostActions.OnPostUpdated,
|
|
25765
|
+
},
|
|
25766
|
+
]);
|
|
25767
|
+
}
|
|
25768
|
+
notifyChange({ origin, loading, error }) {
|
|
25769
|
+
var _a, _b;
|
|
25770
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
25771
|
+
if (!collection)
|
|
25772
|
+
return;
|
|
25773
|
+
const data = this.applyFilter((_b = collection.data
|
|
25774
|
+
.map(id => pullFromCache(['post', 'get', id]))
|
|
25775
|
+
.filter(isNonNullable)
|
|
25776
|
+
.map(({ data }) => data)) !== null && _b !== void 0 ? _b : []).map(LinkedObject.post);
|
|
25777
|
+
if (!this.shouldNotify(data) && origin === 'event')
|
|
25778
|
+
return;
|
|
25779
|
+
this.callback({
|
|
25780
|
+
onNextPage: () => this.loadPage({ direction: "next" /* Amity.LiveCollectionPageDirection.NEXT */ }),
|
|
25781
|
+
data,
|
|
25782
|
+
hasNextPage: !!this.paginationController.getNextToken(),
|
|
25783
|
+
loading,
|
|
25784
|
+
error,
|
|
25785
|
+
});
|
|
25786
|
+
}
|
|
25787
|
+
applyFilter(data) {
|
|
25788
|
+
var _a;
|
|
25789
|
+
let posts = data;
|
|
25790
|
+
if ((_a = this.query.dataTypes) === null || _a === void 0 ? void 0 : _a.length) {
|
|
25791
|
+
posts = filterByPostDataTypes(posts, this.query.dataTypes);
|
|
25792
|
+
}
|
|
25793
|
+
switch (this.query.sortBy) {
|
|
25794
|
+
case 'firstCreated':
|
|
25795
|
+
posts = posts.sort(sortByFirstCreated);
|
|
25796
|
+
break;
|
|
25797
|
+
case 'lastCreated':
|
|
25798
|
+
default:
|
|
25799
|
+
posts = posts.sort(sortByLastCreated);
|
|
25800
|
+
break;
|
|
25801
|
+
}
|
|
25802
|
+
return posts;
|
|
25803
|
+
}
|
|
25804
|
+
}
|
|
25805
|
+
|
|
25806
|
+
/* begin_public_function
|
|
25807
|
+
id: post.query
|
|
25808
|
+
*/
|
|
25809
|
+
/**
|
|
25810
|
+
* ```js
|
|
25811
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
25812
|
+
*
|
|
25813
|
+
* let posts = []
|
|
25814
|
+
* const unsub = PostRepository.searchPostsByHashtag({
|
|
25815
|
+
* hashtags: ['amity'],
|
|
25816
|
+
* limit: 10,
|
|
25817
|
+
* }, response => merge(posts, response.data))
|
|
25818
|
+
* ```
|
|
25819
|
+
*
|
|
25820
|
+
* Observe all mutations on a list of {@link Amity.Post} for a given target object
|
|
25821
|
+
*
|
|
25822
|
+
* @param params.hashtags the hashtags to search for
|
|
25823
|
+
* @param callback the function to call when new data are available
|
|
25824
|
+
* @param config
|
|
25825
|
+
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
|
|
25826
|
+
*
|
|
25827
|
+
* @category Posts Live Collection
|
|
25828
|
+
*/
|
|
25829
|
+
const searchPostsByHashtag = (params, callback, config) => {
|
|
25830
|
+
const { log, cache } = getActiveClient();
|
|
25831
|
+
if (!cache) {
|
|
25832
|
+
console.log(ENABLE_CACHE_MESSAGE);
|
|
25833
|
+
}
|
|
25834
|
+
const timestamp = Date.now();
|
|
25835
|
+
log(`searchPostsByHashtag(tmpid: ${timestamp}) > listen`);
|
|
25836
|
+
const postsLiveCollection = new SearchPostLiveCollectionController(params, callback);
|
|
25837
|
+
const disposers = postsLiveCollection.startSubscription();
|
|
25838
|
+
const cacheKey = postsLiveCollection.getCacheKey();
|
|
25839
|
+
disposers.push(() => dropFromCache(cacheKey));
|
|
25840
|
+
return () => {
|
|
25841
|
+
log(`searchPostsByHashtag(tmpid: ${timestamp}) > dispose`);
|
|
25842
|
+
disposers.forEach(fn => fn());
|
|
25843
|
+
};
|
|
25844
|
+
};
|
|
25845
|
+
/* end_public_function */
|
|
25846
|
+
|
|
25562
25847
|
var index$8 = /*#__PURE__*/Object.freeze({
|
|
25563
25848
|
__proto__: null,
|
|
25564
25849
|
getPostByIds: getPostByIds,
|
|
@@ -25573,6 +25858,7 @@ var index$8 = /*#__PURE__*/Object.freeze({
|
|
|
25573
25858
|
unflagPost: unflagPost,
|
|
25574
25859
|
isPostFlaggedByMe: isPostFlaggedByMe,
|
|
25575
25860
|
createClipPost: createClipPost,
|
|
25861
|
+
getPostsByHashtag: getPostsByHashtag,
|
|
25576
25862
|
onPostCreated: onPostCreated,
|
|
25577
25863
|
onPostUpdated: onPostUpdated,
|
|
25578
25864
|
onPostDeleted: onPostDeleted,
|
|
@@ -25586,7 +25872,8 @@ var index$8 = /*#__PURE__*/Object.freeze({
|
|
|
25586
25872
|
getPosts: getPosts,
|
|
25587
25873
|
getPinnedPosts: getPinnedPosts,
|
|
25588
25874
|
getGlobalPinnedPosts: getGlobalPinnedPosts,
|
|
25589
|
-
semanticSearchPosts: semanticSearchPosts
|
|
25875
|
+
semanticSearchPosts: semanticSearchPosts,
|
|
25876
|
+
searchPostsByHashtag: searchPostsByHashtag
|
|
25590
25877
|
});
|
|
25591
25878
|
|
|
25592
25879
|
/* begin_public_function
|
package/dist/index.esm.js
CHANGED
|
@@ -39763,6 +39763,60 @@ const createClipPost = async (bundle) => {
|
|
|
39763
39763
|
};
|
|
39764
39764
|
/* end_public_function */
|
|
39765
39765
|
|
|
39766
|
+
/**
|
|
39767
|
+
* ```js
|
|
39768
|
+
* import { PostRepository } from '@amityco/ts-sdk';
|
|
39769
|
+
* const { data: posts, prevPage, nextPage } = await PostRepository.searchPostsByHashtag({ hashtags: ['amity'], limit: 10 });
|
|
39770
|
+
* ```
|
|
39771
|
+
*
|
|
39772
|
+
* Queries a paginable list of {@link Amity.Post} objects
|
|
39773
|
+
*
|
|
39774
|
+
* @param query The query parameters
|
|
39775
|
+
* @returns posts
|
|
39776
|
+
* @category Post API
|
|
39777
|
+
* @async
|
|
39778
|
+
*/
|
|
39779
|
+
const getPostsByHashtag = async (query) => {
|
|
39780
|
+
const client = getActiveClient();
|
|
39781
|
+
client.log('post/queryByHashtag', query);
|
|
39782
|
+
const { page, limit = 10 } = query, params = __rest(query, ["page", "limit"]);
|
|
39783
|
+
const { dataTypes, matchingOnlyParentPost, hashtags } = params;
|
|
39784
|
+
const options = (() => {
|
|
39785
|
+
if (page)
|
|
39786
|
+
return { token: page };
|
|
39787
|
+
if (limit)
|
|
39788
|
+
return { limit };
|
|
39789
|
+
return undefined;
|
|
39790
|
+
})();
|
|
39791
|
+
// API-FIX: parameters should be querystring. (1)
|
|
39792
|
+
// API-FIX: backend should answer Amity.Response (2)
|
|
39793
|
+
// const { data } = await client.http.get<Amity.Response<Amity.PagedResponse<Amity.PostPayload>>>(
|
|
39794
|
+
const { data } = await client.http.get(`/api/v1/search/posts`, {
|
|
39795
|
+
params: Object.assign(Object.assign({}, params), { hashtags,
|
|
39796
|
+
/*
|
|
39797
|
+
* when creating post like image, file, video BE will create 2 posts
|
|
39798
|
+
* 1. parent post to store text with dataType=text
|
|
39799
|
+
* 2. child post to store dataTypes post data
|
|
39800
|
+
*
|
|
39801
|
+
* By default, BE queries only parent post
|
|
39802
|
+
*/
|
|
39803
|
+
matchingOnlyParentPost: matchingOnlyParentPost !== null && matchingOnlyParentPost !== void 0 ? matchingOnlyParentPost : !(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length), options }),
|
|
39804
|
+
});
|
|
39805
|
+
// API-FIX: backend should answer Amity.Response (2)
|
|
39806
|
+
// const { paging, posts } = unwrapPayload(data)
|
|
39807
|
+
// unpacking
|
|
39808
|
+
const { paging } = data, payload = __rest(data, ["paging"]);
|
|
39809
|
+
const preparedPayload = prepareMembershipPayload(payload, 'communityUsers');
|
|
39810
|
+
const { posts } = payload;
|
|
39811
|
+
const cachedAt = client.cache && Date.now();
|
|
39812
|
+
if (client.cache) {
|
|
39813
|
+
ingestInCache(preparedPayload, { cachedAt });
|
|
39814
|
+
const cacheKey = ['post', 'query', Object.assign(Object.assign({}, params), { options })];
|
|
39815
|
+
pushToCache(cacheKey, { posts: posts.map(getResolver('post')), paging });
|
|
39816
|
+
}
|
|
39817
|
+
return { data: posts.map(LinkedObject.post), cachedAt, paging };
|
|
39818
|
+
};
|
|
39819
|
+
|
|
39766
39820
|
/* begin_public_function
|
|
39767
39821
|
id: comment.get_by_ids
|
|
39768
39822
|
*/
|
|
@@ -41650,6 +41704,237 @@ const semanticSearchPosts = (params, callback, config) => {
|
|
|
41650
41704
|
};
|
|
41651
41705
|
};
|
|
41652
41706
|
|
|
41707
|
+
class SearchPostPaginationController extends PaginationController {
|
|
41708
|
+
async getRequest(queryParams, token) {
|
|
41709
|
+
const { limit = COLLECTION_DEFAULT_PAGINATION_LIMIT, matchingOnlyParentPost, hashtags } = queryParams, params = __rest(queryParams, ["limit", "matchingOnlyParentPost", "hashtags"]);
|
|
41710
|
+
const { dataTypes } = params;
|
|
41711
|
+
const baseOptions = {
|
|
41712
|
+
type: params.sortBy || queryParams.limit ? 'pagination' : undefined,
|
|
41713
|
+
};
|
|
41714
|
+
const options = token ? Object.assign(Object.assign({}, baseOptions), { token }) : Object.assign(Object.assign({}, baseOptions), { limit });
|
|
41715
|
+
const { data: queryResponse } = await this.http.get(`/api/v1/search/posts`, {
|
|
41716
|
+
params: Object.assign(Object.assign({}, params), { hashtags,
|
|
41717
|
+
/*
|
|
41718
|
+
* when creating post like image, file, video BE will create 2 posts
|
|
41719
|
+
* 1. parent post to store text with dataType=text
|
|
41720
|
+
* 2. child post to store dataTypes post data
|
|
41721
|
+
*
|
|
41722
|
+
* By default, BE queries only parent post
|
|
41723
|
+
*/
|
|
41724
|
+
matchingOnlyParentPost: matchingOnlyParentPost !== null && matchingOnlyParentPost !== void 0 ? matchingOnlyParentPost : !(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length), options }),
|
|
41725
|
+
});
|
|
41726
|
+
return queryResponse;
|
|
41727
|
+
}
|
|
41728
|
+
}
|
|
41729
|
+
|
|
41730
|
+
class SearchPostQueryStreamController extends QueryStreamController {
|
|
41731
|
+
constructor(query, cacheKey, notifyChange, preparePayload) {
|
|
41732
|
+
super(query, cacheKey);
|
|
41733
|
+
this.notifyChange = notifyChange;
|
|
41734
|
+
this.preparePayload = preparePayload;
|
|
41735
|
+
}
|
|
41736
|
+
async saveToMainDB(response) {
|
|
41737
|
+
const processedPayload = await this.preparePayload(response);
|
|
41738
|
+
const client = getActiveClient();
|
|
41739
|
+
const cachedAt = client.cache && Date.now();
|
|
41740
|
+
if (client.cache) {
|
|
41741
|
+
ingestInCache(processedPayload, { cachedAt });
|
|
41742
|
+
}
|
|
41743
|
+
}
|
|
41744
|
+
appendToQueryStream(response, direction, refresh = false) {
|
|
41745
|
+
var _a, _b;
|
|
41746
|
+
if (refresh) {
|
|
41747
|
+
pushToCache(this.cacheKey, {
|
|
41748
|
+
data: response.posts.map(getResolver('post')),
|
|
41749
|
+
});
|
|
41750
|
+
}
|
|
41751
|
+
else {
|
|
41752
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
41753
|
+
const posts = (_b = collection === null || collection === void 0 ? void 0 : collection.data) !== null && _b !== void 0 ? _b : [];
|
|
41754
|
+
pushToCache(this.cacheKey, Object.assign(Object.assign({}, collection), { data: [...new Set([...posts, ...response.posts.map(getResolver('post'))])] }));
|
|
41755
|
+
}
|
|
41756
|
+
}
|
|
41757
|
+
reactor(action) {
|
|
41758
|
+
return (post) => {
|
|
41759
|
+
var _a, _b;
|
|
41760
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
41761
|
+
if (!collection)
|
|
41762
|
+
return;
|
|
41763
|
+
if (post.parentPostId && post.isDeleted) {
|
|
41764
|
+
const parentPost = (_b = pullFromCache([
|
|
41765
|
+
'post',
|
|
41766
|
+
'get',
|
|
41767
|
+
post.parentPostId,
|
|
41768
|
+
])) === null || _b === void 0 ? void 0 : _b.data;
|
|
41769
|
+
if (!parentPost)
|
|
41770
|
+
return;
|
|
41771
|
+
parentPost.children = parentPost.children.filter(childId => childId !== post.postId);
|
|
41772
|
+
pushToCache(['post', 'get', parentPost.postId], parentPost);
|
|
41773
|
+
}
|
|
41774
|
+
if (action === EnumPostActions.OnPostDeclined) {
|
|
41775
|
+
collection.data = collection.data.filter(postId => postId !== post.postId);
|
|
41776
|
+
}
|
|
41777
|
+
if (action === EnumPostActions.OnPostCreated || action === EnumPostActions.OnPostApproved) {
|
|
41778
|
+
collection.data = [...new Set([post.postId, ...collection.data])];
|
|
41779
|
+
}
|
|
41780
|
+
pushToCache(this.cacheKey, collection);
|
|
41781
|
+
this.notifyChange({ origin: "event" /* Amity.LiveDataOrigin.EVENT */, loading: false });
|
|
41782
|
+
};
|
|
41783
|
+
}
|
|
41784
|
+
subscribeRTE(createSubscriber) {
|
|
41785
|
+
return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
|
|
41786
|
+
}
|
|
41787
|
+
}
|
|
41788
|
+
|
|
41789
|
+
class SearchPostLiveCollectionController extends LiveCollectionController {
|
|
41790
|
+
constructor(query, callback) {
|
|
41791
|
+
const queryStreamId = hash(query);
|
|
41792
|
+
const cacheKey = ['posts', 'collection', queryStreamId];
|
|
41793
|
+
const paginationController = new SearchPostPaginationController(query);
|
|
41794
|
+
super(paginationController, queryStreamId, cacheKey, callback);
|
|
41795
|
+
this.query = query;
|
|
41796
|
+
this.queryStreamController = new SearchPostQueryStreamController(this.query, this.cacheKey, this.notifyChange.bind(this), preparePostPayload);
|
|
41797
|
+
this.callback = callback.bind(this);
|
|
41798
|
+
this.loadPage({ initial: true });
|
|
41799
|
+
}
|
|
41800
|
+
setup() {
|
|
41801
|
+
var _a;
|
|
41802
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
41803
|
+
if (!collection) {
|
|
41804
|
+
pushToCache(this.cacheKey, {
|
|
41805
|
+
data: [],
|
|
41806
|
+
params: {},
|
|
41807
|
+
});
|
|
41808
|
+
}
|
|
41809
|
+
}
|
|
41810
|
+
async persistModel(queryPayload) {
|
|
41811
|
+
await this.queryStreamController.saveToMainDB(queryPayload);
|
|
41812
|
+
}
|
|
41813
|
+
persistQueryStream({ response, direction, refresh, }) {
|
|
41814
|
+
this.queryStreamController.appendToQueryStream(response, direction, refresh);
|
|
41815
|
+
}
|
|
41816
|
+
startSubscription() {
|
|
41817
|
+
return this.queryStreamController.subscribeRTE([
|
|
41818
|
+
{ fn: onPostCreated, action: EnumPostActions.OnPostCreated },
|
|
41819
|
+
{ fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },
|
|
41820
|
+
{ fn: onPostUpdatedLocal, action: EnumPostActions.OnPostUpdated },
|
|
41821
|
+
{ fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },
|
|
41822
|
+
{ fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },
|
|
41823
|
+
{ fn: onPostUnflagged, action: EnumPostActions.OnPostUnflagged },
|
|
41824
|
+
{ fn: onPostApproved, action: EnumPostActions.OnPostApproved },
|
|
41825
|
+
{ fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },
|
|
41826
|
+
{ fn: onPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
|
|
41827
|
+
{ fn: onPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
|
|
41828
|
+
{ fn: onLocalPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
|
|
41829
|
+
{ fn: onLocalPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
|
|
41830
|
+
{ fn: onLocalPostDeleted, action: EnumPostActions.OnPostDeleted },
|
|
41831
|
+
{
|
|
41832
|
+
fn: convertEventPayload((callback) => {
|
|
41833
|
+
return onCommentCreated(async (comment) => {
|
|
41834
|
+
var _a;
|
|
41835
|
+
const currentCollection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
41836
|
+
if (!currentCollection || currentCollection.data.includes(comment.referenceId))
|
|
41837
|
+
return;
|
|
41838
|
+
await getPost(comment.referenceId);
|
|
41839
|
+
callback(comment);
|
|
41840
|
+
});
|
|
41841
|
+
}, 'referenceId', 'post'),
|
|
41842
|
+
action: EnumPostActions.OnPostUpdated,
|
|
41843
|
+
},
|
|
41844
|
+
{
|
|
41845
|
+
fn: convertEventPayload((callback) => {
|
|
41846
|
+
return onCommentDeleted(async (comment) => {
|
|
41847
|
+
var _a;
|
|
41848
|
+
const currentCollection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
41849
|
+
if (!currentCollection || currentCollection.data.includes(comment.referenceId))
|
|
41850
|
+
return;
|
|
41851
|
+
await getPost(comment.referenceId);
|
|
41852
|
+
callback(comment);
|
|
41853
|
+
});
|
|
41854
|
+
}, 'referenceId', 'post'),
|
|
41855
|
+
action: EnumPostActions.OnPostUpdated,
|
|
41856
|
+
},
|
|
41857
|
+
]);
|
|
41858
|
+
}
|
|
41859
|
+
notifyChange({ origin, loading, error }) {
|
|
41860
|
+
var _a, _b;
|
|
41861
|
+
const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
41862
|
+
if (!collection)
|
|
41863
|
+
return;
|
|
41864
|
+
const data = this.applyFilter((_b = collection.data
|
|
41865
|
+
.map(id => pullFromCache(['post', 'get', id]))
|
|
41866
|
+
.filter(isNonNullable)
|
|
41867
|
+
.map(({ data }) => data)) !== null && _b !== void 0 ? _b : []).map(LinkedObject.post);
|
|
41868
|
+
if (!this.shouldNotify(data) && origin === 'event')
|
|
41869
|
+
return;
|
|
41870
|
+
this.callback({
|
|
41871
|
+
onNextPage: () => this.loadPage({ direction: "next" /* Amity.LiveCollectionPageDirection.NEXT */ }),
|
|
41872
|
+
data,
|
|
41873
|
+
hasNextPage: !!this.paginationController.getNextToken(),
|
|
41874
|
+
loading,
|
|
41875
|
+
error,
|
|
41876
|
+
});
|
|
41877
|
+
}
|
|
41878
|
+
applyFilter(data) {
|
|
41879
|
+
var _a;
|
|
41880
|
+
let posts = data;
|
|
41881
|
+
if ((_a = this.query.dataTypes) === null || _a === void 0 ? void 0 : _a.length) {
|
|
41882
|
+
posts = filterByPostDataTypes(posts, this.query.dataTypes);
|
|
41883
|
+
}
|
|
41884
|
+
switch (this.query.sortBy) {
|
|
41885
|
+
case 'firstCreated':
|
|
41886
|
+
posts = posts.sort(sortByFirstCreated);
|
|
41887
|
+
break;
|
|
41888
|
+
case 'lastCreated':
|
|
41889
|
+
default:
|
|
41890
|
+
posts = posts.sort(sortByLastCreated);
|
|
41891
|
+
break;
|
|
41892
|
+
}
|
|
41893
|
+
return posts;
|
|
41894
|
+
}
|
|
41895
|
+
}
|
|
41896
|
+
|
|
41897
|
+
/* begin_public_function
|
|
41898
|
+
id: post.query
|
|
41899
|
+
*/
|
|
41900
|
+
/**
|
|
41901
|
+
* ```js
|
|
41902
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
41903
|
+
*
|
|
41904
|
+
* let posts = []
|
|
41905
|
+
* const unsub = PostRepository.searchPostsByHashtag({
|
|
41906
|
+
* hashtags: ['amity'],
|
|
41907
|
+
* limit: 10,
|
|
41908
|
+
* }, response => merge(posts, response.data))
|
|
41909
|
+
* ```
|
|
41910
|
+
*
|
|
41911
|
+
* Observe all mutations on a list of {@link Amity.Post} for a given target object
|
|
41912
|
+
*
|
|
41913
|
+
* @param params.hashtags the hashtags to search for
|
|
41914
|
+
* @param callback the function to call when new data are available
|
|
41915
|
+
* @param config
|
|
41916
|
+
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
|
|
41917
|
+
*
|
|
41918
|
+
* @category Posts Live Collection
|
|
41919
|
+
*/
|
|
41920
|
+
const searchPostsByHashtag = (params, callback, config) => {
|
|
41921
|
+
const { log, cache } = getActiveClient();
|
|
41922
|
+
if (!cache) {
|
|
41923
|
+
console.log(ENABLE_CACHE_MESSAGE);
|
|
41924
|
+
}
|
|
41925
|
+
const timestamp = Date.now();
|
|
41926
|
+
log(`searchPostsByHashtag(tmpid: ${timestamp}) > listen`);
|
|
41927
|
+
const postsLiveCollection = new SearchPostLiveCollectionController(params, callback);
|
|
41928
|
+
const disposers = postsLiveCollection.startSubscription();
|
|
41929
|
+
const cacheKey = postsLiveCollection.getCacheKey();
|
|
41930
|
+
disposers.push(() => dropFromCache(cacheKey));
|
|
41931
|
+
return () => {
|
|
41932
|
+
log(`searchPostsByHashtag(tmpid: ${timestamp}) > dispose`);
|
|
41933
|
+
disposers.forEach(fn => fn());
|
|
41934
|
+
};
|
|
41935
|
+
};
|
|
41936
|
+
/* end_public_function */
|
|
41937
|
+
|
|
41653
41938
|
var index$8 = /*#__PURE__*/Object.freeze({
|
|
41654
41939
|
__proto__: null,
|
|
41655
41940
|
getPostByIds: getPostByIds,
|
|
@@ -41664,6 +41949,7 @@ var index$8 = /*#__PURE__*/Object.freeze({
|
|
|
41664
41949
|
unflagPost: unflagPost,
|
|
41665
41950
|
isPostFlaggedByMe: isPostFlaggedByMe,
|
|
41666
41951
|
createClipPost: createClipPost,
|
|
41952
|
+
getPostsByHashtag: getPostsByHashtag,
|
|
41667
41953
|
onPostCreated: onPostCreated,
|
|
41668
41954
|
onPostUpdated: onPostUpdated,
|
|
41669
41955
|
onPostDeleted: onPostDeleted,
|
|
@@ -41677,7 +41963,8 @@ var index$8 = /*#__PURE__*/Object.freeze({
|
|
|
41677
41963
|
getPosts: getPosts,
|
|
41678
41964
|
getPinnedPosts: getPinnedPosts,
|
|
41679
41965
|
getGlobalPinnedPosts: getGlobalPinnedPosts,
|
|
41680
|
-
semanticSearchPosts: semanticSearchPosts
|
|
41966
|
+
semanticSearchPosts: semanticSearchPosts,
|
|
41967
|
+
searchPostsByHashtag: searchPostsByHashtag
|
|
41681
41968
|
});
|
|
41682
41969
|
|
|
41683
41970
|
/* begin_public_function
|