@amityco/ts-sdk 7.7.1-9bf1d358.0 → 7.7.1-a266e7d8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/post.d.ts +5 -3
  2. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/post.d.ts.map +1 -1
  3. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/post.js.map +1 -1
  4. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/index.d.ts +1 -0
  5. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/index.d.ts.map +1 -1
  6. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/index.js +1 -0
  7. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/index.js.map +1 -1
  8. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/searchPostsByHashtag.d.ts +16 -0
  9. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/searchPostsByHashtag.d.ts.map +1 -0
  10. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/searchPostsByHashtag.js +62 -0
  11. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/api/searchPostsByHashtag.js.map +1 -0
  12. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPosts/PostPaginationController.d.ts.map +1 -1
  13. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPosts/PostPaginationController.js +3 -4
  14. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPosts/PostPaginationController.js.map +1 -1
  15. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.d.ts +14 -0
  16. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.d.ts.map +1 -0
  17. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.js +135 -0
  18. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.js.map +1 -0
  19. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.d.ts +5 -0
  20. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.d.ts.map +1 -0
  21. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.js +27 -0
  22. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.js.map +1 -0
  23. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.d.ts +15 -0
  24. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.d.ts.map +1 -0
  25. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.js +65 -0
  26. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.js.map +1 -0
  27. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/index.d.ts +1 -0
  28. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/index.d.ts.map +1 -1
  29. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/index.js +1 -0
  30. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/index.js.map +1 -1
  31. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/searchPostsByHashtag.d.ts +22 -0
  32. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/searchPostsByHashtag.d.ts.map +1 -0
  33. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/searchPostsByHashtag.js +45 -0
  34. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/postRepository/observers/searchPostsByHashtag.js.map +1 -0
  35. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/tsconfig.tsbuildinfo +1 -1
  36. package/dist/@types/domains/post.d.ts +5 -3
  37. package/dist/@types/domains/post.d.ts.map +1 -1
  38. package/dist/index.cjs.js +3 -3
  39. package/dist/index.esm.js +3 -3
  40. package/dist/index.umd.js +1 -1
  41. package/dist/postRepository/api/index.d.ts +1 -0
  42. package/dist/postRepository/api/index.d.ts.map +1 -1
  43. package/dist/postRepository/api/searchPostsByHashtag.d.ts +16 -0
  44. package/dist/postRepository/api/searchPostsByHashtag.d.ts.map +1 -0
  45. package/dist/postRepository/observers/getPosts/PostPaginationController.d.ts.map +1 -1
  46. package/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.d.ts +14 -0
  47. package/dist/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.d.ts.map +1 -0
  48. package/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.d.ts +5 -0
  49. package/dist/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.d.ts.map +1 -0
  50. package/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.d.ts +15 -0
  51. package/dist/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.d.ts.map +1 -0
  52. package/dist/postRepository/observers/index.d.ts +1 -0
  53. package/dist/postRepository/observers/index.d.ts.map +1 -1
  54. package/dist/postRepository/observers/searchPostsByHashtag.d.ts +22 -0
  55. package/dist/postRepository/observers/searchPostsByHashtag.d.ts.map +1 -0
  56. package/package.json +1 -1
  57. package/src/@types/domains/post.ts +9 -3
  58. package/src/postRepository/api/index.ts +2 -0
  59. package/src/postRepository/api/searchPostsByHashtag.ts +77 -0
  60. package/src/postRepository/observers/getPosts/PostPaginationController.ts +0 -7
  61. package/src/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.ts +198 -0
  62. package/src/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.ts +47 -0
  63. package/src/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.ts +99 -0
  64. package/src/postRepository/observers/index.ts +1 -0
  65. package/src/postRepository/observers/searchPostsByHashtag.ts +56 -0
  66. package/tsconfig.tsbuildinfo +1 -1
@@ -77,12 +77,14 @@ declare global {
77
77
  matchingOnlyParentPost?: boolean;
78
78
  page?: string;
79
79
  limit?: number;
80
- hashtags?: string[];
81
80
  };
