@hudoro/hooks
Version:
Usefull react hooks for HSD App
2 lines (1 loc) • 4.05 kB
JavaScript
(function(c,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],r):(c=typeof globalThis<"u"?globalThis:c||self,r(c["@hudoro/hooks"]={},c.React))})(this,function(c,r){"use strict";function v(e=!1){if(typeof e!="boolean")throw new Error("defaultValue must be `true` or `false`");const[n,s]=r.useState(e),t=r.useCallback(()=>{s(!0)},[]),o=r.useCallback(()=>{s(!1)},[]),f=r.useCallback(()=>{s(u=>!u)},[]);return{value:n,setValue:s,setTrue:t,setFalse:o,toggle:f}}const g=typeof window<"u"?r.useLayoutEffect:r.useEffect;function J(e){const[n,s]=r.useState({show:!1}),t=l=>{s({data:l,show:!0})},o=()=>{s({show:!1})},f=r.useCallback(()=>{if(e!=null&&e.onCancelAsync){e.onCancelAsync().then(()=>{s({show:!1})}).catch(l=>{e.onError&&e.onError(l)});return}e!=null&&e.onCancel&&e.onCancel(),s({show:!1})},[e]),u=r.useCallback(()=>{if(e!=null&&e.onConfirmAsync){e.onConfirmAsync(n.data).then(()=>{s({show:!1})}).catch(l=>{e.onError&&e.onError(l)});return}e!=null&&e.onConfirm&&e.onConfirm(n.data),s({show:!1})},[e,n.data]);return{...n,open:t,close:o,save:l=>{s(m=>({...m,data:l}))},confirm:u,cancel:f}}function O(e){const[n,s]=r.useState(e??0),t=r.useCallback(()=>{s(u=>u+1)},[]),o=r.useCallback(()=>{s(u=>u-1)},[]),f=r.useCallback(()=>{s(e??0)},[e]);return{count:n,increment:t,decrement:o,reset:f,setCount:s}}function j(e,n){const s=r.useRef(e);g(()=>{s.current=e},[e]),r.useEffect(()=>{if(n===null)return;const t=setInterval(()=>{s.current()},n);return()=>{clearInterval(t)}},[n])}function M({countStart:e,countStop:n=0,intervalMs:s=1e3,isIncrement:t=!1}){const[o,f]=r.useState(!1),{count:u,increment:C,decrement:l,reset:m,setCount:E}=O(e),{value:y,setTrue:i,setFalse:a}=v(!1),S=r.useCallback(()=>{a(),m()},[a,m]),h=r.useCallback(()=>{if(u===n){a();return}t?C():l()},[u,n,l,C,t,a]);return r.useEffect(()=>{f(!u)},[u]),j(h,y?s:null),{count:u,startCountdown:i,stopCountdown:a,resetCountdown:S,completed:o,setCompleted:f,setCount:E}}function T(e,n){const[s,t]=r.useState(e);return r.useEffect(()=>{const o=setTimeout(()=>{t(e)},n);return()=>{clearTimeout(o)}},[e,n]),s}var L=(e=>(e.sm="40rem",e.md="48rem",e.lg="64rem",e.xl="80rem",e["2xl"]="96rem",e))(L||{});function F(e){const n=L[e];return n?`(min-width: ${n})`:e}function U(e){const n=r.useMemo(()=>F(e),[e]),s=r.useCallback(f=>{const u=window.matchMedia(n);return u.addEventListener("change",f),()=>{u.removeEventListener("change",f)}},[n]),t=()=>window.matchMedia(n).matches,o=()=>{throw Error("useMediaQuery is a client-only hook")};return r.useSyncExternalStore(s,t,o)}function D(e){const n=r.useRef(e);n.current=e,r.useEffect(()=>()=>{n.current()},[])}function I(e){const n=Object.keys(e),s={};return n.forEach(t=>{s[t]=""}),s}function N(e,n){const s=(n==null?void 0:n.validationState)??I(e),[t,o]=r.useState(e),[f,u]=r.useState(s),C=e&&JSON.stringify(e),l=t&&JSON.stringify(t),m=s&&JSON.stringify(s),E=Object.values(f).every(d=>!d),y=(d,b)=>{o(k=>({...k,[d]:b}))},i=(d,b)=>{u(k=>({...k,[d]:b}))},a=r.useCallback(()=>u(s),[s]),S=()=>{o(e),a()},h=r.useCallback(()=>{if(n!=null&&n.validationCallback){const d=n.validationCallback(t,{...s});return Object.values(d).every(b=>!b)?(a(),!0):(u(d),!1)}return a(),!0},[t,s,n,a]),w=r.useRef();return w.current=h,r.useEffect(()=>{var d;(d=w.current)==null||d.call(w)},[l,m]),r.useEffect(()=>{C&&(o(JSON.parse(C)),u(JSON.parse(m)))},[C,m]),{values:t,errors:f,setValue:y,setValues:o,reset:S,setErrors:u,valid:E,setError:i,resetErrors:a,validate:h}}function A(){return{downloadFile:r.useCallback((n,s,t)=>{const o=new Blob([n],{type:t}),f=window.URL.createObjectURL(o),u=document.createElement("a");u.href=f,u.download=s,document.body.appendChild(u),u.click(),window.URL.revokeObjectURL(f),document.body.removeChild(u)},[])}}c.useBoolean=v,c.useConfirmation=J,c.useCountdown=M,c.useCounter=O,c.useDebounce=T,c.useDownload=A,c.useForm=N,c.useInterval=j,c.useIsomorphicLayoutEffect=g,c.useMediaQuery=U,c.useUnmount=D,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});