ik-hooks
Version:
IK hooks is a collection of custom React hooks designed to enhance your development experience by providing useful utilities for common tasks
13 lines (9 loc) • 1.99 kB
JavaScript
;
var react = require('react');
var jsxRuntime = require('react/jsx-runtime');
var f=(e,o)=>{window.localStorage.setItem(o,JSON.stringify(e));},i=e=>{let o=window.localStorage.getItem(e);return o?JSON.parse(o):null},S=e=>{window.localStorage.removeItem(e);};var w=(e,o)=>{let[n,r]=react.useState(o),s=react.useCallback(t=>{let a=null;return r(I=>(a=t(I),f(a,e),a)),a},[e]),l=react.useCallback(t=>t instanceof Function?s(t):(f(t,e),r(t),t),[s,e]),c=react.useCallback(()=>i(e),[e]),u=react.useCallback(t=>{let{reset:a=!0}=t||{};if(!a){S(e),r(null);return}l(o),r(o);},[o,e,l]);return react.useEffect(()=>{let t=i(e);t&&r(t);},[e]),{value:n,setValue:l,getValue:c,removeValue:u}};var g=(e=!1)=>{let[o,n]=react.useState(e),r=react.useCallback(s=>{if(s instanceof Function){n(s);return}else if(s){n(s);return}n(l=>!l);},[]);return react.useEffect(()=>{n(e);},[e]),[o,r]};var y=({callback:e,event:o,debug:n,socketProvider:r})=>{react.useEffect(()=>{r?.off(o),r?.on(o,async s=>{n&&console.log(`[socket] ${o}`),await e(s);});},[e,n,o,r]);};function A(e){return jsxRuntime.jsxs("dialog",{open:e.open,children:[e.message&&jsxRuntime.jsx("p",{children:e.message}),jsxRuntime.jsx("button",{onClick:e.onConfirm,children:"Confirm"}),jsxRuntime.jsx("button",{onClick:e.onCancel,children:"Cancel"})]})}var C=A;var P=({onConfirm:e,onCancel:o,message:n,dialog:r})=>{let[s,l]=g(),c=react.useCallback(()=>{e(),l();},[e,l]),u=react.useCallback(()=>{o instanceof Function&&o(),l();},[o,l]),t={open:s,message:n,onConfirm:c,onCancel:u},a=r?r(t):C(t);return {toggle:l,dialog:a}};var R=e=>{let[o,n]=react.useState(!0),[r,s]=react.useState(null),[l,c]=react.useState(null),u=react.useCallback(()=>{(async()=>{n(!0),s(null),c(null);try{let t=await e();s(t);}catch(t){c(t);}finally{n(!1);}})();},[e]);return react.useEffect(()=>{u();},[u]),{execute:u,inProgress:o,value:r,error:l}};
exports._useAsync = R;
exports.useConfirm = P;
exports.useLocalStorage = w;
exports.useSocketEvent = y;
exports.useToggle = g;