@tanstack/react-db
Version:
React integration for @tanstack/db
1 lines • 2.23 kB
Source Map (JSON)
{"version":3,"file":"useLiveQuery.cjs","sources":["../../src/useLiveQuery.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\"\nimport { useStore } from \"@tanstack/react-store\"\nimport { compileQuery, queryBuilder } from \"@tanstack/db\"\nimport type {\n Collection,\n Context,\n InitialQueryBuilder,\n QueryBuilder,\n ResultsFromContext,\n Schema,\n} from \"@tanstack/db\"\n\nexport interface UseLiveQueryReturn<T extends object> {\n state: Map<string | number, T>\n data: Array<T>\n collection: Collection<T>\n}\n\nexport function useLiveQuery<\n TResultContext extends Context<Schema> = Context<Schema>,\n>(\n queryFn: (\n q: InitialQueryBuilder<Context<Schema>>\n ) => QueryBuilder<TResultContext>,\n deps: Array<unknown> = []\n): UseLiveQueryReturn<ResultsFromContext<TResultContext>> {\n const [restart, forceRestart] = useState(0)\n\n const compiledQuery = useMemo(() => {\n const query = queryFn(queryBuilder())\n const compiled = compileQuery(query)\n compiled.start()\n return compiled\n }, [...deps, restart])\n\n const state = useStore(compiledQuery.results.asStoreMap())\n const data = useStore(compiledQuery.results.asStoreArray())\n\n // Clean up on unmount\n useEffect(() => {\n if (compiledQuery.state === `stopped`) {\n forceRestart((count) => {\n return (count += 1)\n })\n }\n\n return () => {\n compiledQuery.stop()\n }\n }, [compiledQuery])\n\n return {\n state,\n data,\n collection: compiledQuery.results,\n }\n}\n"],"names":["useState","useMemo","queryBuilder","compileQuery","useStore","useEffect"],"mappings":";;;;;AAkBO,SAAS,aAGd,SAGA,OAAuB,IACiC;AACxD,QAAM,CAAC,SAAS,YAAY,IAAIA,MAAAA,SAAS,CAAC;AAEpC,QAAA,gBAAgBC,MAAAA,QAAQ,MAAM;AAC5B,UAAA,QAAQ,QAAQC,GAAAA,cAAc;AAC9B,UAAA,WAAWC,gBAAa,KAAK;AACnC,aAAS,MAAM;AACR,WAAA;AAAA,EAAA,GACN,CAAC,GAAG,MAAM,OAAO,CAAC;AAErB,QAAM,QAAQC,WAAA,SAAS,cAAc,QAAQ,YAAY;AACzD,QAAM,OAAOA,WAAA,SAAS,cAAc,QAAQ,cAAc;AAG1DC,QAAAA,UAAU,MAAM;AACV,QAAA,cAAc,UAAU,WAAW;AACrC,mBAAa,CAAC,UAAU;AACtB,eAAQ,SAAS;AAAA,MAAA,CAClB;AAAA,IAAA;AAGH,WAAO,MAAM;AACX,oBAAc,KAAK;AAAA,IACrB;AAAA,EAAA,GACC,CAAC,aAAa,CAAC;AAEX,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,cAAc;AAAA,EAC5B;AACF;;"}