@yext/search-headless-react
Version:
The official React UI Bindings layer for Search Headless
1 lines • 5.26 kB
Source Map (JSON)
{"version":3,"sources":["../src/useSearchActions.ts","../src/SearchHeadlessContext.ts","../src/useSearchState.ts","../src/useSearchUtilities.ts","../src/SearchHeadlessProvider.tsx","../src/index.ts"],"sourcesContent":["import { SearchHeadless } from '@yext/search-headless';\nimport { useContext } from 'react';\nimport { SearchHeadlessContext } from './SearchHeadlessContext';\n\nexport type SearchActions = SearchHeadless;\n\nexport function useSearchActions(): SearchActions {\n const searchHeadless = useContext(SearchHeadlessContext);\n if (searchHeadless.state === undefined) {\n throw new Error('Attempted to call useSearchActions() outside of SearchHeadlessProvider.'\n + ' Please ensure that \\'useSearchActions()\\' is called within an SearchHeadlessProvider component.');\n }\n return searchHeadless;\n}","import { SearchHeadless } from '@yext/search-headless';\nimport { createContext } from 'react';\n\n// The default is empty because we don't know the user's config yet\nexport const SearchHeadlessContext = createContext<SearchHeadless>({} as SearchHeadless);","import { useCallback, useContext, useEffect, useRef } from 'react';\nimport { State } from '@yext/search-headless';\nimport { SearchHeadlessContext } from './SearchHeadlessContext';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector.js';\n\nexport type StateSelector<T> = (s: State) => T;\n\n/**\n * Returns the Search State returned by the map function.\n * Uses \"use-sync-external-store/shim\" to handle reading\n * and subscribing from external store in React version\n * pre-18 and 18.\n */\nexport function useSearchState<T>(stateSelector: StateSelector<T>): T {\n const search = useContext(SearchHeadlessContext);\n if (search.state === undefined) {\n throw new Error('Attempted to call useSearchState() outside of SearchHeadlessProvider.'\n + ' Please ensure that \\'useSearchState()\\' is called within an SearchHeadlessProvider component.');\n }\n\n const getSnapshot = useCallback(() => search.state, [search.state]);\n const isMountedRef = useRef<boolean>(false);\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const subscribe = useCallback(cb =>\n search.addListener({\n valueAccessor: state => state,\n callback: () => {\n // prevent React state update on an unmounted component\n if (!isMountedRef.current) {\n return;\n }\n cb();\n }\n }), [search]);\n\n const selectedState = useSyncExternalStoreWithSelector<State, T>(\n subscribe,\n getSnapshot,\n getSnapshot,\n stateSelector\n );\n return selectedState;\n}","import { SearchHeadless } from '@yext/search-headless';\nimport { useContext } from 'react';\nimport { SearchHeadlessContext } from './SearchHeadlessContext';\n\nexport type SearchUtilities = SearchHeadless['utilities'];\n\nexport function useSearchUtilities(): SearchUtilities {\n return useContext(SearchHeadlessContext).utilities;\n}","import React, { PropsWithChildren } from 'react';\nimport { SearchHeadless } from '@yext/search-headless';\nimport { SearchHeadlessContext } from './SearchHeadlessContext';\n\ntype Props = { searcher: SearchHeadless };\n\nexport function SearchHeadlessProvider(props: PropsWithChildren<Props>): React.ReactElement {\n const { children, searcher } = props;\n\n return (\n <SearchHeadlessContext.Provider value={searcher}>\n {children}\n </SearchHeadlessContext.Provider>\n );\n}\n","import { useSearchActions, SearchActions } from './useSearchActions';\nimport { useSearchState, StateSelector } from './useSearchState';\nimport { useSearchUtilities, SearchUtilities } from './useSearchUtilities';\nimport { SearchHeadlessProvider } from './SearchHeadlessProvider';\nimport { SearchHeadlessContext } from './SearchHeadlessContext';\n\nexport * from '@yext/search-headless';\nexport {\n SearchHeadlessContext,\n useSearchActions,\n useSearchState,\n useSearchUtilities,\n SearchHeadlessProvider,\n SearchActions,\n SearchUtilities,\n StateSelector\n};"],"mappings":";AACA,SAAS,kBAAkB;;;ACA3B,SAAS,qBAAqB;AAGvB,IAAM,wBAAwB,cAA8B,CAAC,CAAmB;;;ADEhF,SAAS,mBAAkC;AAChD,QAAM,iBAAiB,WAAW,qBAAqB;AACvD,MAAI,eAAe,UAAU,QAAW;AACtC,UAAM,IAAI,MAAM,uKACqF;AAAA,EACvG;AACA,SAAO;AACT;;;AEbA,SAAS,aAAa,cAAAA,aAAY,WAAW,cAAc;AAG3D,SAAS,wCAAwC;AAU1C,SAAS,eAAkB,eAAoC;AACpE,QAAM,SAASC,YAAW,qBAAqB;AAC/C,MAAI,OAAO,UAAU,QAAW;AAC9B,UAAM,IAAI,MAAM,mKACmF;AAAA,EACrG;AAEA,QAAM,cAAc,YAAY,MAAM,OAAO,OAAO,CAAC,OAAO,KAAK,CAAC;AAClE,QAAM,eAAe,OAAgB,KAAK;AAC1C,YAAU,MAAM;AACd,iBAAa,UAAU;AACvB,WAAO,MAAM;AACX,mBAAa,UAAU;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,YAAY,YAAY,QAC5B,OAAO,YAAY;AAAA,IACjB,eAAe,WAAS;AAAA,IACxB,UAAU,MAAM;AAEd,UAAI,CAAC,aAAa,SAAS;AACzB;AAAA,MACF;AACA,SAAG;AAAA,IACL;AAAA,EACF,CAAC,GAAG,CAAC,MAAM,CAAC;AAEd,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO;AACT;;;AC/CA,SAAS,cAAAC,mBAAkB;AAKpB,SAAS,qBAAsC;AACpD,SAAOC,YAAW,qBAAqB,EAAE;AAC3C;;;ACRA,OAAO,WAAkC;AAMlC,SAAS,uBAAuB,OAAqD;AAC1F,QAAM,EAAE,UAAU,SAAS,IAAI;AAE/B,SACE,oCAAC,sBAAsB,UAAtB,EAA+B,OAAO,YACpC,QACH;AAEJ;;;ACRA,cAAc;","names":["useContext","useContext","useContext","useContext"]}