@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
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ```js
|
|
3
|
+
* import { PostRepository } from '@amityco/ts-sdk';
|
|
4
|
+
* const { data: posts, prevPage, nextPage } = await PostRepository.searchPostsByHashtag({ hashtags: ['amity'], limit: 10 });
|
|
5
|
+
* ```
|
|
6
|
+
*
|
|
7
|
+
* Queries a paginable list of {@link Amity.Post} objects
|
|
8
|
+
*
|
|
9
|
+
* @param query The query parameters
|
|
10
|
+
* @returns posts
|
|
11
|
+
* @category Post API
|
|
12
|
+
* @async
|
|
13
|
+
*/
|
|
14
|
+
export declare const getPostsByHashtag: (query: Amity.QueryPostsWithHashtags) => Promise<Amity.Cached<Amity.PageToken<Amity.Post>>>;
|
|
15
|
+
//# sourceMappingURL=getPostsByHashtag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPostsByHashtag.d.ts","sourceRoot":"","sources":["../../../src/postRepository/api/getPostsByHashtag.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,UACrB,MAAM,sBAAsB,KAClC,QAAQ,MAAM,MAAM,CAAC,MAAM,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAqDnD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/postRepository/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAE3B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AAEjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AAEpC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/postRepository/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAE3B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AAEjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AAEpC,cAAc,kBAAkB,CAAC;AAEjC,cAAc,qBAAqB,CAAC"}
|
package/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SearchPostPaginationController } from './SearchPostPaginationController';
|
|
2
|
+
import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
|
|
3
|
+
export declare class SearchPostLiveCollectionController extends LiveCollectionController<'post', Amity.PostLiveCollection, Amity.Post, SearchPostPaginationController> {
|
|
4
|
+
private queryStreamController;
|
|
5
|
+
private query;
|
|
6
|
+
constructor(query: Amity.PostLiveCollection, callback: Amity.LiveCollectionCallback<Amity.Post>);
|
|
7
|
+
protected setup(): void;
|
|
8
|
+
protected persistModel(queryPayload: Amity.PostPayload & Amity.Pagination): Promise<void>;
|
|
9
|
+
protected persistQueryStream({ response, direction, refresh, }: Amity.LiveCollectionPersistQueryStreamParams<'post'>): void;
|
|
10
|
+
startSubscription(): Amity.Unsubscriber[];
|
|
11
|
+
notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams): void;
|
|
12
|
+
applyFilter(data: Amity.InternalPost[]): Amity.InternalPost<any>[];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=SearchPostLiveCollectionController.d.ts.map
|
package/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchPostLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAElF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAyB1F,qBAAa,kCAAmC,SAAQ,wBAAwB,CAC9E,MAAM,EACN,KAAK,CAAC,kBAAkB,EACxB,KAAK,CAAC,IAAI,EACV,8BAA8B,CAC/B;IACC,OAAO,CAAC,qBAAqB,CAAkC;IAE/D,OAAO,CAAC,KAAK,CAA2B;gBAE5B,KAAK,EAAE,KAAK,CAAC,kBAAkB,EAAE,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC;IAmB/F,SAAS,CAAC,KAAK;cAUC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU;IAI/E,SAAS,CAAC,kBAAkB,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,KAAK,CAAC,sCAAsC,CAAC,MAAM,CAAC;IAIvD,iBAAiB;IA0DjB,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,0BAA0B;IAsBzE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE;CAmBvC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PaginationController } from '~/core/liveCollection/PaginationController';
|
|
2
|
+
export declare class SearchPostPaginationController extends PaginationController<'post', Amity.PostLiveCollection> {
|
|
3
|
+
getRequest(queryParams: Amity.PostLiveCollection, token: string | undefined): Promise<Amity.PostPayload<any> & Amity.Pagination>;
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=SearchPostPaginationController.d.ts.map
|
package/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchPostPaginationController.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAIlF,qBAAa,8BAA+B,SAAQ,oBAAoB,CACtE,MAAM,EACN,KAAK,CAAC,kBAAkB,CACzB;IACO,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;CAoClF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
|
|
2
|
+
import { EnumPostActions } from '../enums';
|
|
3
|
+
export declare class SearchPostQueryStreamController extends QueryStreamController<Amity.PostPayload, Amity.PostLiveCollection> {
|
|
4
|
+
private notifyChange;
|
|
5
|
+
private preparePayload;
|
|
6
|
+
constructor(query: Amity.PostLiveCollection, cacheKey: string[], notifyChange: (params: Amity.LiveCollectionNotifyParams) => void, preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload);
|
|
7
|
+
saveToMainDB(response: Amity.PostPayload): Promise<void>;
|
|
8
|
+
appendToQueryStream(response: Amity.PostPayload & Partial<Amity.Pagination>, direction: Amity.LiveCollectionPageDirection, refresh?: boolean): void;
|
|
9
|
+
reactor(action: EnumPostActions): (post: Amity.InternalPost) => void;
|
|
10
|
+
subscribeRTE(createSubscriber: {
|
|
11
|
+
fn: (reactor: (post: Amity.InternalPost) => void) => Amity.Unsubscriber;
|
|
12
|
+
action: EnumPostActions;
|
|
13
|
+
}[]): Amity.Unsubscriber[];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=SearchPostQueryStreamController.d.ts.map
|
package/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchPostQueryStreamController.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAKpF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,qBAAa,+BAAgC,SAAQ,qBAAqB,CACxE,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,kBAAkB,CACzB;IACC,OAAO,CAAC,YAAY,CAAqD;IAEzE,OAAO,CAAC,cAAc,CAA8D;gBAGlF,KAAK,EAAE,KAAK,CAAC,kBAAkB,EAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,0BAA0B,KAAK,IAAI,EAChE,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,oBAAoB;IAOvE,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW;IAW9C,mBAAmB,CACjB,QAAQ,EAAE,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EACvD,SAAS,EAAE,KAAK,CAAC,2BAA2B,EAC5C,OAAO,UAAQ;IAkBjB,OAAO,CAAC,MAAM,EAAE,eAAe,UACf,MAAM,YAAY;IA+BlC,YAAY,CACV,gBAAgB,EAAE;QAChB,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,KAAK,IAAI,KAAK,KAAK,CAAC,YAAY,CAAC;QACxE,MAAM,EAAE,eAAe,CAAC;KACzB,EAAE;CAIN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/postRepository/observers/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/postRepository/observers/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ```js
|
|
3
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
4
|
+
*
|
|
5
|
+
* let posts = []
|
|
6
|
+
* const unsub = PostRepository.searchPostsByHashtag({
|
|
7
|
+
* hashtags: ['amity'],
|
|
8
|
+
* limit: 10,
|
|
9
|
+
* }, response => merge(posts, response.data))
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* Observe all mutations on a list of {@link Amity.Post} for a given target object
|
|
13
|
+
*
|
|
14
|
+
* @param params.hashtags the hashtags to search for
|
|
15
|
+
* @param callback the function to call when new data are available
|
|
16
|
+
* @param config
|
|
17
|
+
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
|
|
18
|
+
*
|
|
19
|
+
* @category Posts Live Collection
|
|
20
|
+
*/
|
|
21
|
+
export declare const searchPostsByHashtag: (params: Amity.PostLiveCollection, callback: Amity.LiveCollectionCallback<Amity.Post>, config?: Amity.LiveCollectionConfig) => Amity.Unsubscriber;
|
|
22
|
+
//# sourceMappingURL=searchPostsByHashtag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchPostsByHashtag.d.ts","sourceRoot":"","sources":["../../../src/postRepository/observers/searchPostsByHashtag.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,oBAAoB,WACvB,MAAM,kBAAkB,YACtB,MAAM,sBAAsB,CAAC,MAAM,IAAI,CAAC,WACzC,MAAM,oBAAoB,KAClC,MAAM,YAqBR,CAAC"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@ export const PostContentType = Object.freeze({
|
|
|
11
11
|
declare global {
|
|
12
12
|
namespace Amity {
|
|
13
13
|
// bad hack until we get proper feed objects in backend
|
|
14
|
-
type PostTargetType = Amity.Feed['targetType'] | 'content';
|
|
14
|
+
type PostTargetType = Amity.Feed['targetType'] | 'content' | 'all';
|
|
15
15
|
|
|
16
16
|
type PostContentType = ValueOf<typeof PostContentType> | string;
|
|
17
17
|
|
|
@@ -106,8 +106,14 @@ declare global {
|
|
|
106
106
|
matchingOnlyParentPost?: boolean;
|
|
107
107
|
page?: string;
|
|
108
108
|
limit?: number;
|
|
109
|
+
hashtags?: string[];
|
|
109
110
|
};
|
|
110
111
|
|
|
112
|
+
type QueryPostsWithHashtags = Pick<
|
|
113
|
+
Amity.QueryPosts,
|
|
114
|
+
'dataTypes' | 'matchingOnlyParentPost' | 'sortBy' | 'page' | 'limit' | 'hashtags'
|
|
115
|
+
>;
|
|
116
|
+
|
|
111
117
|
// Omit sortBy explained in asc-3398
|
|
112
118
|
type PostLiveCollection = Amity.LiveCollectionParams<
|
|
113
119
|
Omit<QueryPosts, 'sortBy' | 'page'> & {
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { getActiveClient } from '~/client/api';
|
|
2
|
+
|
|
3
|
+
import { pushToCache } from '~/cache/api';
|
|
4
|
+
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
5
|
+
import { getResolver } from '~/core/model';
|
|
6
|
+
|
|
7
|
+
import { prepareMembershipPayload } from '~/group/utils';
|
|
8
|
+
import { LinkedObject } from '~/utils/linkedObject';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* ```js
|
|
12
|
+
* import { PostRepository } from '@amityco/ts-sdk';
|
|
13
|
+
* const { data: posts, prevPage, nextPage } = await PostRepository.searchPostsByHashtag({ hashtags: ['amity'], limit: 10 });
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Queries a paginable list of {@link Amity.Post} objects
|
|
17
|
+
*
|
|
18
|
+
* @param query The query parameters
|
|
19
|
+
* @returns posts
|
|
20
|
+
* @category Post API
|
|
21
|
+
* @async
|
|
22
|
+
*/
|
|
23
|
+
export const getPostsByHashtag = async (
|
|
24
|
+
query: Amity.QueryPostsWithHashtags,
|
|
25
|
+
): Promise<Amity.Cached<Amity.PageToken<Amity.Post>>> => {
|
|
26
|
+
const client = getActiveClient();
|
|
27
|
+
client.log('post/queryByHashtag', query);
|
|
28
|
+
|
|
29
|
+
const { page, limit = 10, ...params } = query;
|
|
30
|
+
const { dataTypes, matchingOnlyParentPost, hashtags } = params;
|
|
31
|
+
|
|
32
|
+
const options = (() => {
|
|
33
|
+
if (page) return { token: page };
|
|
34
|
+
if (limit) return { limit };
|
|
35
|
+
|
|
36
|
+
return undefined;
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
// API-FIX: parameters should be querystring. (1)
|
|
40
|
+
// API-FIX: backend should answer Amity.Response (2)
|
|
41
|
+
// const { data } = await client.http.get<Amity.Response<Amity.PagedResponse<Amity.PostPayload>>>(
|
|
42
|
+
const { data } = await client.http.get<Amity.PostPayload & Amity.Pagination>(
|
|
43
|
+
`/api/v1/search/posts`,
|
|
44
|
+
{
|
|
45
|
+
params: {
|
|
46
|
+
...params,
|
|
47
|
+
hashtags,
|
|
48
|
+
/*
|
|
49
|
+
* when creating post like image, file, video BE will create 2 posts
|
|
50
|
+
* 1. parent post to store text with dataType=text
|
|
51
|
+
* 2. child post to store dataTypes post data
|
|
52
|
+
*
|
|
53
|
+
* By default, BE queries only parent post
|
|
54
|
+
*/
|
|
55
|
+
matchingOnlyParentPost: matchingOnlyParentPost ?? !dataTypes?.length,
|
|
56
|
+
options,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
// API-FIX: backend should answer Amity.Response (2)
|
|
62
|
+
// const { paging, posts } = unwrapPayload(data)
|
|
63
|
+
// unpacking
|
|
64
|
+
const { paging, ...payload } = data;
|
|
65
|
+
const preparedPayload = prepareMembershipPayload(payload, 'communityUsers');
|
|
66
|
+
const { posts } = payload;
|
|
67
|
+
|
|
68
|
+
const cachedAt = client.cache && Date.now();
|
|
69
|
+
|
|
70
|
+
if (client.cache) {
|
|
71
|
+
ingestInCache(preparedPayload, { cachedAt });
|
|
72
|
+
|
|
73
|
+
const cacheKey = ['post', 'query', { ...params, options } as Amity.Serializable];
|
|
74
|
+
pushToCache(cacheKey, { posts: posts.map(getResolver('post')), paging });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return { data: posts.map(LinkedObject.post), cachedAt, paging };
|
|
78
|
+
};
|
|
@@ -63,13 +63,13 @@ export const queryPosts = async (
|
|
|
63
63
|
// const { paging, posts } = unwrapPayload(data)
|
|
64
64
|
// unpacking
|
|
65
65
|
const { paging, ...payload } = data;
|
|
66
|
-
const
|
|
66
|
+
const preparedPayload = prepareMembershipPayload(payload, 'communityUsers');
|
|
67
67
|
const { posts } = payload;
|
|
68
68
|
|
|
69
69
|
const cachedAt = client.cache && Date.now();
|
|
70
70
|
|
|
71
71
|
if (client.cache) {
|
|
72
|
-
ingestInCache(
|
|
72
|
+
ingestInCache(preparedPayload, { cachedAt });
|
|
73
73
|
|
|
74
74
|
const cacheKey = ['post', 'query', { ...params, options } as Amity.Serializable];
|
|
75
75
|
pushToCache(cacheKey, { posts: posts.map(getResolver('post')), paging });
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import hash from 'object-hash';
|
|
2
|
+
import { pullFromCache, pushToCache } from '~/cache/api';
|
|
3
|
+
import { SearchPostPaginationController } from './SearchPostPaginationController';
|
|
4
|
+
import { SearchPostQueryStreamController } from './SearchPostQueryStreamController';
|
|
5
|
+
import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
|
|
6
|
+
import {
|
|
7
|
+
onPostCreated,
|
|
8
|
+
onPostUpdated,
|
|
9
|
+
onPostDeleted,
|
|
10
|
+
onPostFlagged,
|
|
11
|
+
onPostUnflagged,
|
|
12
|
+
onPostReactionAdded,
|
|
13
|
+
onPostReactionRemoved,
|
|
14
|
+
onPostApproved,
|
|
15
|
+
onPostDeclined,
|
|
16
|
+
} from '~/postRepository/events';
|
|
17
|
+
import { filterByPostDataTypes, sortByFirstCreated, sortByLastCreated } from '~/core/query';
|
|
18
|
+
import { isNonNullable } from '~/utils';
|
|
19
|
+
import { EnumPostActions } from '../enums';
|
|
20
|
+
import { LinkedObject } from '~/utils/linkedObject';
|
|
21
|
+
import { preparePostPayload } from '~/postRepository/utils/payload';
|
|
22
|
+
import { convertEventPayload } from '~/utils/event';
|
|
23
|
+
import { onCommentCreated, onCommentDeleted } from '~/commentRepository';
|
|
24
|
+
import { getPost } from '~/postRepository/internalApi/getPost';
|
|
25
|
+
import { onPostUpdatedLocal } from '~/postRepository/events/onPostUpdatedLocal';
|
|
26
|
+
import { onLocalPostReactionAdded } from '~/postRepository/events/onLocalPostReactionAdded';
|
|
27
|
+
import { onLocalPostReactionRemoved } from '~/postRepository/events/onLocalPostReactionRemoved';
|
|
28
|
+
import { onLocalPostDeleted } from '~/postRepository/events/onLocalPostDeleted';
|
|
29
|
+
|
|
30
|
+
export class SearchPostLiveCollectionController extends LiveCollectionController<
|
|
31
|
+
'post',
|
|
32
|
+
Amity.PostLiveCollection,
|
|
33
|
+
Amity.Post,
|
|
34
|
+
SearchPostPaginationController
|
|
35
|
+
> {
|
|
36
|
+
private queryStreamController: SearchPostQueryStreamController;
|
|
37
|
+
|
|
38
|
+
private query: Amity.PostLiveCollection;
|
|
39
|
+
|
|
40
|
+
constructor(query: Amity.PostLiveCollection, callback: Amity.LiveCollectionCallback<Amity.Post>) {
|
|
41
|
+
const queryStreamId = hash(query);
|
|
42
|
+
const cacheKey = ['posts', 'collection', queryStreamId];
|
|
43
|
+
const paginationController = new SearchPostPaginationController(query);
|
|
44
|
+
|
|
45
|
+
super(paginationController, queryStreamId, cacheKey, callback);
|
|
46
|
+
|
|
47
|
+
this.query = query;
|
|
48
|
+
this.queryStreamController = new SearchPostQueryStreamController(
|
|
49
|
+
this.query,
|
|
50
|
+
this.cacheKey,
|
|
51
|
+
this.notifyChange.bind(this),
|
|
52
|
+
preparePostPayload,
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
this.callback = callback.bind(this);
|
|
56
|
+
this.loadPage({ initial: true });
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
protected setup() {
|
|
60
|
+
const collection = pullFromCache<Amity.PostLiveCollectionCache>(this.cacheKey)?.data;
|
|
61
|
+
if (!collection) {
|
|
62
|
+
pushToCache(this.cacheKey, {
|
|
63
|
+
data: [],
|
|
64
|
+
params: {},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
protected async persistModel(queryPayload: Amity.PostPayload & Amity.Pagination) {
|
|
70
|
+
await this.queryStreamController.saveToMainDB(queryPayload);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
protected persistQueryStream({
|
|
74
|
+
response,
|
|
75
|
+
direction,
|
|
76
|
+
refresh,
|
|
77
|
+
}: Amity.LiveCollectionPersistQueryStreamParams<'post'>) {
|
|
78
|
+
this.queryStreamController.appendToQueryStream(response, direction, refresh);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
startSubscription() {
|
|
82
|
+
return this.queryStreamController.subscribeRTE([
|
|
83
|
+
{ fn: onPostCreated, action: EnumPostActions.OnPostCreated },
|
|
84
|
+
{ fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },
|
|
85
|
+
{ fn: onPostUpdatedLocal, action: EnumPostActions.OnPostUpdated },
|
|
86
|
+
{ fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },
|
|
87
|
+
{ fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },
|
|
88
|
+
{ fn: onPostUnflagged, action: EnumPostActions.OnPostUnflagged },
|
|
89
|
+
{ fn: onPostApproved, action: EnumPostActions.OnPostApproved },
|
|
90
|
+
{ fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },
|
|
91
|
+
{ fn: onPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
|
|
92
|
+
{ fn: onPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
|
|
93
|
+
{ fn: onLocalPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
|
|
94
|
+
{ fn: onLocalPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
|
|
95
|
+
{ fn: onLocalPostDeleted, action: EnumPostActions.OnPostDeleted },
|
|
96
|
+
{
|
|
97
|
+
fn: convertEventPayload(
|
|
98
|
+
(callback: Amity.Listener<Amity.InternalComment>) => {
|
|
99
|
+
return onCommentCreated(async (comment: Amity.InternalComment) => {
|
|
100
|
+
const currentCollection = pullFromCache<Amity.PostLiveCollectionCache>(
|
|
101
|
+
this.cacheKey,
|
|
102
|
+
)?.data;
|
|
103
|
+
|
|
104
|
+
if (!currentCollection || currentCollection.data.includes(comment.referenceId))
|
|
105
|
+
return;
|
|
106
|
+
|
|
107
|
+
await getPost(comment.referenceId);
|
|
108
|
+
callback(comment);
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
'referenceId',
|
|
112
|
+
'post',
|
|
113
|
+
),
|
|
114
|
+
action: EnumPostActions.OnPostUpdated,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
fn: convertEventPayload(
|
|
118
|
+
(callback: Amity.Listener<Amity.InternalComment>) => {
|
|
119
|
+
return onCommentDeleted(async (comment: Amity.InternalComment) => {
|
|
120
|
+
const currentCollection = pullFromCache<Amity.PostLiveCollectionCache>(
|
|
121
|
+
this.cacheKey,
|
|
122
|
+
)?.data;
|
|
123
|
+
|
|
124
|
+
if (!currentCollection || currentCollection.data.includes(comment.referenceId))
|
|
125
|
+
return;
|
|
126
|
+
|
|
127
|
+
await getPost(comment.referenceId);
|
|
128
|
+
callback(comment);
|
|
129
|
+
});
|
|
130
|
+
},
|
|
131
|
+
'referenceId',
|
|
132
|
+
'post',
|
|
133
|
+
),
|
|
134
|
+
action: EnumPostActions.OnPostUpdated,
|
|
135
|
+
},
|
|
136
|
+
]);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {
|
|
140
|
+
const collection = pullFromCache<Amity.PostLiveCollectionCache>(this.cacheKey)?.data;
|
|
141
|
+
if (!collection) return;
|
|
142
|
+
|
|
143
|
+
const data = this.applyFilter(
|
|
144
|
+
collection.data
|
|
145
|
+
.map(id => pullFromCache<Amity.InternalPost>(['post', 'get', id])!)
|
|
146
|
+
.filter(isNonNullable)
|
|
147
|
+
.map(({ data }) => data) ?? [],
|
|
148
|
+
).map(LinkedObject.post);
|
|
149
|
+
|
|
150
|
+
if (!this.shouldNotify(data) && origin === 'event') return;
|
|
151
|
+
|
|
152
|
+
this.callback({
|
|
153
|
+
onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),
|
|
154
|
+
data,
|
|
155
|
+
hasNextPage: !!this.paginationController.getNextToken(),
|
|
156
|
+
loading,
|
|
157
|
+
error,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
applyFilter(data: Amity.InternalPost[]) {
|
|
162
|
+
let posts = data;
|
|
163
|
+
|
|
164
|
+
if (this.query.dataTypes?.length) {
|
|
165
|
+
posts = filterByPostDataTypes(posts, this.query.dataTypes);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
switch (this.query.sortBy) {
|
|
169
|
+
case 'firstCreated':
|
|
170
|
+
posts = posts.sort(sortByFirstCreated);
|
|
171
|
+
break;
|
|
172
|
+
case 'lastCreated':
|
|
173
|
+
default:
|
|
174
|
+
posts = posts.sort(sortByLastCreated);
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return posts;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PaginationController } from '~/core/liveCollection/PaginationController';
|
|
2
|
+
import { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';
|
|
3
|
+
import { inferIsDeleted } from '~/utils/inferIsDeleted';
|
|
4
|
+
|
|
5
|
+
export class SearchPostPaginationController extends PaginationController<
|
|
6
|
+
'post',
|
|
7
|
+
Amity.PostLiveCollection
|
|
8
|
+
> {
|
|
9
|
+
async getRequest(queryParams: Amity.PostLiveCollection, token: string | undefined) {
|
|
10
|
+
const {
|
|
11
|
+
limit = COLLECTION_DEFAULT_PAGINATION_LIMIT,
|
|
12
|
+
matchingOnlyParentPost,
|
|
13
|
+
hashtags,
|
|
14
|
+
...params
|
|
15
|
+
} = queryParams;
|
|
16
|
+
|
|
17
|
+
const { dataTypes } = params;
|
|
18
|
+
|
|
19
|
+
const baseOptions = {
|
|
20
|
+
type: params.sortBy || queryParams.limit ? 'pagination' : undefined,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const options = token ? { ...baseOptions, token } : { ...baseOptions, limit };
|
|
24
|
+
|
|
25
|
+
const { data: queryResponse } = await this.http.get<Amity.PostPayload & Amity.Pagination>(
|
|
26
|
+
`/api/v1/search/posts`,
|
|
27
|
+
{
|
|
28
|
+
params: {
|
|
29
|
+
...params,
|
|
30
|
+
hashtags,
|
|
31
|
+
/*
|
|
32
|
+
* when creating post like image, file, video BE will create 2 posts
|
|
33
|
+
* 1. parent post to store text with dataType=text
|
|
34
|
+
* 2. child post to store dataTypes post data
|
|
35
|
+
*
|
|
36
|
+
* By default, BE queries only parent post
|
|
37
|
+
*/
|
|
38
|
+
matchingOnlyParentPost: matchingOnlyParentPost ?? !dataTypes?.length,
|
|
39
|
+
options,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
);
|
|
43
|
+
return queryResponse;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
|
|
2
|
+
import { pullFromCache, pushToCache } from '~/cache/api';
|
|
3
|
+
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
4
|
+
import { getResolver } from '~/core/model';
|
|
5
|
+
import { getActiveClient } from '~/client';
|
|
6
|
+
import { EnumPostActions } from '../enums';
|
|
7
|
+
|
|
8
|
+
export class SearchPostQueryStreamController extends QueryStreamController<
|
|
9
|
+
Amity.PostPayload,
|
|
10
|
+
Amity.PostLiveCollection
|
|
11
|
+
> {
|
|
12
|
+
private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
|
|
13
|
+
|
|
14
|
+
private preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload;
|
|
15
|
+
|
|
16
|
+
constructor(
|
|
17
|
+
query: Amity.PostLiveCollection,
|
|
18
|
+
cacheKey: string[],
|
|
19
|
+
notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
|
|
20
|
+
preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload,
|
|
21
|
+
) {
|
|
22
|
+
super(query, cacheKey);
|
|
23
|
+
this.notifyChange = notifyChange;
|
|
24
|
+
this.preparePayload = preparePayload;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async saveToMainDB(response: Amity.PostPayload) {
|
|
28
|
+
const processedPayload = await this.preparePayload(response);
|
|
29
|
+
|
|
30
|
+
const client = getActiveClient();
|
|
31
|
+
const cachedAt = client.cache && Date.now();
|
|
32
|
+
|
|
33
|
+
if (client.cache) {
|
|
34
|
+
ingestInCache(processedPayload, { cachedAt });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
appendToQueryStream(
|
|
39
|
+
response: Amity.PostPayload & Partial<Amity.Pagination>,
|
|
40
|
+
direction: Amity.LiveCollectionPageDirection,
|
|
41
|
+
refresh = false,
|
|
42
|
+
) {
|
|
43
|
+
if (refresh) {
|
|
44
|
+
pushToCache(this.cacheKey, {
|
|
45
|
+
data: response.posts.map(getResolver('post')),
|
|
46
|
+
});
|
|
47
|
+
} else {
|
|
48
|
+
const collection = pullFromCache<Amity.PostLiveCollectionCache>(this.cacheKey)?.data;
|
|
49
|
+
|
|
50
|
+
const posts = collection?.data ?? [];
|
|
51
|
+
|
|
52
|
+
pushToCache(this.cacheKey, {
|
|
53
|
+
...collection,
|
|
54
|
+
data: [...new Set([...posts, ...response.posts.map(getResolver('post'))])],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
reactor(action: EnumPostActions) {
|
|
60
|
+
return (post: Amity.InternalPost) => {
|
|
61
|
+
const collection = pullFromCache<Amity.PostLiveCollectionCache>(this.cacheKey)?.data;
|
|
62
|
+
|
|
63
|
+
if (!collection) return;
|
|
64
|
+
|
|
65
|
+
if (post.parentPostId && post.isDeleted) {
|
|
66
|
+
const parentPost = pullFromCache<Amity.InternalPost>([
|
|
67
|
+
'post',
|
|
68
|
+
'get',
|
|
69
|
+
post.parentPostId,
|
|
70
|
+
])?.data;
|
|
71
|
+
|
|
72
|
+
if (!parentPost) return;
|
|
73
|
+
|
|
74
|
+
parentPost.children = parentPost.children.filter(childId => childId !== post.postId);
|
|
75
|
+
pushToCache(['post', 'get', parentPost.postId], parentPost);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (action === EnumPostActions.OnPostDeclined) {
|
|
79
|
+
collection.data = collection.data.filter(postId => postId !== post.postId);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (action === EnumPostActions.OnPostCreated || action === EnumPostActions.OnPostApproved) {
|
|
83
|
+
collection.data = [...new Set([post.postId, ...collection.data])];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
pushToCache(this.cacheKey, collection);
|
|
87
|
+
this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
subscribeRTE(
|
|
92
|
+
createSubscriber: {
|
|
93
|
+
fn: (reactor: (post: Amity.InternalPost) => void) => Amity.Unsubscriber;
|
|
94
|
+
action: EnumPostActions;
|
|
95
|
+
}[],
|
|
96
|
+
) {
|
|
97
|
+
return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { getActiveClient } from '~/client/api';
|
|
2
|
+
import { dropFromCache } from '~/cache/api';
|
|
3
|
+
|
|
4
|
+
import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
|
|
5
|
+
import { SearchPostLiveCollectionController } from './getPostsByHashtag/SearchPostLiveCollectionController';
|
|
6
|
+
|
|
7
|
+
/* begin_public_function
|
|
8
|
+
id: post.query
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* ```js
|
|
12
|
+
* import { PostRepository } from '@amityco/ts-sdk'
|
|
13
|
+
*
|
|
14
|
+
* let posts = []
|
|
15
|
+
* const unsub = PostRepository.searchPostsByHashtag({
|
|
16
|
+
* hashtags: ['amity'],
|
|
17
|
+
* limit: 10,
|
|
18
|
+
* }, response => merge(posts, response.data))
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Observe all mutations on a list of {@link Amity.Post} for a given target object
|
|
22
|
+
*
|
|
23
|
+
* @param params.hashtags the hashtags to search for
|
|
24
|
+
* @param callback the function to call when new data are available
|
|
25
|
+
* @param config
|
|
26
|
+
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
|
|
27
|
+
*
|
|
28
|
+
* @category Posts Live Collection
|
|
29
|
+
*/
|
|
30
|
+
export const searchPostsByHashtag = (
|
|
31
|
+
params: Amity.PostLiveCollection,
|
|
32
|
+
callback: Amity.LiveCollectionCallback<Amity.Post>,
|
|
33
|
+
config?: Amity.LiveCollectionConfig,
|
|
34
|
+
): Amity.Unsubscriber => {
|
|
35
|
+
const { log, cache } = getActiveClient();
|
|
36
|
+
|
|
37
|
+
if (!cache) {
|
|
38
|
+
console.log(ENABLE_CACHE_MESSAGE);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const timestamp = Date.now();
|
|
42
|
+
log(`searchPostsByHashtag(tmpid: ${timestamp}) > listen`);
|
|
43
|
+
|
|
44
|
+
const postsLiveCollection = new SearchPostLiveCollectionController(params, callback);
|
|
45
|
+
const disposers = postsLiveCollection.startSubscription();
|
|
46
|
+
|
|
47
|
+
const cacheKey = postsLiveCollection.getCacheKey();
|
|
48
|
+
|
|
49
|
+
disposers.push(() => dropFromCache(cacheKey));
|
|
50
|
+
|
|
51
|
+
return () => {
|
|
52
|
+
log(`searchPostsByHashtag(tmpid: ${timestamp}) > dispose`);
|
|
53
|
+
disposers.forEach(fn => fn());
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
/* end_public_function */
|