@amityco/ts-sdk-react-native 6.30.2-bc5ef81.0 → 6.30.2

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 (51) hide show
  1. package/.env +26 -26
  2. package/dist/@types/core/payload.d.ts +12 -0
  3. package/dist/@types/core/payload.d.ts.map +1 -1
  4. package/dist/@types/domains/post.d.ts +10 -0
  5. package/dist/@types/domains/post.d.ts.map +1 -1
  6. package/dist/commentRepository/api/createComment.d.ts.map +1 -1
  7. package/dist/commentRepository/api/deleteComment.d.ts.map +1 -1
  8. package/dist/commentRepository/internalApi/createComment.d.ts.map +1 -1
  9. package/dist/commentRepository/internalApi/deleteComment.d.ts.map +1 -1
  10. package/dist/core/query/filtering.d.ts.map +1 -1
  11. package/dist/index.cjs.js +255 -27
  12. package/dist/index.esm.js +255 -27
  13. package/dist/index.umd.js +3 -3
  14. package/dist/postRepository/api/deletePost.d.ts.map +1 -1
  15. package/dist/postRepository/observers/enums.d.ts +12 -0
  16. package/dist/postRepository/observers/enums.d.ts.map +1 -0
  17. package/dist/postRepository/observers/getPosts/PostQueryStreamController.d.ts +1 -1
  18. package/dist/postRepository/observers/getPosts/PostQueryStreamController.d.ts.map +1 -1
  19. package/dist/postRepository/observers/index.d.ts +1 -0
  20. package/dist/postRepository/observers/index.d.ts.map +1 -1
  21. package/dist/postRepository/observers/semanticSearch/SemanticSearchPostLiveCollectionController.d.ts +14 -0
  22. package/dist/postRepository/observers/semanticSearch/SemanticSearchPostLiveCollectionController.d.ts.map +1 -0
  23. package/dist/postRepository/observers/semanticSearch/SemanticSearchPostPaginationController.d.ts +11 -0
  24. package/dist/postRepository/observers/semanticSearch/SemanticSearchPostPaginationController.d.ts.map +1 -0
  25. package/dist/postRepository/observers/semanticSearch/SemanticSearchPostQueryStreamController.d.ts +15 -0
  26. package/dist/postRepository/observers/semanticSearch/SemanticSearchPostQueryStreamController.d.ts.map +1 -0
  27. package/dist/postRepository/observers/semanticSearch/utils.d.ts +3 -0
  28. package/dist/postRepository/observers/semanticSearch/utils.d.ts.map +1 -0
  29. package/dist/postRepository/observers/semanticSearchPosts.d.ts +10 -0
  30. package/dist/postRepository/observers/semanticSearchPosts.d.ts.map +1 -0
  31. package/dist/postRepository/utils/payload.d.ts +2 -1
  32. package/dist/postRepository/utils/payload.d.ts.map +1 -1
  33. package/package.json +1 -1
  34. package/src/@types/core/payload.ts +11 -0
  35. package/src/@types/domains/post.ts +17 -0
  36. package/src/commentRepository/api/createComment.ts +1 -0
  37. package/src/commentRepository/api/deleteComment.ts +1 -0
  38. package/src/commentRepository/internalApi/createComment.ts +1 -0
  39. package/src/commentRepository/internalApi/deleteComment.ts +1 -0
  40. package/src/core/query/filtering.ts +6 -22
  41. package/src/postRepository/api/deletePost.ts +1 -0
  42. package/src/postRepository/observers/enums.ts +11 -0
  43. package/src/postRepository/observers/getPosts/PostLiveCollectionController.ts +1 -1
  44. package/src/postRepository/observers/getPosts/PostQueryStreamController.ts +1 -1
  45. package/src/postRepository/observers/index.ts +1 -0
  46. package/src/postRepository/observers/semanticSearch/SemanticSearchPostLiveCollectionController.ts +199 -0
  47. package/src/postRepository/observers/semanticSearch/SemanticSearchPostPaginationController.ts +27 -0
  48. package/src/postRepository/observers/semanticSearch/SemanticSearchPostQueryStreamController.ts +111 -0
  49. package/src/postRepository/observers/semanticSearch/utils.ts +12 -0
  50. package/src/postRepository/observers/semanticSearchPosts.ts +42 -0
  51. package/src/postRepository/utils/payload.ts +17 -2
