UNPKG

2.69 kBSource Map (JSON)View Raw
1{"version":3,"sources":["useTimeout.js"],"names":["defaultOptions","cancelOnUnmount","useTimeout","fn","milliseconds","options","opts","timeout","callback","isCleared","setIsCleared","clear","current","clearTimeout","setTimeout"],"mappings":";;;;;;;AAAA;;;;;;;;;;;;;;;;AAEA,IAAMA,cAAc,GAAG;AACrBC,EAAAA,eAAe,EAAE;AADI,CAAvB;;AAQA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,EAAD,EAAKC,YAAL,EAAgD;AAAA,MAA7BC,OAA6B,uEAAnBL,cAAmB;;AACjE,MAAMM,IAAI,qBAAQN,cAAR,MAA4BK,OAAO,IAAI,EAAvC,CAAV;;AACA,MAAME,OAAO,GAAG,oBAAhB;AACA,MAAMC,QAAQ,GAAG,mBAAOL,EAAP,CAAjB;;AAHiE,kBAI/B,qBAAS,KAAT,CAJ+B;AAAA;AAAA,MAI1DM,SAJ0D;AAAA,MAI/CC,YAJ+C;;AAOjE,MAAMC,KAAK,GAAG,wBAAY,YAAM;AAC9B,QAAIJ,OAAO,CAACK,OAAZ,EAAqB;AACnBC,MAAAA,YAAY,CAACN,OAAO,CAACK,OAAT,CAAZ;AACAF,MAAAA,YAAY,CAAC,IAAD,CAAZ;AACD;AACF,GALa,EAKX,EALW,CAAd;AAQA,wBAAU,YAAM;AACd,QAAI,OAAOP,EAAP,KAAc,UAAlB,EAA8B;AAC5BK,MAAAA,QAAQ,CAACI,OAAT,GAAmBT,EAAnB;AACD;AACF,GAJD,EAIG,CAACA,EAAD,CAJH;AAOA,wBAAU,YAAM;AACd,QAAI,OAAOC,YAAP,KAAwB,QAA5B,EAAsC;AACpCG,MAAAA,OAAO,CAACK,OAAR,GAAkBE,UAAU,CAAC,YAAM;AACjCN,QAAAA,QAAQ,CAACI,OAAT;AACD,OAF2B,EAEzBR,YAFyB,CAA5B;AAGD;AACF,GAND,EAMG,CAACA,YAAD,CANH;AASA,wBAAU;AAAA,WAAM,YAAM;AACpB,UAAIE,IAAI,CAACL,eAAT,EAA0B;AACxBU,QAAAA,KAAK;AACN;AACF,KAJS;AAAA,GAAV,EAIG,EAJH;AAMA,SAAO,CAACF,SAAD,EAAYE,KAAZ,CAAP;AACD,CAtCD;;eAwCeT,U","sourcesContent":["import { useEffect, useState, useCallback, useRef } from 'react';\n\nconst defaultOptions = {\n cancelOnUnmount: 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.\n */\nconst useTimeout = (fn, milliseconds, options = defaultOptions) => {\n const opts = { ...defaultOptions, ...(options || {}) };\n const timeout = useRef();\n const callback = useRef(fn);\n const [isCleared, setIsCleared] = useState(false);\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 (typeof milliseconds === 'number') {\n timeout.current = setTimeout(() => {\n callback.current();\n }, milliseconds);\n }\n }, [milliseconds]);\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 useTimeout;\n"],"file":"useTimeout.js"}
\No newline at end of file