@stream-io/feeds-client 0.3.32 → 0.3.33

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 (52) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/index.js +3 -2
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/react-bindings.js +39 -33
  5. package/dist/cjs/react-bindings.js.map +1 -1
  6. package/dist/es/index.mjs +4 -3
  7. package/dist/es/index.mjs.map +1 -1
  8. package/dist/es/react-bindings.mjs +39 -33
  9. package/dist/es/react-bindings.mjs.map +1 -1
  10. package/dist/{feeds-client-BNhvggk2.mjs → feeds-client-C-6NrDBy.mjs} +196 -182
  11. package/dist/feeds-client-C-6NrDBy.mjs.map +1 -0
  12. package/dist/{feeds-client-B9rwEWH3.js → feeds-client-CyaHg6lu.js} +196 -182
  13. package/dist/feeds-client-CyaHg6lu.js.map +1 -0
  14. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  15. package/dist/types/activity-with-state-updates/activity-with-state-updates.d.ts +1 -1
  16. package/dist/types/activity-with-state-updates/activity-with-state-updates.d.ts.map +1 -1
  17. package/dist/types/bindings/react/hooks/feed-state-hooks/index.d.ts +1 -0
  18. package/dist/types/bindings/react/hooks/feed-state-hooks/index.d.ts.map +1 -1
  19. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.d.ts.map +1 -1
  20. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnFollowings.d.ts +8 -0
  21. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnFollowings.d.ts.map +1 -0
  22. package/dist/types/common/types.d.ts +1 -1
  23. package/dist/types/common/types.d.ts.map +1 -1
  24. package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts.map +1 -1
  25. package/dist/types/feed/event-handlers/activity/handle-activity-updated.d.ts.map +1 -1
  26. package/dist/types/feed/feed.d.ts +2 -1
  27. package/dist/types/feed/feed.d.ts.map +1 -1
  28. package/dist/types/feeds-client/feeds-client.d.ts +7 -9
  29. package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
  30. package/dist/types/utils/check-own-fields-equality.d.ts +2 -0
  31. package/dist/types/utils/check-own-fields-equality.d.ts.map +1 -1
  32. package/dist/types/utils/throttling/index.d.ts +1 -1
  33. package/dist/types/utils/throttling/index.d.ts.map +1 -1
  34. package/dist/types/utils/throttling/throttled-get-batched-own-fields.d.ts +14 -0
  35. package/dist/types/utils/throttling/throttled-get-batched-own-fields.d.ts.map +1 -0
  36. package/package.json +1 -1
  37. package/src/activity-with-state-updates/activity-with-state-updates.ts +7 -2
  38. package/src/bindings/react/hooks/feed-state-hooks/index.ts +1 -0
  39. package/src/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.ts +14 -23
  40. package/src/bindings/react/hooks/feed-state-hooks/useOwnFollowings.ts +18 -0
  41. package/src/common/types.ts +1 -1
  42. package/src/feed/event-handlers/activity/handle-activity-added.ts +0 -6
  43. package/src/feed/event-handlers/activity/handle-activity-updated.ts +0 -4
  44. package/src/feed/feed.ts +51 -39
  45. package/src/feeds-client/feeds-client.ts +88 -91
  46. package/src/utils/check-own-fields-equality.ts +37 -10
  47. package/src/utils/throttling/index.ts +1 -1
  48. package/src/utils/throttling/{throttled-get-batched-own-capabilities.ts → throttled-get-batched-own-fields.ts} +10 -10
  49. package/dist/feeds-client-B9rwEWH3.js.map +0 -1
  50. package/dist/feeds-client-BNhvggk2.mjs.map +0 -1
  51. package/dist/types/utils/throttling/throttled-get-batched-own-capabilities.d.ts +0 -14
  52. package/dist/types/utils/throttling/throttled-get-batched-own-capabilities.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { useStateStore } from "@stream-io/state-store/react-bindings";
2
2
  export * from "@stream-io/state-store/react-bindings";
3
3
  import { useState, useEffect, createContext, useContext, useRef, useCallback, useMemo } from "react";