@@ -1 +1 @@
1
- {"version":3,"file":"deletePost.d.ts","sourceRoot":"","sources":["../../../src/postRepository/api/deletePost.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,WACb,MAAM,IAAI,CAAC,QAAQ,CAAC,0BAE3B,QAAQ,MAAM,IAAI,CAmEpB,CAAC"}
1
+ {"version":3,"file":"deletePost.d.ts","sourceRoot":"","sources":["../../../src/postRepository/api/deletePost.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,WACb,MAAM,IAAI,CAAC,QAAQ,CAAC,0BAE3B,QAAQ,MAAM,IAAI,CAoEpB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare enum EnumPostActions {
2
+ OnPostCreated = "onPostCreated",
3
+ OnPostUpdated = "onPostUpdated",
4
+ OnPostDeleted = "onPostDeleted",
5
+ OnPostFlagged = "onPostFlagged",
6
+ OnPostUnflagged = "onPostUnflagged",
7
+ OnPostReactionAdded = "onPostReactionAdded",
8
+ OnPostReactionRemoved = "onPostReactionRemoved",
9
+ OnPostApproved = "onPostApproved",
10
+ OnPostDeclined = "onPostDeclined"
11
+ }
12
+ //# sourceMappingURL=enums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../../src/postRepository/observers/enums.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACzB,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,mBAAmB,wBAAwB;IAC3C,qBAAqB,0BAA0B;IAC/C,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;CAClC"}
@@ -1,5 +1,5 @@
1
1
  import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
2
- import { EnumPostActions } from './enums';
2
+ import { EnumPostActions } from '../enums';
3
3
  export declare class PostQueryStreamController extends QueryStreamController<Amity.PostPayload, Amity.PostLiveCollection> {
4
4
  private notifyChange;
5
5
  private preparePayload;
@@ -1 +1 @@
1
- {"version":3,"file":"PostQueryStreamController.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPosts/PostQueryStreamController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAKpF,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,qBAAa,yBAA0B,SAAQ,qBAAqB,CAClE,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;IAkClC,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
+ {"version":3,"file":"PostQueryStreamController.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/getPosts/PostQueryStreamController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAKpF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,qBAAa,yBAA0B,SAAQ,qBAAqB,CAClE,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;IAkClC,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"}
@@ -3,4 +3,5 @@ export * from './observePost';
3
3
  export * from './getPost';
4
4
  export * from './getPosts';
5
5
  export * from './getPinnedPosts';
6
+ export * from './semanticSearchPosts';
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,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/postRepository/observers/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { SemanticSearchPostPaginationController } from './SemanticSearchPostPaginationController';
2
+ import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
3
+ export declare class SemanticSearchPostLiveCollectionController extends LiveCollectionController<'semanticSearchPost', Amity.SemanticSearchPostLiveCollection, Amity.Post, SemanticSearchPostPaginationController> {
4
+ private queryStreamController;
5
+ private query;
6
+ constructor(inputQuery: Amity.SemanticSearchPostLiveCollection, callback: Amity.LiveCollectionCallback<Amity.Post>);
7
+ protected setup(): void;
8
+ protected persistModel(queryPayload: Amity.SemanticSearchPostPayload & Amity.Pagination): Promise<void>;
9
+ protected persistQueryStream({ response, direction, refresh, }: Amity.LiveCollectionPersistQueryStreamParams<'semanticSearchPost'>): void;
10
+ startSubscription(): Amity.Unsubscriber[];
11
+ notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams): void;
12
+ applyFilter(data: Amity.InternalPost[]): Amity.InternalPost<any>[];
13
+ }
14
+ //# sourceMappingURL=SemanticSearchPostLiveCollectionController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticSearchPostLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/semanticSearch/SemanticSearchPostLiveCollectionController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sCAAsC,EAAE,MAAM,0CAA0C,CAAC;AAElG,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAqB1F,qBAAa,0CAA2C,SAAQ,wBAAwB,CACtF,oBAAoB,EACpB,KAAK,CAAC,gCAAgC,EACtC,KAAK,CAAC,IAAI,EACV,sCAAsC,CACvC;IACC,OAAO,CAAC,qBAAqB,CAA0C;IAEvE,OAAO,CAAC,KAAK,CAAyC;gBAGpD,UAAU,EAAE,KAAK,CAAC,gCAAgC,EAClD,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC;IA4BpD,SAAS,CAAC,KAAK;cAYC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,yBAAyB,GAAG,KAAK,CAAC,UAAU;IAI7F,SAAS,CAAC,kBAAkB,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,KAAK,CAAC,sCAAsC,CAAC,oBAAoB,CAAC;IAIrE,iBAAiB;IA4DjB,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,0BAA0B;IAgCzE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE;CAiBvC"}
@@ -0,0 +1,11 @@
1
+ import { PaginationController } from '~/core/liveCollection/PaginationController';
2
+ export declare class SemanticSearchPostPaginationController extends PaginationController<'semanticSearchPost', Amity.SemanticSearchPostLiveCollection> {
3
+ getRequest(queryParams: Amity.SemanticSearchPostLiveCollection, token: string | undefined): Promise<Amity.PostPayload<any> & {
4
+ searchResult: {
5
+ postId: string;
6
+ score: number;
7
+ }[];
8
+ polls: Amity.RawPoll[];
9
+ } & Amity.Pagination>;
10
+ }
11
+ //# sourceMappingURL=SemanticSearchPostPaginationController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticSearchPostPaginationController.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/semanticSearch/SemanticSearchPostPaginationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAGlF,qBAAa,sCAAuC,SAAQ,oBAAoB,CAC9E,oBAAoB,EACpB,KAAK,CAAC,gCAAgC,CACvC;IACO,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,gCAAgC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;;;;;;;CAmBhG"}
@@ -0,0 +1,15 @@
1
+ import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
2
+ import { EnumPostActions } from '../enums';
3
+ export declare class SemanticSearchPostQueryStreamController extends QueryStreamController<Amity.SemanticSearchPostPayload, Amity.SemanticSearchPostLiveCollection> {
4
+ private notifyChange;
5
+ private preparePayload;
6
+ constructor(query: Amity.SemanticSearchPostLiveCollection, cacheKey: string[], notifyChange: (params: Amity.LiveCollectionNotifyParams) => void, preparePayload: (response: Amity.SemanticSearchPostPayload) => Amity.ProcessedSemanticSearchPostPayload);
7
+ saveToMainDB(response: Amity.SemanticSearchPostPayload): Promise<void>;
8
+ appendToQueryStream(response: Amity.SemanticSearchPostPayload & 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=SemanticSearchPostQueryStreamController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticSearchPostQueryStreamController.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/semanticSearch/SemanticSearchPostQueryStreamController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAIpF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,qBAAa,uCAAwC,SAAQ,qBAAqB,CAChF,KAAK,CAAC,yBAAyB,EAC/B,KAAK,CAAC,gCAAgC,CACvC;IACC,OAAO,CAAC,YAAY,CAAqD;IAEzE,OAAO,CAAC,cAAc,CAEwB;gBAG5C,KAAK,EAAE,KAAK,CAAC,gCAAgC,EAC7C,QAAQ,EAAE,MAAM,EAAE,EAClB,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,0BAA0B,KAAK,IAAI,EAChE,cAAc,EAAE,CACd,QAAQ,EAAE,KAAK,CAAC,yBAAyB,KACtC,KAAK,CAAC,kCAAkC;IAOzC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,yBAAyB;IAW5D,mBAAmB,CACjB,QAAQ,EAAE,KAAK,CAAC,yBAAyB,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EACrE,SAAS,EAAE,KAAK,CAAC,2BAA2B,EAC5C,OAAO,UAAQ;IAkBjB,OAAO,CAAC,MAAM,EAAE,eAAe,UACf,MAAM,YAAY;IAuClC,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,3 @@
1
+ export declare function preparePostResponse(response: Amity.SemanticSearchPostPayload): string[];
2
+ export declare function getPostIdsFromCache(cacheData?: string[]): string[];
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/postRepository/observers/semanticSearch/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,yBAAyB,YAK5E;AAED,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,YAIvD"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * search posts by semantic search
3
+ *
4
+ * @returns the associated pinned post(s)
5
+ *
6
+ * @category Posts Live Collection
7
+ *
8
+ */
9
+ export declare const semanticSearchPosts: (params: Amity.LiveCollectionParams<Amity.SemanticSearchPostLiveCollection>, callback: Amity.LiveCollectionCallback<Amity.Post>, config?: Amity.LiveCollectionConfig) => () => void;
10
+ //# sourceMappingURL=semanticSearchPosts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semanticSearchPosts.d.ts","sourceRoot":"","sources":["../../../src/postRepository/observers/semanticSearchPosts.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,WACtB,MAAM,oBAAoB,CAAC,MAAM,gCAAgC,CAAC,YAChE,MAAM,sBAAsB,CAAC,MAAM,IAAI,CAAC,WACzC,MAAM,oBAAoB,eAyBpC,CAAC"}
@@ -1,2 +1,3 @@
1
- export declare const preparePostPayload: (postPayload: Amity.PostPayload) => Amity.ProcessedPostPayload;
1
+ export declare const preparePostPayload: (payload: Amity.PostPayload) => Amity.ProcessedPostPayload;
2
+ export declare const prepareSemanticSearchPostPayload: ({ searchResult, polls, ...postPayload }: Amity.SemanticSearchPostPayload) => Amity.ProcessedSemanticSearchPostPayload;
2
3
  //# sourceMappingURL=payload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/postRepository/utils/payload.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,gBAAiB,MAAM,WAAW,KAAG,MAAM,oBAqCzE,CAAC"}
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/postRepository/utils/payload.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,YAAa,MAAM,WAAW,KAAG,MAAM,oBAuCrE,CAAC;AAEF,eAAO,MAAM,gCAAgC,4CAI1C,MAAM,yBAAyB,KAAG,MAAM,kCAO1C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amityco/ts-sdk-react-native",
3
- "version": "6.30.2-bc5ef81.0",
3
+ "version": "6.30.2",
4
4
  "license": "CC-BY-ND-4.0",
5
5
  "author": "amity.co <developers@amity.co> (https://amity.co)",
6
6
  "description": "Amity Social Cloud Typescript SDK",
@@ -24,6 +24,7 @@ declare global {
24
24
  follower: Amity.FollowersPayload;
25
25
  following: Amity.FollowingsPayload;
26
26
  blockUser: Amity.BlockedUserPayload;
27
+ semanticSearchPost: Amity.SemanticSearchPostPayload;
27
28
  };
28
29
 
29
30
  type UserPayload = {
@@ -320,6 +321,16 @@ declare global {
320
321
  feeds: Amity.Feed[];
321
322
  users: Amity.InternalUser[];
322
323
  files: Amity.File[];
324
+ videoStreamings: Amity.RawStream[];
325
+ };
326
+
327
+ type SemanticSearchPostPayload = Amity.PostPayload & {
328
+ searchResult: { postId: string; score: number }[];
329
+ polls: Amity.RawPoll[];
330
+ };
331
+
332
+ type ProcessedSemanticSearchPostPayload = Amity.ProcessedPostPayload & {
333
+ polls: Amity.InternalPoll[];
323
334
  };
324
335
 
325
336
  type StoryBasePayload = {
@@ -90,5 +90,22 @@ declare global {
90
90
  Amity.InternalPost['postId'],
91
91
  Pick<QueryPosts, 'page'>
92
92
  >;
93
+
94
+ type QuerySemanticSearchPosts = {
95
+ query: string;
96
+ targetId?: string;
97
+ targetType?: Amity.InternalPost['targetType'];
98
+ dataTypes?: string[];
99
+ matchingOnlyParentPost?: boolean;
100
+ };
101
+
102
+ type SemanticSearchPostLiveCollection = Amity.LiveCollectionParams<
103
+ Omit<QuerySemanticSearchPosts, 'page'>
104
+ >;
105
+
106
+ type SemanticSearchPostLiveCollectionCache = Amity.LiveCollectionCache<
107
+ Amity.InternalPost['postId'], // postId:score
108
+ QuerySemanticSearchPosts
109
+ >;
93
110
  }
94
111
  }
@@ -66,6 +66,7 @@ export const createComment = async (
66
66
  files: data.files,
67
67
  postChildren: [],
68
68
  users: data.users,
69
+ videoStreamings: [],
69
70
  });
70
71
  }
71
72
  } else if (bundle.referenceType === 'story') {
@@ -83,6 +83,7 @@ export const deleteComment = async (
83
83
  files: [],
84
84
  postChildren: [],
85
85
  users: [],
86
+ videoStreamings: [],
86
87
  });
87
88
  }
88
89
  }
@@ -37,6 +37,7 @@ export const createComment = async (
37
37
  files: [],
38
38
  postChildren: [],
39
39
  users: [],
40
+ videoStreamings: [],
40
41
  });
