qortex-react
Version:
React hook bridge for qortex runtime
8 lines (5 loc) • 981 B
JavaScript
import { serializeKey, getQueryState, subscribeQuery, getQueryData } from 'qortex-core';
export * from 'qortex-core';
import { useCallback, useSyncExternalStore, useRef, useMemo } from 'react';
function A(e,t){let r=serializeKey(e),u=useCallback(()=>getQueryState(e,t),[r]),n=useCallback(o=>subscribeQuery(e,o,t),[r]);return useSyncExternalStore(n,u)}function V(e,t){let r=serializeKey(e),u=useCallback(()=>getQueryData(e,t),[r]),n=useCallback(o=>subscribeQuery(e,o,t),[r]);return useSyncExternalStore(n,u)}function re(e,t){let r=serializeKey(e),u=useRef(),n=useRef(new Set),a=useCallback(y=>subscribeQuery(e,s=>{let F=u.current,i=n.current;if(i.size===0){u.current=s,y();return}let Q=!1;for(let f of i)if(F?.[f]!==s[f]){Q=!0;break}Q&&(u.current=s,y());},t),[r]),o=useCallback(()=>getQueryState(e,t),[r]),c=useSyncExternalStore(a,o);return useMemo(()=>new Proxy(c,{get(y,s){return n.current.add(s),y[s]}}),[c])}
export { A as useQuery, V as useQueryData, re as useQuerySelect };