82
- type PostLiveCollection = Amity.LiveCollectionParams<Omit<QueryPosts, 'sortBy' | 'page'> & {
81
+ type QueryPostsWithHashtags = Pick<Amity.QueryPosts, 'dataTypes' | 'matchingOnlyParentPost' | 'sortBy' | 'page' | 'limit'> & {
82
+ hashtags: string[];
83
+ };
84
+ type PostLiveCollection = Amity.LiveCollectionParams<Omit<QueryPosts | QueryPostsWithHashtags, 'sortBy' | 'page'> & {
83
85
  sortBy?: 'lastCreated' | 'firstCreated';
84
86
  }>;
85
- type PostLiveCollectionCache = Amity.LiveCollectionCache<Amity.InternalPost['postId'], Pick<QueryPosts, 'page'>>;
87
+ type PostLiveCollectionCache = Amity.LiveCollectionCache<Amity.InternalPost['postId'], Pick<QueryPosts | QueryPostsWithHashtags, 'page'>>;
86
88
  type QuerySemanticSearchPosts = {
87
89
  query: string;
88
90
  targetId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../src/@types/domains/post.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../src/@types/domains/post.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"post.js","sourceRoot":"","sources":["../../../src/@types/domains/post.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC,CAAC","sourcesContent":["export const PostContentType = Object.freeze({\n TEXT: 'text',\n IMAGE: 'image',\n FILE: 'file',\n VIDEO: 'video',\n LIVESTREAM: 'liveStream',\n POLL: 'poll',\n CLIP: 'clip',\n});\n\ndeclare global {\n namespace Amity {\n // bad hack until we get proper feed objects in backend\n type PostTargetType = Amity.Feed['targetType'] | 'content' | 'all';\n\n type PostContentType = ValueOf<typeof PostContentType> | string;\n\n type PostActionType =\n | 'onFetch'\n | 'onCreate'\n | 'onUpdate'\n | 'onDelete'\n | 'onApproved'\n | 'onDeclined'\n | 'onFlagged'\n | 'onUnflagged'\n | 'onReactionAdded'\n | 'onReactionRemoved';\n\n type RawPost<T extends PostContentType = any> = {\n postId: string;\n postedUserId: Amity.RawUser['userId'];\n parentId: Amity.RawPost['postId'];\n parentPostId: Amity.RawPost['postId'];\n targetType: PostTargetType;\n targetId: string;\n feedId: Amity.Feed['feedId'];\n children: Amity.RawPost['postId'][];\n comments: Amity.InternalComment['commentId'][];\n commentsCount: number; // API-FIX: backend doesn't follow its own convention\n hasFlaggedChildren: false;\n hasFlaggedComment: false;\n editedAt: Amity.timestamp;\n // Amity.Metadata\n metadata?: Record<string, any>;\n // Amity.Flaggable\n flagCount: number;\n hashFlag: {\n bits: number;\n hashes: number;\n hash: string;\n } | null;\n // Amity.Taggable\n tags?: string[];\n // Amity.Timestamps\n createdAt: Amity.timestamp;\n updatedAt?: Amity.timestamp;\n // Amity.SoftDelete\n isDeleted?: boolean;\n // Amity.Subscribable\n path: string;\n // Amity.AnalyticPostData\n impression: number;\n reach: number;\n // Amity.Reactable\n reactionsCount: number;\n reactions: Record<string, number>;\n myReactions?: string[];\n hashtags?: string[];\n } & Amity.Content<T> &\n Amity.Mentionable<'user'>;\n\n type InternalPost<T extends PostContentType = any> = RawPost<T> & {\n feedType?: 'reviewing' | 'published';\n };\n\n type PostLinkObject = {\n childrenPosts: Amity.Post[];\n latestComments: (Amity.Comment | null)[];\n creator: Amity.User | undefined;\n analytics: {\n markAsViewed: () => void;\n };\n getImageInfo: () => Amity.File<'image'> | undefined;\n getVideoInfo: () => Amity.File<'video'> | undefined;\n getVideoThumbnailInfo: () => Amity.File<'image'> | undefined;\n getFileInfo: () => Amity.File<'file'> | undefined;\n getPollInfo: () => Amity.Poll | undefined;\n getLivestreamInfo: () => Amity.Stream | undefined;\n getClipInfo: () => Amity.File<'clip'> | undefined;\n };\n\n type Post<T extends PostContentType = any> = Amity.InternalPost<T> & Amity.PostLinkObject;\n\n type ClipDisplayMode = 'fill' | 'fit';\n\n type QueryPosts = {\n targetId: string;\n targetType: Amity.InternalPost['targetType'];\n sortBy?: 'lastCreated' | 'firstCreated';\n dataTypes?: Exclude<Amity.PostContentType, 'text'>[];\n includeDeleted?: boolean;\n hasFlag?: boolean;\n feedType?: 'reviewing' | 'published';\n tags?: Amity.Taggable['tags'];\n matchingOnlyParentPost?: boolean;\n page?: string;\n limit?: number;\n hashtags?: string[];\n };\n\n // Omit sortBy explained in asc-3398\n type PostLiveCollection = Amity.LiveCollectionParams<\n Omit<QueryPosts, 'sortBy' | 'page'> & {\n sortBy?: 'lastCreated' | 'firstCreated';\n }\n >;\n\n type PostLiveCollectionCache = Amity.LiveCollectionCache<\n Amity.InternalPost['postId'],\n Pick<QueryPosts, 'page'>\n >;\n\n type QuerySemanticSearchPosts = {\n query: string;\n targetId?: string;\n targetType?: Amity.InternalPost['targetType'];\n dataTypes?: string[];\n matchingOnlyParentPost?: boolean;\n };\n\n type SemanticSearchPostLiveCollection = Amity.LiveCollectionParams<\n Omit<QuerySemanticSearchPosts, 'page'>\n >;\n\n type SemanticSearchPostLiveCollectionCache = Amity.LiveCollectionCache<\n Amity.InternalPost['postId'], // postId:score\n QuerySemanticSearchPosts\n >;\n }\n}\n"]}
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../../src/@types/domains/post.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC,CAAC","sourcesContent":["export const PostContentType = Object.freeze({\n TEXT: 'text',\n IMAGE: 'image',\n FILE: 'file',\n VIDEO: 'video',\n LIVESTREAM: 'liveStream',\n POLL: 'poll',\n CLIP: 'clip',\n});\n\ndeclare global {\n namespace Amity {\n // bad hack until we get proper feed objects in backend\n type PostTargetType = Amity.Feed['targetType'] | 'content' | 'all';\n\n type PostContentType = ValueOf<typeof PostContentType> | string;\n\n type PostActionType =\n | 'onFetch'\n | 'onCreate'\n | 'onUpdate'\n | 'onDelete'\n | 'onApproved'\n | 'onDeclined'\n | 'onFlagged'\n | 'onUnflagged'\n | 'onReactionAdded'\n | 'onReactionRemoved';\n\n type RawPost<T extends PostContentType = any> = {\n postId: string;\n postedUserId: Amity.RawUser['userId'];\n parentId: Amity.RawPost['postId'];\n parentPostId: Amity.RawPost['postId'];\n targetType: PostTargetType;\n targetId: string;\n feedId: Amity.Feed['feedId'];\n children: Amity.RawPost['postId'][];\n comments: Amity.InternalComment['commentId'][];\n commentsCount: number; // API-FIX: backend doesn't follow its own convention\n hasFlaggedChildren: false;\n hasFlaggedComment: false;\n editedAt: Amity.timestamp;\n // Amity.Metadata\n metadata?: Record<string, any>;\n // Amity.Flaggable\n flagCount: number;\n hashFlag: {\n bits: number;\n hashes: number;\n hash: string;\n } | null;\n // Amity.Taggable\n tags?: string[];\n // Amity.Timestamps\n createdAt: Amity.timestamp;\n updatedAt?: Amity.timestamp;\n // Amity.SoftDelete\n isDeleted?: boolean;\n // Amity.Subscribable\n path: string;\n // Amity.AnalyticPostData\n impression: number;\n reach: number;\n // Amity.Reactable\n reactionsCount: number;\n reactions: Record<string, number>;\n myReactions?: string[];\n hashtags?: string[];\n } & Amity.Content<T> &\n Amity.Mentionable<'user'>;\n\n type InternalPost<T extends PostContentType = any> = RawPost<T> & {\n feedType?: 'reviewing' | 'published';\n };\n\n type PostLinkObject = {\n childrenPosts: Amity.Post[];\n latestComments: (Amity.Comment | null)[];\n creator: Amity.User | undefined;\n analytics: {\n markAsViewed: () => void;\n };\n getImageInfo: () => Amity.File<'image'> | undefined;\n getVideoInfo: () => Amity.File<'video'> | undefined;\n getVideoThumbnailInfo: () => Amity.File<'image'> | undefined;\n getFileInfo: () => Amity.File<'file'> | undefined;\n getPollInfo: () => Amity.Poll | undefined;\n getLivestreamInfo: () => Amity.Stream | undefined;\n getClipInfo: () => Amity.File<'clip'> | undefined;\n };\n\n type Post<T extends PostContentType = any> = Amity.InternalPost<T> & Amity.PostLinkObject;\n\n type ClipDisplayMode = 'fill' | 'fit';\n\n type QueryPosts = {\n targetId: string;\n targetType: Amity.InternalPost['targetType'];\n sortBy?: 'lastCreated' | 'firstCreated';\n dataTypes?: Exclude<Amity.PostContentType, 'text'>[];\n includeDeleted?: boolean;\n hasFlag?: boolean;\n feedType?: 'reviewing' | 'published';\n tags?: Amity.Taggable['tags'];\n matchingOnlyParentPost?: boolean;\n page?: string;\n limit?: number;\n };\n\n type QueryPostsWithHashtags = Pick<\n Amity.QueryPosts,\n 'dataTypes' | 'matchingOnlyParentPost' | 'sortBy' | 'page' | 'limit'\n > & {\n hashtags: string[];\n };\n\n // Omit sortBy explained in asc-3398\n type PostLiveCollection = Amity.LiveCollectionParams<\n Omit<QueryPosts | QueryPostsWithHashtags, 'sortBy' | 'page'> & {\n sortBy?: 'lastCreated' | 'firstCreated';\n }\n >;\n\n type PostLiveCollectionCache = Amity.LiveCollectionCache<\n Amity.InternalPost['postId'],\n Pick<QueryPosts | QueryPostsWithHashtags, 'page'>\n >;\n\n type QuerySemanticSearchPosts = {\n query: string;\n targetId?: string;\n targetType?: Amity.InternalPost['targetType'];\n dataTypes?: string[];\n matchingOnlyParentPost?: boolean;\n };\n\n type SemanticSearchPostLiveCollection = Amity.LiveCollectionParams<\n Omit<QuerySemanticSearchPosts, 'page'>\n >;\n\n type SemanticSearchPostLiveCollectionCache = Amity.LiveCollectionCache<\n Amity.InternalPost['postId'], // postId:score\n QuerySemanticSearchPosts\n >;\n }\n}\n"]}
@@ -10,4 +10,5 @@ export * from './flagPost';
10
10
  export * from './unflagPost';
11
11
  export * from './isPostFlaggedByMe';
12
12
  export * from './createClipPost';
13
+ export * from './searchPostsByHashtag';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -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,wBAAwB,CAAC"}
@@ -10,4 +10,5 @@ export * from './flagPost';
10
10
  export * from './unflagPost';
11
11
  export * from './isPostFlaggedByMe';
12
12
  export * from './createClipPost';
13
+ export * from './searchPostsByHashtag';
13
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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","sourcesContent":["export * from './getPostByIds';\n\nexport * from './createPost';\nexport * from './editPost';\n\nexport * from './deletePost';\nexport * from './softDeletePost';\nexport * from './hardDeletePost';\n\nexport * from './approvePost';\nexport * from './declinePost';\n\nexport * from './flagPost';\nexport * from './unflagPost';\nexport * from './isPostFlaggedByMe';\n\nexport * from './createClipPost';\n"]}
1
+ {"version":3,"file":"index.js","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,wBAAwB,CAAC","sourcesContent":["export * from './getPostByIds';\n\nexport * from './createPost';\nexport * from './editPost';\n\nexport * from './deletePost';\nexport * from './softDeletePost';\nexport * from './hardDeletePost';\n\nexport * from './approvePost';\nexport * from './declinePost';\n\nexport * from './flagPost';\nexport * from './unflagPost';\nexport * from './isPostFlaggedByMe';\n\nexport * from './createClipPost';\n\nexport * from './searchPostsByHashtag';\n"]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ```js
3
+ * import { searchPostsByHashtag } from '@amityco/ts-sdk'
4
+ * const { data: posts, prevPage, nextPage } = await 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
+ *
12
+ * @category Post API
13
+ * @async
14
+ */
15
+ export declare const searchPostsByHashtag: (query: Amity.QueryPostsWithHashtags) => Promise<Amity.Cached<Amity.PageToken<Amity.Post>>>;
16
+ //# sourceMappingURL=searchPostsByHashtag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchPostsByHashtag.d.ts","sourceRoot":"","sources":["../../../src/postRepository/api/searchPostsByHashtag.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,UACxB,MAAM,sBAAsB,KAClC,QAAQ,MAAM,MAAM,CAAC,MAAM,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAkDnD,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { __rest } from "tslib";
2
+ import { getActiveClient } from '~/client/api';
3
+ import { pushToCache } from '~/cache/api';
4
+ import { ingestInCache } from '~/cache/api/ingestInCache';
5
+ import { getResolver } from '~/core/model';
6
+ import { prepareMembershipPayload } from '~/group/utils';
7
+ import { LinkedObject } from '~/utils/linkedObject';
8
+ /**
9
+ * ```js
10
+ * import { searchPostsByHashtag } from '@amityco/ts-sdk'
11
+ * const { data: posts, prevPage, nextPage } = await searchPostsByHashtag({ hashtags: ['amity'], limit: 10 });
12
+ * ```
13
+ *
14
+ * Queries a paginable list of {@link Amity.Post} objects
15
+ *
16
+ * @param query The query parameters
17
+ * @returns posts
18
+ *
19
+ * @category Post API
20
+ * @async
21
+ */
22
+ export const searchPostsByHashtag = async (query) => {
23
+ const client = getActiveClient();
24
+ client.log('post/queryByHashtag', query);
25
+ const { page, limit = 10 } = query, params = __rest(query, ["page", "limit"]);
26
+ const { dataTypes, matchingOnlyParentPost, hashtags } = params;
27
+ const options = (() => {
28
+ if (page)
29
+ return { token: page };
30
+ if (limit)
31
+ return { limit };
32
+ return undefined;
33
+ })();
34
+ // API-FIX: parameters should be querystring. (1)
35
+ // API-FIX: backend should answer Amity.Response (2)
36
+ // const { data } = await client.http.get<Amity.Response<Amity.PagedResponse<Amity.PostPayload>>>(
37
+ const { data } = await client.http.get(`/api/v5/posts`, {
38
+ params: Object.assign(Object.assign({}, params), { hashtags,
39
+ /*
40
+ * when creating post like image, file, video BE will create 2 posts
41
+ * 1. parent post to store text with dataType=text
42
+ * 2. child post to store dataTypes post data
43
+ *
44
+ * By default, BE queries only parent post
45
+ */
46
+ matchingOnlyParentPost: matchingOnlyParentPost !== null && matchingOnlyParentPost !== void 0 ? matchingOnlyParentPost : !(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length), options }),
47
+ });
48
+ // API-FIX: backend should answer Amity.Response (2)
49
+ // const { paging, posts } = unwrapPayload(data)
50
+ // unpacking
51
+ const { paging } = data, payload = __rest(data, ["paging"]);
52
+ const paperedPayload = prepareMembershipPayload(payload, 'communityUsers');
53
+ const { posts } = payload;
54
+ const cachedAt = client.cache && Date.now();
55
+ if (client.cache) {
56
+ ingestInCache(paperedPayload, { cachedAt });
57
+ const cacheKey = ['post', 'query', Object.assign(Object.assign({}, params), { options })];
58
+ pushToCache(cacheKey, { posts: posts.map(getResolver('post')), paging });
59
+ }
60
+ return { data: posts.map(LinkedObject.post), cachedAt, paging };
61
+ };
62
+ //# sourceMappingURL=searchPostsByHashtag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchPostsByHashtag.js","sourceRoot":"","sources":["../../../src/postRepository/api/searchPostsByHashtag.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,KAAmC,EACiB,EAAE;IACtD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAEzC,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,KAAgB,KAAK,EAAhB,MAAM,UAAK,KAAK,EAAvC,iBAA+B,CAAQ,CAAC;IAC9C,MAAM,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE/D,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;QACpB,IAAI,IAAI;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACjC,IAAI,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAE5B,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,EAAE,CAAC;IAEL,iDAAiD;IACjD,oDAAoD;IACpD,kGAAkG;IAClG,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAuC,eAAe,EAAE;QAC5F,MAAM,kCACD,MAAM,KACT,QAAQ;YACR;;;;;;eAMG;YACH,sBAAsB,EAAE,sBAAsB,aAAtB,sBAAsB,cAAtB,sBAAsB,GAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAA,EACpE,OAAO,GACR;KACF,CAAC,CAAC;IAEH,oDAAoD;IACpD,gDAAgD;IAChD,YAAY;IACZ,MAAM,EAAE,MAAM,KAAiB,IAAI,EAAhB,OAAO,UAAK,IAAI,EAA7B,UAAsB,CAAO,CAAC;IACpC,MAAM,cAAc,GAAG,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC3E,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAE5C,IAAI,MAAM,CAAC,KAAK,EAAE;QAChB,aAAa,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,gCAAK,MAAM,KAAE,OAAO,GAAwB,CAAC,CAAC;QACjF,WAAW,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC1E;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAClE,CAAC,CAAC","sourcesContent":["import { getActiveClient } from '~/client/api';\n\nimport { pushToCache } from '~/cache/api';\nimport { ingestInCache } from '~/cache/api/ingestInCache';\nimport { getResolver } from '~/core/model';\n\nimport { prepareMembershipPayload } from '~/group/utils';\nimport { inferIsDeleted } from '~/utils/inferIsDeleted';\nimport { LinkedObject } from '~/utils/linkedObject';\n\n/**\n * ```js\n * import { searchPostsByHashtag } from '@amityco/ts-sdk'\n * const { data: posts, prevPage, nextPage } = await searchPostsByHashtag({ hashtags: ['amity'], limit: 10 });\n * ```\n *\n * Queries a paginable list of {@link Amity.Post} objects\n *\n * @param query The query parameters\n * @returns posts\n *\n * @category Post API\n * @async\n */\nexport const searchPostsByHashtag = async (\n query: Amity.QueryPostsWithHashtags,\n): Promise<Amity.Cached<Amity.PageToken<Amity.Post>>> => {\n const client = getActiveClient();\n client.log('post/queryByHashtag', query);\n\n const { page, limit = 10, ...params } = query;\n const { dataTypes, matchingOnlyParentPost, hashtags } = params;\n\n const options = (() => {\n if (page) return { token: page };\n if (limit) return { limit };\n\n return undefined;\n })();\n\n // API-FIX: parameters should be querystring. (1)\n // API-FIX: backend should answer Amity.Response (2)\n // const { data } = await client.http.get<Amity.Response<Amity.PagedResponse<Amity.PostPayload>>>(\n const { data } = await client.http.get<Amity.PostPayload & Amity.Pagination>(`/api/v5/posts`, {\n params: {\n ...params,\n hashtags,\n /*\n * when creating post like image, file, video BE will create 2 posts\n * 1. parent post to store text with dataType=text\n * 2. child post to store dataTypes post data\n *\n * By default, BE queries only parent post\n */\n matchingOnlyParentPost: matchingOnlyParentPost ?? !dataTypes?.length,\n options,\n },\n });\n\n // API-FIX: backend should answer Amity.Response (2)\n // const { paging, posts } = unwrapPayload(data)\n // unpacking\n const { paging, ...payload } = data;\n const paperedPayload = prepareMembershipPayload(payload, 'communityUsers');\n const { posts } = payload;\n\n const cachedAt = client.cache && Date.now();\n\n if (client.cache) {\n ingestInCache(paperedPayload, { cachedAt });\n\n const cacheKey = ['post', 'query', { ...params, options } as Amity.Serializable];\n pushToCache(cacheKey, { posts: posts.map(getResolver('post')), paging });\n }\n\n return { data: posts.map(LinkedObject.post), cachedAt, paging };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PostPaginationController.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPosts/PostPaginationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAIlF,qBAAa,wBAAyB,SAAQ,oBAAoB,CAChE,MAAM,EACN,KAAK,CAAC,kBAAkB,CACzB;IACO,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;CAwClF"}
1
+ {"version":3,"file":"PostPaginationController.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPosts/PostPaginationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAGlF,qBAAa,wBAAyB,SAAQ,oBAAoB,CAChE,MAAM,EACN,KAAK,CAAC,kBAAkB,CACzB;IACO,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;CAkClF"}
@@ -1,17 +1,16 @@
1
1
  import { __rest } from "tslib";
2
2
  import { PaginationController } from '~/core/liveCollection/PaginationController';
3
3
  import { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';
4
- import { inferIsDeleted } from '~/utils/inferIsDeleted';
5
4
  export class PostPaginationController extends PaginationController {
6
5
  async getRequest(queryParams, token) {
7
- const { limit = COLLECTION_DEFAULT_PAGINATION_LIMIT, includeDeleted, matchingOnlyParentPost, targetType, hashtags } = queryParams, params = __rest(queryParams, ["limit", "includeDeleted", "matchingOnlyParentPost", "targetType", "hashtags"]);
6
+ const { limit = COLLECTION_DEFAULT_PAGINATION_LIMIT, matchingOnlyParentPost } = queryParams, params = __rest(queryParams, ["limit", "matchingOnlyParentPost"]);
8
7
  const { dataTypes } = params;
9
8
  const baseOptions = {
10
9
  type: params.sortBy || queryParams.limit ? 'pagination' : undefined,
11
10
  };
12
11
  const options = token ? Object.assign(Object.assign({}, baseOptions), { token }) : Object.assign(Object.assign({}, baseOptions), { limit });
13
12
  const { data: queryResponse } = await this.http.get(`/api/v5/posts`, {
14
- params: Object.assign(Object.assign(Object.assign(Object.assign({}, params), { isDeleted: inferIsDeleted(includeDeleted),
13
+ params: Object.assign(Object.assign({}, params), {
15
14
  /*
16
15
  * when creating post like image, file, video BE will create 2 posts
17
16
  * 1. parent post to store text with dataType=text
@@ -19,7 +18,7 @@ export class PostPaginationController extends PaginationController {
19
18
  *
20
19
  * By default, BE queries only parent post
21
20
  */
22
- matchingOnlyParentPost: matchingOnlyParentPost !== null && matchingOnlyParentPost !== void 0 ? matchingOnlyParentPost : !(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length), targetType }), (targetType === 'all' && hashtags && { hashtags })), { options }),
21
+ matchingOnlyParentPost: matchingOnlyParentPost !== null && matchingOnlyParentPost !== void 0 ? matchingOnlyParentPost : !(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length), options }),
23
22
  });
24
23
  return queryResponse;
25
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PostPaginationController.js","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPosts/PostPaginationController.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,wBAAyB,SAAQ,oBAG7C;IACC,KAAK,CAAC,UAAU,CAAC,WAAqC,EAAE,KAAyB;QAC/E,MAAM,EACJ,KAAK,GAAG,mCAAmC,EAC3C,cAAc,EACd,sBAAsB,EACtB,UAAU,EACV,QAAQ,KAEN,WAAW,EADV,MAAM,UACP,WAAW,EAPT,+EAOL,CAAc,CAAC;QAEhB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAE7B,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;SACpE,CAAC;QAEF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,iCAAM,WAAW,KAAE,KAAK,IAAG,CAAC,iCAAM,WAAW,KAAE,KAAK,GAAE,CAAC;QAE9E,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CACjD,eAAe,EACf;YACE,MAAM,8DACD,MAAM,KACT,SAAS,EAAE,cAAc,CAAC,cAAc,CAAC;gBACzC;;;;;;mBAMG;gBACH,sBAAsB,EAAE,sBAAsB,aAAtB,sBAAsB,cAAtB,sBAAsB,GAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAA,EACpE,UAAU,KACP,CAAC,UAAU,KAAK,KAAK,IAAI,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC,KACrD,OAAO,GACR;SACF,CACF,CAAC;QACF,OAAO,aAAa,CAAC;IACvB,CAAC;CACF","sourcesContent":["import { PaginationController } from '~/core/liveCollection/PaginationController';\nimport { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';\nimport { inferIsDeleted } from '~/utils/inferIsDeleted';\n\nexport class PostPaginationController extends PaginationController<\n 'post',\n Amity.PostLiveCollection\n> {\n async getRequest(queryParams: Amity.PostLiveCollection, token: string | undefined) {\n const {\n limit = COLLECTION_DEFAULT_PAGINATION_LIMIT,\n includeDeleted,\n matchingOnlyParentPost,\n targetType,\n hashtags,\n ...params\n } = queryParams;\n\n const { dataTypes } = params;\n\n const baseOptions = {\n type: params.sortBy || queryParams.limit ? 'pagination' : undefined,\n };\n\n const options = token ? { ...baseOptions, token } : { ...baseOptions, limit };\n\n const { data: queryResponse } = await this.http.get<Amity.PostPayload & Amity.Pagination>(\n `/api/v5/posts`,\n {\n params: {\n ...params,\n isDeleted: inferIsDeleted(includeDeleted),\n /*\n * when creating post like image, file, video BE will create 2 posts\n * 1. parent post to store text with dataType=text\n * 2. child post to store dataTypes post data\n *\n * By default, BE queries only parent post\n */\n matchingOnlyParentPost: matchingOnlyParentPost ?? !dataTypes?.length,\n targetType,\n ...(targetType === 'all' && hashtags && { hashtags }),\n options,\n },\n },\n );\n return queryResponse;\n }\n}\n"]}
1
+ {"version":3,"file":"PostPaginationController.js","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPosts/PostPaginationController.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AAExE,MAAM,OAAO,wBAAyB,SAAQ,oBAG7C;IACC,KAAK,CAAC,UAAU,CAAC,WAAqC,EAAE,KAAyB;QAC/E,MAAM,EACJ,KAAK,GAAG,mCAAmC,EAC3C,sBAAsB,KAEpB,WAAW,EADV,MAAM,UACP,WAAW,EAJT,mCAIL,CAAc,CAAC;QAEhB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAE7B,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;SACpE,CAAC;QAEF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,iCAAM,WAAW,KAAE,KAAK,IAAG,CAAC,iCAAM,WAAW,KAAE,KAAK,GAAE,CAAC;QAE9E,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CACjD,eAAe,EACf;YACE,MAAM,kCACD,MAAM;gBACT;;;;;;mBAMG;gBACH,sBAAsB,EAAE,sBAAsB,aAAtB,sBAAsB,cAAtB,sBAAsB,GAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAA,EACpE,OAAO,GACR;SACF,CACF,CAAC;QACF,OAAO,aAAa,CAAC;IACvB,CAAC;CACF","sourcesContent":["import { PaginationController } from '~/core/liveCollection/PaginationController';\nimport { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';\n\nexport class PostPaginationController extends PaginationController<\n 'post',\n Amity.PostLiveCollection\n> {\n async getRequest(queryParams: Amity.PostLiveCollection, token: string | undefined) {\n const {\n limit = COLLECTION_DEFAULT_PAGINATION_LIMIT,\n matchingOnlyParentPost,\n ...params\n } = queryParams;\n\n const { dataTypes } = params;\n\n const baseOptions = {\n type: params.sortBy || queryParams.limit ? 'pagination' : undefined,\n };\n\n const options = token ? { ...baseOptions, token } : { ...baseOptions, limit };\n\n const { data: queryResponse } = await this.http.get<Amity.PostPayload & Amity.Pagination>(\n `/api/v5/posts`,\n {\n params: {\n ...params,\n /*\n * when creating post like image, file, video BE will create 2 posts\n * 1. parent post to store text with dataType=text\n * 2. child post to store dataTypes post data\n *\n * By default, BE queries only parent post\n */\n matchingOnlyParentPost: matchingOnlyParentPost ?? !dataTypes?.length,\n options,\n },\n },\n );\n return queryResponse;\n }\n}\n"]}
@@ -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
@@ -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;AA+B1F,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;CA+BvC"}
@@ -0,0 +1,135 @@
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 { onPostCreated, onPostUpdated, onPostDeleted, onPostFlagged, onPostUnflagged, onPostReactionAdded, onPostReactionRemoved, onPostApproved, onPostDeclined, } from '~/postRepository/events';
7
+ import { filterByFeedType, filterByPostDataTypes, filterByPropEquality, sortByFirstCreated, sortByLastCreated, } from '~/core/query';
8
+ import { isNonNullable } from '~/utils';
9
+ import { EnumPostActions } from '../enums';
10
+ import { LinkedObject } from '~/utils/linkedObject';
11
+ import { preparePostPayload } from '~/postRepository/utils/payload';
12
+ import { convertEventPayload } from '~/utils/event';
13
+ import { onCommentCreated, onCommentDeleted } from '~/commentRepository';
14
+ import { getPost } from '~/postRepository/internalApi/getPost';
15
+ import { onPostUpdatedLocal } from '~/postRepository/events/onPostUpdatedLocal';
16
+ import { onLocalPostReactionAdded } from '~/postRepository/events/onLocalPostReactionAdded';
17
+ import { onLocalPostReactionRemoved } from '~/postRepository/events/onLocalPostReactionRemoved';
18
+ import { onLocalPostDeleted } from '~/postRepository/events/onLocalPostDeleted';
19
+ export class SearchPostLiveCollectionController extends LiveCollectionController {
20
+ constructor(query, callback) {
21
+ const queryStreamId = hash(query);
22
+ const cacheKey = ['posts', 'collection', queryStreamId];
23
+ const paginationController = new SearchPostPaginationController(query);
24
+ super(paginationController, queryStreamId, cacheKey, callback);
25
+ this.query = query;
26
+ this.queryStreamController = new SearchPostQueryStreamController(this.query, this.cacheKey, this.notifyChange.bind(this), preparePostPayload);
27
+ this.callback = callback.bind(this);
28
+ this.loadPage({ initial: true });
29
+ }
30
+ setup() {
31
+ var _a;
32
+ const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
33
+ if (!collection) {
34
+ pushToCache(this.cacheKey, {
35
+ data: [],
36
+ params: {},
37
+ });
38
+ }
39
+ }
40
+ async persistModel(queryPayload) {
41
+ await this.queryStreamController.saveToMainDB(queryPayload);
42
+ }
43
+ persistQueryStream({ response, direction, refresh, }) {
44
+ this.queryStreamController.appendToQueryStream(response, direction, refresh);
45
+ }
46
+ startSubscription() {
47
+ return this.queryStreamController.subscribeRTE([
48
+ { fn: onPostCreated, action: EnumPostActions.OnPostCreated },
49
+ { fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },
50
+ { fn: onPostUpdatedLocal, action: EnumPostActions.OnPostUpdated },
51
+ { fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },
52
+ { fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },
53
+ { fn: onPostUnflagged, action: EnumPostActions.OnPostUnflagged },
54
+ { fn: onPostApproved, action: EnumPostActions.OnPostApproved },
55
+ { fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },
56
+ { fn: onPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
57
+ { fn: onPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
58
+ { fn: onLocalPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
59
+ { fn: onLocalPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
60
+ { fn: onLocalPostDeleted, action: EnumPostActions.OnPostDeleted },
61
+ {
62
+ fn: convertEventPayload((callback) => {
63
+ return onCommentCreated(async (comment) => {
64
+ var _a;
65
+ const currentCollection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
66
+ if (!currentCollection || currentCollection.data.includes(comment.referenceId))
67
+ return;
68
+ await getPost(comment.referenceId);
69
+ callback(comment);
70
+ });
71
+ }, 'referenceId', 'post'),
72
+ action: EnumPostActions.OnPostUpdated,
73
+ },
74
+ {
75
+ fn: convertEventPayload((callback) => {
76
+ return onCommentDeleted(async (comment) => {
77
+ var _a;
78
+ const currentCollection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
79
+ if (!currentCollection || currentCollection.data.includes(comment.referenceId))
80
+ return;
81
+ await getPost(comment.referenceId);
82
+ callback(comment);
83
+ });
84
+ }, 'referenceId', 'post'),
85
+ action: EnumPostActions.OnPostUpdated,
86
+ },
87
+ ]);
88
+ }
89
+ notifyChange({ origin, loading, error }) {
90
+ var _a, _b;
91
+ const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
92
+ if (!collection)
93
+ return;
94
+ const data = this.applyFilter((_b = collection.data
95
+ .map(id => pullFromCache(['post', 'get', id]))
96
+ .filter(isNonNullable)
97
+ .map(({ data }) => data)) !== null && _b !== void 0 ? _b : []).map(LinkedObject.post);
98
+ if (!this.shouldNotify(data) && origin === 'event')
99
+ return;
100
+ this.callback({
101
+ onNextPage: () => this.loadPage({ direction: "next" /* Amity.LiveCollectionPageDirection.NEXT */ }),
102
+ data,
103
+ hasNextPage: !!this.paginationController.getNextToken(),
104
+ loading,
105
+ error,
106
+ });
107
+ }
108
+ applyFilter(data) {
109
+ var _a;
110
+ let posts = data;
111
+ if (!this.query.includeDeleted) {
112
+ posts = filterByPropEquality(posts, 'isDeleted', false);
113
+ }
114
+ if (this.query.tags) {
115
+ posts = posts.filter(p => { var _a; return (_a = p.tags) === null || _a === void 0 ? void 0 : _a.some(t => { var _a; return (_a = this.query.tags) === null || _a === void 0 ? void 0 : _a.includes(t); }); });
116
+ }
117
+ if (this.query.targetType === 'community' && this.query.feedType) {
118
+ posts = filterByFeedType(posts, this.query.feedType);
119
+ }
120
+ if ((_a = this.query.dataTypes) === null || _a === void 0 ? void 0 : _a.length) {
121
+ posts = filterByPostDataTypes(posts, this.query.dataTypes);
122
+ }
123
+ switch (this.query.sortBy) {
124
+ case 'firstCreated':
125
+ posts = posts.sort(sortByFirstCreated);
126
+ break;
127
+ case 'lastCreated':
128
+ default:
129
+ posts = posts.sort(sortByLastCreated);
130
+ break;
131
+ }
132
+ return posts;
133
+ }
134
+ }
135
+ //# sourceMappingURL=SearchPostLiveCollectionController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchPostLiveCollectionController.js","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPostsByHashtag/SearchPostLiveCollectionController.ts"],"names":[],"mappings":"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","sourcesContent":["import hash from 'object-hash';\nimport { pullFromCache, pushToCache } from '~/cache/api';\nimport { SearchPostPaginationController } from './SearchPostPaginationController';\nimport { SearchPostQueryStreamController } from './SearchPostQueryStreamController';\nimport { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';\nimport {\n onPostCreated,\n onPostUpdated,\n onPostDeleted,\n onPostFlagged,\n onPostUnflagged,\n onPostReactionAdded,\n onPostReactionRemoved,\n onPostApproved,\n onPostDeclined,\n} from '~/postRepository/events';\nimport {\n filterByFeedType,\n filterByPostDataTypes,\n filterByPropEquality,\n sortByFirstCreated,\n sortByLastCreated,\n} from '~/core/query';\nimport { isNonNullable } from '~/utils';\nimport { EnumPostActions } from '../enums';\nimport { LinkedObject } from '~/utils/linkedObject';\nimport { preparePostPayload } from '~/postRepository/utils/payload';\nimport { convertEventPayload } from '~/utils/event';\nimport { onCommentCreated, onCommentDeleted } from '~/commentRepository';\nimport { getPost } from '~/postRepository/internalApi/getPost';\nimport { onPostUpdatedLocal } from '~/postRepository/events/onPostUpdatedLocal';\nimport { onLocalPostReactionAdded } from '~/postRepository/events/onLocalPostReactionAdded';\nimport { onLocalPostReactionRemoved } from '~/postRepository/events/onLocalPostReactionRemoved';\nimport { onLocalPostDeleted } from '~/postRepository/events/onLocalPostDeleted';\n\nexport class SearchPostLiveCollectionController extends LiveCollectionController<\n 'post',\n Amity.PostLiveCollection,\n Amity.Post,\n SearchPostPaginationController\n> {\n private queryStreamController: SearchPostQueryStreamController;\n\n private query: Amity.PostLiveCollection;\n\n constructor(query: Amity.PostLiveCollection, callback: Amity.LiveCollectionCallback<Amity.Post>) {\n const queryStreamId = hash(query);\n const cacheKey = ['posts', 'collection', queryStreamId];\n const paginationController = new SearchPostPaginationController(query);\n\n super(paginationController, queryStreamId, cacheKey, callback);\n\n this.query = query;\n this.queryStreamController = new SearchPostQueryStreamController(\n this.query,\n this.cacheKey,\n this.notifyChange.bind(this),\n preparePostPayload,\n );\n\n this.callback = callback.bind(this);\n this.loadPage({ initial: true });\n }\n\n protected setup() {\n const collection = pullFromCache<Amity.PostLiveCollectionCache>(this.cacheKey)?.data;\n if (!collection) {\n pushToCache(this.cacheKey, {\n data: [],\n params: {},\n });\n }\n }\n\n protected async persistModel(queryPayload: Amity.PostPayload & Amity.Pagination) {\n await this.queryStreamController.saveToMainDB(queryPayload);\n }\n\n protected persistQueryStream({\n response,\n direction,\n refresh,\n }: Amity.LiveCollectionPersistQueryStreamParams<'post'>) {\n this.queryStreamController.appendToQueryStream(response, direction, refresh);\n }\n\n startSubscription() {\n return this.queryStreamController.subscribeRTE([\n { fn: onPostCreated, action: EnumPostActions.OnPostCreated },\n { fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },\n { fn: onPostUpdatedLocal, action: EnumPostActions.OnPostUpdated },\n { fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },\n { fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },\n { fn: onPostUnflagged, action: EnumPostActions.OnPostUnflagged },\n { fn: onPostApproved, action: EnumPostActions.OnPostApproved },\n { fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },\n { fn: onPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },\n { fn: onPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },\n { fn: onLocalPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },\n { fn: onLocalPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },\n { fn: onLocalPostDeleted, action: EnumPostActions.OnPostDeleted },\n {\n fn: convertEventPayload(\n (callback: Amity.Listener<Amity.InternalComment>) => {\n return onCommentCreated(async (comment: Amity.InternalComment) => {\n const currentCollection = pullFromCache<Amity.PostLiveCollectionCache>(\n this.cacheKey,\n )?.data;\n\n if (!currentCollection || currentCollection.data.includes(comment.referenceId))\n return;\n\n await getPost(comment.referenceId);\n callback(comment);\n });\n },\n 'referenceId',\n 'post',\n ),\n action: EnumPostActions.OnPostUpdated,\n },\n {\n fn: convertEventPayload(\n (callback: Amity.Listener<Amity.InternalComment>) => {\n return onCommentDeleted(async (comment: Amity.InternalComment) => {\n const currentCollection = pullFromCache<Amity.PostLiveCollectionCache>(\n this.cacheKey,\n )?.data;\n\n if (!currentCollection || currentCollection.data.includes(comment.referenceId))\n return;\n\n await getPost(comment.referenceId);\n callback(comment);\n });\n },\n 'referenceId',\n 'post',\n ),\n action: EnumPostActions.OnPostUpdated,\n },\n ]);\n }\n\n notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {\n const collection = pullFromCache<Amity.PostLiveCollectionCache>(this.cacheKey)?.data;\n if (!collection) return;\n\n const data = this.applyFilter(\n collection.data\n .map(id => pullFromCache<Amity.InternalPost>(['post', 'get', id])!)\n .filter(isNonNullable)\n .map(({ data }) => data) ?? [],\n ).map(LinkedObject.post);\n\n if (!this.shouldNotify(data) && origin === 'event') return;\n\n this.callback({\n onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),\n data,\n hasNextPage: !!this.paginationController.getNextToken(),\n loading,\n error,\n });\n }\n\n applyFilter(data: Amity.InternalPost[]) {\n let posts = data;\n\n if (!this.query.includeDeleted) {\n posts = filterByPropEquality(posts, 'isDeleted', false);\n }\n\n if (this.query.tags) {\n posts = posts.filter(p => p.tags?.some(t => this.query.tags?.includes(t)));\n }\n\n if (this.query.targetType === 'community' && this.query.feedType) {\n posts = filterByFeedType(posts, this.query.feedType);\n }\n\n if (this.query.dataTypes?.length) {\n posts = filterByPostDataTypes(posts, this.query.dataTypes);\n }\n\n switch (this.query.sortBy) {\n case 'firstCreated':\n posts = posts.sort(sortByFirstCreated);\n break;\n case 'lastCreated':\n default:\n posts = posts.sort(sortByLastCreated);\n break;\n }\n\n return posts;\n }\n}\n"]}
@@ -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
@@ -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;CAsClF"}
@@ -0,0 +1,27 @@
1
+ import { __rest } from "tslib";
2
+ import { PaginationController } from '~/core/liveCollection/PaginationController';
3
+ import { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';
4
+ import { inferIsDeleted } from '~/utils/inferIsDeleted';
5
+ export class SearchPostPaginationController extends PaginationController {
6
+ async getRequest(queryParams, token) {
7
+ const { limit = COLLECTION_DEFAULT_PAGINATION_LIMIT, includeDeleted, matchingOnlyParentPost, hashtags } = queryParams, params = __rest(queryParams, ["limit", "includeDeleted", "matchingOnlyParentPost", "hashtags"]);
8
+ const { dataTypes } = params;
9
+ const baseOptions = {
10
+ type: params.sortBy || queryParams.limit ? 'pagination' : undefined,
11
+ };
12
+ const options = token ? Object.assign(Object.assign({}, baseOptions), { token }) : Object.assign(Object.assign({}, baseOptions), { limit });
13
+ const { data: queryResponse } = await this.http.get(`/api/v1/search/posts`, {
14
+ params: Object.assign(Object.assign({}, params), { isDeleted: inferIsDeleted(includeDeleted), hashtags,
15
+ /*
16
+ * when creating post like image, file, video BE will create 2 posts
17
+ * 1. parent post to store text with dataType=text
18
+ * 2. child post to store dataTypes post data
19
+ *
20
+ * By default, BE queries only parent post
21
+ */
22
+ matchingOnlyParentPost: matchingOnlyParentPost !== null && matchingOnlyParentPost !== void 0 ? matchingOnlyParentPost : !(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length), options }),
23
+ });
24
+ return queryResponse;
25
+ }
26
+ }
27
+ //# sourceMappingURL=SearchPostPaginationController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchPostPaginationController.js","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPostsByHashtag/SearchPostPaginationController.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,8BAA+B,SAAQ,oBAGnD;IACC,KAAK,CAAC,UAAU,CAAC,WAAqC,EAAE,KAAyB;QAC/E,MAAM,EACJ,KAAK,GAAG,mCAAmC,EAC3C,cAAc,EACd,sBAAsB,EACtB,QAAQ,KAEN,WAAW,EADV,MAAM,UACP,WAAW,EANT,iEAML,CAAc,CAAC;QAEhB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAE7B,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;SACpE,CAAC;QAEF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,iCAAM,WAAW,KAAE,KAAK,IAAG,CAAC,iCAAM,WAAW,KAAE,KAAK,GAAE,CAAC;QAE9E,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CACjD,sBAAsB,EACtB;YACE,MAAM,kCACD,MAAM,KACT,SAAS,EAAE,cAAc,CAAC,cAAc,CAAC,EACzC,QAAQ;gBACR;;;;;;mBAMG;gBACH,sBAAsB,EAAE,sBAAsB,aAAtB,sBAAsB,cAAtB,sBAAsB,GAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAA,EACpE,OAAO,GACR;SACF,CACF,CAAC;QACF,OAAO,aAAa,CAAC;IACvB,CAAC;CACF","sourcesContent":["import { PaginationController } from '~/core/liveCollection/PaginationController';\nimport { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';\nimport { inferIsDeleted } from '~/utils/inferIsDeleted';\n\nexport class SearchPostPaginationController extends PaginationController<\n 'post',\n Amity.PostLiveCollection\n> {\n async getRequest(queryParams: Amity.PostLiveCollection, token: string | undefined) {\n const {\n limit = COLLECTION_DEFAULT_PAGINATION_LIMIT,\n includeDeleted,\n matchingOnlyParentPost,\n hashtags,\n ...params\n } = queryParams;\n\n const { dataTypes } = params;\n\n const baseOptions = {\n type: params.sortBy || queryParams.limit ? 'pagination' : undefined,\n };\n\n const options = token ? { ...baseOptions, token } : { ...baseOptions, limit };\n\n const { data: queryResponse } = await this.http.get<Amity.PostPayload & Amity.Pagination>(\n `/api/v1/search/posts`,\n {\n params: {\n ...params,\n isDeleted: inferIsDeleted(includeDeleted),\n hashtags,\n /*\n * when creating post like image, file, video BE will create 2 posts\n * 1. parent post to store text with dataType=text\n * 2. child post to store dataTypes post data\n *\n * By default, BE queries only parent post\n */\n matchingOnlyParentPost: matchingOnlyParentPost ?? !dataTypes?.length,\n options,\n },\n },\n );\n return queryResponse;\n }\n}\n"]}
@@ -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
@@ -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"}
@@ -0,0 +1,65 @@
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
+ export class SearchPostQueryStreamController extends QueryStreamController {
8
+ constructor(query, cacheKey, notifyChange, preparePayload) {
9
+ super(query, cacheKey);
10
+ this.notifyChange = notifyChange;
11
+ this.preparePayload = preparePayload;
12
+ }
13
+ async saveToMainDB(response) {
14
+ const processedPayload = await this.preparePayload(response);
15
+ const client = getActiveClient();
16
+ const cachedAt = client.cache && Date.now();
17
+ if (client.cache) {
18
+ ingestInCache(processedPayload, { cachedAt });
19
+ }
20
+ }
21
+ appendToQueryStream(response, direction, refresh = false) {
22
+ var _a, _b;
23
+ if (refresh) {
24
+ pushToCache(this.cacheKey, {
25
+ data: response.posts.map(getResolver('post')),
26
+ });
27
+ }
28
+ else {
29
+ const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
30
+ const posts = (_b = collection === null || collection === void 0 ? void 0 : collection.data) !== null && _b !== void 0 ? _b : [];
31
+ pushToCache(this.cacheKey, Object.assign(Object.assign({}, collection), { data: [...new Set([...posts, ...response.posts.map(getResolver('post'))])] }));
32
+ }
33
+ }
34
+ reactor(action) {
35
+ return (post) => {
36
+ var _a, _b;
37
+ const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
38
+ if (!collection)
39
+ return;
40
+ if (post.parentPostId && post.isDeleted) {
41
+ const parentPost = (_b = pullFromCache([
42
+ 'post',
43
+ 'get',
44
+ post.parentPostId,
45
+ ])) === null || _b === void 0 ? void 0 : _b.data;
46
+ if (!parentPost)
47
+ return;
48
+ parentPost.children = parentPost.children.filter(childId => childId !== post.postId);
49
+ pushToCache(['post', 'get', parentPost.postId], parentPost);
50
+ }
51
+ if (action === EnumPostActions.OnPostDeclined) {
52
+ collection.data = collection.data.filter(postId => postId !== post.postId);
53
+ }
54
+ if (action === EnumPostActions.OnPostCreated || action === EnumPostActions.OnPostApproved) {
55
+ collection.data = [...new Set([post.postId, ...collection.data])];
56
+ }
57
+ pushToCache(this.cacheKey, collection);
58
+ this.notifyChange({ origin: "event" /* Amity.LiveDataOrigin.EVENT */, loading: false });
59
+ };
60
+ }
61
+ subscribeRTE(createSubscriber) {
62
+ return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
63
+ }
64
+ }
65
+ //# sourceMappingURL=SearchPostQueryStreamController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchPostQueryStreamController.js","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPostsByHashtag/SearchPostQueryStreamController.ts"],"names":[],"mappings":"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","sourcesContent":["import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';\nimport { pullFromCache, pushToCache } from '~/cache/api';\nimport { ingestInCache } from '~/cache/api/ingestInCache';\nimport { getResolver } from '~/core/model';\nimport { getActiveClient } from '~/client';\nimport { EnumPostActions } from '../enums';\n\nexport class SearchPostQueryStreamController extends QueryStreamController<\n Amity.PostPayload,\n Amity.PostLiveCollection\n> {\n private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;\n\n private preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload;\n\n constructor(\n query: Amity.PostLiveCollection,\n cacheKey: string[],\n notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,\n preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload,\n ) {\n super(query, cacheKey);\n this.notifyChange = notifyChange;\n this.preparePayload = preparePayload;\n }\n\n async saveToMainDB(response: Amity.PostPayload) {\n const processedPayload = await this.preparePayload(response);\n\n const client = getActiveClient();\n const cachedAt = client.cache && Date.now();\n\n if (client.cache) {\n ingestInCache(processedPayload, { cachedAt });\n }\n }\n\n appendToQueryStream(\n response: Amity.PostPayload & Partial<Amity.Pagination>,\n direction: Amity.LiveCollectionPageDirection,\n refresh = false,\n ) {\n if (refresh) {\n pushToCache(this.cacheKey, {\n data: response.posts.map(getResolver('post')),\n });\n } else {\n const collection = pullFromCache<Amity.CommunityLiveCollectionCache>(this.cacheKey)?.data;\n\n const posts = collection?.data ?? [];\n\n pushToCache(this.cacheKey, {\n ...collection,\n data: [...new Set([...posts, ...response.posts.map(getResolver('post'))])],\n });\n }\n }\n\n reactor(action: EnumPostActions) {\n return (post: Amity.InternalPost) => {\n const collection = pullFromCache<Amity.PostLiveCollectionCache>(this.cacheKey)?.data;\n\n if (!collection) return;\n\n if (post.parentPostId && post.isDeleted) {\n const parentPost = pullFromCache<Amity.InternalPost>([\n 'post',\n 'get',\n post.parentPostId,\n ])?.data;\n\n if (!parentPost) return;\n\n parentPost.children = parentPost.children.filter(childId => childId !== post.postId);\n pushToCache(['post', 'get', parentPost.postId], parentPost);\n }\n\n if (action === EnumPostActions.OnPostDeclined) {\n collection.data = collection.data.filter(postId => postId !== post.postId);\n }\n\n if (action === EnumPostActions.OnPostCreated || action === EnumPostActions.OnPostApproved) {\n collection.data = [...new Set([post.postId, ...collection.data])];\n }\n\n pushToCache(this.cacheKey, collection);\n this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });\n };\n }\n\n subscribeRTE(\n createSubscriber: {\n fn: (reactor: (post: Amity.InternalPost) => void) => Amity.Unsubscriber;\n action: EnumPostActions;\n }[],\n ) {\n return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));\n }\n}\n"]}
@@ -3,4 +3,5 @@ export * from './getPosts';
3
3
  export * from './getPinnedPosts';
4
4
  export * from './getGlobalPinnedPosts';
5
5
  export * from './semanticSearchPosts';
6
+ export * from './searchPostsByHashtag';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -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"}