UNPKG

dolab

Version:

Lightweight and fast React hooks library for fetching and managing data with Zustand state management. Ideal for scalable and modern React applications.

2 lines (1 loc) 1.92 kB
(function(c,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("react"),require("zustand")):typeof define=="function"&&define.amd?define(["exports","react","zustand"],u):(c=typeof globalThis<"u"?globalThis:c||self,u(c.Dolab={},c.React,c.zustand))})(this,function(c,u,h){"use strict";const g=()=>"xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx".replace(/[x]/g,e=>{const d=Math.random()*16|0;return(e==="x"?d:d&3|8).toString(16)}),f=h.create((e,d)=>({data:{},loading:{},expiry:{},refetch:{},setData:(n,t,o)=>{const a=Date.now()+(o??18e5);e(r=>({...r,data:{...d().data,[n]:t},expiry:{...d().expiry,[n]:a}}))},setLoading:(n,t)=>{e(o=>({...o,loading:{...d().loading,[n]:t}}))},setRefetch:n=>{e(t=>({...t,refetch:{...t.refetch,[n]:g()},loading:{...t.loading,[n]:!0}})),setTimeout(()=>{e(t=>({...t,refetch:{...t.refetch,[n]:void 0},loading:{...t.loading,[n]:!1}}))},1e3)},cleanupExpiredData:()=>{const n=Date.now();e(t=>{const o={...t.data},a={...t.expiry};return Object.entries(t.expiry).forEach(([r,x])=>{typeof x=="number"&&x<=n&&(delete o[r],delete a[r])}),{data:o,expiry:a}})}}));function D(e){const d=f(i=>i.setData),n=f(i=>i.setRefetch),t=()=>n(e.id),o=i=>d(e.id,i,e.lifeTime),a=f(i=>{const s=i.expiry[e.id];if(!(s&&s<=Date.now()))return i.data[e.id]}),r=f(i=>i.loading[e.id])||!1,x=f(i=>i.refetch[e.id])||void 0,E=f(i=>i.setLoading),l=i=>E(e.id,i);return u.useEffect(()=>{if(!e.id)throw new Error("useDolab must have a unique id")},[e.id]),u.useEffect(()=>{e.id&&(l(!0),e.fetch(o).finally(()=>l(!1)))},[e.id,...e.deps||[]]),u.useEffect(()=>{!e.id||!x||(l(!0),e.fetch(o).finally(()=>l(!1)))},[x]),{data:a,loading:r,triggerRefetch:t}}function y(e){const d=f(a=>{const r=a.expiry[e.id];if(!(r&&r<=Date.now()))return a.data[e.id]}),n=f(a=>a.loading[e.id])||!1,t=f(a=>a.setRefetch);return{data:d,loading:n,triggerRefetch:()=>t(e.id)}}c.useDolab=D,c.useDolabData=y,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});