@bgscore/react-core 0.0.38 → 0.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +16 -5
- package/dist/index.d.ts +16 -5
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var J=require('moment'),X=require('react'),jsxRuntime=require('react/jsx-runtime'),oe=require('crypto-js/aes'),se=require('crypto-js/pbkdf2'),Te=require('crypto-js/enc-utf8'),H=require('crypto-js/enc-base64'),re=require('crypto-js/lib-typedarrays'),zustand=require('zustand'),Be=require('axios');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var J__default=/*#__PURE__*/_interopDefault(J);var X__default=/*#__PURE__*/_interopDefault(X);var oe__default=/*#__PURE__*/_interopDefault(oe);var se__default=/*#__PURE__*/_interopDefault(se);var Te__default=/*#__PURE__*/_interopDefault(Te);var H__default=/*#__PURE__*/_interopDefault(H);var re__default=/*#__PURE__*/_interopDefault(re);var Be__default=/*#__PURE__*/_interopDefault(Be);function Je(){let e=()=>Math.random()*16%16|0;return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>(t==="x"?e():e()&3|8).toString(16))}function _e(e,t){try{return JSON.stringify(e)!==JSON.stringify(t)}catch{return false}}var Ge=e=>(Object.keys(e).forEach(t=>{e[t]===void 0&&(e[t]=null);}),e);function Xe(e,t){let n=false;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof t=="number"?e.length>t&&(n=true):n=true),n}function k(e){return !(e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0||typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===0)}var Q={camelCase:(e="")=>(e=e.split(".").map(t=>(t=t.charAt(0).toUpperCase()+t.slice(1),t)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let n=e.replace(/_([a-z])/g,(r,s)=>s.toUpperCase()).replace(/([A-Z])/g," $1");return n=n.charAt(0).toUpperCase()+n.slice(1),n},changeAll:(e="",t=false)=>{let n="";try{e=e?.split(".")[e?.split(".")?.length-1],e=e?.split("[]")[e?.split("[]")?.length-1],n=Q.snackCase(Q.camelCase(e)),t&&(n=n?.split(" ")?.map(r=>r?.length<=3?r?.toUpperCase():r)?.join(" "));}catch{}return n?.trim()}};function Ye(e,t){return typeof e=="function"?e(t):e}var w=(e,t,n="")=>{if(!e)return n;if(e.hasOwnProperty(t))return e[t];let r=t.replace(/\[(\d+)\]/g,".$1").split("."),s=e;for(let a of r){if(s==null)return n;s=s[a];}return s===void 0?n:s},Ze={desc:(e,t)=>(e||(e=[]),e.sort((n,r)=>{if(t){let s=w(n,t)?w(n,t):"",a=w(r,t)?w(n,t):"";return s<a?1:-1}else return n<r?1:-1})),asc:(e,t)=>(e||(e=[]),e.sort((n,r)=>{if(t){let s=w(n,t)?w(n,t):"",a=w(r,t)?w(r,t):"";return s>a?1:-1}else return n>r?1:-1}))},Qe=(e,t)=>{Array.isArray(e)||(e=[]);let n=[];return n=e.map(r=>Number(t?w(r,t)||0:r||0)),n.reduce((r,s)=>(r||0)+(s||0),0)||0};function et(e){try{return e&&JSON.parse(JSON.stringify(e))}catch{return e}}function ge(e){let t=new WeakSet;return JSON.stringify(e,function(n,r){return r!==null&&typeof r=="object"?t.has(r)?void 0:(t.add(r),Object.keys(r).sort().reduce((s,a)=>(s[a]=r[a],s),{})):r})??""}function ee(e,t){return ge([t??"undefined",e??"undefined"])}function te(e=""){return typeof e!="string"&&(e=""),e.replace(/\b\w/g,t=>t.toUpperCase())}function tt(e,t=0){let n;return function(...r){clearTimeout(n),n=setTimeout(()=>{e(...r);},t*1e3);}}var ne=X.createContext(void 0);function v(){let e=X.useContext(ne);return e||{}}var be=({children:e,value:t})=>{let n={...t};return jsxRuntime.jsx(ne.Provider,{value:n,children:e})};function j(e,t){let n=re__default.default.random(16),r=re__default.default.random(16),s=se__default.default(t,n,{keySize:256/32,iterations:1e3}),a=oe__default.default.encrypt(JSON.stringify(e),s,{iv:r}).toString();return {salt:n.toString(H__default.default),iv:r.toString(H__default.default),encrypted:a}}function V(e,t){let{salt:n,iv:r,encrypted:s}=e,a=se__default.default(t,H__default.default.parse(n),{keySize:256/32,iterations:1e3}),o=oe__default.default.decrypt(s,a,{iv:H__default.default.parse(r)}).toString(Te__default.default);return JSON.parse(o)}function ae(e,t){return JSON.stringify(j(e,t))}function ie(e,t){return V(JSON.parse(e),t)}function I(){let{passphrase:e}=v();return {passphrase:e,encrypt(t,n){return j(t,n||e)},decrypt(t,n){return V(t,n||e)},encryptString(t,n){return ae(t,n||e)},decryptString(t,n){return ie(t,n||e)}}}var pe=()=>{let{encrypt:e,decrypt:t}=I(),n=X.useCallback((c,o)=>{try{let l=e(o);localStorage.setItem(c,JSON.stringify(l));}catch(l){console.error("Failed to save to storage:",l);}},[e]),r=X.useCallback(c=>{try{let o=localStorage.getItem(c);return o?t(JSON.parse(o)):null}catch(o){return console.error("Failed to get from storage:",o),null}},[t]),s=c=>{let[o,l]=X.useState(()=>{try{let p=localStorage.getItem(c);return p?t(JSON.parse(p)):null}catch(p){return console.error("Failed to parse localStorage value",p),null}});return X.useEffect(()=>{let p=m=>{if(m.key===c)if(m.newValue)try{l(t(JSON.parse(m.newValue)));}catch(q){console.error("Decrypt error from storage event",q);}else l(null);};return window.addEventListener("storage",p),()=>window.removeEventListener("storage",p)},[c,t]),o},a=X.useCallback(c=>{c?localStorage.removeItem(c):localStorage.clear();},[]);return {save:n,get:r,clear:a,useWatchStorage:s}};var M={loading:false,response:void 0,isCancel:false,refresh:()=>{},abort:()=>{},clear:()=>{},clone:()=>{},data:void 0},E=zustand.create(e=>({states:{},updateState:(t,n)=>e(r=>({states:{...r.states,[t]:{...r.states[t]||M,...n}}})),resetState:t=>e(n=>({states:{...n.states,[t]:M}}))}));var z=new Map,le=(e,t)=>{z.set(e,t);},ce=e=>{z.delete(e);},ue=e=>z.get(e);function Pe(...e){let[t,n,r]=e,s=t.__isVoid,a=t.__path||t.name,c=s?void 0:n,o=s?n:r,l=o?.storeName||a,{updateState:p}=E(),m=E(({states:u})=>u[l]?.isCancel??false),q=E(({states:u})=>u[l]?.loading??false),C=E(({states:u})=>u[l]?.response??void 0),{storageKey:O,cache:h}=v(),T=pe(),A=X.useRef(void 0),S=X.useRef(null),{cacheName:P,cacheKey:N,timeout:Y,timeoutUnit:Z,persistence:L,cacheEnabled:$}=X.useMemo(()=>{let u=O?T.get(O):void 0,d=typeof o?.cache=="object"?o?.cache?.cacheName??a:a,b=ee({...c,session:u},typeof o?.cache=="object"?o?.cache?.cacheKey:void 0),f=false;typeof h?.enabled=="boolean"&&(f=h.enabled);let D=false;typeof h?.persistence=="boolean"&&(D=h?.persistence),typeof o?.cache=="object"&&typeof o?.cache?.persistence=="boolean"&&(D=o?.cache?.persistence??false);let x=60*5,g="s";return k(h?.timeout)&&(typeof h?.timeout=="number"?(x=h.timeout,g="s"):typeof h?.timeout=="object"&&(x=h?.timeout.value,g=h?.timeout.unit)),o?.cache&&(typeof o.cache!="boolean"?(typeof o.cache.enabled=="boolean"?f=o.cache.enabled:f=true,typeof o.cache.timeout=="number"?(x=o.cache.timeout,g="s"):typeof o.cache.timeout=="object"&&(x=o.cache.timeout.value,g=o.cache.timeout.unit)):f=o.cache),{cacheName:d,cacheKey:b,timeout:x,timeoutUnit:g,persistence:D,cacheEnabled:f}},[o?.cache,c,O,h,a]);X.useEffect(()=>{let u=JSON.stringify(k(A.current)?A.current:""),d=JSON.stringify(k(c)?c:""),b=A.current===void 0;(u!==d||b)&&!o?.hold&&(p(l,{response:null}),U(),A.current=c),o?.onChange&&o?.onChange(c,i);},[c,o?.hold,...o?.trigger||[]]),X.useEffect(()=>{let u=async()=>{!L&&P&&N&&(await caches.open(P)).delete(N);};return window.addEventListener("beforeunload",u),()=>{window.removeEventListener("beforeunload",u),S.current?.abort();}},[L,P,N,l,S]);let U=X.useCallback(async u=>{let d=c;if(o?.hold&&o?.logging&&console.log("Hold active"),o?.beforeRequest&&(d=o?.beforeRequest(c)),$&&!u&&!m){p(l,{loading:true}),o?.onBeforeRequest&&o?.onBeforeRequest(c);let b=await caches.open(P),D=await(await b.match(N))?.json();if(D){let{data:x,expired:g}=D;if(J__default.default().isAfter(g))await b.delete(N);else {o?.afterResponse&&x?.data&&(x.data=o?.afterResponse(x.data)),o?.logging&&console.log("After request: Using Cache",x),o?.onAfterResponse&&o?.onAfterResponse(x),p(l,{loading:false,...x,response:x});return}}}if(typeof t=="function"){S.current?.abort();let b=new AbortController;S.current=b,p(l,{loading:true}),o?.logging&&console.log("Before request",c),o?.onBeforeRequest&&o?.onBeforeRequest(c);let f=s?await t(void 0,{...o,signal:b.signal}):await t(d,void 0,{...o,signal:b.signal});if(o?.afterResponse&&f?.data&&(f.data=o?.afterResponse(f.data)),o?.logging&&console.log("After request",f),o?.onAfterResponse&&o?.onAfterResponse(f),p(l,{loading:false,...f,response:f,isCancel:false}),$&&f.status){let D=J__default.default().add(Y,Z).toISOString(),x={data:f,expired:D},g=await caches.open(P),K=new Response(JSON.stringify(x));await g.put(N,K);}}},[c,t,o,m]);X.useEffect(()=>{if(o?.refreshInterval){let u=typeof o.refreshInterval=="number"?o.refreshInterval:o.refreshInterval.value,d=typeof o.refreshInterval=="number"?"s":o.refreshInterval.unit,b=setInterval(()=>{U();},J__default.default.duration(u,d).asMilliseconds());return ()=>clearInterval(b)}return ()=>{}},[o?.refreshInterval,U]),X.useEffect(()=>{if(!o?.refetchOnWindowFocus)return;let u=()=>{U();};return window.addEventListener("focus",u),()=>{window.removeEventListener("focus",u);}},[o?.refetchOnWindowFocus,U]);let y=X.useCallback(()=>{S.current?.abort(),S.current=null,p(l,{loading:false,isCancel:true});},[l,S]),R=X.useCallback(()=>{p(l,{loading:false,response:null});},[l]),i={...C,loading:q,refresh:U,abort:y,clear:R,response:C,isCancel:m,clone:(u,d)=>Pe(t,u,d)};return X.useEffect(()=>(le(l,i),()=>{ce(l);}),[i,l]),[C?.data,i]}async function kt(e,t=()=>{}){let n=e*1e3;return new Promise(r=>{setInterval(()=>{t();},1e3);setTimeout(async()=>{await t(),r(true);},n);})}var Oe=(a=>(a.POST="POST",a.PUT="PUT",a.PATCH="PATCH",a.DELETE="DELETE",a.GET="GET",a))(Oe||{}),qe=(i=>(i.number="number",i.currency="currency",i.percent="percent",i.date="date",i.dateTime="dateTime",i.month="month",i.year="year",i.time="time",i.timestamp="timestamp",i.string="string",i.textarea="textarea",i.code="code",i.password="password",i.boolean="boolean",i.toggle="toggle",i.email="email",i.phone="phone",i.url="url",i.json="json",i.file="file",i.image="image",i.array="array",i.object="object",i.enum="enum",i.user="user",i.department="department",i.status="status",i))(qe||{});var Ht=(e,t,n)=>{let{format:r}=v();return t==="number"?ke(e,{thouSep:r.number.thouSep,decDigits:r.number.decDigits,decSep:r.number.decSep,...n}):["date","dateTime","month","year","time"].some(s=>s===t)?ve(e,{display:r[t]?.display,value:r[t]?.value,...n}):t==="boolean"?Ne(e,n):t==="string"?Ue(e,n):e?.toString()??""};function Ne(e,t){let n=typeof e=="string"?e==="true":!!e,r=t?.trueLabel??"Yes",s=t?.falseLabel??"No";return n?r:s}function Ue(e,t){if(!k(e))return "";let n=String(e);switch(t?.textTransform){case "capitalize":n=te(n);break;case "uppercase":n=n.toUpperCase();break;case "lowercase":n=n.toLowerCase();break}return t?.ellipsis&&n.length>t.ellipsis&&(n=n.slice(0,t.ellipsis)+"..."),n}function ke(e,{thouSep:t,decSep:n,decDigits:r,method:s}){if(e==null||isNaN(Number(e)))return "";let a=typeof e=="string"?parseFloat(e):e;if(s)if(typeof r=="number"){let p=Math.pow(10,r);a=Math[s](a*p)/p;}else a=Math[s](a);else if(typeof r=="number"){let p=Math.pow(10,r);a=Math.floor(a*p)/p;}let c=0;if(r==="auto"){let p=a.toString(),m=p.indexOf(".");m!==-1&&(c=p.length-m-1);}let o={style:"decimal",useGrouping:true,minimumFractionDigits:r==="auto"?c:r||0,maximumFractionDigits:r==="auto"?c:r||0,minimumIntegerDigits:1};return a.toLocaleString("en-US",o).replace(/\./g,"decSep").replace(/,/g,"thouSep").replace(/decSep/g,n).replace(/thouSep/g,t)}function ve(e,{display:t,value:n}){if(!k(e))return e;let r=J__default.default(e,n);return r.isValid()?r.format(t):e}function Lt(e,{interval:t,lead:n}){let r=X.useRef(null);X.useEffect(()=>{r.current=e;},[e]),X.useEffect(()=>{let s=()=>r.current();if(n&&s(),t!==null){let a=setInterval(s,t);return ()=>clearInterval(a)}},[t]);}function Vt(e,t,n){let[r,s]=X.useState(false),a=(p,m)=>typeof e=="string"&&p===e||typeof e=="number"&&m===e,c=p=>p!==null&&(["INPUT","TEXTAREA","SELECT","BUTTON"].includes(p.tagName)||p.hasAttribute("contentEditable")),o=p=>{let{key:m,keyCode:q}=p,C=p.ctrlKey,O=p.altKey,h=p.shiftKey;if(!c(document.activeElement))if(t)if(typeof t=="string")a(m,q)&&(t==="ctrl"&&C||t==="alt"&&O||t==="shift"&&h)&&(p.preventDefault(),n&&p.stopPropagation(),s(!r));else {let T=t.every(A=>A==="ctrl"?C:A==="alt"?O:A==="shift"?h:false);a(m,q)&&T&&(p.preventDefault(),n&&p.stopPropagation(),s(!r));}else a(m,q)&&(p.preventDefault(),n&&p.stopPropagation(),s(!r));},l=({key:p,keyCode:m})=>{a(p,m)&&s(false);};return X.useEffect(()=>(window.addEventListener("keydown",o),window.addEventListener("keyup",l),()=>{window.removeEventListener("keydown",o),window.removeEventListener("keyup",l);}),[]),r}var Yt=({url:e,token:t,beforeRequest:n,onCallback:r,headers:s,onUnauthorized:a,handleToast:c,handleAuthorization:o,disabledToastWhenCancel:l,withCredentials:p,encryptRequest:m,encryptResponse:q,passphrase:C})=>{let{encrypt:O,decrypt:h,passphrase:T}=I(),A=(y,R,i,u)=>{let d=u?.code==="ERR_CANCELED",b=y?.status===401,f=y?.data;if((typeof i?.encryptResponse=="boolean"?i?.encryptResponse:q)&&f){let B=i?.passphrase?typeof i.passphrase=="boolean"&&i.passphrase?T:i.passphrase:C;try{f=h(f,B);}catch{try{f=h(f,T);}catch{}}}let g={...r({...y,data:f,isCancel:d,isUnauthorization:b},u),isCancel:d,isUnauthorization:b,httpCode:y.status},K=typeof i?.disabledToastWhenCancel=="boolean"?i?.disabledToastWhenCancel:l,ye=o?o(g,i):!b;if((i?.infoSuccess&&g.status||i?.infoError&&!g.status)&&c&&(!d||!K)&&c(g),!ye&&(!d||!i?.disabledHandleUnauthorized)){let B=i?.onUnauthorized||a;B&&B(g);}if(R)R(g);else return g},S=(y,R=()=>{})=>Be__default.default.create({baseURL:`${e}`,withCredentials:typeof y.withCredentials=="boolean"?y.withCredentials:p})(y).then(R).catch(u=>R(u.response,u)),P=(y,R,i,u,d)=>{let f={...{token:true,infoError:true,infoSuccess:true,responseType:"json"},...d},D={"Content-Type":"application/json",...s,...f.headers};if(f.token&&(typeof f.token=="boolean"?t&&(D.Authorization=`Bearer ${t}`):f.token&&(D.Authorization=`Bearer ${f.token}`)),n&&(i=n(i)),(typeof f?.encryptRequest=="boolean"?f?.encryptRequest:m)&&i){let g=d?.passphrase?typeof d.passphrase=="boolean"&&d.passphrase?T:d.passphrase:C;i=O(i,g);}return S({url:R,method:y,data:i,headers:D,responseType:f.responseType,signal:f.signal,withCredentials:f.withCredentials,onUploadProgress:g=>{f?.onUploadProgress&&f?.onUploadProgress(g);}},(g,K)=>A(g,u,f,K))};return {client:S,post:(y,R,i,u)=>P("POST",`${y}`,R,i,u),put:(y,R,i,u)=>P("PUT",`${y}`,R,i,u),patch:(y,R,i,u)=>P("PATCH",`${y}`,R,i,u),delete:(y,R,i)=>P("DELETE",`${y}`,null,R,i),get:(y,R,i)=>P("GET",`${y}`,null,R,i),upload:(y,R,i,u)=>{let d=new FormData;return Object.keys(R).forEach(b=>d.append(b,R[b])),P("POST",`${y}`,d,i,{infoSuccess:false,...u,headers:{"Content-Type":"multipart/form-data",...u?.headers}})}}};function en(e,t){let[n,r]=X.useState(false),[s,a]=X.useState(),[c,o]=X.useState(0),l=X.useRef(null);return X.useEffect(()=>{if(t?.abortOnUnmount)return ()=>{l.current?.abort();}},[]),[async C=>{l.current?.abort();let O=new AbortController;l.current=O,r(true),t?.beforeRequest&&(C=t?.beforeRequest(C)),t?.logging&&console.log("Before request",C);let h={...t,signal:O.signal,onUploadProgress:A=>{let S=Math.round(A.loaded*100/(A.total||1));o(S);}},T=e.__isVoid?await e(void 0,h):await e(C,void 0,h);t?.logging&&console.log("After response",T),a(T),r(false),o(0),T.status&&t?.onSuccess&&t?.onSuccess(T),!T.status&&t?.onError&&t?.onError(T),t?.afterResponse&&t?.afterResponse(T);},{...s,loading:n,abort:()=>{l.current?.abort(),l.current=null,r(false),o(0);},progress:c,reset:()=>{r(false),o(0),a(null);}}]}function Me(e,t){let{disableHysteresis:n=false,threshold:r=100,target:s}=t,a=e.current;return s&&(typeof s.pageYOffset=="number"?e.current=s.pageYOffset:s.scrollTop!==void 0&&(e.current=s.scrollTop)),!n&&a!==void 0&&e.current<a?false:(e.current||0)>r}var Le=typeof window<"u"?window:null;function rn(e={}){let{getTrigger:t=Me,target:n=Le,disableHysteresis:r=false,threshold:s=100}=e,a=X__default.default.useRef(0),[c,o]=X__default.default.useState(()=>t(a,{disableHysteresis:r,threshold:s,target:n}));return X__default.default.useEffect(()=>{let l=()=>{o(t(a,{disableHysteresis:r,threshold:s,target:n}));};if(l(),n)return n.addEventListener("scroll",l,{passive:true}),()=>{n.removeEventListener("scroll",l);}},[n,t,r,s]),c}var pn=(e,t)=>{let n=t||e.__path||e.name,r=E(({states:l})=>l[n]??M),{refresh:s,abort:a,clear:c,clone:o}=ue(n)||{};return [r?.data,{...r,refresh:s,abort:a,clear:c,clone:o}]};var un=(e,t)=>{let n=r=>e(r);return n.displayName=t,n},fn=(e,t)=>{let n={};n.others=[];let r=s=>{X__default.default.Children.forEach(s,a=>{if(X__default.default.isValidElement(a)){let c=a.type.displayName;if(t.includes(c))n[c]=a;else {let o=a;o.props?.children?r(o.props.children):n.others.push(a);}}else n.others.push(a);});};return r(e),n};function yn(e){let t=e,n=new Set;function r(){return t}function s(o){return n.add(o),()=>n.delete(o)}function a(o){typeof o=="function"?t=o(t):t=o,n.forEach(l=>l());}function c(o){let l=X.useRef(o?o(t):t);return X.useSyncExternalStore(s,()=>{let p=o?o(t):t,m=l.current;return Object.is(m,p)||(l.current=p),l.current},()=>o?o(t):t)}return {getSnapshot:r,subscribe:s,setState:a,useStore:c}}function Ve(e,t=[]){let n={};for(let r in e){let s=e[r];if(typeof s=="function"){let a=s.bind(null);a.__path=[...t,r].join("."),a.__isVoid=s.length===2,n[r]=a;}else typeof s=="object"&&s!==null?n[r]=Ve(s,[...t,r]):n[r]=s;}return n}exports.BgsCoreProvider=be;exports.DataTypeEnum=qe;exports.HttpMethod=Oe;exports.capitalizeWords=te;exports.createApiHelper=Yt;exports.createElement=un;exports.createStore=yn;exports.debounce=tt;exports.decrypt=V;exports.decryptString=ie;exports.diffJson=_e;exports.encrypt=j;exports.encryptString=ae;exports.generateCacheKey=ee;exports.generateUUID=Je;exports.getFieldValue=w;exports.isArray=Xe;exports.isNotEmpty=k;exports.jsonCopy=et;exports.labelFormatter=Q;exports.mappingUndefinedtoNull=Ge;exports.renderChildren=Ye;exports.sorting=Ze;exports.splitElement=fn;exports.stableStringify=ge;exports.summary=Qe;exports.useApiLoad=Pe;exports.useApiSend=en;exports.useApiStore=pn;exports.useBgsCore=v;exports.useCrypto=I;exports.useDelay=kt;exports.useFormatted=Ht;exports.useInterval=Lt;exports.useKeyPress=Vt;exports.useScrollTrigger=rn;exports.useStorage=pe;exports.wrapApi=Ve;
|
|
1
|
+
'use strict';var z=require('moment'),te=require('react'),jsxRuntime=require('react/jsx-runtime'),ce=require('crypto-js/aes'),ue=require('crypto-js/pbkdf2'),Se=require('crypto-js/enc-utf8'),V=require('crypto-js/enc-base64'),pe=require('crypto-js/lib-typedarrays'),zustand=require('zustand'),Le=require('axios');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var z__default=/*#__PURE__*/_interopDefault(z);var te__default=/*#__PURE__*/_interopDefault(te);var ce__default=/*#__PURE__*/_interopDefault(ce);var ue__default=/*#__PURE__*/_interopDefault(ue);var Se__default=/*#__PURE__*/_interopDefault(Se);var V__default=/*#__PURE__*/_interopDefault(V);var pe__default=/*#__PURE__*/_interopDefault(pe);var Le__default=/*#__PURE__*/_interopDefault(Le);function Ge(){let e=()=>Math.random()*16%16|0;return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>(t==="x"?e():e()&3|8).toString(16))}function Xe(e,t){try{return JSON.stringify(e)!==JSON.stringify(t)}catch{return false}}var Ye=e=>(Object.keys(e).forEach(t=>{e[t]===void 0&&(e[t]=null);}),e);function Ze(e,t){let n=false;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof t=="number"?e.length>t&&(n=true):n=true),n}function K(e){return !(e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0||typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===0)}var se={camelCase:(e="")=>(e=e.split(".").map(t=>(t=t.charAt(0).toUpperCase()+t.slice(1),t)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let n=e.replace(/_([a-z])/g,(o,s)=>s.toUpperCase()).replace(/([A-Z])/g," $1");return n=n.charAt(0).toUpperCase()+n.slice(1),n},changeAll:(e="",t=false)=>{let n="";try{e=e?.split(".")[e?.split(".")?.length-1],e=e?.split("[]")[e?.split("[]")?.length-1],n=se.snackCase(se.camelCase(e)),t&&(n=n?.split(" ")?.map(o=>o?.length<=3?o?.toUpperCase():o)?.join(" "));}catch{}return n?.trim()}};function Qe(e,t){return typeof e=="function"?e(t):e}var N=(e,t,n="")=>{if(!e)return n;if(e.hasOwnProperty(t))return e[t];let o=t.replace(/\[(\d+)\]/g,".$1").split("."),s=e;for(let a of o){if(s==null)return n;s=s[a];}return s===void 0?n:s},et={desc:(e,t)=>(e||(e=[]),e.sort((n,o)=>{if(t){let s=N(n,t)?N(n,t):"",a=N(o,t)?N(n,t):"";return s<a?1:-1}else return n<o?1:-1})),asc:(e,t)=>(e||(e=[]),e.sort((n,o)=>{if(t){let s=N(n,t)?N(n,t):"",a=N(o,t)?N(o,t):"";return s>a?1:-1}else return n>o?1:-1}))},tt=(e,t)=>{Array.isArray(e)||(e=[]);let n=[];return n=e.map(o=>Number(t?N(o,t)||0:o||0)),n.reduce((o,s)=>(o||0)+(s||0),0)||0};function nt(e){try{return e&&JSON.parse(JSON.stringify(e))}catch{return e}}function Te(e){let t=new WeakSet;return JSON.stringify(e,function(n,o){return o!==null&&typeof o=="object"?t.has(o)?void 0:(t.add(o),Object.keys(o).sort().reduce((s,a)=>(s[a]=o[a],s),{})):o})??""}function ae(e,t){return Te([t??"undefined",e??"undefined"])}function ie(e=""){return typeof e!="string"&&(e=""),e.replace(/\b\w/g,t=>t.toUpperCase())}function rt(e,t=0){let n;return function(...o){clearTimeout(n),n=setTimeout(()=>{e(...o);},t*1e3);}}var le=te.createContext(void 0);function F(){let e=te.useContext(le);return e||{}}var De=({children:e,value:t})=>{let n={...t};return jsxRuntime.jsx(le.Provider,{value:n,children:e})};function _(e,t){let n=pe__default.default.random(16),o=pe__default.default.random(16),s=ue__default.default(t,n,{keySize:256/32,iterations:1e3}),a=ce__default.default.encrypt(JSON.stringify(e),s,{iv:o}).toString();return {salt:n.toString(V__default.default),iv:o.toString(V__default.default),encrypted:a}}function G(e,t){let{salt:n,iv:o,encrypted:s}=e,a=ue__default.default(t,V__default.default.parse(n),{keySize:256/32,iterations:1e3}),r=ce__default.default.decrypt(s,a,{iv:V__default.default.parse(o)}).toString(Se__default.default);return JSON.parse(r)}function fe(e,t){return JSON.stringify(_(e,t))}function de(e,t){return G(JSON.parse(e),t)}function W(){let{passphrase:e}=F();return {passphrase:e,encrypt(t,n){return _(t,n||e)},decrypt(t,n){return G(t,n||e)},encryptString(t,n){return fe(t,n||e)},decryptString(t,n){return de(t,n||e)}}}var me=()=>{let{encrypt:e,decrypt:t}=W(),n=te.useCallback((c,r)=>{try{let p=e(r);localStorage.setItem(c,JSON.stringify(p));}catch(p){console.error("Failed to save to storage:",p);}},[e]),o=te.useCallback(c=>{try{let r=localStorage.getItem(c);return r?t(JSON.parse(r)):null}catch(r){return console.error("Failed to get from storage:",r),null}},[t]),s=c=>{let[r,p]=te.useState(()=>{try{let l=localStorage.getItem(c);return l?t(JSON.parse(l)):null}catch(l){return console.error("Failed to parse localStorage value",l),null}});return te.useEffect(()=>{let l=y=>{if(y.key===c)if(y.newValue)try{p(t(JSON.parse(y.newValue)));}catch(q){console.error("Decrypt error from storage event",q);}else p(null);};return window.addEventListener("storage",l),()=>window.removeEventListener("storage",l)},[c,t]),r},a=te.useCallback(c=>{c?localStorage.removeItem(c):localStorage.clear();},[]);return {save:n,get:o,clear:a,useWatchStorage:s}};var j={loading:false,response:void 0,isCancel:false,refresh:()=>{},abort:()=>{},clear:()=>{},clone:()=>{},data:void 0},M=zustand.create(e=>({states:{},updateState:(t,n)=>e(o=>({states:{...o.states,[t]:{...o.states[t]||j,...n}}})),resetState:t=>e(n=>({states:{...n.states,[t]:j}}))}));var Y=new Map,ye=(e,t)=>{Y.set(e,t);},ge=e=>{Y.delete(e);},Re=e=>Y.get(e);function Ue(...e){let[t,n,o]=e,s=t.__isVoid,a=t.__path||t.name,c=s?void 0:n,r=s?n:o,p=r?.storeName||a,{updateState:l}=M(),y=M(({states:u})=>u[p]?.isCancel??false),q=M(({states:u})=>u[p]?.loading??false),D=M(({states:u})=>u[p]?.response??void 0),{storageKey:O,cache:h,clearPreviousData:C,refetchOnWindowFocus:P}=F(),B=me(),w=te.useRef(void 0),k=te.useRef(null),{cacheName:I,cacheKey:E,timeout:ne,timeoutUnit:re,persistence:J,cacheEnabled:m}=te.useMemo(()=>{let u=O?B.get(O):void 0,g=typeof r?.cache=="object"?r?.cache?.cacheName??a:a,x=ae({...c,session:u},typeof r?.cache=="object"?r?.cache?.cacheKey:void 0),d=false;typeof h?.enabled=="boolean"&&(d=h.enabled);let S=false;typeof h?.persistence=="boolean"&&(S=h?.persistence),typeof r?.cache=="object"&&typeof r?.cache?.persistence=="boolean"&&(S=r?.cache?.persistence??false);let T=60*5,v="s";return K(h?.timeout)&&(typeof h?.timeout=="number"?(T=h.timeout,v="s"):typeof h?.timeout=="object"&&(T=h?.timeout.value,v=h?.timeout.unit)),r?.cache&&(typeof r.cache!="boolean"?(typeof r.cache.enabled=="boolean"?d=r.cache.enabled:d=true,typeof r.cache.timeout=="number"?(T=r.cache.timeout,v="s"):typeof r.cache.timeout=="object"&&(T=r.cache.timeout.value,v=r.cache.timeout.unit)):d=r.cache),{cacheName:g,cacheKey:x,timeout:T,timeoutUnit:v,persistence:S,cacheEnabled:d}},[r?.cache,c,O,h,a]);te.useEffect(()=>{let u=JSON.stringify(K(w.current)?w.current:""),g=JSON.stringify(K(c)?c:""),x=w.current===void 0;(u!==g||x)&&!r?.hold&&((r?.clearPreviousData??C)&&l(p,{response:null}),f(),w.current=c),r?.onChange&&r?.onChange(c,L);},[c,r?.clearPreviousData,C,r?.hold,...r?.trigger||[]]),te.useEffect(()=>{let u=async()=>{!J&&I&&E&&(await caches.open(I)).delete(E);};return window.addEventListener("beforeunload",u),()=>{window.removeEventListener("beforeunload",u),k.current?.abort();}},[J,I,E,p,k]);let f=te.useCallback(async u=>{let g=c;if(r?.hold&&r?.logging&&console.log("Hold active"),r?.beforeRequest&&(g=r?.beforeRequest(c)),m&&!u&&!y){l(p,{loading:true}),r?.onBeforeRequest&&r?.onBeforeRequest(c);let x=await caches.open(I),S=await(await x.match(E))?.json();if(S){let{data:T,expired:v}=S;if(z__default.default().isAfter(v))await x.delete(E);else {r?.afterResponse&&T?.data&&(T.data=r?.afterResponse(T.data)),r?.logging&&console.log("After request: Using Cache",T),r?.onAfterResponse&&r?.onAfterResponse(T),l(p,{loading:false,...T,response:T});return}}}if(typeof t=="function"){k.current?.abort();let x=new AbortController;k.current=x,l(p,{loading:true}),r?.logging&&console.log("Before request",c),r?.onBeforeRequest&&r?.onBeforeRequest(c);let d=s?await t(void 0,{...r,signal:x.signal}):await t(g,void 0,{...r,signal:x.signal});if(r?.afterResponse&&d?.data&&(d.data=r?.afterResponse(d.data)),r?.logging&&console.log("After request",d),r?.onAfterResponse&&r?.onAfterResponse(d),l(p,{loading:false,...d,response:d,isCancel:false}),m&&d.status){let S=z__default.default().add(ne,re).toISOString(),T={data:d,expired:S},v=await caches.open(I),oe=new Response(JSON.stringify(T));await v.put(E,oe);}}},[c,t,r,y]);te.useEffect(()=>{if(r?.refreshInterval){let u=typeof r.refreshInterval=="number"?r.refreshInterval:r.refreshInterval.value,g=typeof r.refreshInterval=="number"?"s":r.refreshInterval.unit,x=setInterval(()=>{f();},z__default.default.duration(u,g).asMilliseconds());return ()=>clearInterval(x)}return ()=>{}},[r?.refreshInterval,f]);let i=te.useRef(null),{enabledRefetch:b,timeoutRefetch:A,timeoutUnitRefetch:U}=te.useMemo(()=>{let u=r?.refetchOnWindowFocus?.enabled??P?.enabled??false,g=r?.refetchOnWindowFocus?.timeout??P?.timeout,x=typeof g=="number"?g:g?.value??60*5,d=typeof g=="object"?g.unit:"s";return {enabledRefetch:u,timeoutRefetch:x,timeoutUnitRefetch:d}},[r?.refetchOnWindowFocus,P]);te.useEffect(()=>{if(!b)return;let u=z__default.default.duration(A,U).asMilliseconds(),g=()=>{let d=Date.now(),S=i.current;S!==null&&d-S>=u&&f(),i.current=null;},x=()=>{i.current=Date.now();};return window.addEventListener("focus",g),window.addEventListener("blur",x),()=>{window.removeEventListener("focus",g),window.removeEventListener("blur",x);}},[b,A,U,f]);let R=te.useCallback(()=>{k.current?.abort(),k.current=null,l(p,{loading:false,isCancel:true});},[p,k]),H=te.useCallback(()=>{l(p,{loading:false,response:null});},[p]),L={...D,loading:q,refresh:f,abort:R,clear:H,response:D,isCancel:y,clone:(u,g)=>Ue(t,u,g)};return te.useEffect(()=>(ye(p,L),()=>{ge(p);}),[L,p]),[D?.data,L]}async function Et(e,t=()=>{}){let n=e*1e3;return new Promise(o=>{setInterval(()=>{t();},1e3);setTimeout(async()=>{await t(),o(true);},n);})}var ve=(a=>(a.POST="POST",a.PUT="PUT",a.PATCH="PATCH",a.DELETE="DELETE",a.GET="GET",a))(ve||{}),Ne=(i=>(i.number="number",i.currency="currency",i.percent="percent",i.date="date",i.dateTime="dateTime",i.month="month",i.year="year",i.time="time",i.timestamp="timestamp",i.string="string",i.textarea="textarea",i.code="code",i.password="password",i.boolean="boolean",i.toggle="toggle",i.email="email",i.phone="phone",i.url="url",i.json="json",i.file="file",i.image="image",i.array="array",i.object="object",i.enum="enum",i.user="user",i.department="department",i.status="status",i))(Ne||{});var Ht=(e,t,n)=>{let{format:o}=F();return t==="number"?Fe(e,{thouSep:o.number.thouSep,decDigits:o.number.decDigits,decSep:o.number.decSep,...n}):["date","dateTime","month","year","time"].some(s=>s===t)?Me(e,{display:o[t]?.display,value:o[t]?.value,...n}):t==="boolean"?Ee(e,n):t==="string"?Ke(e,n):e?.toString()??""};function Ee(e,t){let n=typeof e=="string"?e==="true":!!e,o=t?.trueLabel??"Yes",s=t?.falseLabel??"No";return n?o:s}function Ke(e,t){if(!K(e))return "";let n=String(e);switch(t?.textTransform){case "capitalize":n=ie(n);break;case "uppercase":n=n.toUpperCase();break;case "lowercase":n=n.toLowerCase();break}return t?.ellipsis&&n.length>t.ellipsis&&(n=n.slice(0,t.ellipsis)+"..."),n}function Fe(e,{thouSep:t,decSep:n,decDigits:o,method:s}){if(e==null||isNaN(Number(e)))return "";let a=typeof e=="string"?parseFloat(e):e;if(s)if(typeof o=="number"){let l=Math.pow(10,o);a=Math[s](a*l)/l;}else a=Math[s](a);else if(typeof o=="number"){let l=Math.pow(10,o);a=Math.floor(a*l)/l;}let c=0;if(o==="auto"){let l=a.toString(),y=l.indexOf(".");y!==-1&&(c=l.length-y-1);}let r={style:"decimal",useGrouping:true,minimumFractionDigits:o==="auto"?c:o||0,maximumFractionDigits:o==="auto"?c:o||0,minimumIntegerDigits:1};return a.toLocaleString("en-US",r).replace(/\./g,"decSep").replace(/,/g,"thouSep").replace(/decSep/g,n).replace(/thouSep/g,t)}function Me(e,{display:t,value:n}){if(!K(e))return e;let o=z__default.default(e,n);return o.isValid()?o.format(t):e}function Vt(e,{interval:t,lead:n}){let o=te.useRef(null);te.useEffect(()=>{o.current=e;},[e]),te.useEffect(()=>{let s=()=>o.current();if(n&&s(),t!==null){let a=setInterval(s,t);return ()=>clearInterval(a)}},[t]);}function zt(e,t,n){let[o,s]=te.useState(false),a=(l,y)=>typeof e=="string"&&l===e||typeof e=="number"&&y===e,c=l=>l!==null&&(["INPUT","TEXTAREA","SELECT","BUTTON"].includes(l.tagName)||l.hasAttribute("contentEditable")),r=l=>{let{key:y,keyCode:q}=l,D=l.ctrlKey,O=l.altKey,h=l.shiftKey;if(!c(document.activeElement))if(t)if(typeof t=="string")a(y,q)&&(t==="ctrl"&&D||t==="alt"&&O||t==="shift"&&h)&&(l.preventDefault(),n&&l.stopPropagation(),s(!o));else {let C=t.every(P=>P==="ctrl"?D:P==="alt"?O:P==="shift"?h:false);a(y,q)&&C&&(l.preventDefault(),n&&l.stopPropagation(),s(!o));}else a(y,q)&&(l.preventDefault(),n&&l.stopPropagation(),s(!o));},p=({key:l,keyCode:y})=>{a(l,y)&&s(false);};return te.useEffect(()=>(window.addEventListener("keydown",r),window.addEventListener("keyup",p),()=>{window.removeEventListener("keydown",r),window.removeEventListener("keyup",p);}),[]),o}var Qt=({url:e,token:t,beforeRequest:n,onCallback:o,headers:s,onUnauthorized:a,handleToast:c,handleAuthorization:r,disabledToastWhenCancel:p,withCredentials:l,encryptRequest:y,encryptResponse:q,passphrase:D})=>{let{encrypt:O,decrypt:h,passphrase:C}=W(),P=(m,f,i,b)=>{let A=b?.code==="ERR_CANCELED",U=m?.status===401,R=m?.data;if((typeof i?.encryptResponse=="boolean"?i?.encryptResponse:q)&&R){let d=i?.passphrase?typeof i.passphrase=="boolean"&&i.passphrase?C:i.passphrase:D;try{R=h(R,d);}catch{try{R=h(R,C);}catch{}}}let u={...o({...m,data:R,isCancel:A,isUnauthorization:U},b),isCancel:A,isUnauthorization:U,httpCode:m.status},g=typeof i?.disabledToastWhenCancel=="boolean"?i?.disabledToastWhenCancel:p,x=r?r(u,i):!U;if((i?.infoSuccess&&u.status||i?.infoError&&!u.status)&&c&&(!A||!g)&&c(u),!x&&(!A||!i?.disabledHandleUnauthorized)){let d=i?.onUnauthorized||a;d&&d(u);}if(f)f(u);else return u},B=(m,f=()=>{})=>Le__default.default.create({baseURL:`${e}`,withCredentials:typeof m.withCredentials=="boolean"?m.withCredentials:l})(m).then(f).catch(b=>f(b.response,b)),w=(m,f,i,b,A)=>{let R={...{token:true,infoError:true,infoSuccess:true,responseType:"json"},...A},H={"Content-Type":"application/json",...s,...R.headers};if(R.token&&(typeof R.token=="boolean"?t&&(H.Authorization=`Bearer ${t}`):R.token&&(H.Authorization=`Bearer ${R.token}`)),n&&(i=n(i)),(typeof R?.encryptRequest=="boolean"?R?.encryptRequest:y)&&i){let u=A?.passphrase?typeof A.passphrase=="boolean"&&A.passphrase?C:A.passphrase:D;i=O(i,u);}return B({url:f,method:m,data:i,headers:H,responseType:R.responseType,signal:R.signal,withCredentials:R.withCredentials,onUploadProgress:u=>{R?.onUploadProgress&&R?.onUploadProgress(u);}},(u,g)=>P(u,b,R,g))};return {client:B,post:(m,f,i,b)=>w("POST",`${m}`,f,i,b),put:(m,f,i,b)=>w("PUT",`${m}`,f,i,b),patch:(m,f,i,b)=>w("PATCH",`${m}`,f,i,b),delete:(m,f,i)=>w("DELETE",`${m}`,null,f,i),get:(m,f,i)=>w("GET",`${m}`,null,f,i),upload:(m,f,i,b)=>{let A=new FormData;return Object.keys(f).forEach(U=>A.append(U,f[U])),w("POST",`${m}`,A,i,{infoSuccess:false,...b,headers:{"Content-Type":"multipart/form-data",...b?.headers}})}}};function nn(e,t){let[n,o]=te.useState(false),[s,a]=te.useState(),[c,r]=te.useState(0),p=te.useRef(null);return te.useEffect(()=>{if(t?.abortOnUnmount)return ()=>{p.current?.abort();}},[]),[async D=>{p.current?.abort();let O=new AbortController;p.current=O,o(true),t?.beforeRequest&&(D=t?.beforeRequest(D)),t?.logging&&console.log("Before request",D);let h={...t,signal:O.signal,onUploadProgress:P=>{let B=Math.round(P.loaded*100/(P.total||1));r(B);}},C=e.__isVoid?await e(void 0,h):await e(D,void 0,h);t?.logging&&console.log("After response",C),a(C),o(false),r(0),C.status&&t?.onSuccess&&t?.onSuccess(C),!C.status&&t?.onError&&t?.onError(C),t?.afterResponse&&t?.afterResponse(C);},{...s,loading:n,abort:()=>{p.current?.abort(),p.current=null,o(false),r(0);},progress:c,reset:()=>{o(false),r(0),a(null);}}]}function We(e,t){let{disableHysteresis:n=false,threshold:o=100,target:s}=t,a=e.current;return s&&(typeof s.pageYOffset=="number"?e.current=s.pageYOffset:s.scrollTop!==void 0&&(e.current=s.scrollTop)),!n&&a!==void 0&&e.current<a?false:(e.current||0)>o}var je=typeof window<"u"?window:null;function sn(e={}){let{getTrigger:t=We,target:n=je,disableHysteresis:o=false,threshold:s=100}=e,a=te__default.default.useRef(0),[c,r]=te__default.default.useState(()=>t(a,{disableHysteresis:o,threshold:s,target:n}));return te__default.default.useEffect(()=>{let p=()=>{r(t(a,{disableHysteresis:o,threshold:s,target:n}));};if(p(),n)return n.addEventListener("scroll",p,{passive:true}),()=>{n.removeEventListener("scroll",p);}},[n,t,o,s]),c}var cn=(e,t)=>{let n=t||e.__path||e.name,o=M(({states:p})=>p[n]??j),{refresh:s,abort:a,clear:c,clone:r}=Re(n)||{};return [o?.data,{...o,refresh:s,abort:a,clear:c,clone:r}]};var dn=(e,t)=>{let n=o=>e(o);return n.displayName=t,n},mn=(e,t)=>{let n={};n.others=[];let o=s=>{te__default.default.Children.forEach(s,a=>{if(te__default.default.isValidElement(a)){let c=a.type.displayName;if(t.includes(c))n[c]=a;else {let r=a;r.props?.children?o(r.props.children):n.others.push(a);}}else n.others.push(a);});};return o(e),n};function Rn(e){let t=e,n=new Set;function o(){return t}function s(r){return n.add(r),()=>n.delete(r)}function a(r){typeof r=="function"?t=r(t):t=r,n.forEach(p=>p());}function c(r){let p=te.useRef(r?r(t):t);return te.useSyncExternalStore(s,()=>{let l=r?r(t):t,y=p.current;return Object.is(y,l)||(p.current=l),p.current},()=>r?r(t):t)}return {getSnapshot:o,subscribe:s,setState:a,useStore:c}}function _e(e,t=[]){let n={};for(let o in e){let s=e[o];if(typeof s=="function"){let a=s.bind(null);a.__path=[...t,o].join("."),a.__isVoid=s.length===2,n[o]=a;}else typeof s=="object"&&s!==null?n[o]=_e(s,[...t,o]):n[o]=s;}return n}exports.BgsCoreProvider=De;exports.DataTypeEnum=Ne;exports.HttpMethod=ve;exports.capitalizeWords=ie;exports.createApiHelper=Qt;exports.createElement=dn;exports.createStore=Rn;exports.debounce=rt;exports.decrypt=G;exports.decryptString=de;exports.diffJson=Xe;exports.encrypt=_;exports.encryptString=fe;exports.generateCacheKey=ae;exports.generateUUID=Ge;exports.getFieldValue=N;exports.isArray=Ze;exports.isNotEmpty=K;exports.jsonCopy=nt;exports.labelFormatter=se;exports.mappingUndefinedtoNull=Ye;exports.renderChildren=Qe;exports.sorting=et;exports.splitElement=mn;exports.stableStringify=Te;exports.summary=tt;exports.useApiLoad=Ue;exports.useApiSend=nn;exports.useApiStore=cn;exports.useBgsCore=F;exports.useCrypto=W;exports.useDelay=Et;exports.useFormatted=Ht;exports.useInterval=Vt;exports.useKeyPress=zt;exports.useScrollTrigger=sn;exports.useStorage=me;exports.wrapApi=_e;
|
package/dist/index.d.cts
CHANGED
|
@@ -232,6 +232,11 @@ interface UseCallOptionsProps<DReq, DRes> extends OptionsHelper {
|
|
|
232
232
|
* Jika true, maka request tidak dijalankan otomatis hingga dipanggil secara manual.
|
|
233
233
|
*/
|
|
234
234
|
hold: boolean;
|
|
235
|
+
/**
|
|
236
|
+
* Jika true, data lama akan di-clear sebelum melakukan request baru saat payload berubah.
|
|
237
|
+
* Default: false (tampilkan data lama sambil mem-fetch data baru).
|
|
238
|
+
*/
|
|
239
|
+
clearPreviousData?: boolean;
|
|
235
240
|
/**
|
|
236
241
|
* Callback yang dipanggil setiap kali data berubah.
|
|
237
242
|
*/
|
|
@@ -248,7 +253,10 @@ interface UseCallOptionsProps<DReq, DRes> extends OptionsHelper {
|
|
|
248
253
|
/**
|
|
249
254
|
* Menentukan apakah data akan difetch ulang saat tab aktif kembali.
|
|
250
255
|
*/
|
|
251
|
-
refetchOnWindowFocus:
|
|
256
|
+
refetchOnWindowFocus: {
|
|
257
|
+
enabled?: boolean;
|
|
258
|
+
timeout: number | TimeoutConfig;
|
|
259
|
+
};
|
|
252
260
|
/**
|
|
253
261
|
* Nama unik untuk store/context/cache dari request API ini.
|
|
254
262
|
*
|
|
@@ -443,8 +451,9 @@ declare function useCrypto(): {
|
|
|
443
451
|
decryptString(data: string, passphraseProps?: string | null): string;
|
|
444
452
|
};
|
|
445
453
|
|
|
446
|
-
type
|
|
447
|
-
type
|
|
454
|
+
type AnyApiMethod = ApiMethod<any, any> | ApiMethodVoid<any>;
|
|
455
|
+
type InferApiRequest<T> = T extends ApiMethod<infer Req, any> ? Req : T extends ApiMethodVoid<any> ? never : never;
|
|
456
|
+
type InferApiResponse<T> = T extends ApiMethod<any, infer Res> ? Res : T extends ApiMethodVoid<infer Res> ? Res : never;
|
|
448
457
|
/**
|
|
449
458
|
* Hook untuk menggunakan API store yang sesuai dengan method.
|
|
450
459
|
*
|
|
@@ -457,7 +466,7 @@ type InferApiResponse<T> = T extends ApiMethod<any, infer Res> ? Res : never;
|
|
|
457
466
|
* const store = useApiStore(api.absence.save, 'absence.save'); // pakai key manual
|
|
458
467
|
* ```
|
|
459
468
|
*/
|
|
460
|
-
declare const useApiStore: <T extends
|
|
469
|
+
declare const useApiStore: <T extends AnyApiMethod>(api: T, key?: string) => UseCallReturnType<InferApiRequest<T>, InferApiResponse<T>>;
|
|
461
470
|
|
|
462
471
|
type CreateElementProps<P = unknown> = {
|
|
463
472
|
(element: (props: P) => React$1.JSX.Element, elementName: string): React$1.FC<P>;
|
|
@@ -529,6 +538,8 @@ type BgsCoreProps = {
|
|
|
529
538
|
storageKey?: string;
|
|
530
539
|
format: FormatContextProps;
|
|
531
540
|
cache?: Omit<CacheProps, "cacheName" | "cacheKey">;
|
|
541
|
+
clearPreviousData?: boolean;
|
|
542
|
+
refetchOnWindowFocus?: UseCallOptionsProps<any, any>["refetchOnWindowFocus"];
|
|
532
543
|
};
|
|
533
544
|
declare function useBgsCore(): BgsCoreProps;
|
|
534
545
|
interface BgsCoreProviderProps {
|
|
@@ -536,4 +547,4 @@ interface BgsCoreProviderProps {
|
|
|
536
547
|
}
|
|
537
548
|
declare const BgsCoreProvider: ({ children, value: options }: PropsWithChildren<BgsCoreProviderProps>) => react_jsx_runtime.JSX.Element;
|
|
538
549
|
|
|
539
|
-
export { type ApiActionState, type ApiDefaultFetch, type ApiDefaultMethod, type ApiMethod, type ApiMethodVoid, type ApiResponse, type BgsCoreProps, BgsCoreProvider, type CacheData, type CacheProps, type CallbackHelper, type Children, type ClientCallback, type CombinationType, type CreateElementProps, type DataType, DataTypeEnum, type EncryptedPayload, HttpMethod, type NestedKeyOf, type OptionsCallReturn, type OptionsHelper, type OptionsNumberProps, type PaginationMeta, type PathValue, type ResponseType, type SelectedNested, type SplitElementResult, type StorePayload, type SupportedFormattedType, type TWithName, type TextTransform, type UseApiSendProps, type UseApiSendReturnType, type UseCallOptionsProps, type UseCallReturnType, type UseHelperProps, type UseScrollTriggerOptions, capitalizeWords, createApiHelper, createElement, createStore, debounce, decrypt, decryptString, diffJson, encrypt, encryptString, generateCacheKey, generateUUID, getFieldValue, isArray, isNotEmpty, jsonCopy, labelFormatter, mappingUndefinedtoNull, renderChildren, sorting, splitElement, stableStringify, summary, useApiLoad, useApiSend, useApiStore, useBgsCore, useCrypto, useDelay, useFormatted, useInterval, useKeyPress, useScrollTrigger, useStorage, wrapApi };
|
|
550
|
+
export { type ApiActionState, type ApiDefaultFetch, type ApiDefaultMethod, type ApiMethod, type ApiMethodVoid, type ApiResponse, type BgsCoreProps, BgsCoreProvider, type CacheData, type CacheProps, type CallbackHelper, type Children, type ClientCallback, type CombinationType, type CreateElementProps, type DataType, DataTypeEnum, type EncryptedPayload, HttpMethod, type NestedKeyOf, type OptionsCallReturn, type OptionsHelper, type OptionsNumberProps, type PaginationMeta, type PathValue, type ResponseType, type SelectedNested, type SplitElementResult, type StorePayload, type SupportedFormattedType, type TWithName, type TextTransform, type TimeoutConfig, type UseApiSendProps, type UseApiSendReturnType, type UseCallOptionsProps, type UseCallReturnType, type UseHelperProps, type UseScrollTriggerOptions, capitalizeWords, createApiHelper, createElement, createStore, debounce, decrypt, decryptString, diffJson, encrypt, encryptString, generateCacheKey, generateUUID, getFieldValue, isArray, isNotEmpty, jsonCopy, labelFormatter, mappingUndefinedtoNull, renderChildren, sorting, splitElement, stableStringify, summary, useApiLoad, useApiSend, useApiStore, useBgsCore, useCrypto, useDelay, useFormatted, useInterval, useKeyPress, useScrollTrigger, useStorage, wrapApi };
|
package/dist/index.d.ts
CHANGED
|
@@ -232,6 +232,11 @@ interface UseCallOptionsProps<DReq, DRes> extends OptionsHelper {
|
|
|
232
232
|
* Jika true, maka request tidak dijalankan otomatis hingga dipanggil secara manual.
|
|
233
233
|
*/
|
|
234
234
|
hold: boolean;
|
|
235
|
+
/**
|
|
236
|
+
* Jika true, data lama akan di-clear sebelum melakukan request baru saat payload berubah.
|
|
237
|
+
* Default: false (tampilkan data lama sambil mem-fetch data baru).
|
|
238
|
+
*/
|
|
239
|
+
clearPreviousData?: boolean;
|
|
235
240
|
/**
|
|
236
241
|
* Callback yang dipanggil setiap kali data berubah.
|
|
237
242
|
*/
|
|
@@ -248,7 +253,10 @@ interface UseCallOptionsProps<DReq, DRes> extends OptionsHelper {
|
|
|
248
253
|
/**
|
|
249
254
|
* Menentukan apakah data akan difetch ulang saat tab aktif kembali.
|
|
250
255
|
*/
|
|
251
|
-
refetchOnWindowFocus:
|
|
256
|
+
refetchOnWindowFocus: {
|
|
257
|
+
enabled?: boolean;
|
|
258
|
+
timeout: number | TimeoutConfig;
|
|
259
|
+
};
|
|
252
260
|
/**
|
|
253
261
|
* Nama unik untuk store/context/cache dari request API ini.
|
|
254
262
|
*
|
|
@@ -443,8 +451,9 @@ declare function useCrypto(): {
|
|
|
443
451
|
decryptString(data: string, passphraseProps?: string | null): string;
|
|
444
452
|
};
|
|
445
453
|
|
|
446
|
-
type
|
|
447
|
-
type
|
|
454
|
+
type AnyApiMethod = ApiMethod<any, any> | ApiMethodVoid<any>;
|
|
455
|
+
type InferApiRequest<T> = T extends ApiMethod<infer Req, any> ? Req : T extends ApiMethodVoid<any> ? never : never;
|
|
456
|
+
type InferApiResponse<T> = T extends ApiMethod<any, infer Res> ? Res : T extends ApiMethodVoid<infer Res> ? Res : never;
|
|
448
457
|
/**
|
|
449
458
|
* Hook untuk menggunakan API store yang sesuai dengan method.
|
|
450
459
|
*
|
|
@@ -457,7 +466,7 @@ type InferApiResponse<T> = T extends ApiMethod<any, infer Res> ? Res : never;
|
|
|
457
466
|
* const store = useApiStore(api.absence.save, 'absence.save'); // pakai key manual
|
|
458
467
|
* ```
|
|
459
468
|
*/
|
|
460
|
-
declare const useApiStore: <T extends
|
|
469
|
+
declare const useApiStore: <T extends AnyApiMethod>(api: T, key?: string) => UseCallReturnType<InferApiRequest<T>, InferApiResponse<T>>;
|
|
461
470
|
|
|
462
471
|
type CreateElementProps<P = unknown> = {
|
|
463
472
|
(element: (props: P) => React$1.JSX.Element, elementName: string): React$1.FC<P>;
|
|
@@ -529,6 +538,8 @@ type BgsCoreProps = {
|
|
|
529
538
|
storageKey?: string;
|
|
530
539
|
format: FormatContextProps;
|
|
531
540
|
cache?: Omit<CacheProps, "cacheName" | "cacheKey">;
|
|
541
|
+
clearPreviousData?: boolean;
|
|
542
|
+
refetchOnWindowFocus?: UseCallOptionsProps<any, any>["refetchOnWindowFocus"];
|
|
532
543
|
};
|
|
533
544
|
declare function useBgsCore(): BgsCoreProps;
|
|
534
545
|
interface BgsCoreProviderProps {
|
|
@@ -536,4 +547,4 @@ interface BgsCoreProviderProps {
|
|
|
536
547
|
}
|
|
537
548
|
declare const BgsCoreProvider: ({ children, value: options }: PropsWithChildren<BgsCoreProviderProps>) => react_jsx_runtime.JSX.Element;
|
|
538
549
|
|
|
539
|
-
export { type ApiActionState, type ApiDefaultFetch, type ApiDefaultMethod, type ApiMethod, type ApiMethodVoid, type ApiResponse, type BgsCoreProps, BgsCoreProvider, type CacheData, type CacheProps, type CallbackHelper, type Children, type ClientCallback, type CombinationType, type CreateElementProps, type DataType, DataTypeEnum, type EncryptedPayload, HttpMethod, type NestedKeyOf, type OptionsCallReturn, type OptionsHelper, type OptionsNumberProps, type PaginationMeta, type PathValue, type ResponseType, type SelectedNested, type SplitElementResult, type StorePayload, type SupportedFormattedType, type TWithName, type TextTransform, type UseApiSendProps, type UseApiSendReturnType, type UseCallOptionsProps, type UseCallReturnType, type UseHelperProps, type UseScrollTriggerOptions, capitalizeWords, createApiHelper, createElement, createStore, debounce, decrypt, decryptString, diffJson, encrypt, encryptString, generateCacheKey, generateUUID, getFieldValue, isArray, isNotEmpty, jsonCopy, labelFormatter, mappingUndefinedtoNull, renderChildren, sorting, splitElement, stableStringify, summary, useApiLoad, useApiSend, useApiStore, useBgsCore, useCrypto, useDelay, useFormatted, useInterval, useKeyPress, useScrollTrigger, useStorage, wrapApi };
|
|
550
|
+
export { type ApiActionState, type ApiDefaultFetch, type ApiDefaultMethod, type ApiMethod, type ApiMethodVoid, type ApiResponse, type BgsCoreProps, BgsCoreProvider, type CacheData, type CacheProps, type CallbackHelper, type Children, type ClientCallback, type CombinationType, type CreateElementProps, type DataType, DataTypeEnum, type EncryptedPayload, HttpMethod, type NestedKeyOf, type OptionsCallReturn, type OptionsHelper, type OptionsNumberProps, type PaginationMeta, type PathValue, type ResponseType, type SelectedNested, type SplitElementResult, type StorePayload, type SupportedFormattedType, type TWithName, type TextTransform, type TimeoutConfig, type UseApiSendProps, type UseApiSendReturnType, type UseCallOptionsProps, type UseCallReturnType, type UseHelperProps, type UseScrollTriggerOptions, capitalizeWords, createApiHelper, createElement, createStore, debounce, decrypt, decryptString, diffJson, encrypt, encryptString, generateCacheKey, generateUUID, getFieldValue, isArray, isNotEmpty, jsonCopy, labelFormatter, mappingUndefinedtoNull, renderChildren, sorting, splitElement, stableStringify, summary, useApiLoad, useApiSend, useApiStore, useBgsCore, useCrypto, useDelay, useFormatted, useInterval, useKeyPress, useScrollTrigger, useStorage, wrapApi };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import J from'moment';import X,{createContext,useContext,useCallback,useRef,useMemo,useEffect,useState,useSyncExternalStore}from'react';import {jsx}from'react/jsx-runtime';import oe from'crypto-js/aes';import se from'crypto-js/pbkdf2';import Te from'crypto-js/enc-utf8';import H from'crypto-js/enc-base64';import re from'crypto-js/lib-typedarrays';import {create}from'zustand';import Be from'axios';function Je(){let e=()=>Math.random()*16%16|0;return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>(t==="x"?e():e()&3|8).toString(16))}function _e(e,t){try{return JSON.stringify(e)!==JSON.stringify(t)}catch{return false}}var Ge=e=>(Object.keys(e).forEach(t=>{e[t]===void 0&&(e[t]=null);}),e);function Xe(e,t){let n=false;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof t=="number"?e.length>t&&(n=true):n=true),n}function k(e){return !(e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0||typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===0)}var Q={camelCase:(e="")=>(e=e.split(".").map(t=>(t=t.charAt(0).toUpperCase()+t.slice(1),t)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let n=e.replace(/_([a-z])/g,(r,s)=>s.toUpperCase()).replace(/([A-Z])/g," $1");return n=n.charAt(0).toUpperCase()+n.slice(1),n},changeAll:(e="",t=false)=>{let n="";try{e=e?.split(".")[e?.split(".")?.length-1],e=e?.split("[]")[e?.split("[]")?.length-1],n=Q.snackCase(Q.camelCase(e)),t&&(n=n?.split(" ")?.map(r=>r?.length<=3?r?.toUpperCase():r)?.join(" "));}catch{}return n?.trim()}};function Ye(e,t){return typeof e=="function"?e(t):e}var w=(e,t,n="")=>{if(!e)return n;if(e.hasOwnProperty(t))return e[t];let r=t.replace(/\[(\d+)\]/g,".$1").split("."),s=e;for(let a of r){if(s==null)return n;s=s[a];}return s===void 0?n:s},Ze={desc:(e,t)=>(e||(e=[]),e.sort((n,r)=>{if(t){let s=w(n,t)?w(n,t):"",a=w(r,t)?w(n,t):"";return s<a?1:-1}else return n<r?1:-1})),asc:(e,t)=>(e||(e=[]),e.sort((n,r)=>{if(t){let s=w(n,t)?w(n,t):"",a=w(r,t)?w(r,t):"";return s>a?1:-1}else return n>r?1:-1}))},Qe=(e,t)=>{Array.isArray(e)||(e=[]);let n=[];return n=e.map(r=>Number(t?w(r,t)||0:r||0)),n.reduce((r,s)=>(r||0)+(s||0),0)||0};function et(e){try{return e&&JSON.parse(JSON.stringify(e))}catch{return e}}function ge(e){let t=new WeakSet;return JSON.stringify(e,function(n,r){return r!==null&&typeof r=="object"?t.has(r)?void 0:(t.add(r),Object.keys(r).sort().reduce((s,a)=>(s[a]=r[a],s),{})):r})??""}function ee(e,t){return ge([t??"undefined",e??"undefined"])}function te(e=""){return typeof e!="string"&&(e=""),e.replace(/\b\w/g,t=>t.toUpperCase())}function tt(e,t=0){let n;return function(...r){clearTimeout(n),n=setTimeout(()=>{e(...r);},t*1e3);}}var ne=createContext(void 0);function v(){let e=useContext(ne);return e||{}}var be=({children:e,value:t})=>{let n={...t};return jsx(ne.Provider,{value:n,children:e})};function j(e,t){let n=re.random(16),r=re.random(16),s=se(t,n,{keySize:256/32,iterations:1e3}),a=oe.encrypt(JSON.stringify(e),s,{iv:r}).toString();return {salt:n.toString(H),iv:r.toString(H),encrypted:a}}function V(e,t){let{salt:n,iv:r,encrypted:s}=e,a=se(t,H.parse(n),{keySize:256/32,iterations:1e3}),o=oe.decrypt(s,a,{iv:H.parse(r)}).toString(Te);return JSON.parse(o)}function ae(e,t){return JSON.stringify(j(e,t))}function ie(e,t){return V(JSON.parse(e),t)}function I(){let{passphrase:e}=v();return {passphrase:e,encrypt(t,n){return j(t,n||e)},decrypt(t,n){return V(t,n||e)},encryptString(t,n){return ae(t,n||e)},decryptString(t,n){return ie(t,n||e)}}}var pe=()=>{let{encrypt:e,decrypt:t}=I(),n=useCallback((c,o)=>{try{let l=e(o);localStorage.setItem(c,JSON.stringify(l));}catch(l){console.error("Failed to save to storage:",l);}},[e]),r=useCallback(c=>{try{let o=localStorage.getItem(c);return o?t(JSON.parse(o)):null}catch(o){return console.error("Failed to get from storage:",o),null}},[t]),s=c=>{let[o,l]=useState(()=>{try{let p=localStorage.getItem(c);return p?t(JSON.parse(p)):null}catch(p){return console.error("Failed to parse localStorage value",p),null}});return useEffect(()=>{let p=m=>{if(m.key===c)if(m.newValue)try{l(t(JSON.parse(m.newValue)));}catch(q){console.error("Decrypt error from storage event",q);}else l(null);};return window.addEventListener("storage",p),()=>window.removeEventListener("storage",p)},[c,t]),o},a=useCallback(c=>{c?localStorage.removeItem(c):localStorage.clear();},[]);return {save:n,get:r,clear:a,useWatchStorage:s}};var M={loading:false,response:void 0,isCancel:false,refresh:()=>{},abort:()=>{},clear:()=>{},clone:()=>{},data:void 0},E=create(e=>({states:{},updateState:(t,n)=>e(r=>({states:{...r.states,[t]:{...r.states[t]||M,...n}}})),resetState:t=>e(n=>({states:{...n.states,[t]:M}}))}));var z=new Map,le=(e,t)=>{z.set(e,t);},ce=e=>{z.delete(e);},ue=e=>z.get(e);function Pe(...e){let[t,n,r]=e,s=t.__isVoid,a=t.__path||t.name,c=s?void 0:n,o=s?n:r,l=o?.storeName||a,{updateState:p}=E(),m=E(({states:u})=>u[l]?.isCancel??false),q=E(({states:u})=>u[l]?.loading??false),C=E(({states:u})=>u[l]?.response??void 0),{storageKey:O,cache:h}=v(),T=pe(),A=useRef(void 0),S=useRef(null),{cacheName:P,cacheKey:N,timeout:Y,timeoutUnit:Z,persistence:L,cacheEnabled:$}=useMemo(()=>{let u=O?T.get(O):void 0,d=typeof o?.cache=="object"?o?.cache?.cacheName??a:a,b=ee({...c,session:u},typeof o?.cache=="object"?o?.cache?.cacheKey:void 0),f=false;typeof h?.enabled=="boolean"&&(f=h.enabled);let D=false;typeof h?.persistence=="boolean"&&(D=h?.persistence),typeof o?.cache=="object"&&typeof o?.cache?.persistence=="boolean"&&(D=o?.cache?.persistence??false);let x=60*5,g="s";return k(h?.timeout)&&(typeof h?.timeout=="number"?(x=h.timeout,g="s"):typeof h?.timeout=="object"&&(x=h?.timeout.value,g=h?.timeout.unit)),o?.cache&&(typeof o.cache!="boolean"?(typeof o.cache.enabled=="boolean"?f=o.cache.enabled:f=true,typeof o.cache.timeout=="number"?(x=o.cache.timeout,g="s"):typeof o.cache.timeout=="object"&&(x=o.cache.timeout.value,g=o.cache.timeout.unit)):f=o.cache),{cacheName:d,cacheKey:b,timeout:x,timeoutUnit:g,persistence:D,cacheEnabled:f}},[o?.cache,c,O,h,a]);useEffect(()=>{let u=JSON.stringify(k(A.current)?A.current:""),d=JSON.stringify(k(c)?c:""),b=A.current===void 0;(u!==d||b)&&!o?.hold&&(p(l,{response:null}),U(),A.current=c),o?.onChange&&o?.onChange(c,i);},[c,o?.hold,...o?.trigger||[]]),useEffect(()=>{let u=async()=>{!L&&P&&N&&(await caches.open(P)).delete(N);};return window.addEventListener("beforeunload",u),()=>{window.removeEventListener("beforeunload",u),S.current?.abort();}},[L,P,N,l,S]);let U=useCallback(async u=>{let d=c;if(o?.hold&&o?.logging&&console.log("Hold active"),o?.beforeRequest&&(d=o?.beforeRequest(c)),$&&!u&&!m){p(l,{loading:true}),o?.onBeforeRequest&&o?.onBeforeRequest(c);let b=await caches.open(P),D=await(await b.match(N))?.json();if(D){let{data:x,expired:g}=D;if(J().isAfter(g))await b.delete(N);else {o?.afterResponse&&x?.data&&(x.data=o?.afterResponse(x.data)),o?.logging&&console.log("After request: Using Cache",x),o?.onAfterResponse&&o?.onAfterResponse(x),p(l,{loading:false,...x,response:x});return}}}if(typeof t=="function"){S.current?.abort();let b=new AbortController;S.current=b,p(l,{loading:true}),o?.logging&&console.log("Before request",c),o?.onBeforeRequest&&o?.onBeforeRequest(c);let f=s?await t(void 0,{...o,signal:b.signal}):await t(d,void 0,{...o,signal:b.signal});if(o?.afterResponse&&f?.data&&(f.data=o?.afterResponse(f.data)),o?.logging&&console.log("After request",f),o?.onAfterResponse&&o?.onAfterResponse(f),p(l,{loading:false,...f,response:f,isCancel:false}),$&&f.status){let D=J().add(Y,Z).toISOString(),x={data:f,expired:D},g=await caches.open(P),K=new Response(JSON.stringify(x));await g.put(N,K);}}},[c,t,o,m]);useEffect(()=>{if(o?.refreshInterval){let u=typeof o.refreshInterval=="number"?o.refreshInterval:o.refreshInterval.value,d=typeof o.refreshInterval=="number"?"s":o.refreshInterval.unit,b=setInterval(()=>{U();},J.duration(u,d).asMilliseconds());return ()=>clearInterval(b)}return ()=>{}},[o?.refreshInterval,U]),useEffect(()=>{if(!o?.refetchOnWindowFocus)return;let u=()=>{U();};return window.addEventListener("focus",u),()=>{window.removeEventListener("focus",u);}},[o?.refetchOnWindowFocus,U]);let y=useCallback(()=>{S.current?.abort(),S.current=null,p(l,{loading:false,isCancel:true});},[l,S]),R=useCallback(()=>{p(l,{loading:false,response:null});},[l]),i={...C,loading:q,refresh:U,abort:y,clear:R,response:C,isCancel:m,clone:(u,d)=>Pe(t,u,d)};return useEffect(()=>(le(l,i),()=>{ce(l);}),[i,l]),[C?.data,i]}async function kt(e,t=()=>{}){let n=e*1e3;return new Promise(r=>{setInterval(()=>{t();},1e3);setTimeout(async()=>{await t(),r(true);},n);})}var Oe=(a=>(a.POST="POST",a.PUT="PUT",a.PATCH="PATCH",a.DELETE="DELETE",a.GET="GET",a))(Oe||{}),qe=(i=>(i.number="number",i.currency="currency",i.percent="percent",i.date="date",i.dateTime="dateTime",i.month="month",i.year="year",i.time="time",i.timestamp="timestamp",i.string="string",i.textarea="textarea",i.code="code",i.password="password",i.boolean="boolean",i.toggle="toggle",i.email="email",i.phone="phone",i.url="url",i.json="json",i.file="file",i.image="image",i.array="array",i.object="object",i.enum="enum",i.user="user",i.department="department",i.status="status",i))(qe||{});var Ht=(e,t,n)=>{let{format:r}=v();return t==="number"?ke(e,{thouSep:r.number.thouSep,decDigits:r.number.decDigits,decSep:r.number.decSep,...n}):["date","dateTime","month","year","time"].some(s=>s===t)?ve(e,{display:r[t]?.display,value:r[t]?.value,...n}):t==="boolean"?Ne(e,n):t==="string"?Ue(e,n):e?.toString()??""};function Ne(e,t){let n=typeof e=="string"?e==="true":!!e,r=t?.trueLabel??"Yes",s=t?.falseLabel??"No";return n?r:s}function Ue(e,t){if(!k(e))return "";let n=String(e);switch(t?.textTransform){case "capitalize":n=te(n);break;case "uppercase":n=n.toUpperCase();break;case "lowercase":n=n.toLowerCase();break}return t?.ellipsis&&n.length>t.ellipsis&&(n=n.slice(0,t.ellipsis)+"..."),n}function ke(e,{thouSep:t,decSep:n,decDigits:r,method:s}){if(e==null||isNaN(Number(e)))return "";let a=typeof e=="string"?parseFloat(e):e;if(s)if(typeof r=="number"){let p=Math.pow(10,r);a=Math[s](a*p)/p;}else a=Math[s](a);else if(typeof r=="number"){let p=Math.pow(10,r);a=Math.floor(a*p)/p;}let c=0;if(r==="auto"){let p=a.toString(),m=p.indexOf(".");m!==-1&&(c=p.length-m-1);}let o={style:"decimal",useGrouping:true,minimumFractionDigits:r==="auto"?c:r||0,maximumFractionDigits:r==="auto"?c:r||0,minimumIntegerDigits:1};return a.toLocaleString("en-US",o).replace(/\./g,"decSep").replace(/,/g,"thouSep").replace(/decSep/g,n).replace(/thouSep/g,t)}function ve(e,{display:t,value:n}){if(!k(e))return e;let r=J(e,n);return r.isValid()?r.format(t):e}function Lt(e,{interval:t,lead:n}){let r=useRef(null);useEffect(()=>{r.current=e;},[e]),useEffect(()=>{let s=()=>r.current();if(n&&s(),t!==null){let a=setInterval(s,t);return ()=>clearInterval(a)}},[t]);}function Vt(e,t,n){let[r,s]=useState(false),a=(p,m)=>typeof e=="string"&&p===e||typeof e=="number"&&m===e,c=p=>p!==null&&(["INPUT","TEXTAREA","SELECT","BUTTON"].includes(p.tagName)||p.hasAttribute("contentEditable")),o=p=>{let{key:m,keyCode:q}=p,C=p.ctrlKey,O=p.altKey,h=p.shiftKey;if(!c(document.activeElement))if(t)if(typeof t=="string")a(m,q)&&(t==="ctrl"&&C||t==="alt"&&O||t==="shift"&&h)&&(p.preventDefault(),n&&p.stopPropagation(),s(!r));else {let T=t.every(A=>A==="ctrl"?C:A==="alt"?O:A==="shift"?h:false);a(m,q)&&T&&(p.preventDefault(),n&&p.stopPropagation(),s(!r));}else a(m,q)&&(p.preventDefault(),n&&p.stopPropagation(),s(!r));},l=({key:p,keyCode:m})=>{a(p,m)&&s(false);};return useEffect(()=>(window.addEventListener("keydown",o),window.addEventListener("keyup",l),()=>{window.removeEventListener("keydown",o),window.removeEventListener("keyup",l);}),[]),r}var Yt=({url:e,token:t,beforeRequest:n,onCallback:r,headers:s,onUnauthorized:a,handleToast:c,handleAuthorization:o,disabledToastWhenCancel:l,withCredentials:p,encryptRequest:m,encryptResponse:q,passphrase:C})=>{let{encrypt:O,decrypt:h,passphrase:T}=I(),A=(y,R,i,u)=>{let d=u?.code==="ERR_CANCELED",b=y?.status===401,f=y?.data;if((typeof i?.encryptResponse=="boolean"?i?.encryptResponse:q)&&f){let B=i?.passphrase?typeof i.passphrase=="boolean"&&i.passphrase?T:i.passphrase:C;try{f=h(f,B);}catch{try{f=h(f,T);}catch{}}}let g={...r({...y,data:f,isCancel:d,isUnauthorization:b},u),isCancel:d,isUnauthorization:b,httpCode:y.status},K=typeof i?.disabledToastWhenCancel=="boolean"?i?.disabledToastWhenCancel:l,ye=o?o(g,i):!b;if((i?.infoSuccess&&g.status||i?.infoError&&!g.status)&&c&&(!d||!K)&&c(g),!ye&&(!d||!i?.disabledHandleUnauthorized)){let B=i?.onUnauthorized||a;B&&B(g);}if(R)R(g);else return g},S=(y,R=()=>{})=>Be.create({baseURL:`${e}`,withCredentials:typeof y.withCredentials=="boolean"?y.withCredentials:p})(y).then(R).catch(u=>R(u.response,u)),P=(y,R,i,u,d)=>{let f={...{token:true,infoError:true,infoSuccess:true,responseType:"json"},...d},D={"Content-Type":"application/json",...s,...f.headers};if(f.token&&(typeof f.token=="boolean"?t&&(D.Authorization=`Bearer ${t}`):f.token&&(D.Authorization=`Bearer ${f.token}`)),n&&(i=n(i)),(typeof f?.encryptRequest=="boolean"?f?.encryptRequest:m)&&i){let g=d?.passphrase?typeof d.passphrase=="boolean"&&d.passphrase?T:d.passphrase:C;i=O(i,g);}return S({url:R,method:y,data:i,headers:D,responseType:f.responseType,signal:f.signal,withCredentials:f.withCredentials,onUploadProgress:g=>{f?.onUploadProgress&&f?.onUploadProgress(g);}},(g,K)=>A(g,u,f,K))};return {client:S,post:(y,R,i,u)=>P("POST",`${y}`,R,i,u),put:(y,R,i,u)=>P("PUT",`${y}`,R,i,u),patch:(y,R,i,u)=>P("PATCH",`${y}`,R,i,u),delete:(y,R,i)=>P("DELETE",`${y}`,null,R,i),get:(y,R,i)=>P("GET",`${y}`,null,R,i),upload:(y,R,i,u)=>{let d=new FormData;return Object.keys(R).forEach(b=>d.append(b,R[b])),P("POST",`${y}`,d,i,{infoSuccess:false,...u,headers:{"Content-Type":"multipart/form-data",...u?.headers}})}}};function en(e,t){let[n,r]=useState(false),[s,a]=useState(),[c,o]=useState(0),l=useRef(null);return useEffect(()=>{if(t?.abortOnUnmount)return ()=>{l.current?.abort();}},[]),[async C=>{l.current?.abort();let O=new AbortController;l.current=O,r(true),t?.beforeRequest&&(C=t?.beforeRequest(C)),t?.logging&&console.log("Before request",C);let h={...t,signal:O.signal,onUploadProgress:A=>{let S=Math.round(A.loaded*100/(A.total||1));o(S);}},T=e.__isVoid?await e(void 0,h):await e(C,void 0,h);t?.logging&&console.log("After response",T),a(T),r(false),o(0),T.status&&t?.onSuccess&&t?.onSuccess(T),!T.status&&t?.onError&&t?.onError(T),t?.afterResponse&&t?.afterResponse(T);},{...s,loading:n,abort:()=>{l.current?.abort(),l.current=null,r(false),o(0);},progress:c,reset:()=>{r(false),o(0),a(null);}}]}function Me(e,t){let{disableHysteresis:n=false,threshold:r=100,target:s}=t,a=e.current;return s&&(typeof s.pageYOffset=="number"?e.current=s.pageYOffset:s.scrollTop!==void 0&&(e.current=s.scrollTop)),!n&&a!==void 0&&e.current<a?false:(e.current||0)>r}var Le=typeof window<"u"?window:null;function rn(e={}){let{getTrigger:t=Me,target:n=Le,disableHysteresis:r=false,threshold:s=100}=e,a=X.useRef(0),[c,o]=X.useState(()=>t(a,{disableHysteresis:r,threshold:s,target:n}));return X.useEffect(()=>{let l=()=>{o(t(a,{disableHysteresis:r,threshold:s,target:n}));};if(l(),n)return n.addEventListener("scroll",l,{passive:true}),()=>{n.removeEventListener("scroll",l);}},[n,t,r,s]),c}var pn=(e,t)=>{let n=t||e.__path||e.name,r=E(({states:l})=>l[n]??M),{refresh:s,abort:a,clear:c,clone:o}=ue(n)||{};return [r?.data,{...r,refresh:s,abort:a,clear:c,clone:o}]};var un=(e,t)=>{let n=r=>e(r);return n.displayName=t,n},fn=(e,t)=>{let n={};n.others=[];let r=s=>{X.Children.forEach(s,a=>{if(X.isValidElement(a)){let c=a.type.displayName;if(t.includes(c))n[c]=a;else {let o=a;o.props?.children?r(o.props.children):n.others.push(a);}}else n.others.push(a);});};return r(e),n};function yn(e){let t=e,n=new Set;function r(){return t}function s(o){return n.add(o),()=>n.delete(o)}function a(o){typeof o=="function"?t=o(t):t=o,n.forEach(l=>l());}function c(o){let l=useRef(o?o(t):t);return useSyncExternalStore(s,()=>{let p=o?o(t):t,m=l.current;return Object.is(m,p)||(l.current=p),l.current},()=>o?o(t):t)}return {getSnapshot:r,subscribe:s,setState:a,useStore:c}}function Ve(e,t=[]){let n={};for(let r in e){let s=e[r];if(typeof s=="function"){let a=s.bind(null);a.__path=[...t,r].join("."),a.__isVoid=s.length===2,n[r]=a;}else typeof s=="object"&&s!==null?n[r]=Ve(s,[...t,r]):n[r]=s;}return n}export{be as BgsCoreProvider,qe as DataTypeEnum,Oe as HttpMethod,te as capitalizeWords,Yt as createApiHelper,un as createElement,yn as createStore,tt as debounce,V as decrypt,ie as decryptString,_e as diffJson,j as encrypt,ae as encryptString,ee as generateCacheKey,Je as generateUUID,w as getFieldValue,Xe as isArray,k as isNotEmpty,et as jsonCopy,Q as labelFormatter,Ge as mappingUndefinedtoNull,Ye as renderChildren,Ze as sorting,fn as splitElement,ge as stableStringify,Qe as summary,Pe as useApiLoad,en as useApiSend,pn as useApiStore,v as useBgsCore,I as useCrypto,kt as useDelay,Ht as useFormatted,Lt as useInterval,Vt as useKeyPress,rn as useScrollTrigger,pe as useStorage,Ve as wrapApi};
|
|
1
|
+
import z from'moment';import te,{createContext,useContext,useCallback,useRef,useMemo,useEffect,useState,useSyncExternalStore}from'react';import {jsx}from'react/jsx-runtime';import ce from'crypto-js/aes';import ue from'crypto-js/pbkdf2';import Se from'crypto-js/enc-utf8';import V from'crypto-js/enc-base64';import pe from'crypto-js/lib-typedarrays';import {create}from'zustand';import Le from'axios';function Ge(){let e=()=>Math.random()*16%16|0;return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>(t==="x"?e():e()&3|8).toString(16))}function Xe(e,t){try{return JSON.stringify(e)!==JSON.stringify(t)}catch{return false}}var Ye=e=>(Object.keys(e).forEach(t=>{e[t]===void 0&&(e[t]=null);}),e);function Ze(e,t){let n=false;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof t=="number"?e.length>t&&(n=true):n=true),n}function K(e){return !(e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0||typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===0)}var se={camelCase:(e="")=>(e=e.split(".").map(t=>(t=t.charAt(0).toUpperCase()+t.slice(1),t)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let n=e.replace(/_([a-z])/g,(o,s)=>s.toUpperCase()).replace(/([A-Z])/g," $1");return n=n.charAt(0).toUpperCase()+n.slice(1),n},changeAll:(e="",t=false)=>{let n="";try{e=e?.split(".")[e?.split(".")?.length-1],e=e?.split("[]")[e?.split("[]")?.length-1],n=se.snackCase(se.camelCase(e)),t&&(n=n?.split(" ")?.map(o=>o?.length<=3?o?.toUpperCase():o)?.join(" "));}catch{}return n?.trim()}};function Qe(e,t){return typeof e=="function"?e(t):e}var N=(e,t,n="")=>{if(!e)return n;if(e.hasOwnProperty(t))return e[t];let o=t.replace(/\[(\d+)\]/g,".$1").split("."),s=e;for(let a of o){if(s==null)return n;s=s[a];}return s===void 0?n:s},et={desc:(e,t)=>(e||(e=[]),e.sort((n,o)=>{if(t){let s=N(n,t)?N(n,t):"",a=N(o,t)?N(n,t):"";return s<a?1:-1}else return n<o?1:-1})),asc:(e,t)=>(e||(e=[]),e.sort((n,o)=>{if(t){let s=N(n,t)?N(n,t):"",a=N(o,t)?N(o,t):"";return s>a?1:-1}else return n>o?1:-1}))},tt=(e,t)=>{Array.isArray(e)||(e=[]);let n=[];return n=e.map(o=>Number(t?N(o,t)||0:o||0)),n.reduce((o,s)=>(o||0)+(s||0),0)||0};function nt(e){try{return e&&JSON.parse(JSON.stringify(e))}catch{return e}}function Te(e){let t=new WeakSet;return JSON.stringify(e,function(n,o){return o!==null&&typeof o=="object"?t.has(o)?void 0:(t.add(o),Object.keys(o).sort().reduce((s,a)=>(s[a]=o[a],s),{})):o})??""}function ae(e,t){return Te([t??"undefined",e??"undefined"])}function ie(e=""){return typeof e!="string"&&(e=""),e.replace(/\b\w/g,t=>t.toUpperCase())}function rt(e,t=0){let n;return function(...o){clearTimeout(n),n=setTimeout(()=>{e(...o);},t*1e3);}}var le=createContext(void 0);function F(){let e=useContext(le);return e||{}}var De=({children:e,value:t})=>{let n={...t};return jsx(le.Provider,{value:n,children:e})};function _(e,t){let n=pe.random(16),o=pe.random(16),s=ue(t,n,{keySize:256/32,iterations:1e3}),a=ce.encrypt(JSON.stringify(e),s,{iv:o}).toString();return {salt:n.toString(V),iv:o.toString(V),encrypted:a}}function G(e,t){let{salt:n,iv:o,encrypted:s}=e,a=ue(t,V.parse(n),{keySize:256/32,iterations:1e3}),r=ce.decrypt(s,a,{iv:V.parse(o)}).toString(Se);return JSON.parse(r)}function fe(e,t){return JSON.stringify(_(e,t))}function de(e,t){return G(JSON.parse(e),t)}function W(){let{passphrase:e}=F();return {passphrase:e,encrypt(t,n){return _(t,n||e)},decrypt(t,n){return G(t,n||e)},encryptString(t,n){return fe(t,n||e)},decryptString(t,n){return de(t,n||e)}}}var me=()=>{let{encrypt:e,decrypt:t}=W(),n=useCallback((c,r)=>{try{let p=e(r);localStorage.setItem(c,JSON.stringify(p));}catch(p){console.error("Failed to save to storage:",p);}},[e]),o=useCallback(c=>{try{let r=localStorage.getItem(c);return r?t(JSON.parse(r)):null}catch(r){return console.error("Failed to get from storage:",r),null}},[t]),s=c=>{let[r,p]=useState(()=>{try{let l=localStorage.getItem(c);return l?t(JSON.parse(l)):null}catch(l){return console.error("Failed to parse localStorage value",l),null}});return useEffect(()=>{let l=y=>{if(y.key===c)if(y.newValue)try{p(t(JSON.parse(y.newValue)));}catch(q){console.error("Decrypt error from storage event",q);}else p(null);};return window.addEventListener("storage",l),()=>window.removeEventListener("storage",l)},[c,t]),r},a=useCallback(c=>{c?localStorage.removeItem(c):localStorage.clear();},[]);return {save:n,get:o,clear:a,useWatchStorage:s}};var j={loading:false,response:void 0,isCancel:false,refresh:()=>{},abort:()=>{},clear:()=>{},clone:()=>{},data:void 0},M=create(e=>({states:{},updateState:(t,n)=>e(o=>({states:{...o.states,[t]:{...o.states[t]||j,...n}}})),resetState:t=>e(n=>({states:{...n.states,[t]:j}}))}));var Y=new Map,ye=(e,t)=>{Y.set(e,t);},ge=e=>{Y.delete(e);},Re=e=>Y.get(e);function Ue(...e){let[t,n,o]=e,s=t.__isVoid,a=t.__path||t.name,c=s?void 0:n,r=s?n:o,p=r?.storeName||a,{updateState:l}=M(),y=M(({states:u})=>u[p]?.isCancel??false),q=M(({states:u})=>u[p]?.loading??false),D=M(({states:u})=>u[p]?.response??void 0),{storageKey:O,cache:h,clearPreviousData:C,refetchOnWindowFocus:P}=F(),B=me(),w=useRef(void 0),k=useRef(null),{cacheName:I,cacheKey:E,timeout:ne,timeoutUnit:re,persistence:J,cacheEnabled:m}=useMemo(()=>{let u=O?B.get(O):void 0,g=typeof r?.cache=="object"?r?.cache?.cacheName??a:a,x=ae({...c,session:u},typeof r?.cache=="object"?r?.cache?.cacheKey:void 0),d=false;typeof h?.enabled=="boolean"&&(d=h.enabled);let S=false;typeof h?.persistence=="boolean"&&(S=h?.persistence),typeof r?.cache=="object"&&typeof r?.cache?.persistence=="boolean"&&(S=r?.cache?.persistence??false);let T=60*5,v="s";return K(h?.timeout)&&(typeof h?.timeout=="number"?(T=h.timeout,v="s"):typeof h?.timeout=="object"&&(T=h?.timeout.value,v=h?.timeout.unit)),r?.cache&&(typeof r.cache!="boolean"?(typeof r.cache.enabled=="boolean"?d=r.cache.enabled:d=true,typeof r.cache.timeout=="number"?(T=r.cache.timeout,v="s"):typeof r.cache.timeout=="object"&&(T=r.cache.timeout.value,v=r.cache.timeout.unit)):d=r.cache),{cacheName:g,cacheKey:x,timeout:T,timeoutUnit:v,persistence:S,cacheEnabled:d}},[r?.cache,c,O,h,a]);useEffect(()=>{let u=JSON.stringify(K(w.current)?w.current:""),g=JSON.stringify(K(c)?c:""),x=w.current===void 0;(u!==g||x)&&!r?.hold&&((r?.clearPreviousData??C)&&l(p,{response:null}),f(),w.current=c),r?.onChange&&r?.onChange(c,L);},[c,r?.clearPreviousData,C,r?.hold,...r?.trigger||[]]),useEffect(()=>{let u=async()=>{!J&&I&&E&&(await caches.open(I)).delete(E);};return window.addEventListener("beforeunload",u),()=>{window.removeEventListener("beforeunload",u),k.current?.abort();}},[J,I,E,p,k]);let f=useCallback(async u=>{let g=c;if(r?.hold&&r?.logging&&console.log("Hold active"),r?.beforeRequest&&(g=r?.beforeRequest(c)),m&&!u&&!y){l(p,{loading:true}),r?.onBeforeRequest&&r?.onBeforeRequest(c);let x=await caches.open(I),S=await(await x.match(E))?.json();if(S){let{data:T,expired:v}=S;if(z().isAfter(v))await x.delete(E);else {r?.afterResponse&&T?.data&&(T.data=r?.afterResponse(T.data)),r?.logging&&console.log("After request: Using Cache",T),r?.onAfterResponse&&r?.onAfterResponse(T),l(p,{loading:false,...T,response:T});return}}}if(typeof t=="function"){k.current?.abort();let x=new AbortController;k.current=x,l(p,{loading:true}),r?.logging&&console.log("Before request",c),r?.onBeforeRequest&&r?.onBeforeRequest(c);let d=s?await t(void 0,{...r,signal:x.signal}):await t(g,void 0,{...r,signal:x.signal});if(r?.afterResponse&&d?.data&&(d.data=r?.afterResponse(d.data)),r?.logging&&console.log("After request",d),r?.onAfterResponse&&r?.onAfterResponse(d),l(p,{loading:false,...d,response:d,isCancel:false}),m&&d.status){let S=z().add(ne,re).toISOString(),T={data:d,expired:S},v=await caches.open(I),oe=new Response(JSON.stringify(T));await v.put(E,oe);}}},[c,t,r,y]);useEffect(()=>{if(r?.refreshInterval){let u=typeof r.refreshInterval=="number"?r.refreshInterval:r.refreshInterval.value,g=typeof r.refreshInterval=="number"?"s":r.refreshInterval.unit,x=setInterval(()=>{f();},z.duration(u,g).asMilliseconds());return ()=>clearInterval(x)}return ()=>{}},[r?.refreshInterval,f]);let i=useRef(null),{enabledRefetch:b,timeoutRefetch:A,timeoutUnitRefetch:U}=useMemo(()=>{let u=r?.refetchOnWindowFocus?.enabled??P?.enabled??false,g=r?.refetchOnWindowFocus?.timeout??P?.timeout,x=typeof g=="number"?g:g?.value??60*5,d=typeof g=="object"?g.unit:"s";return {enabledRefetch:u,timeoutRefetch:x,timeoutUnitRefetch:d}},[r?.refetchOnWindowFocus,P]);useEffect(()=>{if(!b)return;let u=z.duration(A,U).asMilliseconds(),g=()=>{let d=Date.now(),S=i.current;S!==null&&d-S>=u&&f(),i.current=null;},x=()=>{i.current=Date.now();};return window.addEventListener("focus",g),window.addEventListener("blur",x),()=>{window.removeEventListener("focus",g),window.removeEventListener("blur",x);}},[b,A,U,f]);let R=useCallback(()=>{k.current?.abort(),k.current=null,l(p,{loading:false,isCancel:true});},[p,k]),H=useCallback(()=>{l(p,{loading:false,response:null});},[p]),L={...D,loading:q,refresh:f,abort:R,clear:H,response:D,isCancel:y,clone:(u,g)=>Ue(t,u,g)};return useEffect(()=>(ye(p,L),()=>{ge(p);}),[L,p]),[D?.data,L]}async function Et(e,t=()=>{}){let n=e*1e3;return new Promise(o=>{setInterval(()=>{t();},1e3);setTimeout(async()=>{await t(),o(true);},n);})}var ve=(a=>(a.POST="POST",a.PUT="PUT",a.PATCH="PATCH",a.DELETE="DELETE",a.GET="GET",a))(ve||{}),Ne=(i=>(i.number="number",i.currency="currency",i.percent="percent",i.date="date",i.dateTime="dateTime",i.month="month",i.year="year",i.time="time",i.timestamp="timestamp",i.string="string",i.textarea="textarea",i.code="code",i.password="password",i.boolean="boolean",i.toggle="toggle",i.email="email",i.phone="phone",i.url="url",i.json="json",i.file="file",i.image="image",i.array="array",i.object="object",i.enum="enum",i.user="user",i.department="department",i.status="status",i))(Ne||{});var Ht=(e,t,n)=>{let{format:o}=F();return t==="number"?Fe(e,{thouSep:o.number.thouSep,decDigits:o.number.decDigits,decSep:o.number.decSep,...n}):["date","dateTime","month","year","time"].some(s=>s===t)?Me(e,{display:o[t]?.display,value:o[t]?.value,...n}):t==="boolean"?Ee(e,n):t==="string"?Ke(e,n):e?.toString()??""};function Ee(e,t){let n=typeof e=="string"?e==="true":!!e,o=t?.trueLabel??"Yes",s=t?.falseLabel??"No";return n?o:s}function Ke(e,t){if(!K(e))return "";let n=String(e);switch(t?.textTransform){case "capitalize":n=ie(n);break;case "uppercase":n=n.toUpperCase();break;case "lowercase":n=n.toLowerCase();break}return t?.ellipsis&&n.length>t.ellipsis&&(n=n.slice(0,t.ellipsis)+"..."),n}function Fe(e,{thouSep:t,decSep:n,decDigits:o,method:s}){if(e==null||isNaN(Number(e)))return "";let a=typeof e=="string"?parseFloat(e):e;if(s)if(typeof o=="number"){let l=Math.pow(10,o);a=Math[s](a*l)/l;}else a=Math[s](a);else if(typeof o=="number"){let l=Math.pow(10,o);a=Math.floor(a*l)/l;}let c=0;if(o==="auto"){let l=a.toString(),y=l.indexOf(".");y!==-1&&(c=l.length-y-1);}let r={style:"decimal",useGrouping:true,minimumFractionDigits:o==="auto"?c:o||0,maximumFractionDigits:o==="auto"?c:o||0,minimumIntegerDigits:1};return a.toLocaleString("en-US",r).replace(/\./g,"decSep").replace(/,/g,"thouSep").replace(/decSep/g,n).replace(/thouSep/g,t)}function Me(e,{display:t,value:n}){if(!K(e))return e;let o=z(e,n);return o.isValid()?o.format(t):e}function Vt(e,{interval:t,lead:n}){let o=useRef(null);useEffect(()=>{o.current=e;},[e]),useEffect(()=>{let s=()=>o.current();if(n&&s(),t!==null){let a=setInterval(s,t);return ()=>clearInterval(a)}},[t]);}function zt(e,t,n){let[o,s]=useState(false),a=(l,y)=>typeof e=="string"&&l===e||typeof e=="number"&&y===e,c=l=>l!==null&&(["INPUT","TEXTAREA","SELECT","BUTTON"].includes(l.tagName)||l.hasAttribute("contentEditable")),r=l=>{let{key:y,keyCode:q}=l,D=l.ctrlKey,O=l.altKey,h=l.shiftKey;if(!c(document.activeElement))if(t)if(typeof t=="string")a(y,q)&&(t==="ctrl"&&D||t==="alt"&&O||t==="shift"&&h)&&(l.preventDefault(),n&&l.stopPropagation(),s(!o));else {let C=t.every(P=>P==="ctrl"?D:P==="alt"?O:P==="shift"?h:false);a(y,q)&&C&&(l.preventDefault(),n&&l.stopPropagation(),s(!o));}else a(y,q)&&(l.preventDefault(),n&&l.stopPropagation(),s(!o));},p=({key:l,keyCode:y})=>{a(l,y)&&s(false);};return useEffect(()=>(window.addEventListener("keydown",r),window.addEventListener("keyup",p),()=>{window.removeEventListener("keydown",r),window.removeEventListener("keyup",p);}),[]),o}var Qt=({url:e,token:t,beforeRequest:n,onCallback:o,headers:s,onUnauthorized:a,handleToast:c,handleAuthorization:r,disabledToastWhenCancel:p,withCredentials:l,encryptRequest:y,encryptResponse:q,passphrase:D})=>{let{encrypt:O,decrypt:h,passphrase:C}=W(),P=(m,f,i,b)=>{let A=b?.code==="ERR_CANCELED",U=m?.status===401,R=m?.data;if((typeof i?.encryptResponse=="boolean"?i?.encryptResponse:q)&&R){let d=i?.passphrase?typeof i.passphrase=="boolean"&&i.passphrase?C:i.passphrase:D;try{R=h(R,d);}catch{try{R=h(R,C);}catch{}}}let u={...o({...m,data:R,isCancel:A,isUnauthorization:U},b),isCancel:A,isUnauthorization:U,httpCode:m.status},g=typeof i?.disabledToastWhenCancel=="boolean"?i?.disabledToastWhenCancel:p,x=r?r(u,i):!U;if((i?.infoSuccess&&u.status||i?.infoError&&!u.status)&&c&&(!A||!g)&&c(u),!x&&(!A||!i?.disabledHandleUnauthorized)){let d=i?.onUnauthorized||a;d&&d(u);}if(f)f(u);else return u},B=(m,f=()=>{})=>Le.create({baseURL:`${e}`,withCredentials:typeof m.withCredentials=="boolean"?m.withCredentials:l})(m).then(f).catch(b=>f(b.response,b)),w=(m,f,i,b,A)=>{let R={...{token:true,infoError:true,infoSuccess:true,responseType:"json"},...A},H={"Content-Type":"application/json",...s,...R.headers};if(R.token&&(typeof R.token=="boolean"?t&&(H.Authorization=`Bearer ${t}`):R.token&&(H.Authorization=`Bearer ${R.token}`)),n&&(i=n(i)),(typeof R?.encryptRequest=="boolean"?R?.encryptRequest:y)&&i){let u=A?.passphrase?typeof A.passphrase=="boolean"&&A.passphrase?C:A.passphrase:D;i=O(i,u);}return B({url:f,method:m,data:i,headers:H,responseType:R.responseType,signal:R.signal,withCredentials:R.withCredentials,onUploadProgress:u=>{R?.onUploadProgress&&R?.onUploadProgress(u);}},(u,g)=>P(u,b,R,g))};return {client:B,post:(m,f,i,b)=>w("POST",`${m}`,f,i,b),put:(m,f,i,b)=>w("PUT",`${m}`,f,i,b),patch:(m,f,i,b)=>w("PATCH",`${m}`,f,i,b),delete:(m,f,i)=>w("DELETE",`${m}`,null,f,i),get:(m,f,i)=>w("GET",`${m}`,null,f,i),upload:(m,f,i,b)=>{let A=new FormData;return Object.keys(f).forEach(U=>A.append(U,f[U])),w("POST",`${m}`,A,i,{infoSuccess:false,...b,headers:{"Content-Type":"multipart/form-data",...b?.headers}})}}};function nn(e,t){let[n,o]=useState(false),[s,a]=useState(),[c,r]=useState(0),p=useRef(null);return useEffect(()=>{if(t?.abortOnUnmount)return ()=>{p.current?.abort();}},[]),[async D=>{p.current?.abort();let O=new AbortController;p.current=O,o(true),t?.beforeRequest&&(D=t?.beforeRequest(D)),t?.logging&&console.log("Before request",D);let h={...t,signal:O.signal,onUploadProgress:P=>{let B=Math.round(P.loaded*100/(P.total||1));r(B);}},C=e.__isVoid?await e(void 0,h):await e(D,void 0,h);t?.logging&&console.log("After response",C),a(C),o(false),r(0),C.status&&t?.onSuccess&&t?.onSuccess(C),!C.status&&t?.onError&&t?.onError(C),t?.afterResponse&&t?.afterResponse(C);},{...s,loading:n,abort:()=>{p.current?.abort(),p.current=null,o(false),r(0);},progress:c,reset:()=>{o(false),r(0),a(null);}}]}function We(e,t){let{disableHysteresis:n=false,threshold:o=100,target:s}=t,a=e.current;return s&&(typeof s.pageYOffset=="number"?e.current=s.pageYOffset:s.scrollTop!==void 0&&(e.current=s.scrollTop)),!n&&a!==void 0&&e.current<a?false:(e.current||0)>o}var je=typeof window<"u"?window:null;function sn(e={}){let{getTrigger:t=We,target:n=je,disableHysteresis:o=false,threshold:s=100}=e,a=te.useRef(0),[c,r]=te.useState(()=>t(a,{disableHysteresis:o,threshold:s,target:n}));return te.useEffect(()=>{let p=()=>{r(t(a,{disableHysteresis:o,threshold:s,target:n}));};if(p(),n)return n.addEventListener("scroll",p,{passive:true}),()=>{n.removeEventListener("scroll",p);}},[n,t,o,s]),c}var cn=(e,t)=>{let n=t||e.__path||e.name,o=M(({states:p})=>p[n]??j),{refresh:s,abort:a,clear:c,clone:r}=Re(n)||{};return [o?.data,{...o,refresh:s,abort:a,clear:c,clone:r}]};var dn=(e,t)=>{let n=o=>e(o);return n.displayName=t,n},mn=(e,t)=>{let n={};n.others=[];let o=s=>{te.Children.forEach(s,a=>{if(te.isValidElement(a)){let c=a.type.displayName;if(t.includes(c))n[c]=a;else {let r=a;r.props?.children?o(r.props.children):n.others.push(a);}}else n.others.push(a);});};return o(e),n};function Rn(e){let t=e,n=new Set;function o(){return t}function s(r){return n.add(r),()=>n.delete(r)}function a(r){typeof r=="function"?t=r(t):t=r,n.forEach(p=>p());}function c(r){let p=useRef(r?r(t):t);return useSyncExternalStore(s,()=>{let l=r?r(t):t,y=p.current;return Object.is(y,l)||(p.current=l),p.current},()=>r?r(t):t)}return {getSnapshot:o,subscribe:s,setState:a,useStore:c}}function _e(e,t=[]){let n={};for(let o in e){let s=e[o];if(typeof s=="function"){let a=s.bind(null);a.__path=[...t,o].join("."),a.__isVoid=s.length===2,n[o]=a;}else typeof s=="object"&&s!==null?n[o]=_e(s,[...t,o]):n[o]=s;}return n}export{De as BgsCoreProvider,Ne as DataTypeEnum,ve as HttpMethod,ie as capitalizeWords,Qt as createApiHelper,dn as createElement,Rn as createStore,rt as debounce,G as decrypt,de as decryptString,Xe as diffJson,_ as encrypt,fe as encryptString,ae as generateCacheKey,Ge as generateUUID,N as getFieldValue,Ze as isArray,K as isNotEmpty,nt as jsonCopy,se as labelFormatter,Ye as mappingUndefinedtoNull,Qe as renderChildren,et as sorting,mn as splitElement,Te as stableStringify,tt as summary,Ue as useApiLoad,nn as useApiSend,cn as useApiStore,F as useBgsCore,W as useCrypto,Et as useDelay,Ht as useFormatted,Vt as useInterval,zt as useKeyPress,sn as useScrollTrigger,me as useStorage,_e as wrapApi};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bgscore/react-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.40",
|
|
4
4
|
"description": "A React utility library that provides advanced API hooks (fetch, mutation, caching). Built for scalable and flexible data handling in modern React applications.",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.js",
|