{"ast":null,"code":"import React from 'react';\nimport { useEffect } from 'react';\nimport BackHandler from \"react-native-web/dist/exports/BackHandler\";\nvar keyboardDismissHandlers = [];\nexport var keyboardDismissHandlerManager = {\n  push: function push(handler) {\n    keyboardDismissHandlers.push(handler);\n    return function () {\n      keyboardDismissHandlers = keyboardDismissHandlers.filter(function (h) {\n        return h !== handler;\n      });\n    };\n  },\n  length: function length() {\n    return keyboardDismissHandlers.length;\n  },\n  pop: function pop() {\n    return keyboardDismissHandlers.pop();\n  }\n};\nexport var useKeyboardDismissable = function useKeyboardDismissable(_ref) {\n  var enabled = _ref.enabled,\n    callback = _ref.callback;\n  React.useEffect(function () {\n    var cleanupFn = function cleanupFn() {};\n    if (enabled) {\n      cleanupFn = keyboardDismissHandlerManager.push(callback);\n    } else {\n      cleanupFn();\n    }\n    return function () {\n      cleanupFn();\n    };\n  }, [enabled, callback]);\n  useBackHandler({\n    enabled: enabled,\n    callback: callback\n  });\n};\nexport function useBackHandler(_ref2) {\n  var enabled = _ref2.enabled,\n    callback = _ref2.callback;\n  useEffect(function () {\n    var backHandler = function backHandler() {\n      callback();\n      return true;\n    };\n    if (enabled) {\n      BackHandler.addEventListener('hardwareBackPress', backHandler);\n    } else {\n      BackHandler.removeEventListener('hardwareBackPress', backHandler);\n    }\n    return function () {\n      return BackHandler.removeEventListener('hardwareBackPress', backHandler);\n    };\n  }, [enabled, callback]);\n}","map":{"version":3,"sources":["useKeyboardDismissable.ts"],"names":["React","useEffect","keyboardDismissHandlers","keyboardDismissHandlerManager","push","handler","filter","h","length","pop","useKeyboardDismissable","enabled","callback","cleanupFn","useBackHandler","backHandler","BackHandler","addEventListener","removeEventListener"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,SAAT,QAA0B,OAA1B;AAAA,OAAA,WAAA;AAQA,IAAIC,uBAAyC,GAAG,EAAhD;AACA,OAAO,IAAMC,6BAA6B,GAAG;EAC3CC,IAAI,EAAGC,SAAAA,KAAAA,OAAD,EAAwB;IAC5BH,uBAAuB,CAACE,IAAxBF,CAA6BG,OAA7BH,CAAAA;IACA,OAAO,YAAM;MACXA,uBAAuB,GAAGA,uBAAuB,CAACI,MAAxBJ,CACvBK,UAAAA,CAAD;QAAA,OAAOA,CAAC,KAAKF,OADWH;MAAAA,EAA1BA;IAGD,CAJD;EAKD,CAR0C;EAS3CM,MAAM,EAAE,SAAA,OAAA;IAAA,OAAMN,uBAAuB,CAACM,MATK;EAAA;EAU3CC,GAAG,EAAE,SAAA,IAAA,EAAM;IACT,OAAOP,uBAAuB,CAACO,GAAxBP,CAAAA,CAAP;EACD;AAZ0C,CAAtC;AAkBP,OAAO,IAAMQ,sBAAsB,GAAG,SAAzBA,sBAAsB,CAAA,IAAA,EAAuC;EAAA,IAAjCC,OAAF,GAAA,IAAA,CAAEA,OAAF;IAAWC,QAAAA,GAAAA,IAAAA,CAAAA,QAAAA;EAChDZ,KAAK,CAACC,SAAND,CAAgB,YAAM;IACpB,IAAIa,SAAS,GAAG,SAAA,UAAA,EAAM,CAAE,CAAxB;IACA,IAAIF,OAAJ,EAAa;MACXE,SAAS,GAAGV,6BAA6B,CAACC,IAA9BD,CAAmCS,QAAnCT,CAAZU;IACD,CAFD,MAEO;MACLA,SAAS,CAAA,CAAA;IACV;IACD,OAAO,YAAM;MACXA,SAAS,CAAA,CAAA;IACV,CAFD;EAGD,CAVDb,EAUG,CAACW,OAAD,EAAUC,QAAV,CAVHZ,CAAAA;EAYAc,cAAc,CAAC;IAAEH,OAAF,EAAEA,OAAF;IAAWC,QAAAA,EAAAA;EAAX,CAAD,CAAdE;AACD,CAdM;AAgBP,OAAO,SAASA,cAAT,CAAA,KAAA,EAAwD;EAAA,IAA9BH,OAAF,GAAA,KAAA,CAAEA,OAAF;IAAWC,QAAAA,GAAAA,KAAAA,CAAAA,QAAAA;EACxCX,SAAS,CAAC,YAAM;IACd,IAAIc,WAAW,GAAG,SAAdA,WAAW,CAAA,EAAS;MACtBH,QAAQ,CAAA,CAAA;MACR,OAAO,IAAP;IACD,CAHD;IAIA,IAAID,OAAJ,EAAa;MACXK,WAAW,CAACC,gBAAZD,CAA6B,mBAA7BA,EAAkDD,WAAlDC,CAAAA;IACD,CAFD,MAEO;MACLA,WAAW,CAACE,mBAAZF,CAAgC,mBAAhCA,EAAqDD,WAArDC,CAAAA;IACD;IACD,OAAO;MAAA,OACLA,WAAW,CAACE,mBAAZF,CAAgC,mBAAhCA,EAAqDD,WAArDC,CADF;IAAA;EAED,CAZQ,EAYN,CAACL,OAAD,EAAUC,QAAV,CAZM,CAATX;AAaD","sourcesContent":["import React from 'react';\nimport { useEffect } from 'react';\nimport { BackHandler } from 'react-native';\n\ntype IParams = {\n  enabled?: boolean;\n  callback: () => any;\n};\n\nlet keyboardDismissHandlers: Array<() => any> = [];\nexport const keyboardDismissHandlerManager = {\n  push: (handler: () => any) => {\n    keyboardDismissHandlers.push(handler);\n    return () => {\n      keyboardDismissHandlers = keyboardDismissHandlers.filter(\n        (h) => h !== handler\n      );\n    };\n  },\n  length: () => keyboardDismissHandlers.length,\n  pop: () => {\n    return keyboardDismissHandlers.pop();\n  },\n};\n\n/**\n * Handles attaching callback for Escape key listener on web and Back button listener on Android\n */\nexport const useKeyboardDismissable = ({ enabled, callback }: IParams) => {\n  React.useEffect(() => {\n    let cleanupFn = () => {};\n    if (enabled) {\n      cleanupFn = keyboardDismissHandlerManager.push(callback);\n    } else {\n      cleanupFn();\n    }\n    return () => {\n      cleanupFn();\n    };\n  }, [enabled, callback]);\n\n  useBackHandler({ enabled, callback });\n};\n\nexport function useBackHandler({ enabled, callback }: IParams) {\n  useEffect(() => {\n    let backHandler = () => {\n      callback();\n      return true;\n    };\n    if (enabled) {\n      BackHandler.addEventListener('hardwareBackPress', backHandler);\n    } else {\n      BackHandler.removeEventListener('hardwareBackPress', backHandler);\n    }\n    return () =>\n      BackHandler.removeEventListener('hardwareBackPress', backHandler);\n  }, [enabled, callback]);\n}\n"]},"metadata":{},"sourceType":"module"}