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
7 lines (4 loc) • 1.84 kB
JavaScript
import { useState, useCallback, useEffect } from 'react';
import { jsxs, jsx } from '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]=useState(o),s=useCallback(t=>{let a=null;return r(I=>(a=t(I),f(a,e),a)),a},[e]),l=useCallback(t=>t instanceof Function?s(t):(f(t,e),r(t),t),[s,e]),c=useCallback(()=>i(e),[e]),u=useCallback(t=>{let{reset:a=!0}=t||{};if(!a){S(e),r(null);return}l(o),r(o);},[o,e,l]);return useEffect(()=>{let t=i(e);t&&r(t);},[e]),{value:n,setValue:l,getValue:c,removeValue:u}};var g=(e=!1)=>{let[o,n]=useState(e),r=useCallback(s=>{if(s instanceof Function){n(s);return}else if(s){n(s);return}n(l=>!l);},[]);return useEffect(()=>{n(e);},[e]),[o,r]};var y=({callback:e,event:o,debug:n,socketProvider:r})=>{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 jsxs("dialog",{open:e.open,children:[e.message&&jsx("p",{children:e.message}),jsx("button",{onClick:e.onConfirm,children:"Confirm"}),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=useCallback(()=>{e(),l();},[e,l]),u=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]=useState(!0),[r,s]=useState(null),[l,c]=useState(null),u=useCallback(()=>{(async()=>{n(!0),s(null),c(null);try{let t=await e();s(t);}catch(t){c(t);}finally{n(!1);}})();},[e]);return useEffect(()=>{u();},[u]),{execute:u,inProgress:o,value:r,error:l}};
export { R as _useAsync, P as useConfirm, w as useLocalStorage, y as useSocketEvent, g as useToggle };