{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/hooks/useManualTimeout/index.ts"],"sourcesContent":["import { useRef, useEffect, useCallback } from 'react';\n\n/**\n * @description 수동으로 타임아웃을 설정하고, 초기화할 수 있는 훅입니다.\n *\n * `useTimeout` 훅과 다르게 초기 자동 실행이 없으며, 명시적으로 타임아웃을 설정해야 합니다.\n * 모든 타임아웃은 해당 훅 언마운트 시 자동으로 초기화됩니다.\n *\n * `useTimeout`은 hooks rule에 따라 중첩 타임아웃 등 복잡한 타임아웃 설정에 적절하지 않습니다.\n * `useManualTimeout`은 병렬/중첩된 타임아웃을 실행하고, 한번에 초기화 해야 될 때 유용합니다.\n *\n * @returns {{\n *   set: (callback: () => void, delay: number) => number;\n *   clearAll: () => void;\n * }}\n * - set: 타임아웃을 설정하는 함수\n * - clearAll: 모든 타임아웃을 초기화하는 함수\n *\n * @example\n * const { set, clearAll } = useManualTimeout();\n *\n * useEffect(() => {\n *   // 병렬 실행\n *   set(() => console.log('timeout1'), 1000);\n *   set(() => console.log('timeout2'), 2000);\n * }, [set]);\n *\n * @example\n * const { set, clearAll } = useManualTimeout();\n *\n * useEffect(() => {\n *   // 중첩 실행\n *   set(() => {\n *     console.log('timeout1');\n *     set(() => {\n *       console.log('timeout2');\n *       set(() => {\n *         console.log('timeout3');\n *       }, 1000);\n *     }, 2000);\n *   }, 3000);\n * }, [set]);\n */\nexport const useManualTimeout = (): {\n  set: (callback: () => void, delay: number) => number;\n  clearAll: () => void;\n} => {\n  const timeoutIds = useRef<number[]>([]);\n\n  const clearAll = useCallback(() => {\n    for (let i = 0; i < timeoutIds.current.length; i++) {\n      clearTimeout(timeoutIds.current[i]);\n    }\n    timeoutIds.current = [];\n  }, []);\n\n  const set = useCallback((callback: () => void, delay: number) => {\n    const id = window.setTimeout(() => {\n      timeoutIds.current = timeoutIds.current.filter(\n        (timeoutId) => timeoutId !== id\n      );\n      callback();\n    }, delay);\n\n    timeoutIds.current.push(id);\n    return id;\n  }, []);\n\n  useEffect(() => {\n    return clearAll;\n  }, [clearAll]);\n\n  return { set, clearAll };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAa,yBAGR;CACH,MAAM,aAAa,OAAiB,EAAE,CAAC;CAEvC,MAAM,WAAW,kBAAkB;EACjC,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,QAAQ,KAC7C,aAAa,WAAW,QAAQ,GAAG;EAErC,WAAW,UAAU,EAAE;IACtB,EAAE,CAAC;CAEN,MAAM,MAAM,aAAa,UAAsB,UAAkB;EAC/D,MAAM,KAAK,OAAO,iBAAiB;GACjC,WAAW,UAAU,WAAW,QAAQ,QACrC,cAAc,cAAc,GAC9B;GACD,UAAU;KACT,MAAM;EAET,WAAW,QAAQ,KAAK,GAAG;EAC3B,OAAO;IACN,EAAE,CAAC;CAEN,gBAAgB;EACd,OAAO;IACN,CAAC,SAAS,CAAC;CAEd,OAAO;EAAE;EAAK;EAAU"}