UNPKG

@phyter/tarc

Version:

Next.js Typed Api Routes and Clients

3 lines (2 loc) 1.18 kB
import t,{useCallback as e,useState as r,useRef as a,useEffect as n}from"react";import{atomFamily as o,selectorFamily as l,useRecoilState as c,RecoilRoot as i}from"recoil";const s=o({key:"routeCache",default:{}}),u=l({key:"routeLoading",get:t=>({get:e})=>e(s(t)).loading,set:t=>({set:e},r)=>{e(s(t),(t=>({...t,loading:r})))}}),d=l({key:"routeError",get:t=>({get:e})=>e(s(t)).error,set:t=>({set:e},r)=>{e(s(t),(t=>({...t,error:r})))}}),g=l({key:"routeData",get:t=>({get:e})=>e(s(t)).data,set:t=>({set:e},r)=>{e(s(t),(t=>({...t,data:r})))}}),y=t=>{const r=t.apiUrl+t.path,a=t.client(),[n,o]=c(g(r)),[l,i]=c(d(r)),[s,y]=c(u(r));return[e((async t=>{let e;y(!0);try{e=await a(t),o(e)}catch(t){i(t)}finally{return y(!1),e}}),[t]),{data:n,error:l,loading:s}]},h=t=>{const[a,n]=r(),[o,l]=r(),[c,i]=r(!1);return[e((async e=>{let r;i(!0);try{r=await t(e),n(r)}catch(t){l(t)}finally{return i(!1),r}}),[t]),{data:a,error:o,loading:c}]},m=({children:e,clients:r,router:o})=>{const l=a(!1);return n((()=>{!l.current&&r&&o&&(l.current=!0,o.methodClients(r))}),[o,r]),t.createElement(i,null,e)};export{m as RouterContextProvider,y as useCachedRoute,h as useRoute}; //# sourceMappingURL=index.js.map