4
- import { F as FeedsClient, g as isCommentResponse, c as checkHasAnotherPage } from "../feeds-client-BNhvggk2.mjs";
4
+ import { F as FeedsClient, g as isCommentResponse, c as checkHasAnotherPage } from "../feeds-client-C-6NrDBy.mjs";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  const useCreateFeedsClient = ({
7
7
  apiKey,
@@ -47,18 +47,18 @@ const useFeedsClient = () => {
47
47
  };
48
48
  const useClientConnectedUser = () => {
49
49
  const client = useFeedsClient();
50
- const { user } = useStateStore(client?.state, selector$b) ?? {};
50
+ const { user } = useStateStore(client?.state, selector$d) ?? {};
51
51
  return user;
52
52
  };
53
- const selector$b = (nextState) => ({
53
+ const selector$d = (nextState) => ({
54
54
  user: nextState.connected_user
55
55
  });
56
56
  const useWsConnectionState = () => {
57
57
  const client = useFeedsClient();
58
- const { is_healthy } = useStateStore(client?.state, selector$a) ?? {};
58
+ const { is_healthy } = useStateStore(client?.state, selector$c) ?? {};
59
59
  return { is_healthy };
60
60
  };
61
- const selector$a = (nextState) => ({
61
+ const selector$c = (nextState) => ({
62
62
  is_healthy: nextState.is_ws_connection_healthy
63
63
  });
64
64
  const StreamFeedContext = createContext(void 0);
@@ -75,7 +75,7 @@ const useStableCallback = (callback) => {
75
75
  const useFeedActivities = (feedFromProps) => {
76
76
  const feedFromContext = useFeedContext();
77
77
  const feed = feedFromProps ?? feedFromContext;
78
- const data = useStateStore(feed?.state, selector$9);
78
+ const data = useStateStore(feed?.state, selector$b);
79
79
  const loadNextPage = useStableCallback(async () => {
80
80
  if (!feed || !data?.has_next_page || data?.is_loading) {
81
81
  return;
@@ -84,7 +84,7 @@ const useFeedActivities = (feedFromProps) => {
84
84
  });
85
85
  return useMemo(() => ({ ...data, loadNextPage }), [data, loadNextPage]);
86
86
  };
87
- const selector$9 = ({
87
+ const selector$b = ({
88
88
  is_loading_activities,
89
89
  next,
90
90
  activities = []
@@ -133,26 +133,23 @@ function useComments({
133
133
  }, [data, loadNextPage]);
134
134
  }
135
135
  const stableEmptyArray = [];
136
+ const selector$a = (currentState) => {
137
+ return {
138
+ feedOwnCapabilities: currentState.own_capabilities ?? stableEmptyArray
139
+ };
140
+ };
136
141
  const useOwnCapabilities = (feedFromProps) => {
137
142
  const client = useFeedsClient();
138
143
  const feedFromContext = useFeedContext();
139
- const feed = feedFromProps ?? feedFromContext;
140
- const fid = typeof feed === "string" ? feed : feed?.feed;
141
- const selector2 = useCallback(
142
- (currentState) => {
143
- if (!fid) {
144
- return { feedOwnCapabilities: stableEmptyArray };
145
- }
146
- return {
147
- feedOwnCapabilities: currentState.own_capabilities_by_fid[fid] ?? stableEmptyArray
148
- };
149
- },
150
- [fid]
151
- );
152
- const { feedOwnCapabilities = stableEmptyArray } = useStateStore(client?.state, selector2) ?? {};
144
+ let feed = feedFromProps ?? feedFromContext;
145
+ if (typeof feed === "string") {
146
+ const [groupId, id] = feed.split(":");
147
+ feed = groupId && id ? client?.feed(groupId, id) : void 0;
148
+ }
149
+ const { feedOwnCapabilities = stableEmptyArray } = useStateStore(feed?.state, selector$a) ?? {};
153
150
  return feedOwnCapabilities;
154
151
  };
155
- const selector$8 = ({
152
+ const selector$9 = ({
156
153
  follower_count,
157
154
  followers,
158
155
  followers_pagination
@@ -164,7 +161,7 @@ const selector$8 = ({
164
161
  function useFollowers(feedFromProps) {
165
162
  const feedFromContext = useFeedContext();
166
163
  const feed = feedFromProps ?? feedFromContext;
167
- const data = useStateStore(feed?.state, selector$8);
164
+ const data = useStateStore(feed?.state, selector$9);
168
165
  const loadNextPage = useCallback(
169
166
  (...options) => feed?.loadNextPageFollowers(...options),
170
167
  [feed]
@@ -184,7 +181,7 @@ function useFollowers(feedFromProps) {
184
181
  };
185
182
  }, [data, loadNextPage]);
186
183
  }
187
- const selector$7 = ({
184
+ const selector$8 = ({
188
185
  following_count,
189
186
  following,
190
187
  following_pagination
@@ -196,7 +193,7 @@ const selector$7 = ({
196
193
  function useFollowing(feedFromProps) {
197
194
  const feedFromContext = useFeedContext();
198
195
  const feed = feedFromProps ?? feedFromContext;
199
- const data = useStateStore(feed?.state, selector$7);
196
+ const data = useStateStore(feed?.state, selector$8);
200
197
  const loadNextPage = useCallback(
201
198
  (...options) => feed?.loadNextPageFollowing(...options),
202
199
  [feed]
@@ -219,9 +216,9 @@ function useFollowing(feedFromProps) {
219
216
  const useFeedMetadata = (feedFromProps) => {
220
217
  const feedFromContext = useFeedContext();
221
218
  const feed = feedFromProps ?? feedFromContext;
222
- return useStateStore(feed?.state, selector$6);
219
+ return useStateStore(feed?.state, selector$7);
223
220
  };
224
- const selector$6 = ({
221
+ const selector$7 = ({
225
222
  follower_count = 0,
226
223
  following_count = 0,
227
224
  created_by,
@@ -237,12 +234,12 @@ const selector$6 = ({
237
234
  const useOwnFollows = (feedFromProps) => {
238
235
  const feedFromContext = useFeedContext();
239
236
  const feed = feedFromProps ?? feedFromContext;
240
- return useStateStore(feed?.state, selector$5);
237
+ return useStateStore(feed?.state, selector$6);
241
238
  };
242
- const selector$5 = ({ own_follows }) => ({
239
+ const selector$6 = ({ own_follows }) => ({
243
240
  own_follows
244
241
  });
245
- const selector$4 = ({ notification_status }) => ({
242
+ const selector$5 = ({ notification_status }) => ({
246
243
  unread: notification_status?.unread ?? 0,
247
244
  unseen: notification_status?.unseen ?? 0,
248
245
  last_read_at: notification_status?.last_read_at,
@@ -253,9 +250,9 @@ const selector$4 = ({ notification_status }) => ({
253
250
  function useNotificationStatus(feedFromProps) {
254
251
  const feedFromContext = useFeedContext();
255
252
  const feed = feedFromProps ?? feedFromContext;
256
- return useStateStore(feed?.state, selector$4);
253
+ return useStateStore(feed?.state, selector$5);
257
254
  }
258
- const selector$3 = ({
255
+ const selector$4 = ({
259
256
  is_loading_activities,
260
257
  next,
261
258
  aggregated_activities = []
@@ -267,7 +264,7 @@ const selector$3 = ({
267
264
  function useAggregatedActivities(feedFromProps) {
268
265
  const feedFromContext = useFeedContext();
269
266
  const feed = feedFromProps ?? feedFromContext;
270
- const data = useStateStore(feed?.state, selector$3);
267
+ const data = useStateStore(feed?.state, selector$4);
271
268
  const loadNextPage = useStableCallback(async () => {
272
269
  if (!feed || !data?.has_next_page || data?.is_loading) {
273
270
  return;
@@ -368,6 +365,14 @@ function useActivityComments({
368
365
  };
369
366
  }, [data, loadNextPage]);
370
367
  }
368
+ const useOwnFollowings = (feedFromProps) => {
369
+ const feedFromContext = useFeedContext();
370
+ const feed = feedFromProps ?? feedFromContext;
371
+ return useStateStore(feed?.state, selector$3);
372
+ };
373
+ const selector$3 = ({ own_followings }) => ({
374
+ own_followings
375
+ });
371
376
  const StreamSearchResultsContext = createContext(void 0);
372
377
  const useSearchResultsContext = () => {
373
378
  return useContext(StreamSearchResultsContext);
@@ -466,6 +471,7 @@ export {
466
471
  useIsAggregatedActivitySeen,
467
472
  useNotificationStatus,
468
473
  useOwnCapabilities,
474
+ useOwnFollowings,
469
475
  useOwnFollows,
470
476
  useSearchContext,
471
477
  useSearchQuery,
@@ -1 +1 @@
1
- {"version":3,"file":"react-bindings.mjs","sources":["../../src/bindings/react/hooks/useCreateFeedsClient.ts","../../src/bindings/react/contexts/StreamFeedsContext.tsx","../../src/bindings/react/hooks/client-state-hooks/useClientConnectedUser.ts","../../src/bindings/react/hooks/client-state-hooks/useWsConnectionState.ts","../../src/bindings/react/contexts/StreamFeedContext.tsx","../../src/bindings/react/hooks/internal/useStableCallback.ts","../../src/bindings/react/hooks/feed-state-hooks/useFeedActivities.ts","../../src/bindings/react/hooks/feed-state-hooks/useComments.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.ts","../../src/bindings/react/hooks/feed-state-hooks/useFollowers.ts","../../src/bindings/react/hooks/feed-state-hooks/useFollowing.ts","../../src/bindings/react/hooks/feed-state-hooks/useFeedMetadata.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnFollows.ts","../../src/bindings/react/hooks/feed-state-hooks/useNotificationStatus.ts","../../src/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.ts","../../src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.ts","../../src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.ts","../../src/bindings/react/hooks/feed-state-hooks/useActivityComments.ts","../../src/bindings/react/contexts/StreamSearchResultsContext.tsx","../../src/bindings/react/hooks/search-state-hooks/useSearchResult.ts","../../src/bindings/react/contexts/StreamSearchContext.tsx","../../src/bindings/react/hooks/search-state-hooks/useSearchQuery.ts","../../src/bindings/react/hooks/search-state-hooks/useSearchSources.ts","../../src/bindings/react/wrappers/StreamFeeds.tsx","../../src/bindings/react/wrappers/StreamFeed.tsx","../../src/bindings/react/wrappers/StreamSearch.tsx","../../src/bindings/react/wrappers/StreamSearchResults.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { FeedsClient } from '../../../feeds-client';\nimport type { TokenOrProvider } from '../../../types';\nimport type { UserRequest } from '../../../gen/models';\nimport type { FeedsClientOptions } from '../../../common/types';\n\n/**\n * A React hook to create, connect and return an instance of `FeedsClient`.\n */\nexport const useCreateFeedsClient = ({\n apiKey,\n tokenOrProvider,\n userData,\n options,\n}: {\n apiKey: string;\n tokenOrProvider: TokenOrProvider;\n userData: UserRequest;\n options?: FeedsClientOptions;\n}) => {\n const [client, setClient] = useState<FeedsClient | null>(\n () => new FeedsClient(apiKey, options),\n );\n const [error, setError] = useState<Error | null>(null);\n const [cachedUserData, setCachedUserData] = useState(userData);\n\n const [cachedOptions] = useState(options);\n\n if (error) {\n throw error;\n }\n\n if (userData.id !== cachedUserData.id) {\n setCachedUserData(userData);\n }\n\n useEffect(() => {\n const _client = new FeedsClient(apiKey, cachedOptions);\n\n const connectionPromise = _client\n .connectUser(cachedUserData, tokenOrProvider)\n .then(() => {\n setError(null);\n })\n .catch((err) => {\n setError(err);\n });\n\n setClient(_client);\n\n return () => {\n setClient(null);\n connectionPromise\n .then(() => {\n setError(null);\n return _client.disconnectUser();\n })\n .catch((err) => {\n setError(err);\n });\n };\n }, [apiKey, cachedUserData, cachedOptions, tokenOrProvider]);\n\n return client;\n};\n","import { createContext, useContext } from 'react';\n\nimport type { FeedsClient } from '../../../feeds-client';\n\nexport const StreamFeedsContext = createContext<FeedsClient | undefined>(undefined);\n\n/**\n * The props for the StreamFeedsProvider component.\n */\nexport type StreamFeedsContextProps = {\n /**\n * The client instance to provide to the component tree.\n */\n client: FeedsClient;\n};\n\n/**\n * Hook to access the nearest FeedsClient instance.\n */\nexport const useFeedsClient = () => {\n return useContext(StreamFeedsContext);\n};\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\nimport type { FeedsClientState } from '../../../../feeds-client';\n\n/**\n * A React hook that returns the currently connected user on a `FeedsClient` instance and null otherwise.\n */\nexport const useClientConnectedUser = () => {\n const client = useFeedsClient();\n\n const { user } = useStateStore(client?.state, selector) ?? {};\n\n return user;\n};\n\nconst selector = (nextState: FeedsClientState) => ({\n user: nextState.connected_user,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\nimport type { FeedsClientState } from '../../../../feeds-client';\n\n/**\n * A React hook that returns the websocket connection state of `FeedsClient`.\n */\nexport const useWsConnectionState = () => {\n const client = useFeedsClient();\n\n const { is_healthy } = useStateStore(client?.state, selector) ?? {}\n\n return { is_healthy };\n};\n\nconst selector = (nextState: FeedsClientState) => ({\n is_healthy: nextState.is_ws_connection_healthy,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { Feed } from '../../../feed';\n\nexport const StreamFeedContext = createContext<Feed | undefined>(undefined);\n\n/**\n * The props for the StreamFeedProvider component.\n */\nexport type StreamFeedContextProps = {\n feed: Feed;\n};\n\n/**\n * Hook to access the nearest Feed instance.\n */\nexport const useFeedContext = () => {\n return useContext(StreamFeedContext);\n};\n","import { useCallback, useRef } from 'react';\n\nexport type StableCallback<A extends unknown[], R> = (...args: A) => R;\n\n/**\n * A utility hook implementing a stable callback. It takes in an unstable method that\n * is supposed to be invoked somewhere deeper in the DOM tree without making it\n * change its reference every time the parent component rerenders. It will also return\n * the value of the callback if it does return one.\n * A common use-case would be having a function whose invocation depends on state\n * somewhere high up in the DOM tree and wanting to use the same function deeper\n * down, for example in a leaf node and simply using useCallback results in\n * cascading dependency hell. If we wrap it in useStableCallback, we would be able\n * to:\n * - Use the same function as a dependency of another hook (since it is stable)\n * - Still invoke it and get the latest state\n *\n * **Caveats:**\n * - Never wrap a function that is supposed to return a React.ReactElement in\n * useStableCallback, since React will not know that the DOM needs to be updated\n * whenever the callback value changes (for example, renderItem from FlatList must\n * never be wrapped in this hook)\n * - Always prefer using a standard useCallback/stable function wherever possible\n * (the purpose of useStableCallback is to bridge the gap between top level contexts\n * and cascading rereders in downstream components - **not** as an escape hatch)\n * @param callback - the callback we want to stabilize\n */\nexport const useStableCallback = <A extends unknown[], R>(\n callback: StableCallback<A, R>,\n): StableCallback<A, R> => {\n const ref = useRef(callback);\n ref.current = callback;\n\n return useCallback<StableCallback<A, R>>((...args) => {\n return ref.current(...args);\n }, []);\n};\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useStableCallback } from '../internal';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive object containing the current activities,\n * loading state and whether there is a next page to paginate to or not.\n */\nexport const useFeedActivities = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useStableCallback(async () => {\n if (!feed || !data?.has_next_page || data?.is_loading) {\n return;\n }\n\n await feed.getNextPage();\n });\n\n return useMemo(() => ({ ...data, loadNextPage }), [data, loadNextPage]);\n};\n\nconst selector = ({\n is_loading_activities,\n next,\n activities = [],\n}: FeedState) => ({\n is_loading: is_loading_activities,\n has_next_page: typeof next !== 'undefined',\n activities,\n});\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage, isCommentResponse } from '../../../../utils';\nimport type { ActivityResponse, CommentResponse } from '../../../../gen/models';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { CommentParent } from '../../../../types';\n\ntype UseCommentsReturnType<T extends ActivityResponse | CommentResponse> = {\n comments: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['comments'];\n comments_pagination: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['pagination'];\n has_next_page: boolean;\n is_loading_next_page: boolean;\n loadNextPage: (\n request?: T extends CommentResponse\n ? Parameters<Feed['loadNextPageCommentReplies']>[1]\n : Parameters<Feed['loadNextPageActivityComments']>[1],\n ) => Promise<void>;\n};\n\n/**\n * @deprecated Use `useActivityComments` instead.\n * @param\n */\nexport function useComments<T extends CommentParent>(_: {\n feed: Feed;\n parent: T;\n}): UseCommentsReturnType<T>;\nexport function useComments<T extends CommentParent>(_: {\n feed?: Feed;\n parent: T;\n}): UseCommentsReturnType<T> | undefined;\nexport function useComments<T extends CommentParent>({\n feed: feedFromProps,\n parent,\n}: {\n feed?: Feed;\n /**\n * The parent (activity or comment) for which to fetch comments.\n */\n parent: T;\n}) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const selector = useCallback(\n (state: FeedState) => ({\n comments: state.comments_by_entity_id?.[parent.id]?.comments,\n comments_pagination: state.comments_by_entity_id?.[parent.id]?.pagination,\n }),\n [parent.id],\n );\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useMemo<\n UseCommentsReturnType<T>['loadNextPage'] | undefined\n >(() => {\n if (!feed) return undefined;\n\n return (request) => {\n if (isCommentResponse(parent)) {\n return feed.loadNextPageCommentReplies(parent, request);\n } else {\n return feed.loadNextPageActivityComments(parent, request);\n }\n };\n }, [feed, parent]);\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n has_next_page: checkHasAnotherPage(\n data.comments,\n data.comments_pagination?.next,\n ),\n is_loading_next_page:\n data?.comments_pagination?.loading_next_page ?? false,\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useCallback } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\nimport type { Feed } from '../../../../feed';\nimport type { FeedOwnCapability } from '../../../../gen/models';\nimport type { FeedsClientState } from '../../../../feeds-client';\n\nconst stableEmptyArray: readonly FeedOwnCapability[] = [];\n\nexport const useOwnCapabilities = (feedFromProps?: Feed | string) => {\n const client = useFeedsClient();\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n const fid = typeof feed === 'string' ? feed : feed?.feed;\n\n const selector = useCallback(\n (currentState: FeedsClientState) => {\n if (!fid) {\n return { feedOwnCapabilities: stableEmptyArray };\n }\n\n return {\n feedOwnCapabilities:\n currentState.own_capabilities_by_fid[fid] ?? stableEmptyArray,\n };\n },\n [fid],\n );\n\n const { feedOwnCapabilities = stableEmptyArray } =\n useStateStore(client?.state, selector) ?? {};\n\n // console.log('GETTING CAPA: ', feed?.feed, feedOwnCapabilities);\n\n return feedOwnCapabilities;\n};\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport { checkHasAnotherPage } from '../../../../utils';\n\nconst selector = ({\n follower_count,\n followers,\n followers_pagination,\n}: FeedState) => ({\n follower_count,\n followers,\n followers_pagination,\n});\n\ntype UseFollowersReturnType = ReturnType<typeof selector> & {\n is_loading_next_page: boolean;\n has_next_page: boolean;\n loadNextPage: (\n ...options: Parameters<Feed['loadNextPageFollowers']>\n ) => Promise<void>;\n};\n\nexport function useFollowers(feed: Feed): UseFollowersReturnType;\nexport function useFollowers(feed?: Feed): UseFollowersReturnType | undefined;\nexport function useFollowers(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useCallback(\n (...options: Parameters<Feed['loadNextPageFollowers']>) =>\n feed?.loadNextPageFollowers(...options),\n [feed],\n );\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n is_loading_next_page:\n data.followers_pagination?.loading_next_page ?? false,\n has_next_page: checkHasAnotherPage(\n data.followers,\n data.followers_pagination?.next,\n ),\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage } from '../../../../utils';\nimport type { Feed, FeedState } from '../../../../feed';\n\nconst selector = ({\n following_count,\n following,\n following_pagination,\n}: FeedState) => ({\n following_count,\n following,\n following_pagination,\n});\n\ntype UseFollowingReturnType = ReturnType<typeof selector> & {\n is_loading_next_page: boolean;\n has_next_page: boolean;\n loadNextPage: (\n ...options: Parameters<Feed['loadNextPageFollowers']>\n ) => Promise<void>;\n};\n\nexport function useFollowing(feed: Feed): UseFollowingReturnType;\nexport function useFollowing(feed?: Feed): UseFollowingReturnType | undefined;\nexport function useFollowing(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useCallback(\n (...options: Parameters<Feed['loadNextPageFollowing']>) =>\n feed?.loadNextPageFollowing(...options),\n [feed],\n );\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n is_loading_next_page:\n data.following_pagination?.loading_next_page ?? false,\n has_next_page: checkHasAnotherPage(\n data.following,\n data.following_pagination?.next,\n ),\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive object containing some often used\n * metadata for a feed.\n */\nexport const useFeedMetadata = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({\n follower_count = 0,\n following_count = 0,\n created_by,\n created_at,\n updated_at,\n}: FeedState) => ({\n created_by,\n follower_count,\n following_count,\n created_at,\n updated_at,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive array of feeds that the current user\n * owns and are following the respective feed that we are observing.\n */\nexport const useOwnFollows = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({ own_follows }: FeedState) => ({\n own_follows,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { NotificationStatusResponse } from '../../../../gen/models';\n\nconst selector = ({ notification_status }: FeedState) =>\n ({\n unread: notification_status?.unread ?? 0,\n unseen: notification_status?.unseen ?? 0,\n last_read_at: notification_status?.last_read_at,\n last_seen_at: notification_status?.last_seen_at,\n read_activities: notification_status?.read_activities,\n seen_activities: notification_status?.seen_activities,\n }) satisfies NotificationStatusResponse;\n\ntype UseNotificationStatusReturnType = ReturnType<typeof selector>;\n\nexport function useNotificationStatus(\n feed: Feed,\n): UseNotificationStatusReturnType;\nexport function useNotificationStatus(\n feed?: Feed,\n): UseNotificationStatusReturnType | undefined;\nexport function useNotificationStatus(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n}\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useStableCallback } from '../internal';\nimport type { Feed, FeedState } from '../../../../feed';\n\nconst selector = ({\n is_loading_activities,\n next,\n aggregated_activities = [],\n}: FeedState) => ({\n is_loading: is_loading_activities,\n has_next_page: typeof next !== 'undefined',\n aggregated_activities,\n});\n\ntype UseAggregatedActivitiesReturnType = ReturnType<typeof selector> & {\n loadNextPage: () => Promise<void>;\n};\n\n/**\n * A React hook that returns a reactive object containing the current aggregated activities,\n * loading state and whether there is a next page to paginate to or not.\n */\nexport function useAggregatedActivities(\n feedFromProps: Feed,\n): UseAggregatedActivitiesReturnType;\nexport function useAggregatedActivities(\n feedFromProps?: Feed,\n): UseAggregatedActivitiesReturnType | undefined;\nexport function useAggregatedActivities(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useStableCallback(async () => {\n if (!feed || !data?.has_next_page || data?.is_loading) {\n return;\n }\n\n await feed.getNextPage();\n });\n\n return useMemo(\n () => (data ? { ...data, loadNextPage } : undefined),\n [data, loadNextPage],\n );\n}\n","import { useMemo } from 'react';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useNotificationStatus } from './useNotificationStatus';\nimport type { Feed } from '../../../../feed';\nimport type { AggregatedActivityResponse } from '../../../../gen/models';\n\nexport const useIsAggregatedActivityRead = ({\n feed: feedFromProps,\n aggregatedActivity,\n}: {\n feed?: Feed;\n aggregatedActivity: AggregatedActivityResponse;\n}) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const { read_activities: readActivities, last_read_at: lastReadAt } =\n useNotificationStatus(feed) ?? {};\n\n const group = aggregatedActivity.group;\n\n return useMemo(\n () =>\n (lastReadAt &&\n aggregatedActivity.updated_at.getTime() <= lastReadAt.getTime()) ||\n (readActivities ?? []).includes(group),\n [lastReadAt, aggregatedActivity.updated_at, readActivities, group],\n );\n};\n","import { useMemo } from 'react';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useNotificationStatus } from './useNotificationStatus';\nimport type { Feed } from '../../../../feed';\nimport type { AggregatedActivityResponse } from '../../../../gen/models';\n\nexport const useIsAggregatedActivitySeen = ({\n feed: feedFromProps,\n aggregatedActivity,\n}: {\n feed?: Feed;\n aggregatedActivity: AggregatedActivityResponse;\n}) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const { seen_activities: seenActivities, last_seen_at: lastSeenAt } =\n useNotificationStatus(feed) ?? {};\n\n const group = aggregatedActivity.group;\n\n return useMemo(\n () =>\n (lastSeenAt &&\n aggregatedActivity.updated_at.getTime() < lastSeenAt.getTime()) ||\n (seenActivities ?? []).includes(group),\n [lastSeenAt, aggregatedActivity.updated_at, seenActivities, group],\n );\n};\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\nimport type { StateStore } from '@stream-io/state-store';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage } from '../../../../utils';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { ActivityState, ActivityWithStateUpdates } from '../../../../activity-with-state-updates/activity-with-state-updates';\nimport type { ActivityResponse, CommentResponse } from '../../../../gen/models';\n\nconst canLoadComments = (\n feedOrActivity: Feed | ActivityResponse | ActivityWithStateUpdates,\n): feedOrActivity is ActivityWithStateUpdates | Feed => {\n return (\n 'loadNextPageCommentReplies' in feedOrActivity &&\n 'loadNextPageActivityComments' in feedOrActivity\n );\n};\n\ntype UseCommentsReturnType<T extends ActivityResponse | CommentResponse> = {\n comments: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['comments'];\n comments_pagination: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['pagination'];\n has_next_page: boolean;\n is_loading_next_page: boolean;\n loadNextPage: (\n request?: T extends CommentResponse\n ? Parameters<Feed['loadNextPageCommentReplies']>[1]\n : Parameters<Feed['loadNextPageActivityComments']>[1],\n ) => Promise<void>;\n};\n\nexport function useActivityComments({\n feed: feedFromProps,\n parentComment,\n activity,\n}: {\n feed?: Feed;\n parentComment?: CommentResponse;\n activity?: ActivityResponse | ActivityWithStateUpdates;\n}) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n const feedOrActivity = feed ?? activity;\n\n if (!feedOrActivity) {\n throw new Error('Feed or activity is required');\n }\n\n if (!canLoadComments(feedOrActivity)) {\n throw new Error('Feed or activity does not support loading comments');\n }\n\n if (!(activity || parentComment)) {\n throw new Error('Activity or parent comment is required');\n }\n\n const entityId = parentComment?.id ?? activity?.id ?? '';\n const selector = useCallback(\n (state: FeedState | ActivityState) => ({\n comments: state.comments_by_entity_id?.[entityId]?.comments,\n comments_pagination: state.comments_by_entity_id?.[entityId]?.pagination,\n }),\n [entityId],\n );\n\n const data = useStateStore(\n feedOrActivity.state as StateStore<FeedState | ActivityState>,\n selector,\n );\n\n const loadNextPage = useCallback<\n UseCommentsReturnType<ActivityResponse | CommentResponse>['loadNextPage']\n >(\n (request) => {\n if (parentComment) {\n return feedOrActivity.loadNextPageCommentReplies(\n parentComment,\n request,\n );\n } else {\n if (activity && canLoadComments(activity)) {\n return activity.loadNextPageActivityComments(request);\n } else if (feed) {\n return feed.loadNextPageActivityComments(activity?.id ?? '', request);\n } else {\n throw new Error('Activity or feed is required');\n }\n }\n },\n [feedOrActivity, feed, parentComment, activity],\n );\n\n return useMemo(() => {\n return {\n ...data,\n has_next_page: checkHasAnotherPage(\n data.comments,\n data.comments_pagination?.next,\n ),\n is_loading_next_page:\n data?.comments_pagination?.loading_next_page ?? false,\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { createContext, useContext } from 'react';\n\nimport type { SearchSource } from '../../../common/search';\n\nexport const StreamSearchResultsContext = createContext<\n SearchSource | undefined\n>(undefined);\n\n/**\n * The props for the StreamSearchResultsProvider component.\n */\nexport type StreamSearchResultsContextProps = {\n source: SearchSource;\n};\n\n/**\n * Hook to access the nearest SearchSource instance.\n */\nexport const useSearchResultsContext = () => {\n return useContext(StreamSearchResultsContext);\n};\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useSearchResultsContext } from '../../contexts/StreamSearchResultsContext';\nimport { useStableCallback } from '../internal';\nimport type { SearchSourceState } from '../../../../common/types';\nimport type { SearchSource } from '../../../../common/search';\n\nexport const useSearchResult = (sourceFromProps?: SearchSource) => {\n const sourceFromContext = useSearchResultsContext();\n const source = sourceFromProps ?? sourceFromContext;\n\n const { items, error, isLoading, hasNext } =\n useStateStore(source?.state, selector) ?? {};\n\n const loadMore = useStableCallback(async () => {\n if (hasNext) {\n source?.search();\n }\n });\n\n return useMemo(\n () => ({ items, error, isLoading, hasNext, loadMore }),\n [error, hasNext, isLoading, items, loadMore],\n );\n};\n\nconst selector = ({\n items,\n isLoading,\n hasNext,\n lastQueryError,\n}: SearchSourceState) => ({\n items,\n isLoading,\n hasNext,\n error: lastQueryError,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { SearchController } from '../../../common/search';\n\nexport const StreamSearchContext = createContext<SearchController | undefined>(undefined);\n\n/**\n * The props for the StreamSearchProvider component.\n */\nexport type StreamSearchContextProps = {\n searchController: SearchController;\n};\n\n/**\n * Hook to access the nearest SearchController instance.\n */\nexport const useSearchContext = () => {\n return useContext(StreamSearchContext);\n};\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport type {\n SearchController,\n SearchControllerState,\n} from '../../../../common/search';\nimport { useSearchContext } from '../../contexts/StreamSearchContext';\n\nexport const useSearchQuery = (controllerFromProps?: SearchController) => {\n const controllerFromState = useSearchContext();\n const controller = controllerFromProps ?? controllerFromState;\n\n return useStateStore(controller?.state, selector);\n};\n\nconst selector = ({ searchQuery }: SearchControllerState) => ({\n searchQuery,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useSearchContext } from '../../contexts/StreamSearchContext';\nimport type { SearchController, SearchControllerState } from '../../../../common/search';\n\nexport const useSearchSources = (controllerFromProps?: SearchController) => {\n const controllerFromState = useSearchContext();\n const controller = controllerFromProps ?? controllerFromState;\n\n return useStateStore(controller?.state, selector);\n};\n\nconst selector = ({ sources }: SearchControllerState) => ({\n sources,\n});\n","import type { PropsWithChildren } from 'react';\nimport { StreamFeedsContext } from '../contexts/StreamFeedsContext';\nimport type { StreamFeedsContextProps } from '../contexts/StreamFeedsContext';\n\nexport const StreamFeeds = ({ client, children }: PropsWithChildren<StreamFeedsContextProps>) => {\n return (\n <StreamFeedsContext.Provider value={client}>\n {children}\n </StreamFeedsContext.Provider>\n );\n};\n\nStreamFeeds.displayName = 'StreamFeeds';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamFeedContext } from '../contexts/StreamFeedContext';\nimport type { Feed } from '../../../feed';\n\n/**\n * The props for the StreamFeed component. It accepts a `Feed` instance.\n */\nexport type StreamFeedProps = {\n feed: Feed;\n};\n\nexport const StreamFeed = ({\n feed,\n children,\n}: PropsWithChildren<StreamFeedProps>) => {\n return (\n <StreamFeedContext.Provider value={feed}>\n {children}\n </StreamFeedContext.Provider>\n );\n};\n\nStreamFeed.displayName = 'StreamFeed';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamSearchContext } from '../contexts/StreamSearchContext';\nimport type { SearchController } from '../../../common/search';\n\n/**\n * The props for the StreamSearch component. It accepts a `SearchController` instance.\n */\nexport type StreamSearchProps = {\n searchController: SearchController | undefined;\n};\n\nexport const StreamSearch = ({\n searchController,\n children,\n}: PropsWithChildren<StreamSearchProps>) => {\n return (\n <StreamSearchContext.Provider value={searchController}>\n {children}\n </StreamSearchContext.Provider>\n );\n};\n\nStreamSearch.displayName = 'StreamSearch';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamSearchResultsContext } from '../contexts/StreamSearchResultsContext';\nimport type { SearchSource } from '../../../common/search';\n\n/**\n * The props for the StreamSearchResults component. It accepts a `SearchSource` instance.\n */\nexport type StreamSearchResultsProps = {\n source: SearchSource;\n};\n\nexport const StreamSearchResults = ({\n source,\n children,\n}: PropsWithChildren<StreamSearchResultsProps>) => {\n return (\n <StreamSearchResultsContext.Provider value={source}>\n {children}\n </StreamSearchResultsContext.Provider>\n );\n};\n\nStreamSearchResults.displayName = 'StreamSearchResults';\n"],"names":["selector"],"mappings":"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"}
1
+ {"version":3,"file":"react-bindings.mjs","sources":["../../src/bindings/react/hooks/useCreateFeedsClient.ts","../../src/bindings/react/contexts/StreamFeedsContext.tsx","../../src/bindings/react/hooks/client-state-hooks/useClientConnectedUser.ts","../../src/bindings/react/hooks/client-state-hooks/useWsConnectionState.ts","../../src/bindings/react/contexts/StreamFeedContext.tsx","../../src/bindings/react/hooks/internal/useStableCallback.ts","../../src/bindings/react/hooks/feed-state-hooks/useFeedActivities.ts","../../src/bindings/react/hooks/feed-state-hooks/useComments.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.ts","../../src/bindings/react/hooks/feed-state-hooks/useFollowers.ts","../../src/bindings/react/hooks/feed-state-hooks/useFollowing.ts","../../src/bindings/react/hooks/feed-state-hooks/useFeedMetadata.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnFollows.ts","../../src/bindings/react/hooks/feed-state-hooks/useNotificationStatus.ts","../../src/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.ts","../../src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.ts","../../src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.ts","../../src/bindings/react/hooks/feed-state-hooks/useActivityComments.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnFollowings.ts","../../src/bindings/react/contexts/StreamSearchResultsContext.tsx","../../src/bindings/react/hooks/search-state-hooks/useSearchResult.ts","../../src/bindings/react/contexts/StreamSearchContext.tsx","../../src/bindings/react/hooks/search-state-hooks/useSearchQuery.ts","../../src/bindings/react/hooks/search-state-hooks/useSearchSources.ts","../../src/bindings/react/wrappers/StreamFeeds.tsx","../../src/bindings/react/wrappers/StreamFeed.tsx","../../src/bindings/react/wrappers/StreamSearch.tsx","../../src/bindings/react/wrappers/StreamSearchResults.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { FeedsClient } from '../../../feeds-client';\nimport type { TokenOrProvider } from '../../../types';\nimport type { UserRequest } from '../../../gen/models';\nimport type { FeedsClientOptions } from '../../../common/types';\n\n/**\n * A React hook to create, connect and return an instance of `FeedsClient`.\n */\nexport const useCreateFeedsClient = ({\n apiKey,\n tokenOrProvider,\n userData,\n options,\n}: {\n apiKey: string;\n tokenOrProvider: TokenOrProvider;\n userData: UserRequest;\n options?: FeedsClientOptions;\n}) => {\n const [client, setClient] = useState<FeedsClient | null>(\n () => new FeedsClient(apiKey, options),\n );\n const [error, setError] = useState<Error | null>(null);\n const [cachedUserData, setCachedUserData] = useState(userData);\n\n const [cachedOptions] = useState(options);\n\n if (error) {\n throw error;\n }\n\n if (userData.id !== cachedUserData.id) {\n setCachedUserData(userData);\n }\n\n useEffect(() => {\n const _client = new FeedsClient(apiKey, cachedOptions);\n\n const connectionPromise = _client\n .connectUser(cachedUserData, tokenOrProvider)\n .then(() => {\n setError(null);\n })\n .catch((err) => {\n setError(err);\n });\n\n setClient(_client);\n\n return () => {\n setClient(null);\n connectionPromise\n .then(() => {\n setError(null);\n return _client.disconnectUser();\n })\n .catch((err) => {\n setError(err);\n });\n };\n }, [apiKey, cachedUserData, cachedOptions, tokenOrProvider]);\n\n return client;\n};\n","import { createContext, useContext } from 'react';\n\nimport type { FeedsClient } from '../../../feeds-client';\n\nexport const StreamFeedsContext = createContext<FeedsClient | undefined>(undefined);\n\n/**\n * The props for the StreamFeedsProvider component.\n */\nexport type StreamFeedsContextProps = {\n /**\n * The client instance to provide to the component tree.\n */\n client: FeedsClient;\n};\n\n/**\n * Hook to access the nearest FeedsClient instance.\n */\nexport const useFeedsClient = () => {\n return useContext(StreamFeedsContext);\n};\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\nimport type { FeedsClientState } from '../../../../feeds-client';\n\n/**\n * A React hook that returns the currently connected user on a `FeedsClient` instance and null otherwise.\n */\nexport const useClientConnectedUser = () => {\n const client = useFeedsClient();\n\n const { user } = useStateStore(client?.state, selector) ?? {};\n\n return user;\n};\n\nconst selector = (nextState: FeedsClientState) => ({\n user: nextState.connected_user,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\nimport type { FeedsClientState } from '../../../../feeds-client';\n\n/**\n * A React hook that returns the websocket connection state of `FeedsClient`.\n */\nexport const useWsConnectionState = () => {\n const client = useFeedsClient();\n\n const { is_healthy } = useStateStore(client?.state, selector) ?? {}\n\n return { is_healthy };\n};\n\nconst selector = (nextState: FeedsClientState) => ({\n is_healthy: nextState.is_ws_connection_healthy,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { Feed } from '../../../feed';\n\nexport const StreamFeedContext = createContext<Feed | undefined>(undefined);\n\n/**\n * The props for the StreamFeedProvider component.\n */\nexport type StreamFeedContextProps = {\n feed: Feed;\n};\n\n/**\n * Hook to access the nearest Feed instance.\n */\nexport const useFeedContext = () => {\n return useContext(StreamFeedContext);\n};\n","import { useCallback, useRef } from 'react';\n\nexport type StableCallback<A extends unknown[], R> = (...args: A) => R;\n\n/**\n * A utility hook implementing a stable callback. It takes in an unstable method that\n * is supposed to be invoked somewhere deeper in the DOM tree without making it\n * change its reference every time the parent component rerenders. It will also return\n * the value of the callback if it does return one.\n * A common use-case would be having a function whose invocation depends on state\n * somewhere high up in the DOM tree and wanting to use the same function deeper\n * down, for example in a leaf node and simply using useCallback results in\n * cascading dependency hell. If we wrap it in useStableCallback, we would be able\n * to:\n * - Use the same function as a dependency of another hook (since it is stable)\n * - Still invoke it and get the latest state\n *\n * **Caveats:**\n * - Never wrap a function that is supposed to return a React.ReactElement in\n * useStableCallback, since React will not know that the DOM needs to be updated\n * whenever the callback value changes (for example, renderItem from FlatList must\n * never be wrapped in this hook)\n * - Always prefer using a standard useCallback/stable function wherever possible\n * (the purpose of useStableCallback is to bridge the gap between top level contexts\n * and cascading rereders in downstream components - **not** as an escape hatch)\n * @param callback - the callback we want to stabilize\n */\nexport const useStableCallback = <A extends unknown[], R>(\n callback: StableCallback<A, R>,\n): StableCallback<A, R> => {\n const ref = useRef(callback);\n ref.current = callback;\n\n return useCallback<StableCallback<A, R>>((...args) => {\n return ref.current(...args);\n }, []);\n};\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useStableCallback } from '../internal';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive object containing the current activities,\n * loading state and whether there is a next page to paginate to or not.\n */\nexport const useFeedActivities = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useStableCallback(async () => {\n if (!feed || !data?.has_next_page || data?.is_loading) {\n return;\n }\n\n await feed.getNextPage();\n });\n\n return useMemo(() => ({ ...data, loadNextPage }), [data, loadNextPage]);\n};\n\nconst selector = ({\n is_loading_activities,\n next,\n activities = [],\n}: FeedState) => ({\n is_loading: is_loading_activities,\n has_next_page: typeof next !== 'undefined',\n activities,\n});\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage, isCommentResponse } from '../../../../utils';\nimport type { ActivityResponse, CommentResponse } from '../../../../gen/models';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { CommentParent } from '../../../../types';\n\ntype UseCommentsReturnType<T extends ActivityResponse | CommentResponse> = {\n comments: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['comments'];\n comments_pagination: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['pagination'];\n has_next_page: boolean;\n is_loading_next_page: boolean;\n loadNextPage: (\n request?: T extends CommentResponse\n ? Parameters<Feed['loadNextPageCommentReplies']>[1]\n : Parameters<Feed['loadNextPageActivityComments']>[1],\n ) => Promise<void>;\n};\n\n/**\n * @deprecated Use `useActivityComments` instead.\n * @param\n */\nexport function useComments<T extends CommentParent>(_: {\n feed: Feed;\n parent: T;\n}): UseCommentsReturnType<T>;\nexport function useComments<T extends CommentParent>(_: {\n feed?: Feed;\n parent: T;\n}): UseCommentsReturnType<T> | undefined;\nexport function useComments<T extends CommentParent>({\n feed: feedFromProps,\n parent,\n}: {\n feed?: Feed;\n /**\n * The parent (activity or comment) for which to fetch comments.\n */\n parent: T;\n}) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const selector = useCallback(\n (state: FeedState) => ({\n comments: state.comments_by_entity_id?.[parent.id]?.comments,\n comments_pagination: state.comments_by_entity_id?.[parent.id]?.pagination,\n }),\n [parent.id],\n );\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useMemo<\n UseCommentsReturnType<T>['loadNextPage'] | undefined\n >(() => {\n if (!feed) return undefined;\n\n return (request) => {\n if (isCommentResponse(parent)) {\n return feed.loadNextPageCommentReplies(parent, request);\n } else {\n return feed.loadNextPageActivityComments(parent, request);\n }\n };\n }, [feed, parent]);\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n has_next_page: checkHasAnotherPage(\n data.comments,\n data.comments_pagination?.next,\n ),\n is_loading_next_page:\n data?.comments_pagination?.loading_next_page ?? false,\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { FeedOwnCapability } from '../../../../gen/models';\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\n\nconst stableEmptyArray: readonly FeedOwnCapability[] = [];\n\nconst selector = (currentState: FeedState) => {\n return {\n feedOwnCapabilities: currentState.own_capabilities ?? stableEmptyArray,\n };\n};\n\nexport const useOwnCapabilities = (feedFromProps?: Feed | string) => {\n const client = useFeedsClient();\n const feedFromContext = useFeedContext();\n let feed = feedFromProps ?? feedFromContext;\n if (typeof feed === 'string') {\n const [groupId, id] = feed.split(':');\n feed = groupId && id ? client?.feed(groupId, id) : undefined;\n }\n\n const { feedOwnCapabilities = stableEmptyArray } =\n useStateStore(feed?.state, selector) ?? {};\n\n return feedOwnCapabilities;\n};\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport { checkHasAnotherPage } from '../../../../utils';\n\nconst selector = ({\n follower_count,\n followers,\n followers_pagination,\n}: FeedState) => ({\n follower_count,\n followers,\n followers_pagination,\n});\n\ntype UseFollowersReturnType = ReturnType<typeof selector> & {\n is_loading_next_page: boolean;\n has_next_page: boolean;\n loadNextPage: (\n ...options: Parameters<Feed['loadNextPageFollowers']>\n ) => Promise<void>;\n};\n\nexport function useFollowers(feed: Feed): UseFollowersReturnType;\nexport function useFollowers(feed?: Feed): UseFollowersReturnType | undefined;\nexport function useFollowers(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useCallback(\n (...options: Parameters<Feed['loadNextPageFollowers']>) =>\n feed?.loadNextPageFollowers(...options),\n [feed],\n );\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n is_loading_next_page:\n data.followers_pagination?.loading_next_page ?? false,\n has_next_page: checkHasAnotherPage(\n data.followers,\n data.followers_pagination?.next,\n ),\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage } from '../../../../utils';\nimport type { Feed, FeedState } from '../../../../feed';\n\nconst selector = ({\n following_count,\n following,\n following_pagination,\n}: FeedState) => ({\n following_count,\n following,\n following_pagination,\n});\n\ntype UseFollowingReturnType = ReturnType<typeof selector> & {\n is_loading_next_page: boolean;\n has_next_page: boolean;\n loadNextPage: (\n ...options: Parameters<Feed['loadNextPageFollowers']>\n ) => Promise<void>;\n};\n\nexport function useFollowing(feed: Feed): UseFollowingReturnType;\nexport function useFollowing(feed?: Feed): UseFollowingReturnType | undefined;\nexport function useFollowing(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useCallback(\n (...options: Parameters<Feed['loadNextPageFollowing']>) =>\n feed?.loadNextPageFollowing(...options),\n [feed],\n );\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n is_loading_next_page:\n data.following_pagination?.loading_next_page ?? false,\n has_next_page: checkHasAnotherPage(\n data.following,\n data.following_pagination?.next,\n ),\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive object containing some often used\n * metadata for a feed.\n */\nexport const useFeedMetadata = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({\n follower_count = 0,\n following_count = 0,\n created_by,\n created_at,\n updated_at,\n}: FeedState) => ({\n created_by,\n follower_count,\n following_count,\n created_at,\n updated_at,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive array of feeds that the current user\n * owns and are following the respective feed that we are observing.\n */\nexport const useOwnFollows = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({ own_follows }: FeedState) => ({\n own_follows,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { NotificationStatusResponse } from '../../../../gen/models';\n\nconst selector = ({ notification_status }: FeedState) =>\n ({\n unread: notification_status?.unread ?? 0,\n unseen: notification_status?.unseen ?? 0,\n last_read_at: notification_status?.last_read_at,\n last_seen_at: notification_status?.last_seen_at,\n read_activities: notification_status?.read_activities,\n seen_activities: notification_status?.seen_activities,\n }) satisfies NotificationStatusResponse;\n\ntype UseNotificationStatusReturnType = ReturnType<typeof selector>;\n\nexport function useNotificationStatus(\n feed: Feed,\n): UseNotificationStatusReturnType;\nexport function useNotificationStatus(\n feed?: Feed,\n): UseNotificationStatusReturnType | undefined;\nexport function useNotificationStatus(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n}\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useStableCallback } from '../internal';\nimport type { Feed, FeedState } from '../../../../feed';\n\nconst selector = ({\n is_loading_activities,\n next,\n aggregated_activities = [],\n}: FeedState) => ({\n is_loading: is_loading_activities,\n has_next_page: typeof next !== 'undefined',\n aggregated_activities,\n});\n\ntype UseAggregatedActivitiesReturnType = ReturnType<typeof selector> & {\n loadNextPage: () => Promise<void>;\n};\n\n/**\n * A React hook that returns a reactive object containing the current aggregated activities,\n * loading state and whether there is a next page to paginate to or not.\n */\nexport function useAggregatedActivities(\n feedFromProps: Feed,\n): UseAggregatedActivitiesReturnType;\nexport function useAggregatedActivities(\n feedFromProps?: Feed,\n): UseAggregatedActivitiesReturnType | undefined;\nexport function useAggregatedActivities(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useStableCallback(async () => {\n if (!feed || !data?.has_next_page || data?.is_loading) {\n return;\n }\n\n await feed.getNextPage();\n });\n\n return useMemo(\n () => (data ? { ...data, loadNextPage } : undefined),\n [data, loadNextPage],\n );\n}\n","import { useMemo } from 'react';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useNotificationStatus } from './useNotificationStatus';\nimport type { Feed } from '../../../../feed';\nimport type { AggregatedActivityResponse } from '../../../../gen/models';\n\nexport const useIsAggregatedActivityRead = ({\n feed: feedFromProps,\n aggregatedActivity,\n}: {\n feed?: Feed;\n aggregatedActivity: AggregatedActivityResponse;\n}) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const { read_activities: readActivities, last_read_at: lastReadAt } =\n useNotificationStatus(feed) ?? {};\n\n const group = aggregatedActivity.group;\n\n return useMemo(\n () =>\n (lastReadAt &&\n aggregatedActivity.updated_at.getTime() <= lastReadAt.getTime()) ||\n (readActivities ?? []).includes(group),\n [lastReadAt, aggregatedActivity.updated_at, readActivities, group],\n );\n};\n","import { useMemo } from 'react';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useNotificationStatus } from './useNotificationStatus';\nimport type { Feed } from '../../../../feed';\nimport type { AggregatedActivityResponse } from '../../../../gen/models';\n\nexport const useIsAggregatedActivitySeen = ({\n feed: feedFromProps,\n aggregatedActivity,\n}: {\n feed?: Feed;\n aggregatedActivity: AggregatedActivityResponse;\n}) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const { seen_activities: seenActivities, last_seen_at: lastSeenAt } =\n useNotificationStatus(feed) ?? {};\n\n const group = aggregatedActivity.group;\n\n return useMemo(\n () =>\n (lastSeenAt &&\n aggregatedActivity.updated_at.getTime() < lastSeenAt.getTime()) ||\n (seenActivities ?? []).includes(group),\n [lastSeenAt, aggregatedActivity.updated_at, seenActivities, group],\n );\n};\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\nimport type { StateStore } from '@stream-io/state-store';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage } from '../../../../utils';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { ActivityState, ActivityWithStateUpdates } from '../../../../activity-with-state-updates/activity-with-state-updates';\nimport type { ActivityResponse, CommentResponse } from '../../../../gen/models';\n\nconst canLoadComments = (\n feedOrActivity: Feed | ActivityResponse | ActivityWithStateUpdates,\n): feedOrActivity is ActivityWithStateUpdates | Feed => {\n return (\n 'loadNextPageCommentReplies' in feedOrActivity &&\n 'loadNextPageActivityComments' in feedOrActivity\n );\n};\n\ntype UseCommentsReturnType<T extends ActivityResponse | CommentResponse> = {\n comments: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['comments'];\n comments_pagination: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['pagination'];\n has_next_page: boolean;\n is_loading_next_page: boolean;\n loadNextPage: (\n request?: T extends CommentResponse\n ? Parameters<Feed['loadNextPageCommentReplies']>[1]\n : Parameters<Feed['loadNextPageActivityComments']>[1],\n ) => Promise<void>;\n};\n\nexport function useActivityComments({\n feed: feedFromProps,\n parentComment,\n activity,\n}: {\n feed?: Feed;\n parentComment?: CommentResponse;\n activity?: ActivityResponse | ActivityWithStateUpdates;\n}) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n const feedOrActivity = feed ?? activity;\n\n if (!feedOrActivity) {\n throw new Error('Feed or activity is required');\n }\n\n if (!canLoadComments(feedOrActivity)) {\n throw new Error('Feed or activity does not support loading comments');\n }\n\n if (!(activity || parentComment)) {\n throw new Error('Activity or parent comment is required');\n }\n\n const entityId = parentComment?.id ?? activity?.id ?? '';\n const selector = useCallback(\n (state: FeedState | ActivityState) => ({\n comments: state.comments_by_entity_id?.[entityId]?.comments,\n comments_pagination: state.comments_by_entity_id?.[entityId]?.pagination,\n }),\n [entityId],\n );\n\n const data = useStateStore(\n feedOrActivity.state as StateStore<FeedState | ActivityState>,\n selector,\n );\n\n const loadNextPage = useCallback<\n UseCommentsReturnType<ActivityResponse | CommentResponse>['loadNextPage']\n >(\n (request) => {\n if (parentComment) {\n return feedOrActivity.loadNextPageCommentReplies(\n parentComment,\n request,\n );\n } else {\n if (activity && canLoadComments(activity)) {\n return activity.loadNextPageActivityComments(request);\n } else if (feed) {\n return feed.loadNextPageActivityComments(activity?.id ?? '', request);\n } else {\n throw new Error('Activity or feed is required');\n }\n }\n },\n [feedOrActivity, feed, parentComment, activity],\n );\n\n return useMemo(() => {\n return {\n ...data,\n has_next_page: checkHasAnotherPage(\n data.comments,\n data.comments_pagination?.next,\n ),\n is_loading_next_page:\n data?.comments_pagination?.loading_next_page ?? false,\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive array of feeds that the feeds's owner is following and is owned by the current user.\n */\nexport const useOwnFollowings = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({ own_followings }: FeedState) => ({\n own_followings,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { SearchSource } from '../../../common/search';\n\nexport const StreamSearchResultsContext = createContext<\n SearchSource | undefined\n>(undefined);\n\n/**\n * The props for the StreamSearchResultsProvider component.\n */\nexport type StreamSearchResultsContextProps = {\n source: SearchSource;\n};\n\n/**\n * Hook to access the nearest SearchSource instance.\n */\nexport const useSearchResultsContext = () => {\n return useContext(StreamSearchResultsContext);\n};\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useSearchResultsContext } from '../../contexts/StreamSearchResultsContext';\nimport { useStableCallback } from '../internal';\nimport type { SearchSourceState } from '../../../../common/types';\nimport type { SearchSource } from '../../../../common/search';\n\nexport const useSearchResult = (sourceFromProps?: SearchSource) => {\n const sourceFromContext = useSearchResultsContext();\n const source = sourceFromProps ?? sourceFromContext;\n\n const { items, error, isLoading, hasNext } =\n useStateStore(source?.state, selector) ?? {};\n\n const loadMore = useStableCallback(async () => {\n if (hasNext) {\n source?.search();\n }\n });\n\n return useMemo(\n () => ({ items, error, isLoading, hasNext, loadMore }),\n [error, hasNext, isLoading, items, loadMore],\n );\n};\n\nconst selector = ({\n items,\n isLoading,\n hasNext,\n lastQueryError,\n}: SearchSourceState) => ({\n items,\n isLoading,\n hasNext,\n error: lastQueryError,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { SearchController } from '../../../common/search';\n\nexport const StreamSearchContext = createContext<SearchController | undefined>(undefined);\n\n/**\n * The props for the StreamSearchProvider component.\n */\nexport type StreamSearchContextProps = {\n searchController: SearchController;\n};\n\n/**\n * Hook to access the nearest SearchController instance.\n */\nexport const useSearchContext = () => {\n return useContext(StreamSearchContext);\n};\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport type {\n SearchController,\n SearchControllerState,\n} from '../../../../common/search';\nimport { useSearchContext } from '../../contexts/StreamSearchContext';\n\nexport const useSearchQuery = (controllerFromProps?: SearchController) => {\n const controllerFromState = useSearchContext();\n const controller = controllerFromProps ?? controllerFromState;\n\n return useStateStore(controller?.state, selector);\n};\n\nconst selector = ({ searchQuery }: SearchControllerState) => ({\n searchQuery,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useSearchContext } from '../../contexts/StreamSearchContext';\nimport type { SearchController, SearchControllerState } from '../../../../common/search';\n\nexport const useSearchSources = (controllerFromProps?: SearchController) => {\n const controllerFromState = useSearchContext();\n const controller = controllerFromProps ?? controllerFromState;\n\n return useStateStore(controller?.state, selector);\n};\n\nconst selector = ({ sources }: SearchControllerState) => ({\n sources,\n});\n","import type { PropsWithChildren } from 'react';\nimport { StreamFeedsContext } from '../contexts/StreamFeedsContext';\nimport type { StreamFeedsContextProps } from '../contexts/StreamFeedsContext';\n\nexport const StreamFeeds = ({ client, children }: PropsWithChildren<StreamFeedsContextProps>) => {\n return (\n <StreamFeedsContext.Provider value={client}>\n {children}\n </StreamFeedsContext.Provider>\n );\n};\n\nStreamFeeds.displayName = 'StreamFeeds';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamFeedContext } from '../contexts/StreamFeedContext';\nimport type { Feed } from '../../../feed';\n\n/**\n * The props for the StreamFeed component. It accepts a `Feed` instance.\n */\nexport type StreamFeedProps = {\n feed: Feed;\n};\n\nexport const StreamFeed = ({\n feed,\n children,\n}: PropsWithChildren<StreamFeedProps>) => {\n return (\n <StreamFeedContext.Provider value={feed}>\n {children}\n </StreamFeedContext.Provider>\n );\n};\n\nStreamFeed.displayName = 'StreamFeed';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamSearchContext } from '../contexts/StreamSearchContext';\nimport type { SearchController } from '../../../common/search';\n\n/**\n * The props for the StreamSearch component. It accepts a `SearchController` instance.\n */\nexport type StreamSearchProps = {\n searchController: SearchController | undefined;\n};\n\nexport const StreamSearch = ({\n searchController,\n children,\n}: PropsWithChildren<StreamSearchProps>) => {\n return (\n <StreamSearchContext.Provider value={searchController}>\n {children}\n </StreamSearchContext.Provider>\n );\n};\n\nStreamSearch.displayName = 'StreamSearch';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamSearchResultsContext } from '../contexts/StreamSearchResultsContext';\nimport type { SearchSource } from '../../../common/search';\n\n/**\n * The props for the StreamSearchResults component. It accepts a `SearchSource` instance.\n */\nexport type StreamSearchResultsProps = {\n source: SearchSource;\n};\n\nexport const StreamSearchResults = ({\n source,\n children,\n}: PropsWithChildren<StreamSearchResultsProps>) => {\n return (\n <StreamSearchResultsContext.Provider value={source}>\n {children}\n </StreamSearchResultsContext.Provider>\n );\n};\n\nStreamSearchResults.displayName = 'StreamSearchResults';\n"],"names":["selector"],"mappings":"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"}