{"version":3,"file":"useEventHandler.mjs","sources":["../../../src/hooks/useEventHandler.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react'\n\nimport { noop } from '~/src/utils/function'\nimport { isEqual } from '~/src/utils/object'\nimport { isFunction, isNil } from '~/src/utils/type'\n\ninterface HandlerOptionsProps {\n  capture?: boolean\n  once?: boolean\n  passive?: boolean\n}\n\nfunction useEventHandler<K extends keyof HTMLElementEventMap>(\n  element: any,\n  eventName: K,\n  handler: (event: HTMLElementEventMap[K]) => any,\n  condition: boolean = true,\n  options: boolean | HandlerOptionsProps = false\n) {\n  const prevOptionsRef = useRef<boolean | HandlerOptionsProps>(undefined)\n\n  const nextOptions = useMemo(() => {\n    if (isEqual(prevOptionsRef.current, options)) {\n      return prevOptionsRef.current\n    }\n    prevOptionsRef.current = options\n    return options\n  }, [options])\n\n  useEffect(() => {\n    if (!isNil(element) && isFunction(element.addEventListener) && condition) {\n      element.addEventListener(eventName, handler, nextOptions)\n\n      return function cleanup() {\n        element.removeEventListener(eventName, handler, nextOptions)\n      }\n    }\n\n    return noop\n  }, [condition, element, eventName, nextOptions, handler])\n\n  return null\n}\n\nexport default useEventHandler\n"],"names":["useEventHandler","element","eventName","handler","condition","options","prevOptionsRef","useRef","undefined","nextOptions","useMemo","isEqual","current","useEffect","isNil","isFunction","addEventListener","cleanup","removeEventListener","noop"],"mappings":";;;;;AAYA,SAASA,eAAeA,CACtBC,OAAY,EACZC,SAAY,EACZC,OAA+C,EAC/CC,SAAkB,GAAG,IAAI,EACzBC,OAAsC,GAAG,KAAK,EAC9C;AACA,EAAA,MAAMC,cAAc,GAAGC,MAAM,CAAgCC,SAAS,CAAC;AAEvE,EAAA,MAAMC,WAAW,GAAGC,OAAO,CAAC,MAAM;IAChC,IAAIC,OAAO,CAACL,cAAc,CAACM,OAAO,EAAEP,OAAO,CAAC,EAAE;MAC5C,OAAOC,cAAc,CAACM,OAAO;AAC/B;IACAN,cAAc,CAACM,OAAO,GAAGP,OAAO;AAChC,IAAA,OAAOA,OAAO;AAChB,GAAC,EAAE,CAACA,OAAO,CAAC,CAAC;AAEbQ,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAI,CAACC,KAAK,CAACb,OAAO,CAAC,IAAIc,UAAU,CAACd,OAAO,CAACe,gBAAgB,CAAC,IAAIZ,SAAS,EAAE;MACxEH,OAAO,CAACe,gBAAgB,CAACd,SAAS,EAAEC,OAAO,EAAEM,WAAW,CAAC;MAEzD,OAAO,SAASQ,OAAOA,GAAG;QACxBhB,OAAO,CAACiB,mBAAmB,CAAChB,SAAS,EAAEC,OAAO,EAAEM,WAAW,CAAC;OAC7D;AACH;AAEA,IAAA,OAAOU,IAAI;AACb,GAAC,EAAE,CAACf,SAAS,EAAEH,OAAO,EAAEC,SAAS,EAAEO,WAAW,EAAEN,OAAO,CAAC,CAAC;AAEzD,EAAA,OAAO,IAAI;AACb;;;;"}