UNPKG

@lens-protocol/react

Version:

Interacting with the Lens Protocol API using React.

100 lines (99 loc) 2.84 kB
import { PrimaryPublication, PublicationSearchRequest, PublicationSearchWhere } from '@lens-protocol/api-bindings'; import { PaginatedArgs, PaginatedReadResult } from "../helpers/reads.js"; import { SuspenseEnabled, SuspensePaginatedResult } from "../helpers/suspense.js"; /** * {@link useSearchPublications} hook arguments */ export type UseSearchPublicationsArgs = PaginatedArgs<PublicationSearchRequest>; export type { PublicationSearchRequest, PublicationSearchWhere }; /** * {@link useSearchPublications} hook arguments with Suspense support * * @experimental This API can change without notice */ export type UseSuspenseSearchPublicationsArgs = SuspenseEnabled<UseSearchPublicationsArgs>; /** * Search for publications based on a defined criteria. * * Search for publications with content that contains "foo" * ```tsx * const { data, error, loading } = useSearchPublications({ query: 'foo' }); * * if (loading) return <Loader />; * * if (error) return <Error message={error.message} />; * * return ( * <> * {data.map((publication) => ( * <PublicationCard key={publication.id} publication={publication} /> * ))} * </> * ); * ``` * * Search for audio post publications with content that matches a query * ```tsx * const { data, error, loading } = useSearchPublications({ * query: '...', * where: { * publicationTypes: [SearchPublicationType.Post], * metadata: { * mainContentFocus: [PublicationMetadataMainFocusType.Audio], * }, * }, * }); * * if (loading) return <Loader />; * * if (error) return <Error message={error.message} />; * * return ( * <> * {data.map((publication) => ( * <PublicationCard key={publication.id} publication={publication} /> * ))} * </> * ); * ``` * * @category Discovery * @group Hooks */ export declare function useSearchPublications(args: UseSearchPublicationsArgs): PaginatedReadResult<PrimaryPublication[]>; /** * Search for publications based on a defined criteria. * * This signature supports [React Suspense](https://react.dev/reference/react/Suspense). * * ```tsx * const { data } = useSearchPublications({ * query: 'foo', * suspense: true, * }); * * console.log(data); * ``` * * Use [startTransition](https://react.dev/reference/react/startTransition) to avoid to re-suspend the component. * * ```tsx * const [query, setQuery] = useState('foo'); * * const { data } = useSearchPublications({ * query, * suspense: true, * }); * * const search = () => { * startTransition(() => { * setQuery('bar'); * }); * }; * ``` * * @experimental This API can change without notice * @category Discovery * @group Hooks */ export declare function useSearchPublications(args: UseSuspenseSearchPublicationsArgs): SuspensePaginatedResult<PrimaryPublication[]>;