@stream-io/feeds-client 0.2.11 → 0.2.12

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 (181) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/cjs/index.js +1 -1
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/react-bindings.js +35 -33
  5. package/dist/cjs/react-bindings.js.map +1 -1
  6. package/dist/es/index.mjs +2 -2
  7. package/dist/es/index.mjs.map +1 -1
  8. package/dist/es/react-bindings.mjs +35 -33
  9. package/dist/es/react-bindings.mjs.map +1 -1
  10. package/dist/{index-DP0C8psw.mjs → index-D7QtnkUs.mjs} +19 -21
  11. package/dist/index-D7QtnkUs.mjs.map +1 -0
  12. package/dist/{index-CFv0uza2.js → index-o7AeSkxa.js} +19 -21
  13. package/dist/index-o7AeSkxa.js.map +1 -0
  14. package/dist/tsconfig.tsbuildinfo +1 -1
  15. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.d.ts +15 -16
  16. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.d.ts.map +1 -1
  17. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnFollows.d.ts +1 -1
  18. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnFollows.d.ts.map +1 -1
  19. package/dist/types/bindings/react/hooks/util/useReactionActions.d.ts +1 -1
  20. package/dist/types/bindings/react/hooks/util/useReactionActions.d.ts.map +1 -1
  21. package/dist/types/bindings/react/wrappers/StreamFeed.d.ts +1 -1
  22. package/dist/types/bindings/react/wrappers/StreamFeed.d.ts.map +1 -1
  23. package/dist/types/bindings/react/wrappers/StreamFeeds.d.ts +1 -1
  24. package/dist/types/bindings/react/wrappers/StreamFeeds.d.ts.map +1 -1
  25. package/dist/types/bindings/react/wrappers/StreamSearch.d.ts +1 -1
  26. package/dist/types/bindings/react/wrappers/StreamSearch.d.ts.map +1 -1
  27. package/dist/types/bindings/react/wrappers/StreamSearchResults.d.ts +1 -1
  28. package/dist/types/bindings/react/wrappers/StreamSearchResults.d.ts.map +1 -1
  29. package/dist/types/common/ApiClient.d.ts +3 -3
  30. package/dist/types/common/ApiClient.d.ts.map +1 -1
  31. package/dist/types/common/EventDispatcher.d.ts +1 -1
  32. package/dist/types/common/EventDispatcher.d.ts.map +1 -1
  33. package/dist/types/common/rate-limit.d.ts +1 -1
  34. package/dist/types/common/rate-limit.d.ts.map +1 -1
  35. package/dist/types/common/real-time/StableWSConnection.d.ts +3 -3
  36. package/dist/types/common/real-time/StableWSConnection.d.ts.map +1 -1
  37. package/dist/types/common/real-time/event-models.d.ts +1 -1
  38. package/dist/types/common/real-time/event-models.d.ts.map +1 -1
  39. package/dist/types/common/search/ActivitySearchSource.d.ts +2 -2
  40. package/dist/types/common/search/ActivitySearchSource.d.ts.map +1 -1
  41. package/dist/types/common/search/FeedSearchSource.d.ts +2 -2
  42. package/dist/types/common/search/FeedSearchSource.d.ts.map +1 -1
  43. package/dist/types/common/search/UserSearchSource.d.ts +2 -2
  44. package/dist/types/common/search/UserSearchSource.d.ts.map +1 -1
  45. package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts +3 -3
  46. package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts.map +1 -1
  47. package/dist/types/feed/event-handlers/activity/handle-activity-marked.d.ts +3 -3
  48. package/dist/types/feed/event-handlers/activity/handle-activity-marked.d.ts.map +1 -1
  49. package/dist/types/feed/event-handlers/activity/handle-activity-pinned.d.ts +2 -2
  50. package/dist/types/feed/event-handlers/activity/handle-activity-pinned.d.ts.map +1 -1
  51. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts +1 -1
  52. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts.map +1 -1
  53. package/dist/types/feed/event-handlers/activity/handle-activity-removed-from-feed.d.ts +2 -2
  54. package/dist/types/feed/event-handlers/activity/handle-activity-removed-from-feed.d.ts.map +1 -1
  55. package/dist/types/feed/event-handlers/activity/handle-activity-unpinned.d.ts +2 -2
  56. package/dist/types/feed/event-handlers/activity/handle-activity-unpinned.d.ts.map +1 -1
  57. package/dist/types/feed/event-handlers/activity/handle-activity-updated.d.ts +3 -3
  58. package/dist/types/feed/event-handlers/activity/handle-activity-updated.d.ts.map +1 -1
  59. package/dist/types/feed/event-handlers/comment/handle-comment-deleted.d.ts +3 -2
  60. package/dist/types/feed/event-handlers/comment/handle-comment-deleted.d.ts.map +1 -1
  61. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-added.d.ts +3 -2
  62. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-added.d.ts.map +1 -1
  63. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-deleted.d.ts +3 -2
  64. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-deleted.d.ts.map +1 -1
  65. package/dist/types/feed/event-handlers/comment/handle-comment-updated.d.ts +3 -2
  66. package/dist/types/feed/event-handlers/comment/handle-comment-updated.d.ts.map +1 -1
  67. package/dist/types/feed/event-handlers/comment/utils/update-comment-count.d.ts +2 -2
  68. package/dist/types/feed/event-handlers/comment/utils/update-comment-count.d.ts.map +1 -1
  69. package/dist/types/feed/event-handlers/feed/handle-feed-updated.d.ts +2 -2
  70. package/dist/types/feed/event-handlers/feed/handle-feed-updated.d.ts.map +1 -1
  71. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-added.d.ts +2 -2
  72. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-added.d.ts.map +1 -1
  73. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-removed.d.ts +2 -2
  74. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-removed.d.ts.map +1 -1
  75. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-updated.d.ts +2 -2
  76. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-updated.d.ts.map +1 -1
  77. package/dist/types/feed/event-handlers/follow/handle-follow-updated.d.ts +1 -1
  78. package/dist/types/feed/event-handlers/follow/handle-follow-updated.d.ts.map +1 -1
  79. package/dist/types/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts +1 -1
  80. package/dist/types/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts.map +1 -1
  81. package/dist/types/feed/event-handlers/watch/handle-watch-started.d.ts +1 -1
  82. package/dist/types/feed/event-handlers/watch/handle-watch-started.d.ts.map +1 -1
  83. package/dist/types/feed/event-handlers/watch/handle-watch-stopped.d.ts +1 -1
  84. package/dist/types/feed/event-handlers/watch/handle-watch-stopped.d.ts.map +1 -1
  85. package/dist/types/feed/feed.d.ts +3 -3
  86. package/dist/types/feed/feed.d.ts.map +1 -1
  87. package/dist/types/feeds-client/feeds-client.d.ts +3 -3
  88. package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
  89. package/dist/types/gen/feeds/FeedApi.d.ts +2 -2
  90. package/dist/types/gen/feeds/FeedApi.d.ts.map +1 -1
  91. package/dist/types/gen/feeds/FeedsApi.d.ts +2 -2
  92. package/dist/types/gen/feeds/FeedsApi.d.ts.map +1 -1
  93. package/dist/types/gen/model-decoders/event-decoder-mapping.d.ts +1 -1
  94. package/dist/types/gen/model-decoders/event-decoder-mapping.d.ts.map +1 -1
  95. package/dist/types/gen/models/index.d.ts +24 -26
  96. package/dist/types/gen/models/index.d.ts.map +1 -1
  97. package/dist/types/gen/moderation/ModerationApi.d.ts +2 -2
  98. package/dist/types/gen/moderation/ModerationApi.d.ts.map +1 -1
  99. package/dist/types/types-internal.d.ts +1 -1
  100. package/dist/types/types-internal.d.ts.map +1 -1
  101. package/dist/types/types.d.ts +4 -4
  102. package/dist/types/types.d.ts.map +1 -1
  103. package/dist/types/utils/event-triggered-by-connected-user.d.ts +2 -2
  104. package/dist/types/utils/event-triggered-by-connected-user.d.ts.map +1 -1
  105. package/dist/types/utils/state-update-queue.d.ts +2 -2
  106. package/dist/types/utils/state-update-queue.d.ts.map +1 -1
  107. package/dist/types/utils/type-assertions.d.ts +3 -4
  108. package/dist/types/utils/type-assertions.d.ts.map +1 -1
  109. package/package.json +1 -1
  110. package/src/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.ts +52 -38
  111. package/src/bindings/react/hooks/feed-state-hooks/useOwnFollows.ts +1 -1
  112. package/src/bindings/react/hooks/util/useReactionActions.ts +2 -1
  113. package/src/bindings/react/wrappers/StreamFeed.tsx +1 -1
  114. package/src/bindings/react/wrappers/StreamFeeds.tsx +1 -1
  115. package/src/bindings/react/wrappers/StreamSearch.tsx +1 -1
  116. package/src/bindings/react/wrappers/StreamSearchResults.tsx +1 -1
  117. package/src/common/ApiClient.ts +6 -4
  118. package/src/common/EventDispatcher.ts +1 -1
  119. package/src/common/rate-limit.ts +1 -1
  120. package/src/common/real-time/StableWSConnection.ts +3 -3
  121. package/src/common/real-time/event-models.ts +1 -1
  122. package/src/common/search/ActivitySearchSource.ts +2 -2
  123. package/src/common/search/FeedSearchSource.ts +2 -2
  124. package/src/common/search/UserSearchSource.ts +2 -2
  125. package/src/feed/event-handlers/activity/activity-marked-utils.test.ts +1 -1
  126. package/src/feed/event-handlers/activity/activity-reaction-utils.test.ts +1 -1
  127. package/src/feed/event-handlers/activity/activity-utils.test.ts +1 -1
  128. package/src/feed/event-handlers/activity/handle-activity-added.ts +3 -3
  129. package/src/feed/event-handlers/activity/handle-activity-marked.ts +3 -3
  130. package/src/feed/event-handlers/activity/handle-activity-pinned.test.ts +1 -1
  131. package/src/feed/event-handlers/activity/handle-activity-pinned.ts +3 -3
  132. package/src/feed/event-handlers/activity/handle-activity-reaction-added.test.ts +1 -1
  133. package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.test.ts +1 -1
  134. package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.ts +1 -1
  135. package/src/feed/event-handlers/activity/handle-activity-removed-from-feed.ts +2 -2
  136. package/src/feed/event-handlers/activity/handle-activity-unpinned.test.ts +2 -2
  137. package/src/feed/event-handlers/activity/handle-activity-unpinned.ts +2 -2
  138. package/src/feed/event-handlers/activity/handle-activity-updated.test.ts +2 -2
  139. package/src/feed/event-handlers/activity/handle-activity-updated.ts +3 -3
  140. package/src/feed/event-handlers/bookmark/bookmark-utils.test.ts +1 -1
  141. package/src/feed/event-handlers/comment/handle-comment-added.test.ts +2 -2
  142. package/src/feed/event-handlers/comment/handle-comment-deleted.test.ts +2 -2
  143. package/src/feed/event-handlers/comment/handle-comment-deleted.ts +3 -2
  144. package/src/feed/event-handlers/comment/handle-comment-reaction-added.test.ts +2 -2
  145. package/src/feed/event-handlers/comment/handle-comment-reaction-added.ts +3 -2
  146. package/src/feed/event-handlers/comment/handle-comment-reaction-deleted.test.ts +2 -2
  147. package/src/feed/event-handlers/comment/handle-comment-reaction-deleted.ts +3 -2
  148. package/src/feed/event-handlers/comment/handle-comment-updated.test.ts +2 -2
  149. package/src/feed/event-handlers/comment/handle-comment-updated.ts +3 -2
  150. package/src/feed/event-handlers/comment/utils/update-comment-count.test.ts +3 -1
  151. package/src/feed/event-handlers/comment/utils/update-comment-count.ts +2 -2
  152. package/src/feed/event-handlers/feed/handle-feed-updated.ts +2 -2
  153. package/src/feed/event-handlers/feed-member/handle-feed-member-added.ts +2 -2
  154. package/src/feed/event-handlers/feed-member/handle-feed-member-removed.ts +2 -2
  155. package/src/feed/event-handlers/feed-member/handle-feed-member-updated.ts +2 -2
  156. package/src/feed/event-handlers/follow/handle-follow-created.test.ts +1 -1
  157. package/src/feed/event-handlers/follow/handle-follow-deleted.test.ts +1 -1
  158. package/src/feed/event-handlers/follow/handle-follow-updated.test.ts +1 -1
  159. package/src/feed/event-handlers/follow/handle-follow-updated.ts +1 -1
  160. package/src/feed/event-handlers/notification-feed/handle-notification-feed-updated.test.ts +1 -1
  161. package/src/feed/event-handlers/notification-feed/handle-notification-feed-updated.ts +1 -1
  162. package/src/feed/event-handlers/watch/handle-watch-started.ts +1 -1
  163. package/src/feed/event-handlers/watch/handle-watch-stopped.ts +1 -1
  164. package/src/feed/feed.test.ts +1 -1
  165. package/src/feed/feed.ts +3 -3
  166. package/src/feeds-client/event-handlers/user/handle-user-updated.test.ts +1 -1
  167. package/src/feeds-client/feeds-client.ts +5 -4
  168. package/src/gen/feeds/FeedApi.ts +2 -2
  169. package/src/gen/feeds/FeedsApi.ts +2 -2
  170. package/src/gen/model-decoders/decoders.ts +2 -4
  171. package/src/gen/model-decoders/event-decoder-mapping.ts +1 -1
  172. package/src/gen/models/index.ts +34 -33
  173. package/src/gen/moderation/ModerationApi.ts +2 -2
  174. package/src/test-utils/response-generators.ts +2 -2
  175. package/src/types-internal.ts +1 -1
  176. package/src/types.ts +4 -4
  177. package/src/utils/event-triggered-by-connected-user.ts +2 -2
  178. package/src/utils/state-update-queue.ts +2 -2
  179. package/src/utils/type-assertions.ts +7 -11
  180. package/dist/index-CFv0uza2.js.map +0 -1
  181. package/dist/index-DP0C8psw.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.2.12](https://github.com/GetStream/stream-feeds-js/compare/@stream-io/feeds-client-0.2.11...@stream-io/feeds-client-0.2.12) (2025-09-24)
6
+
7
+
8
+ * **feeds-client:** enable verbatim module syntax ([#124](https://github.com/GetStream/stream-feeds-js/issues/124)) ([0a66d09](https://github.com/GetStream/stream-feeds-js/commit/0a66d09c4f7aca7e4d22f64616df95ea873838a4))
9
+
10
+
11
+ ### Features
12
+
13
+ * support for new capabilities ([#128](https://github.com/GetStream/stream-feeds-js/issues/128)) ([ce76d92](https://github.com/GetStream/stream-feeds-js/commit/ce76d9232667ab54f4ef5f01819d09553bd52bf0))
14
+
5
15
  ## [0.2.11](https://github.com/GetStream/stream-feeds-js/compare/@stream-io/feeds-client-0.2.10...@stream-io/feeds-client-0.2.11) (2025-09-22)
6
16
 
7
17
 
package/dist/cjs/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const stateStore = require("@stream-io/state-store");
4
- const index = require("../index-CFv0uza2.js");
4
+ const index = require("../index-o7AeSkxa.js");
5
5
  const loggerInternal = require("@stream-io/logger");
6
6
  class SearchController {
7
7
  constructor({ config, sources } = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/common/search/SearchController.ts","../../src/common/search/BaseSearchSource.ts","../../src/common/search/ActivitySearchSource.ts","../../src/common/search/FeedSearchSource.ts","../../src/common/search/UserSearchSource.ts"],"sourcesContent":["import { StateStore } from '@stream-io/state-store';\nimport type { SearchSource } from './BaseSearchSource';\n\nexport type SearchControllerState = {\n isActive: boolean;\n searchQuery: string;\n sources: SearchSource[];\n};\n\nexport type InternalSearchControllerState = {};\n\nexport type SearchControllerConfig = {\n // The controller will make sure there is always exactly one active source. Enabled by default.\n keepSingleActiveSource: boolean;\n};\n\nexport type SearchControllerOptions = {\n config?: Partial<SearchControllerConfig>;\n sources?: SearchSource[];\n};\n\nexport class SearchController {\n /**\n * Not intended for direct use by integrators, might be removed without notice resulting in\n * broken integrations.\n */\n _internalState: StateStore<InternalSearchControllerState>;\n state: StateStore<SearchControllerState>;\n config: SearchControllerConfig;\n\n constructor({ config, sources }: SearchControllerOptions = {}) {\n this.state = new StateStore<SearchControllerState>({\n isActive: false,\n searchQuery: '',\n sources: sources ?? [],\n });\n this._internalState = new StateStore<InternalSearchControllerState>({});\n this.config = { keepSingleActiveSource: true, ...config };\n }\n get hasNext() {\n return this.sources.some((source) => source.hasNext);\n }\n\n get sources() {\n return this.state.getLatestValue().sources;\n }\n\n get activeSources() {\n return this.state.getLatestValue().sources.filter((s) => s.isActive);\n }\n\n get isActive() {\n return this.state.getLatestValue().isActive;\n }\n\n get searchQuery() {\n return this.state.getLatestValue().searchQuery;\n }\n\n get searchSourceTypes(): Array<SearchSource['type']> {\n return this.sources.map((s) => s.type);\n }\n\n addSource = (source: SearchSource) => {\n this.state.partialNext({\n sources: [...this.sources, source],\n });\n };\n\n getSource = (sourceType: SearchSource['type']) =>\n this.sources.find((s) => s.type === sourceType);\n\n removeSource = (sourceType: SearchSource['type']) => {\n const newSources = this.sources.filter((s) => s.type !== sourceType);\n if (newSources.length === this.sources.length) return;\n this.state.partialNext({ sources: newSources });\n };\n\n activateSource = (sourceType: SearchSource['type']) => {\n const source = this.getSource(sourceType);\n if (!source || source.isActive) return;\n if (this.config.keepSingleActiveSource) {\n this.sources.forEach((s) => {\n if (s.type !== sourceType) {\n s.deactivate();\n }\n });\n }\n source.activate();\n this.state.partialNext({ sources: [...this.sources] });\n };\n\n deactivateSource = (sourceType: SearchSource['type']) => {\n const source = this.getSource(sourceType);\n if (!source?.isActive) return;\n if (this.activeSources.length === 1) return;\n source.deactivate();\n this.state.partialNext({ sources: [...this.sources] });\n };\n\n activate = () => {\n if (!this.activeSources.length) {\n const sourcesToActivate = this.config.keepSingleActiveSource\n ? this.sources.slice(0, 1)\n : this.sources;\n sourcesToActivate.forEach((s) => s.activate());\n }\n if (this.isActive) return;\n this.state.partialNext({ isActive: true });\n };\n\n search = async (searchQuery?: string) => {\n const searchedSources = this.activeSources;\n this.state.partialNext({\n searchQuery,\n });\n await Promise.all(\n searchedSources.map((source) => source.search(searchQuery)),\n );\n };\n\n cancelSearchQueries = () => {\n this.activeSources.forEach((s) => s.cancelScheduledQuery());\n };\n\n clear = () => {\n this.cancelSearchQueries();\n this.sources.forEach((source) =>\n source.state.next({ ...source.initialState, isActive: source.isActive }),\n );\n this.state.next((current) => ({\n ...current,\n isActive: true,\n queriesInProgress: [],\n searchQuery: '',\n }));\n };\n\n exit = () => {\n this.cancelSearchQueries();\n this.sources.forEach((source) =>\n source.state.next({ ...source.initialState, isActive: source.isActive }),\n );\n this.state.next((current) => ({\n ...current,\n isActive: false,\n queriesInProgress: [],\n searchQuery: '',\n }));\n };\n}\n","import { StateStore } from '@stream-io/state-store';\nimport { debounce, type DebouncedFunc } from '../utils';\nimport type {\n QueryReturnValue,\n SearchSourceOptions,\n SearchSourceState,\n SearchSourceType,\n} from './types';\n\nexport type DebounceOptions = {\n debounceMs: number;\n};\ntype DebouncedExecQueryFunction = DebouncedFunc<\n (searchString?: string) => Promise<void>\n>;\n\ninterface ISearchSource<T = any> {\n activate(): void;\n\n canExecuteQuery(newSearchString?: string): boolean;\n\n deactivate(): void;\n\n readonly hasNext: boolean;\n readonly hasResults: boolean;\n readonly initialState: SearchSourceState<T>;\n readonly isActive: boolean;\n readonly isLoading: boolean;\n readonly items: T[] | undefined;\n readonly lastQueryError: Error | undefined;\n readonly next: string | undefined | null;\n readonly offset: number | undefined;\n\n resetState(): void;\n\n readonly searchQuery: string;\n\n readonly state: StateStore<SearchSourceState<T>>;\n readonly type: SearchSourceType;\n}\n\nexport interface SearchSource<T = any> extends ISearchSource<T> {\n cancelScheduledQuery(): void;\n setDebounceOptions(options: DebounceOptions): void;\n search(text?: string): Promise<void> | undefined;\n}\n\nexport interface SearchSourceSync<T = any> extends ISearchSource<T> {\n cancelScheduledQuery(): void;\n setDebounceOptions(options: DebounceOptions): void;\n search(text?: string): void;\n}\n\nconst DEFAULT_SEARCH_SOURCE_OPTIONS: Required<SearchSourceOptions> = {\n debounceMs: 300,\n pageSize: 10,\n allowEmptySearchString: false,\n resetOnNewSearchQuery: true,\n} as const;\n\nabstract class BaseSearchSourceBase<T> implements ISearchSource<T> {\n state: StateStore<SearchSourceState<T>>;\n pageSize: number;\n protected allowEmptySearchString: boolean;\n protected resetOnNewSearchQuery: boolean;\n abstract readonly type: SearchSourceType;\n\n protected constructor(options?: SearchSourceOptions) {\n const { pageSize, allowEmptySearchString, resetOnNewSearchQuery } = {\n ...DEFAULT_SEARCH_SOURCE_OPTIONS,\n ...options,\n };\n this.pageSize = pageSize;\n this.allowEmptySearchString = allowEmptySearchString;\n this.resetOnNewSearchQuery = resetOnNewSearchQuery;\n this.state = new StateStore<SearchSourceState<T>>(this.initialState);\n }\n\n get lastQueryError() {\n return this.state.getLatestValue().lastQueryError;\n }\n\n get hasNext() {\n return this.state.getLatestValue().hasNext;\n }\n\n get hasResults() {\n return Array.isArray(this.state.getLatestValue().items);\n }\n\n get isActive() {\n return this.state.getLatestValue().isActive;\n }\n\n get isLoading() {\n return this.state.getLatestValue().isLoading;\n }\n\n get initialState() {\n return {\n hasNext: true,\n isActive: false,\n isLoading: false,\n items: undefined,\n lastQueryError: undefined,\n next: undefined,\n offset: 0,\n searchQuery: '',\n };\n }\n\n get items() {\n return this.state.getLatestValue().items;\n }\n\n get next() {\n return this.state.getLatestValue().next;\n }\n\n get offset() {\n return this.state.getLatestValue().offset;\n }\n\n get searchQuery() {\n return this.state.getLatestValue().searchQuery;\n }\n\n activate = () => {\n if (this.isActive) return;\n this.state.partialNext({ isActive: true });\n };\n\n deactivate = () => {\n if (!this.isActive) return;\n this.state.partialNext({ isActive: false });\n };\n\n canExecuteQuery = (newSearchString?: string) => {\n const hasNewSearchQuery = typeof newSearchString !== 'undefined';\n const searchString = newSearchString ?? this.searchQuery;\n return !!(\n this.isActive &&\n !this.isLoading &&\n (this.hasNext || hasNewSearchQuery) &&\n (this.allowEmptySearchString || searchString)\n );\n };\n\n protected getStateBeforeFirstQuery(\n newSearchString: string,\n ): SearchSourceState<T> {\n const initialState = this.initialState;\n const oldItems = this.items;\n\n const items = this.resetOnNewSearchQuery ? initialState.items : oldItems;\n return {\n ...this.initialState,\n items,\n isActive: this.isActive,\n isLoading: this.resetOnNewSearchQuery ? true : !oldItems,\n searchQuery: newSearchString,\n };\n }\n\n protected getStateAfterQuery(\n stateUpdate: Partial<SearchSourceState<T>>,\n isFirstPage: boolean,\n ): SearchSourceState<T> {\n const current = this.state.getLatestValue();\n return {\n ...current,\n lastQueryError: undefined, // reset lastQueryError that can be overridden by the stateUpdate\n ...stateUpdate,\n isLoading: false,\n items: isFirstPage\n ? stateUpdate.items\n : [...(this.items ?? []), ...(stateUpdate.items || [])],\n };\n }\n\n protected prepareStateForQuery(newSearchString?: string) {\n const hasNewSearchQuery = typeof newSearchString !== 'undefined';\n const searchString = newSearchString ?? this.searchQuery;\n\n if (hasNewSearchQuery) {\n this.state.next(this.getStateBeforeFirstQuery(newSearchString ?? ''));\n } else {\n this.state.partialNext({ isLoading: true });\n }\n\n return { searchString, hasNewSearchQuery };\n }\n\n protected updatePaginationStateFromQuery(result: QueryReturnValue<T>) {\n const { items, next } = result;\n\n const stateUpdate: Partial<SearchSourceState<T>> = {};\n if (Object.prototype.hasOwnProperty.call(result, 'next')) {\n stateUpdate.next = next;\n stateUpdate.hasNext = !!next;\n } else {\n stateUpdate.offset = (this.offset ?? 0) + items.length;\n stateUpdate.hasNext = items.length === this.pageSize;\n }\n\n return stateUpdate;\n }\n\n resetState() {\n this.state.next(this.initialState);\n }\n\n resetStateAndActivate() {\n this.resetState();\n this.activate();\n }\n}\n\nexport abstract class BaseSearchSource<T>\n extends BaseSearchSourceBase<T>\n implements SearchSource<T>\n{\n protected searchDebounced!: DebouncedExecQueryFunction;\n\n constructor(options?: SearchSourceOptions) {\n const { debounceMs } = { ...DEFAULT_SEARCH_SOURCE_OPTIONS, ...options };\n super(options);\n this.setDebounceOptions({ debounceMs });\n }\n\n protected abstract query(searchQuery: string): Promise<QueryReturnValue<T>>;\n\n protected abstract filterQueryResults(items: T[]): T[] | Promise<T[]>;\n\n setDebounceOptions = ({ debounceMs }: DebounceOptions) => {\n this.searchDebounced = debounce(this.executeQuery.bind(this), debounceMs);\n };\n\n async executeQuery(newSearchString?: string) {\n if (!this.canExecuteQuery(newSearchString)) return;\n\n const { hasNewSearchQuery, searchString } =\n this.prepareStateForQuery(newSearchString);\n\n let stateUpdate: Partial<SearchSourceState<T>> = {};\n try {\n const results = await this.query(searchString);\n if (!results) return;\n\n const { items } = results;\n stateUpdate = this.updatePaginationStateFromQuery(results);\n stateUpdate.items = await this.filterQueryResults(items);\n } catch (e) {\n stateUpdate.lastQueryError = e as Error;\n } finally {\n this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));\n }\n }\n\n search = (searchQuery?: string) => this.searchDebounced(searchQuery);\n\n cancelScheduledQuery() {\n this.searchDebounced.cancel();\n }\n}\n\nexport abstract class BaseSearchSourceSync<T>\n extends BaseSearchSourceBase<T>\n implements SearchSourceSync<T>\n{\n protected searchDebounced!: DebouncedExecQueryFunction;\n\n constructor(options?: SearchSourceOptions) {\n const { debounceMs } = { ...DEFAULT_SEARCH_SOURCE_OPTIONS, ...options };\n super(options);\n this.setDebounceOptions({ debounceMs });\n }\n\n protected abstract query(searchQuery: string): QueryReturnValue<T>;\n\n protected abstract filterQueryResults(items: T[]): T[];\n\n setDebounceOptions = ({ debounceMs }: DebounceOptions) => {\n this.searchDebounced = debounce(this.executeQuery.bind(this), debounceMs);\n };\n\n executeQuery(newSearchString?: string) {\n if (!this.canExecuteQuery(newSearchString)) return;\n\n const { hasNewSearchQuery, searchString } =\n this.prepareStateForQuery(newSearchString);\n\n let stateUpdate: Partial<SearchSourceState<T>> = {};\n try {\n const results = this.query(searchString);\n if (!results) return;\n\n const { items } = results;\n stateUpdate = this.updatePaginationStateFromQuery(results);\n stateUpdate.items = this.filterQueryResults(items);\n } catch (e) {\n stateUpdate.lastQueryError = e as Error;\n } finally {\n this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));\n }\n }\n\n search = (searchQuery?: string) => this.searchDebounced(searchQuery);\n\n cancelScheduledQuery() {\n this.searchDebounced.cancel();\n }\n}\n","import { BaseSearchSource } from './BaseSearchSource';\nimport type { SearchSourceOptions } from './types';\n\nimport { FeedsClient } from '../../feeds-client';\nimport { ActivityResponse } from '../../gen/models';\n\nexport class ActivitySearchSource extends BaseSearchSource<ActivityResponse> {\n readonly type = 'activity' as const;\n private readonly client: FeedsClient;\n\n constructor(client: FeedsClient, options?: SearchSourceOptions) {\n super(options);\n this.client = client;\n }\n\n protected async query(searchQuery: string) {\n const { connected_user: connectedUser } =\n this.client.state.getLatestValue();\n if (!connectedUser) return { items: [] };\n\n const { activities: items, next } = await this.client.queryActivities({\n sort: [{ direction: -1, field: 'created_at' }],\n ...(!this.allowEmptySearchString || searchQuery.length > 0\n ? { filter: { text: { $autocomplete: searchQuery } } }\n : {}),\n limit: 10,\n next: this.next ?? undefined,\n });\n\n return { items, next };\n }\n\n protected filterQueryResults(items: ActivityResponse[]) {\n return items;\n }\n}\n","import { BaseSearchSource } from './BaseSearchSource';\nimport type { SearchSourceOptions } from './types';\n\nimport { FeedsClient } from '../../feeds-client';\nimport { Feed } from '../../feed';\n\nexport type FeedSearchSourceOptions = SearchSourceOptions & {\n groupId?: string;\n};\n\nexport class FeedSearchSource extends BaseSearchSource<Feed> {\n readonly type: string;\n readonly feedGroupId?: string | undefined;\n private readonly client: FeedsClient;\n\n constructor(client: FeedsClient, options?: FeedSearchSourceOptions) {\n super(options);\n this.client = client;\n this.feedGroupId = options?.groupId;\n this.type = `${this.feedGroupId}-feed`;\n }\n\n protected async query(searchQuery: string) {\n const { connected_user: connectedUser } =\n this.client.state.getLatestValue();\n if (!connectedUser) return { items: [] };\n\n const { feeds: items, next } = await this.client.queryFeeds({\n filter: {\n ...(this.feedGroupId ? { group_id: this.feedGroupId } : {}),\n ...(!this.allowEmptySearchString || searchQuery.length > 0\n ? {\n $or: [\n { name: { $autocomplete: searchQuery } },\n { description: { $autocomplete: searchQuery } },\n { 'created_by.name': { $autocomplete: searchQuery } },\n ],\n }\n : {}),\n },\n next: this.next ?? undefined,\n });\n\n return { items, next };\n }\n\n protected filterQueryResults(items: Feed[]) {\n return items;\n }\n}\n","import { BaseSearchSource } from './BaseSearchSource';\nimport type { SearchSourceOptions } from './types';\n\nimport { FeedsClient } from '../../feeds-client';\nimport { UserResponse } from '../../gen/models';\n\nexport class UserSearchSource extends BaseSearchSource<UserResponse> {\n readonly type = 'user' as const;\n private readonly client: FeedsClient;\n\n constructor(client: FeedsClient, options?: SearchSourceOptions) {\n super(options);\n this.client = client;\n }\n\n protected async query(searchQuery: string) {\n const { connected_user: connectedUser } =\n this.client.state.getLatestValue();\n if (!connectedUser) return { items: [] };\n\n const { users: items } = await this.client.queryUsers({\n payload: {\n filter_conditions: {\n ...(!this.allowEmptySearchString || searchQuery.length > 0\n ? {\n name: {\n $autocomplete: searchQuery,\n },\n }\n : {}),\n },\n },\n });\n\n return { items, next: undefined };\n }\n\n protected filterQueryResults(items: UserResponse[]) {\n return items;\n }\n}\n"],"names":["StateStore","debounceMs","debounce"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/common/search/SearchController.ts","../../src/common/search/BaseSearchSource.ts","../../src/common/search/ActivitySearchSource.ts","../../src/common/search/FeedSearchSource.ts","../../src/common/search/UserSearchSource.ts"],"sourcesContent":["import { StateStore } from '@stream-io/state-store';\nimport type { SearchSource } from './BaseSearchSource';\n\nexport type SearchControllerState = {\n isActive: boolean;\n searchQuery: string;\n sources: SearchSource[];\n};\n\nexport type InternalSearchControllerState = {};\n\nexport type SearchControllerConfig = {\n // The controller will make sure there is always exactly one active source. Enabled by default.\n keepSingleActiveSource: boolean;\n};\n\nexport type SearchControllerOptions = {\n config?: Partial<SearchControllerConfig>;\n sources?: SearchSource[];\n};\n\nexport class SearchController {\n /**\n * Not intended for direct use by integrators, might be removed without notice resulting in\n * broken integrations.\n */\n _internalState: StateStore<InternalSearchControllerState>;\n state: StateStore<SearchControllerState>;\n config: SearchControllerConfig;\n\n constructor({ config, sources }: SearchControllerOptions = {}) {\n this.state = new StateStore<SearchControllerState>({\n isActive: false,\n searchQuery: '',\n sources: sources ?? [],\n });\n this._internalState = new StateStore<InternalSearchControllerState>({});\n this.config = { keepSingleActiveSource: true, ...config };\n }\n get hasNext() {\n return this.sources.some((source) => source.hasNext);\n }\n\n get sources() {\n return this.state.getLatestValue().sources;\n }\n\n get activeSources() {\n return this.state.getLatestValue().sources.filter((s) => s.isActive);\n }\n\n get isActive() {\n return this.state.getLatestValue().isActive;\n }\n\n get searchQuery() {\n return this.state.getLatestValue().searchQuery;\n }\n\n get searchSourceTypes(): Array<SearchSource['type']> {\n return this.sources.map((s) => s.type);\n }\n\n addSource = (source: SearchSource) => {\n this.state.partialNext({\n sources: [...this.sources, source],\n });\n };\n\n getSource = (sourceType: SearchSource['type']) =>\n this.sources.find((s) => s.type === sourceType);\n\n removeSource = (sourceType: SearchSource['type']) => {\n const newSources = this.sources.filter((s) => s.type !== sourceType);\n if (newSources.length === this.sources.length) return;\n this.state.partialNext({ sources: newSources });\n };\n\n activateSource = (sourceType: SearchSource['type']) => {\n const source = this.getSource(sourceType);\n if (!source || source.isActive) return;\n if (this.config.keepSingleActiveSource) {\n this.sources.forEach((s) => {\n if (s.type !== sourceType) {\n s.deactivate();\n }\n });\n }\n source.activate();\n this.state.partialNext({ sources: [...this.sources] });\n };\n\n deactivateSource = (sourceType: SearchSource['type']) => {\n const source = this.getSource(sourceType);\n if (!source?.isActive) return;\n if (this.activeSources.length === 1) return;\n source.deactivate();\n this.state.partialNext({ sources: [...this.sources] });\n };\n\n activate = () => {\n if (!this.activeSources.length) {\n const sourcesToActivate = this.config.keepSingleActiveSource\n ? this.sources.slice(0, 1)\n : this.sources;\n sourcesToActivate.forEach((s) => s.activate());\n }\n if (this.isActive) return;\n this.state.partialNext({ isActive: true });\n };\n\n search = async (searchQuery?: string) => {\n const searchedSources = this.activeSources;\n this.state.partialNext({\n searchQuery,\n });\n await Promise.all(\n searchedSources.map((source) => source.search(searchQuery)),\n );\n };\n\n cancelSearchQueries = () => {\n this.activeSources.forEach((s) => s.cancelScheduledQuery());\n };\n\n clear = () => {\n this.cancelSearchQueries();\n this.sources.forEach((source) =>\n source.state.next({ ...source.initialState, isActive: source.isActive }),\n );\n this.state.next((current) => ({\n ...current,\n isActive: true,\n queriesInProgress: [],\n searchQuery: '',\n }));\n };\n\n exit = () => {\n this.cancelSearchQueries();\n this.sources.forEach((source) =>\n source.state.next({ ...source.initialState, isActive: source.isActive }),\n );\n this.state.next((current) => ({\n ...current,\n isActive: false,\n queriesInProgress: [],\n searchQuery: '',\n }));\n };\n}\n","import { StateStore } from '@stream-io/state-store';\nimport { debounce, type DebouncedFunc } from '../utils';\nimport type {\n QueryReturnValue,\n SearchSourceOptions,\n SearchSourceState,\n SearchSourceType,\n} from './types';\n\nexport type DebounceOptions = {\n debounceMs: number;\n};\ntype DebouncedExecQueryFunction = DebouncedFunc<\n (searchString?: string) => Promise<void>\n>;\n\ninterface ISearchSource<T = any> {\n activate(): void;\n\n canExecuteQuery(newSearchString?: string): boolean;\n\n deactivate(): void;\n\n readonly hasNext: boolean;\n readonly hasResults: boolean;\n readonly initialState: SearchSourceState<T>;\n readonly isActive: boolean;\n readonly isLoading: boolean;\n readonly items: T[] | undefined;\n readonly lastQueryError: Error | undefined;\n readonly next: string | undefined | null;\n readonly offset: number | undefined;\n\n resetState(): void;\n\n readonly searchQuery: string;\n\n readonly state: StateStore<SearchSourceState<T>>;\n readonly type: SearchSourceType;\n}\n\nexport interface SearchSource<T = any> extends ISearchSource<T> {\n cancelScheduledQuery(): void;\n setDebounceOptions(options: DebounceOptions): void;\n search(text?: string): Promise<void> | undefined;\n}\n\nexport interface SearchSourceSync<T = any> extends ISearchSource<T> {\n cancelScheduledQuery(): void;\n setDebounceOptions(options: DebounceOptions): void;\n search(text?: string): void;\n}\n\nconst DEFAULT_SEARCH_SOURCE_OPTIONS: Required<SearchSourceOptions> = {\n debounceMs: 300,\n pageSize: 10,\n allowEmptySearchString: false,\n resetOnNewSearchQuery: true,\n} as const;\n\nabstract class BaseSearchSourceBase<T> implements ISearchSource<T> {\n state: StateStore<SearchSourceState<T>>;\n pageSize: number;\n protected allowEmptySearchString: boolean;\n protected resetOnNewSearchQuery: boolean;\n abstract readonly type: SearchSourceType;\n\n protected constructor(options?: SearchSourceOptions) {\n const { pageSize, allowEmptySearchString, resetOnNewSearchQuery } = {\n ...DEFAULT_SEARCH_SOURCE_OPTIONS,\n ...options,\n };\n this.pageSize = pageSize;\n this.allowEmptySearchString = allowEmptySearchString;\n this.resetOnNewSearchQuery = resetOnNewSearchQuery;\n this.state = new StateStore<SearchSourceState<T>>(this.initialState);\n }\n\n get lastQueryError() {\n return this.state.getLatestValue().lastQueryError;\n }\n\n get hasNext() {\n return this.state.getLatestValue().hasNext;\n }\n\n get hasResults() {\n return Array.isArray(this.state.getLatestValue().items);\n }\n\n get isActive() {\n return this.state.getLatestValue().isActive;\n }\n\n get isLoading() {\n return this.state.getLatestValue().isLoading;\n }\n\n get initialState() {\n return {\n hasNext: true,\n isActive: false,\n isLoading: false,\n items: undefined,\n lastQueryError: undefined,\n next: undefined,\n offset: 0,\n searchQuery: '',\n };\n }\n\n get items() {\n return this.state.getLatestValue().items;\n }\n\n get next() {\n return this.state.getLatestValue().next;\n }\n\n get offset() {\n return this.state.getLatestValue().offset;\n }\n\n get searchQuery() {\n return this.state.getLatestValue().searchQuery;\n }\n\n activate = () => {\n if (this.isActive) return;\n this.state.partialNext({ isActive: true });\n };\n\n deactivate = () => {\n if (!this.isActive) return;\n this.state.partialNext({ isActive: false });\n };\n\n canExecuteQuery = (newSearchString?: string) => {\n const hasNewSearchQuery = typeof newSearchString !== 'undefined';\n const searchString = newSearchString ?? this.searchQuery;\n return !!(\n this.isActive &&\n !this.isLoading &&\n (this.hasNext || hasNewSearchQuery) &&\n (this.allowEmptySearchString || searchString)\n );\n };\n\n protected getStateBeforeFirstQuery(\n newSearchString: string,\n ): SearchSourceState<T> {\n const initialState = this.initialState;\n const oldItems = this.items;\n\n const items = this.resetOnNewSearchQuery ? initialState.items : oldItems;\n return {\n ...this.initialState,\n items,\n isActive: this.isActive,\n isLoading: this.resetOnNewSearchQuery ? true : !oldItems,\n searchQuery: newSearchString,\n };\n }\n\n protected getStateAfterQuery(\n stateUpdate: Partial<SearchSourceState<T>>,\n isFirstPage: boolean,\n ): SearchSourceState<T> {\n const current = this.state.getLatestValue();\n return {\n ...current,\n lastQueryError: undefined, // reset lastQueryError that can be overridden by the stateUpdate\n ...stateUpdate,\n isLoading: false,\n items: isFirstPage\n ? stateUpdate.items\n : [...(this.items ?? []), ...(stateUpdate.items || [])],\n };\n }\n\n protected prepareStateForQuery(newSearchString?: string) {\n const hasNewSearchQuery = typeof newSearchString !== 'undefined';\n const searchString = newSearchString ?? this.searchQuery;\n\n if (hasNewSearchQuery) {\n this.state.next(this.getStateBeforeFirstQuery(newSearchString ?? ''));\n } else {\n this.state.partialNext({ isLoading: true });\n }\n\n return { searchString, hasNewSearchQuery };\n }\n\n protected updatePaginationStateFromQuery(result: QueryReturnValue<T>) {\n const { items, next } = result;\n\n const stateUpdate: Partial<SearchSourceState<T>> = {};\n if (Object.prototype.hasOwnProperty.call(result, 'next')) {\n stateUpdate.next = next;\n stateUpdate.hasNext = !!next;\n } else {\n stateUpdate.offset = (this.offset ?? 0) + items.length;\n stateUpdate.hasNext = items.length === this.pageSize;\n }\n\n return stateUpdate;\n }\n\n resetState() {\n this.state.next(this.initialState);\n }\n\n resetStateAndActivate() {\n this.resetState();\n this.activate();\n }\n}\n\nexport abstract class BaseSearchSource<T>\n extends BaseSearchSourceBase<T>\n implements SearchSource<T>\n{\n protected searchDebounced!: DebouncedExecQueryFunction;\n\n constructor(options?: SearchSourceOptions) {\n const { debounceMs } = { ...DEFAULT_SEARCH_SOURCE_OPTIONS, ...options };\n super(options);\n this.setDebounceOptions({ debounceMs });\n }\n\n protected abstract query(searchQuery: string): Promise<QueryReturnValue<T>>;\n\n protected abstract filterQueryResults(items: T[]): T[] | Promise<T[]>;\n\n setDebounceOptions = ({ debounceMs }: DebounceOptions) => {\n this.searchDebounced = debounce(this.executeQuery.bind(this), debounceMs);\n };\n\n async executeQuery(newSearchString?: string) {\n if (!this.canExecuteQuery(newSearchString)) return;\n\n const { hasNewSearchQuery, searchString } =\n this.prepareStateForQuery(newSearchString);\n\n let stateUpdate: Partial<SearchSourceState<T>> = {};\n try {\n const results = await this.query(searchString);\n if (!results) return;\n\n const { items } = results;\n stateUpdate = this.updatePaginationStateFromQuery(results);\n stateUpdate.items = await this.filterQueryResults(items);\n } catch (e) {\n stateUpdate.lastQueryError = e as Error;\n } finally {\n this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));\n }\n }\n\n search = (searchQuery?: string) => this.searchDebounced(searchQuery);\n\n cancelScheduledQuery() {\n this.searchDebounced.cancel();\n }\n}\n\nexport abstract class BaseSearchSourceSync<T>\n extends BaseSearchSourceBase<T>\n implements SearchSourceSync<T>\n{\n protected searchDebounced!: DebouncedExecQueryFunction;\n\n constructor(options?: SearchSourceOptions) {\n const { debounceMs } = { ...DEFAULT_SEARCH_SOURCE_OPTIONS, ...options };\n super(options);\n this.setDebounceOptions({ debounceMs });\n }\n\n protected abstract query(searchQuery: string): QueryReturnValue<T>;\n\n protected abstract filterQueryResults(items: T[]): T[];\n\n setDebounceOptions = ({ debounceMs }: DebounceOptions) => {\n this.searchDebounced = debounce(this.executeQuery.bind(this), debounceMs);\n };\n\n executeQuery(newSearchString?: string) {\n if (!this.canExecuteQuery(newSearchString)) return;\n\n const { hasNewSearchQuery, searchString } =\n this.prepareStateForQuery(newSearchString);\n\n let stateUpdate: Partial<SearchSourceState<T>> = {};\n try {\n const results = this.query(searchString);\n if (!results) return;\n\n const { items } = results;\n stateUpdate = this.updatePaginationStateFromQuery(results);\n stateUpdate.items = this.filterQueryResults(items);\n } catch (e) {\n stateUpdate.lastQueryError = e as Error;\n } finally {\n this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));\n }\n }\n\n search = (searchQuery?: string) => this.searchDebounced(searchQuery);\n\n cancelScheduledQuery() {\n this.searchDebounced.cancel();\n }\n}\n","import { BaseSearchSource } from './BaseSearchSource';\nimport type { SearchSourceOptions } from './types';\n\nimport type { FeedsClient } from '../../feeds-client';\nimport type { ActivityResponse } from '../../gen/models';\n\nexport class ActivitySearchSource extends BaseSearchSource<ActivityResponse> {\n readonly type = 'activity' as const;\n private readonly client: FeedsClient;\n\n constructor(client: FeedsClient, options?: SearchSourceOptions) {\n super(options);\n this.client = client;\n }\n\n protected async query(searchQuery: string) {\n const { connected_user: connectedUser } =\n this.client.state.getLatestValue();\n if (!connectedUser) return { items: [] };\n\n const { activities: items, next } = await this.client.queryActivities({\n sort: [{ direction: -1, field: 'created_at' }],\n ...(!this.allowEmptySearchString || searchQuery.length > 0\n ? { filter: { text: { $autocomplete: searchQuery } } }\n : {}),\n limit: 10,\n next: this.next ?? undefined,\n });\n\n return { items, next };\n }\n\n protected filterQueryResults(items: ActivityResponse[]) {\n return items;\n }\n}\n","import { BaseSearchSource } from './BaseSearchSource';\nimport type { SearchSourceOptions } from './types';\n\nimport type { FeedsClient } from '../../feeds-client';\nimport type { Feed } from '../../feed';\n\nexport type FeedSearchSourceOptions = SearchSourceOptions & {\n groupId?: string;\n};\n\nexport class FeedSearchSource extends BaseSearchSource<Feed> {\n readonly type: string;\n readonly feedGroupId?: string | undefined;\n private readonly client: FeedsClient;\n\n constructor(client: FeedsClient, options?: FeedSearchSourceOptions) {\n super(options);\n this.client = client;\n this.feedGroupId = options?.groupId;\n this.type = `${this.feedGroupId}-feed`;\n }\n\n protected async query(searchQuery: string) {\n const { connected_user: connectedUser } =\n this.client.state.getLatestValue();\n if (!connectedUser) return { items: [] };\n\n const { feeds: items, next } = await this.client.queryFeeds({\n filter: {\n ...(this.feedGroupId ? { group_id: this.feedGroupId } : {}),\n ...(!this.allowEmptySearchString || searchQuery.length > 0\n ? {\n $or: [\n { name: { $autocomplete: searchQuery } },\n { description: { $autocomplete: searchQuery } },\n { 'created_by.name': { $autocomplete: searchQuery } },\n ],\n }\n : {}),\n },\n next: this.next ?? undefined,\n });\n\n return { items, next };\n }\n\n protected filterQueryResults(items: Feed[]) {\n return items;\n }\n}\n","import { BaseSearchSource } from './BaseSearchSource';\nimport type { SearchSourceOptions } from './types';\n\nimport type { FeedsClient } from '../../feeds-client';\nimport type { UserResponse } from '../../gen/models';\n\nexport class UserSearchSource extends BaseSearchSource<UserResponse> {\n readonly type = 'user' as const;\n private readonly client: FeedsClient;\n\n constructor(client: FeedsClient, options?: SearchSourceOptions) {\n super(options);\n this.client = client;\n }\n\n protected async query(searchQuery: string) {\n const { connected_user: connectedUser } =\n this.client.state.getLatestValue();\n if (!connectedUser) return { items: [] };\n\n const { users: items } = await this.client.queryUsers({\n payload: {\n filter_conditions: {\n ...(!this.allowEmptySearchString || searchQuery.length > 0\n ? {\n name: {\n $autocomplete: searchQuery,\n },\n }\n : {}),\n },\n },\n });\n\n return { items, next: undefined };\n }\n\n protected filterQueryResults(items: UserResponse[]) {\n return items;\n }\n}\n"],"names":["StateStore","debounceMs","debounce"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require$$0 = require("react");
4
4
  require("@stream-io/state-store");
5
- const index = require("../index-CFv0uza2.js");
5
+ const index = require("../index-o7AeSkxa.js");
6
6
  require("@stream-io/logger");
7
7
  require("axios");
8
8
  var shim = { exports: {} };
@@ -525,38 +525,40 @@ const useOwnCapabilities = (feedFromProps) => {
525
525
  const feed = feedFromProps ?? feedFromContext;
526
526
  const { oc = stableEmptyArray } = useStateStore(feed?.state, selector$9) ?? {};
527
527
  return require$$0.useMemo(
528
- () => ({
529
- can_add_activity: oc.indexOf(index.FeedOwnCapability.ADD_ACTIVITY) > -1,
530
- can_add_activity_reaction: oc.indexOf(index.FeedOwnCapability.ADD_ACTIVITY_REACTION) > -1,
531
- can_add_comment: oc.indexOf(index.FeedOwnCapability.ADD_COMMENT) > -1,
532
- can_add_comment_reaction: oc.indexOf(index.FeedOwnCapability.ADD_COMMENT_REACTION) > -1,
533
- can_bookmark_activity: oc.indexOf(index.FeedOwnCapability.BOOKMARK_ACTIVITY) > -1,
534
- can_create_feed: oc.indexOf(index.FeedOwnCapability.CREATE_FEED) > -1,
535
- can_delete_bookmark: oc.indexOf(index.FeedOwnCapability.DELETE_BOOKMARK) > -1,
536
- can_delete_comment: oc.indexOf(index.FeedOwnCapability.DELETE_COMMENT) > -1,
537
- can_delete_feed: oc.indexOf(index.FeedOwnCapability.DELETE_FEED) > -1,
538
- can_edit_bookmark: oc.indexOf(index.FeedOwnCapability.EDIT_BOOKMARK) > -1,
539
- can_follow: oc.indexOf(index.FeedOwnCapability.FOLLOW) > -1,
540
- can_remove_activity: oc.indexOf(index.FeedOwnCapability.REMOVE_ACTIVITY) > -1,
541
- can_remove_activity_reaction: oc.indexOf(index.FeedOwnCapability.REMOVE_ACTIVITY_REACTION) > -1,
542
- can_remove_comment_reaction: oc.indexOf(index.FeedOwnCapability.REMOVE_COMMENT_REACTION) > -1,
543
- can_unfollow: oc.indexOf(index.FeedOwnCapability.UNFOLLOW) > -1,
544
- can_update_feed: oc.indexOf(index.FeedOwnCapability.UPDATE_FEED) > -1,
545
- can_invite_feed: oc.indexOf(index.FeedOwnCapability.INVITE_FEED) > -1,
546
- can_join_feed: oc.indexOf(index.FeedOwnCapability.JOIN_FEED) > -1,
547
- can_leave_feed: oc.indexOf(index.FeedOwnCapability.LEAVE_FEED) > -1,
548
- can_manage_feed_group: oc.indexOf(index.FeedOwnCapability.MANAGE_FEED_GROUP) > -1,
549
- can_mark_activity: oc.indexOf(index.FeedOwnCapability.MARK_ACTIVITY) > -1,
550
- can_pin_activity: oc.indexOf(index.FeedOwnCapability.PIN_ACTIVITY) > -1,
551
- can_query_feed_members: oc.indexOf(index.FeedOwnCapability.QUERY_FEED_MEMBERS) > -1,
552
- can_query_follows: oc.indexOf(index.FeedOwnCapability.QUERY_FOLLOWS) > -1,
553
- can_read_activities: oc.indexOf(index.FeedOwnCapability.READ_ACTIVITIES) > -1,
554
- can_read_feed: oc.indexOf(index.FeedOwnCapability.READ_FEED) > -1,
555
- can_update_activity: oc.indexOf(index.FeedOwnCapability.UPDATE_ACTIVITY) > -1,
556
- can_update_comment: oc.indexOf(index.FeedOwnCapability.UPDATE_COMMENT) > -1,
557
- can_update_feed_followers: oc.indexOf(index.FeedOwnCapability.UPDATE_FEED_FOLLOWERS) > -1,
558
- can_update_feed_members: oc.indexOf(index.FeedOwnCapability.UPDATE_FEED_MEMBERS) > -1
559
- }),
528
+ () => {
529
+ const capabilitiesSet = new Set(oc);
530
+ return {
531
+ can_add_activity: capabilitiesSet.has(index.FeedOwnCapability.ADD_ACTIVITY),
532
+ can_add_activity_bookmark: capabilitiesSet.has(index.FeedOwnCapability.ADD_ACTIVITY_BOOKMARK),
533
+ can_add_activity_reaction: capabilitiesSet.has(index.FeedOwnCapability.ADD_ACTIVITY_REACTION),
534
+ can_add_comment: capabilitiesSet.has(index.FeedOwnCapability.ADD_COMMENT),
535
+ can_add_comment_reaction: capabilitiesSet.has(index.FeedOwnCapability.ADD_COMMENT_REACTION),
536
+ can_create_feed: capabilitiesSet.has(index.FeedOwnCapability.CREATE_FEED),
537
+ can_delete_any_activity: capabilitiesSet.has(index.FeedOwnCapability.DELETE_ANY_ACTIVITY),
538
+ can_delete_any_comment: capabilitiesSet.has(index.FeedOwnCapability.DELETE_ANY_COMMENT),
539
+ can_delete_feed: capabilitiesSet.has(index.FeedOwnCapability.DELETE_FEED),
540
+ can_delete_own_activity: capabilitiesSet.has(index.FeedOwnCapability.DELETE_OWN_ACTIVITY),
541
+ can_delete_own_activity_bookmark: capabilitiesSet.has(index.FeedOwnCapability.DELETE_OWN_ACTIVITY_BOOKMARK),
542
+ can_delete_own_activity_reaction: capabilitiesSet.has(index.FeedOwnCapability.DELETE_OWN_ACTIVITY_REACTION),
543
+ can_delete_own_comment: capabilitiesSet.has(index.FeedOwnCapability.DELETE_OWN_COMMENT),
544
+ can_delete_own_comment_reaction: capabilitiesSet.has(index.FeedOwnCapability.DELETE_OWN_COMMENT_REACTION),
545
+ can_follow: capabilitiesSet.has(index.FeedOwnCapability.FOLLOW),
546
+ can_pin_activity: capabilitiesSet.has(index.FeedOwnCapability.PIN_ACTIVITY),
547
+ can_query_feed_members: capabilitiesSet.has(index.FeedOwnCapability.QUERY_FEED_MEMBERS),
548
+ can_query_follows: capabilitiesSet.has(index.FeedOwnCapability.QUERY_FOLLOWS),
549
+ can_read_activities: capabilitiesSet.has(index.FeedOwnCapability.READ_ACTIVITIES),
550
+ can_read_feed: capabilitiesSet.has(index.FeedOwnCapability.READ_FEED),
551
+ can_unfollow: capabilitiesSet.has(index.FeedOwnCapability.UNFOLLOW),
552
+ can_update_any_activity: capabilitiesSet.has(index.FeedOwnCapability.UPDATE_ANY_ACTIVITY),
553
+ can_update_any_comment: capabilitiesSet.has(index.FeedOwnCapability.UPDATE_ANY_COMMENT),
554
+ can_update_feed: capabilitiesSet.has(index.FeedOwnCapability.UPDATE_FEED),
555
+ can_update_feed_followers: capabilitiesSet.has(index.FeedOwnCapability.UPDATE_FEED_FOLLOWERS),
556
+ can_update_feed_members: capabilitiesSet.has(index.FeedOwnCapability.UPDATE_FEED_MEMBERS),
557
+ can_update_own_activity: capabilitiesSet.has(index.FeedOwnCapability.UPDATE_OWN_ACTIVITY),
558
+ can_update_own_activity_bookmark: capabilitiesSet.has(index.FeedOwnCapability.UPDATE_OWN_ACTIVITY_BOOKMARK),
559
+ can_update_own_comment: capabilitiesSet.has(index.FeedOwnCapability.UPDATE_OWN_COMMENT)
560
+ };
561
+ },
560
562
  [oc]
561
563
  );
562
564
  };