@bisham/query-factory
Version:
A simple, type-safe utility to create and manage React Query queries effortlessly.
2 lines (1 loc) • 1.29 kB
JavaScript
import{useQuery as e}from"@tanstack/react-query";function r(r,a){const t=(...[e])=>r.queryKey(e?.params),u=e=>{let r=e.length;for(const a of e)if("string"!=typeof a){r=e.indexOf(a);break}return e.slice(0,r)},y=(...[u,y])=>e({...r,...u,queryKey:t({params:u?.params}),queryFn:e=>r.queryFn({...e,params:u?.params})},a??y);return y.getQueryKey=t,y.getQueryOptions=(...[e])=>({...r,...e,queryKey:t({params:e?.params}),queryFn:a=>r.queryFn({...a,params:e?.params})}),y.getQueryData=(...[e])=>a.getQueryData(t(e)),y.getAllQueryData=e=>a.getQueriesData({...e,queryKey:u(t())}),y.prefetchQuery=(...[e])=>a.prefetchQuery({...r,...e,queryKey:t({params:e?.params}),queryFn:a=>r.queryFn({...a,params:e?.params})}),y.refetchQuery=(...[e,r])=>a.refetchQueries({...e,exact:!0,queryKey:t({params:e?.params})},r),y.refetchAllQueries=(e,r)=>a.refetchQueries({...e,queryKey:u(t())},r),y.setQueryData=e=>a.setQueryData(t({params:e?.params}),e.updater,e.options),y.invalidateQuery=(...[e,r])=>a.invalidateQueries({...e,queryKey:t({params:e?.params})},r),y.invalidateAllQueries=(e,r)=>a.invalidateQueries({...e,queryKey:u(t())},r),y.removeQueryData=(...[e])=>a.removeQueries({...e,exact:!0,queryKey:t({params:e?.params})}),y.removeAllQueries=e=>a.removeQueries({...e,queryKey:u(t())}),y}export{r as createQuery};