UNPKG

3.5 kBSource Map (JSON)View Raw
1{"version":3,"sources":["useConditionalTimeout.js"],"names":["defaultOptions","cancelOnUnmount","cancelOnConditionChange","useConditionalTimeout","fn","milliseconds","condition","options","opts","timeout","callback","isCleared","setIsCleared","prevCondition","clear","current","clearTimeout","setTimeout"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;;;;;;;;;;;AAEA,IAAMA,cAAc,GAAG;AACrBC,EAAAA,eAAe,EAAE,IADI;AAErBC,EAAAA,uBAAuB,EAAE;AAFJ,CAAvB;;AASA,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACC,EAAD,EAAKC,YAAL,EAAmBC,SAAnB,EAA2D;AAAA,MAA7BC,OAA6B,uEAAnBP,cAAmB;;AACvF,MAAMQ,IAAI,qBAAQR,cAAR,MAA4BO,OAAO,IAAI,EAAvC,CAAV;;AACA,MAAME,OAAO,GAAG,oBAAhB;AACA,MAAMC,QAAQ,GAAG,mBAAON,EAAP,CAAjB;;AAHuF,kBAIrD,qBAAS,KAAT,CAJqD;AAAA;AAAA,MAIhFO,SAJgF;AAAA,MAIrEC,YAJqE;;AAKvF,MAAMC,aAAa,GAAG,kCAAiBP,SAAjB,CAAtB;AAGA,MAAMQ,KAAK,GAAG,wBAAY,YAAM;AAC9B,QAAIL,OAAO,CAACM,OAAZ,EAAqB;AACnBC,MAAAA,YAAY,CAACP,OAAO,CAACM,OAAT,CAAZ;AACAH,MAAAA,YAAY,CAAC,IAAD,CAAZ;AACD;AACF,GALa,EAKX,EALW,CAAd;AAQA,wBAAU,YAAM;AACd,QAAI,OAAOR,EAAP,KAAc,UAAlB,EAA8B;AAC5BM,MAAAA,QAAQ,CAACK,OAAT,GAAmBX,EAAnB;AACD;AACF,GAJD,EAIG,CAACA,EAAD,CAJH;AAOA,wBAAU,YAAM;AACd,QAAIE,SAAS,IAAI,OAAOD,YAAP,KAAwB,QAAzC,EAAmD;AACjDI,MAAAA,OAAO,CAACM,OAAR,GAAkBE,UAAU,CAAC,YAAM;AACjCP,QAAAA,QAAQ,CAACK,OAAT;AACD,OAF2B,EAEzBV,YAFyB,CAA5B;AAGD;AACF,GAND,EAMG,CAACC,SAAD,EAAYD,YAAZ,CANH;AASA,wBAAU,YAAM;AACd,QAAIQ,aAAa,IAAIP,SAAS,KAAKO,aAA/B,IAAgDL,IAAI,CAACN,uBAAzD,EAAkF;AAChFY,MAAAA,KAAK;AACN;AACF,GAJD,EAIG,CAACR,SAAD,EAAYC,OAAZ,CAJH;AAOA,wBAAU;AAAA,WAAM,YAAM;AACpB,UAAIC,IAAI,CAACP,eAAT,EAA0B;AACxBa,QAAAA,KAAK;AACN;AACF,KAJS;AAAA,GAAV,EAIG,EAJH;AAMA,SAAO,CAACH,SAAD,EAAYG,KAAZ,CAAP;AACD,CA9CD;;eAgDeX,qB","sourcesContent":["import { useEffect, useState, useCallback, useRef } from 'react';\nimport usePreviousValue from './usePreviousValue';\n\nconst defaultOptions = {\n cancelOnUnmount: true,\n cancelOnConditionChange: true,\n};\n\n/**\n * An async-utility hook that accepts a callback function and a delay time (in milliseconds), then delays the\n * execution of the given function by the defined time from when the condition verifies.\n */\nconst useConditionalTimeout = (fn, milliseconds, condition, options = defaultOptions) => {\n const opts = { ...defaultOptions, ...(options || {}) };\n const timeout = useRef();\n const callback = useRef(fn);\n const [isCleared, setIsCleared] = useState(false);\n const prevCondition = usePreviousValue(condition);\n\n // the clear method\n const clear = useCallback(() => {\n if (timeout.current) {\n clearTimeout(timeout.current);\n setIsCleared(true);\n }\n }, []);\n\n // if the provided function changes, change its reference\n useEffect(() => {\n if (typeof fn === 'function') {\n callback.current = fn;\n }\n }, [fn]);\n\n // when the milliseconds change, reset the timeout\n useEffect(() => {\n if (condition && typeof milliseconds === 'number') {\n timeout.current = setTimeout(() => {\n callback.current();\n }, milliseconds);\n }\n }, [condition, milliseconds]);\n\n // when the condition change, clear the timeout\n useEffect(() => {\n if (prevCondition && condition !== prevCondition && opts.cancelOnConditionChange) {\n clear();\n }\n }, [condition, options]);\n\n // when component unmount clear the timeout\n useEffect(() => () => {\n if (opts.cancelOnUnmount) {\n clear();\n }\n }, []);\n\n return [isCleared, clear];\n};\n\nexport default useConditionalTimeout;\n"],"file":"useConditionalTimeout.js"}
\No newline at end of file