@kappys/react-query-suspense
Version:
Library to avoid render complex items when the state or data is not ready yet.
1 lines • 3 kB
Source Map (JSON)
{"version":3,"sources":["../src/useReactQueryPromiseTracker.ts","../src/reactQuerySuspense.tsx","../src/useReactQuerySuspense.ts"],"names":["QueriesObserver","useQueryClient","useReactQueryPromiseTracker","queryKeys","context","queryClient","key","v","React","useReactQuerySuspense","deferredFetch","promiseInProgress","refAnyPromiseStarted","ReactQuerySuspense","Fallback","children","suspense"],"mappings":"AAAA,OAAS,mBAAAA,EAAiB,kBAAAC,MAAsB,wBAGzC,IAAMC,EAA8B,CAAC,CAC1C,UAAAC,EACA,QAAAC,EAAU,MACZ,IAA4C,CAC1C,IAAMC,EAAcJ,EAAe,EAYnC,OAXiB,IAAID,EACnBI,IAAY,OAAYA,EAAUC,EAClCF,EAAU,IAAKG,IAAS,CAAE,SAAUA,CAAI,EAAE,CAC5C,EAGG,iBAAiB,EAEjB,IAAKC,GAAOA,EAAE,cAAgB,YAAcA,EAAE,SAAW,WAAcA,EAAE,OAAO,EAChF,KAAMA,GAAMA,CAAC,CAGlB,ECpBA,OAAOC,MAAW,QCAlB,OAAOA,MAAW,QAIX,IAAMC,EAAwB,CAAC,CAAE,QAAAL,EAAS,UAAAD,EAAW,cAAAO,EAAgB,EAAM,IAAoC,CACpH,IAAMC,EAAoBT,EAA4B,CAAE,UAAAC,EAAW,QAAAC,CAAQ,CAAC,EACtEQ,EAAuBJ,EAAM,OAAgBG,CAAiB,EAIpE,OAFIA,IAAmBC,EAAqB,QAAU,IAElDF,EACK,EAAE,CAACC,GAAqBC,EAAqB,SAG/CD,CACT,EDXO,IAAME,EAAyD,CAAC,CACrE,UAAAV,EACA,SAAAW,EACA,cAAAJ,EACA,SAAAK,EACA,QAAAX,CACF,IAAM,CACJ,IAAMY,EAAWP,EAAsB,CAAE,UAAAN,EAAW,QAAAC,EAAS,cAAAM,CAAc,CAAC,EAC5E,OAAOF,EAAA,cAAAA,EAAA,cAAGQ,EAAWF,EAAWC,CAAS,CAC3C","sourcesContent":["import { QueriesObserver, useQueryClient } from '@tanstack/react-query'\nimport { PromisePromiseTrackerParams } from './types'\n\nexport const useReactQueryPromiseTracker = ({\n queryKeys,\n context = undefined\n}: PromisePromiseTrackerParams): boolean => {\n const queryClient = useQueryClient()\n const observer = new QueriesObserver(\n context !== undefined ? context : queryClient,\n queryKeys.map((key) => ({ queryKey: key }))\n )\n\n const promiseInProgress = observer\n .getCurrentResult()\n // eslint-disable-next-line no-mixed-operators\n .map((v) => (v.fetchStatus === 'fetching' && v.status === 'loading') || v.isError)\n .some((v) => v)\n\n return promiseInProgress\n}\n","import React from 'react'\nimport { ReactQuerySuspenseParams } from './types'\nimport { useReactQuerySuspense } from './useReactQuerySuspense'\n\nexport const ReactQuerySuspense: React.FC<ReactQuerySuspenseParams> = ({\n queryKeys,\n Fallback,\n deferredFetch,\n children,\n context\n}) => {\n const suspense = useReactQuerySuspense({ queryKeys, context, deferredFetch })\n return <>{suspense ? Fallback : children}</>\n}\n","import React from 'react'\nimport { UseReactQueryParams } from './types'\nimport { useReactQueryPromiseTracker } from './useReactQueryPromiseTracker'\n\nexport const useReactQuerySuspense = ({ context, queryKeys, deferredFetch = false }: UseReactQueryParams): boolean => {\n const promiseInProgress = useReactQueryPromiseTracker({ queryKeys, context })\n const refAnyPromiseStarted = React.useRef<boolean>(promiseInProgress)\n\n if (promiseInProgress) refAnyPromiseStarted.current = true\n\n if (deferredFetch) {\n return !(!promiseInProgress && refAnyPromiseStarted.current)\n }\n\n return promiseInProgress\n}\n"]}