41
42
 
42
43
  fireEvent('local.comment.created', data);
@@ -43,6 +43,7 @@ export const deleteComment = async (
43
43
  files: [],
44
44
  postChildren: [],
45
45
  users: [],
46
+ videoStreamings: [],
46
47
  });
47
48
 
48
49
  fireEvent('local.comment.deleted', {
@@ -183,33 +183,17 @@ export const filterByPostDataTypes = <T extends Amity.InternalPost>(
183
183
  collection: T[],
184
184
  dataTypes: Amity.PostLiveCollection['dataTypes'],
185
185
  ): T[] => {
186
- const postIds: T['postId'][] = [];
187
-
188
186
  return collection.reduce((acc: T[], post: T) => {
189
- // A text post with no children is just a text post
190
- if (post.dataType === 'text' && !post.children.length) return acc;
191
-
192
- // Skip if post is already in the collection
193
- if (postIds.includes(post.postId)) return acc;
194
-
195
187
  // Check dataType for current post
196
188
  if (dataTypes?.includes(post.dataType)) {
197
- acc.push(post);
189
+ return [...acc, post];
198
190
  }
199
191
 
200
- // Check dataType for child post. this function will return all child posts in a same level of parent post (flatten)
201
- if (!post.children.length) return acc;
202
-
203
- const childPost = pullFromCache<Amity.InternalPost>(['post', 'get', post.children[0]])?.data;
204
- if (!childPost) return acc;
205
- // Prevent to insert a duplicate record
206
- if (postIds.includes(childPost.postId)) return acc;
207
- if (!dataTypes?.includes(childPost?.dataType)) return acc;
208
-
209
- postIds.push(childPost.postId);
210
-
211
- // @ts-ignore
212
- acc.push(childPost);
192
+ if ((post?.children || []).length > 0) {
193
+ const childPost = pullFromCache<Amity.InternalPost>(['post', 'get', post.children[0]])?.data;
194
+ if (!dataTypes?.includes(childPost?.dataType)) return [...acc, post];
195
+ return acc;
196
+ }
213
197
 
214
198
  return acc;
215
199
  }, []);
@@ -89,6 +89,7 @@ export const deletePost = async (
89
89
  files: [],
90
90
  postChildren: [],
91
91
  users: [],
92
+ videoStreamings: [],
92
93
  });
93
94
 
94
95
  return LinkedObject.post(deleted);
@@ -0,0 +1,11 @@
1
+ export enum EnumPostActions {
2
+ OnPostCreated = 'onPostCreated',
3
+ OnPostUpdated = 'onPostUpdated',
4
+ OnPostDeleted = 'onPostDeleted',
5
+ OnPostFlagged = 'onPostFlagged',
6
+ OnPostUnflagged = 'onPostUnflagged',
7
+ OnPostReactionAdded = 'onPostReactionAdded',
8
+ OnPostReactionRemoved = 'onPostReactionRemoved',
9
+ OnPostApproved = 'onPostApproved',
10
+ OnPostDeclined = 'onPostDeclined',
11
+ }
@@ -22,7 +22,7 @@ import {
22
22
  sortByLastCreated,
23
23
  } from '~/core/query';
24
24
  import { isNonNullable } from '~/utils';
25
- import { EnumPostActions } from './enums';
25
+ import { EnumPostActions } from '../enums';
26
26
  import { LinkedObject } from '~/utils/linkedObject';
27
27
  import { preparePostPayload } from '~/postRepository/utils/payload';
28
28
  import { convertEventPayload } from '~/utils/event';
@@ -3,7 +3,7 @@ import { pullFromCache, pushToCache } from '~/cache/api';
3
3
  import { ingestInCache } from '~/cache/api/ingestInCache';
4
4
  import { getResolver } from '~/core/model';
5
5
  import { getActiveClient } from '~/client';
6
- import { EnumPostActions } from './enums';
6
+ import { EnumPostActions } from '../enums';
7
7
 
8
8
  export class PostQueryStreamController extends QueryStreamController<
9
9
  Amity.PostPayload,
@@ -3,3 +3,4 @@ export * from './observePost';
3
3
  export * from './getPost';
4
4
  export * from './getPosts';
5
5
  export * from './getPinnedPosts';
6
+ export * from './semanticSearchPosts';
@@ -0,0 +1,199 @@
1
+ import hash from 'object-hash';
2
+ import { pullFromCache, pushToCache } from '~/cache/api';
3
+ import { SemanticSearchPostPaginationController } from './SemanticSearchPostPaginationController';
4
+ import { SemanticSearchPostQueryStreamController } from './SemanticSearchPostQueryStreamController';
5
+ import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
6
+ import {
7
+ onPostUpdated,
8
+ onPostDeleted,
9
+ onPostFlagged,
10
+ onPostUnflagged,
11
+ onPostReactionAdded,
12
+ onPostReactionRemoved,
13
+ onPostApproved,
14
+ onPostDeclined,
15
+ } from '~/postRepository/events';
16
+ import { filterByPostDataTypes, filterByPropEquality } from '~/core/query';
17
+ import { isNonNullable } from '~/utils';
18
+ import { EnumPostActions } from '../enums';
19
+ import { LinkedObject } from '~/utils/linkedObject';
20
+ import { prepareSemanticSearchPostPayload } from '~/postRepository/utils/payload';
21
+ import { convertEventPayload } from '~/utils/event';
22
+ import { onCommentCreated, onCommentDeleted } from '~/commentRepository';
23
+ import { getPost } from '~/postRepository/api/getPost';
24
+ import { getPostIdsFromCache } from './utils';
25
+
26
+ export class SemanticSearchPostLiveCollectionController extends LiveCollectionController<
27
+ 'semanticSearchPost',
28
+ Amity.SemanticSearchPostLiveCollection,
29
+ Amity.Post,
30
+ SemanticSearchPostPaginationController
31
+ > {
32
+ private queryStreamController: SemanticSearchPostQueryStreamController;
33
+
34
+ private query: Amity.SemanticSearchPostLiveCollection;
35
+
36
+ constructor(
37
+ inputQuery: Amity.SemanticSearchPostLiveCollection,
38
+ callback: Amity.LiveCollectionCallback<Amity.Post>,
39
+ ) {
40
+ const query = {
41
+ ...inputQuery,
42
+ matchingOnlyParentPost:
43
+ inputQuery.matchingOnlyParentPost == null ? true : inputQuery.matchingOnlyParentPost,
44
+ dataTypes: inputQuery.dataTypes == null ? ['text', 'image'] : inputQuery.dataTypes,
45
+ };
46
+
47
+ const queryStreamId = hash(query);
48
+ const cacheKey = ['posts', 'collection', queryStreamId];
49
+ const paginationController = new SemanticSearchPostPaginationController(query);
50
+
51
+ super(paginationController, queryStreamId, cacheKey, callback);
52
+
53
+ this.query = query;
54
+
55
+ this.queryStreamController = new SemanticSearchPostQueryStreamController(
56
+ this.query,
57
+ this.cacheKey,
58
+ this.notifyChange.bind(this),
59
+ prepareSemanticSearchPostPayload,
60
+ );
61
+
62
+ this.callback = callback.bind(this);
63
+ this.loadPage({ initial: true });
64
+ }
65
+
66
+ protected setup() {
67
+ const collection = pullFromCache<Amity.SemanticSearchPostLiveCollectionCache>(
68
+ this.cacheKey,
69
+ )?.data;
70
+ if (!collection) {
71
+ pushToCache(this.cacheKey, {
72
+ data: [],
73
+ params: {},
74
+ });
75
+ }
76
+ }
77
+
78
+ protected async persistModel(queryPayload: Amity.SemanticSearchPostPayload & Amity.Pagination) {
79
+ await this.queryStreamController.saveToMainDB(queryPayload);
80
+ }
81
+
82
+ protected persistQueryStream({
83
+ response,
84
+ direction,
85
+ refresh,
86
+ }: Amity.LiveCollectionPersistQueryStreamParams<'semanticSearchPost'>) {
87
+ this.queryStreamController.appendToQueryStream(response, direction, refresh);
88
+ }
89
+
90
+ startSubscription() {
91
+ return this.queryStreamController.subscribeRTE([
92
+ { fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },
93
+ { fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },
94
+ { fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },
95
+ {
96
+ fn: onPostUnflagged,
97
+ action: EnumPostActions.OnPostUnflagged,
98
+ },
99
+ { fn: onPostApproved, action: EnumPostActions.OnPostApproved },
100
+ { fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },
101
+ {
102
+ fn: onPostReactionAdded,
103
+ action: EnumPostActions.OnPostReactionAdded,
104
+ },
105
+ {
106
+ fn: onPostReactionRemoved,
107
+ action: EnumPostActions.OnPostReactionRemoved,
108
+ },
109
+ {
110
+ fn: convertEventPayload(
111
+ (callback: Amity.Listener<Amity.InternalComment>) => {
112
+ return onCommentCreated(async (comment: Amity.InternalComment) => {
113
+ const collectionCache = pullFromCache<string[]>(this.cacheKey);
114
+
115
+ const currentCollectionPostIds = getPostIdsFromCache(collectionCache?.data);
116
+
117
+ if (currentCollectionPostIds.includes(comment.referenceId)) return;
118
+
119
+ await getPost(comment.referenceId);
120
+ callback(comment);
121
+ });
122
+ },
123
+ 'referenceId',
124
+ 'post',
125
+ ),
126
+ action: EnumPostActions.OnPostUpdated,
127
+ },
128
+ {
129
+ fn: convertEventPayload(
130
+ (callback: Amity.Listener<Amity.InternalComment>) => {
131
+ return onCommentDeleted(async (comment: Amity.InternalComment) => {
132
+ const collectionCache = pullFromCache<string[]>(this.cacheKey);
133
+
134
+ const currentCollectionPostIds = getPostIdsFromCache(collectionCache?.data);
135
+
136
+ if (currentCollectionPostIds.includes(comment.referenceId)) return;
137
+
138
+ await getPost(comment.referenceId);
139
+ callback(comment);
140
+ });
141
+ },
142
+ 'referenceId',
143
+ 'post',
144
+ ),
145
+ action: EnumPostActions.OnPostUpdated,
146
+ },
147
+ ]);
148
+ }
149
+
150
+ notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {
151
+ const collection = pullFromCache<Amity.SemanticSearchPostLiveCollectionCache>(
152
+ this.cacheKey,
153
+ )?.data;
154
+ if (!collection) return;
155
+
156
+ const data = this.applyFilter(
157
+ collection.data
158
+ .map(postIdWithScore => {
159
+ const [postId, score] = postIdWithScore.split(':');
160
+ return {
161
+ postId,
162
+ score: parseFloat(score),
163
+ };
164
+ })
165
+ .sort((a, b) => b.score - a.score)
166
+ .map(({ postId }) => pullFromCache<Amity.InternalPost>(['post', 'get', postId])!)
167
+ .filter(isNonNullable)
168
+ .map(({ data }) => data) ?? [],
169
+ ).map(LinkedObject.post);
170
+
171
+ if (!this.shouldNotify(data) && origin === 'event') return;
172
+
173
+ this.callback({
174
+ onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),
175
+ data,
176
+ hasNextPage: !!this.paginationController.getNextToken(),
177
+ loading,
178
+ error,
179
+ });
180
+ }
181
+
182
+ applyFilter(data: Amity.InternalPost[]) {
183
+ let posts = data;
184
+
185
+ if (this.query.targetType) {
186
+ posts = posts.filter(post => post.targetType === this.query.targetType);
187
+ }
188
+
189
+ if (this.query.targetId) {
190
+ posts = posts.filter(post => post.targetId === this.query.targetId);
191
+ }
192
+
193
+ if (this.query.dataTypes && this.query.dataTypes.length > 0) {
194
+ posts = filterByPostDataTypes(posts, this.query.dataTypes);
195
+ }
196
+
197
+ return posts;
198
+ }
199
+ }
@@ -0,0 +1,27 @@
1
+ import { PaginationController } from '~/core/liveCollection/PaginationController';
2
+ import { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';
3
+
4
+ export class SemanticSearchPostPaginationController extends PaginationController<
5
+ 'semanticSearchPost',
6
+ Amity.SemanticSearchPostLiveCollection
7
+ > {
8
+ async getRequest(queryParams: Amity.SemanticSearchPostLiveCollection, token: string | undefined) {
9
+ const { limit = COLLECTION_DEFAULT_PAGINATION_LIMIT, ...params } = queryParams;
10
+
11
+ const baseOptions = {
12
+ type: queryParams.limit ? 'pagination' : undefined,
13
+ };
14
+
15
+ const options = token ? { ...baseOptions, token } : { ...baseOptions, limit };
16
+
17
+ const { data: queryResponse } = await this.http.get<
18
+ Amity.SemanticSearchPostPayload & Amity.Pagination
19
+ >(`/api/v1/semantic-search/posts`, {
20
+ params: {
21
+ ...params,
22
+ options,
23
+ },
24
+ });
25
+ return queryResponse;
26
+ }
27
+ }