@react-native-aria/interactions 0.2.8 → 0.2.10-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/lib/commonjs/index.js +63 -21
  2. package/lib/commonjs/index.js.map +1 -1
  3. package/lib/commonjs/index.web.js +28 -0
  4. package/lib/commonjs/index.web.js.map +1 -1
  5. package/lib/commonjs/useHover.js +8 -2
  6. package/lib/commonjs/useHover.js.map +1 -1
  7. package/lib/commonjs/useHover.web.js +1 -1
  8. package/lib/commonjs/useHover.web.js.map +1 -1
  9. package/lib/commonjs/useIsPressProps.js +22 -0
  10. package/lib/commonjs/useIsPressProps.js.map +1 -0
  11. package/lib/commonjs/useKeyboardDismisssable.js +81 -0
  12. package/lib/commonjs/useKeyboardDismisssable.js.map +1 -0
  13. package/lib/module/index.js +4 -2
  14. package/lib/module/index.js.map +1 -1
  15. package/lib/module/index.web.js +4 -2
  16. package/lib/module/index.web.js.map +1 -1
  17. package/lib/module/useHover.js +7 -2
  18. package/lib/module/useHover.js.map +1 -1
  19. package/lib/module/useHover.web.js +1 -1
  20. package/lib/module/useHover.web.js.map +1 -1
  21. package/lib/module/useIsPressProps.js +12 -0
  22. package/lib/module/useIsPressProps.js.map +1 -0
  23. package/lib/module/useKeyboardDismisssable.js +62 -0
  24. package/lib/module/useKeyboardDismisssable.js.map +1 -0
  25. package/lib/typescript/index.d.ts +4 -2
  26. package/lib/typescript/index.web.d.ts +4 -2
  27. package/lib/typescript/useHover.d.ts +5 -2
  28. package/lib/typescript/useHover.web.d.ts +1 -1
  29. package/lib/typescript/useIsPressProps.d.ts +7 -0
  30. package/lib/typescript/useKeyboardDismisssable.d.ts +15 -0
  31. package/package.json +1 -1
  32. package/src/index.ts +14 -2
  33. package/src/index.web.ts +8 -2
  34. package/src/useHover.ts +8 -3
  35. package/src/useHover.web.ts +2 -2
  36. package/src/useIsPressProps.ts +12 -0
  37. package/src/useKeyboardDismisssable.ts +59 -0
@@ -3,30 +3,72 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "useHover", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _useHover.useHover;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "usePress", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _usePress.usePress;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "PressEvents", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _usePress.PressEvents;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "PressHookProps", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _usePress.PressHookProps;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "PressProps", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _usePress.PressProps;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "PressResult", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _usePress.PressResult;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "useIsPressProps", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _useIsPressProps.useIsPressProps;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "keyboardDismissHandlerManager", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _useKeyboardDismisssable.keyboardDismissHandlerManager;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "useKeyboardDismissable", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _useKeyboardDismisssable.useKeyboardDismissable;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "useBackHandler", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _useKeyboardDismisssable.useBackHandler;
64
+ }
65
+ });
6
66
 
7
67
  var _useHover = require("./useHover");
8
68
 
9
- Object.keys(_useHover).forEach(function (key) {
10
- if (key === "default" || key === "__esModule") return;
11
- if (key in exports && exports[key] === _useHover[key]) return;
12
- Object.defineProperty(exports, key, {
13
- enumerable: true,
14
- get: function () {
15
- return _useHover[key];
16
- }
17
- });
18
- });
19
-
20
69
  var _usePress = require("./usePress");
21
70
 
22
- Object.keys(_usePress).forEach(function (key) {
23
- if (key === "default" || key === "__esModule") return;
24
- if (key in exports && exports[key] === _usePress[key]) return;
25
- Object.defineProperty(exports, key, {
26
- enumerable: true,
27
- get: function () {
28
- return _usePress[key];
29
- }
30
- });
31
- });
71
+ var _useIsPressProps = require("./useIsPressProps");
72
+
73
+ var _useKeyboardDismisssable = require("./useKeyboardDismisssable");
32
74
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from './useHover';\nexport * from './usePress';\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAOA;;AACA","sourcesContent":["export { useHover } from './useHover';\nexport {\n usePress,\n PressEvents,\n PressHookProps,\n PressProps,\n PressResult,\n} from './usePress';\nexport { useIsPressProps } from './useIsPressProps';\nexport {\n keyboardDismissHandlerManager,\n useKeyboardDismissable,\n useBackHandler,\n} from './useKeyboardDismisssable';\n"]}
@@ -15,8 +15,36 @@ Object.defineProperty(exports, "usePress", {
15
15
  return _usePress.usePress;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "useIsPressProps", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _useIsPressProps.useIsPressProps;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "keyboardDismissHandlerManager", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _useKeyboardDismisssable.keyboardDismissHandlerManager;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "useKeyboardDismissable", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _useKeyboardDismisssable.useKeyboardDismissable;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "useBackHandler", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _useKeyboardDismisssable.useBackHandler;
40
+ }
41
+ });
18
42
 
19
43
  var _useHover = require("./useHover.web");
20
44
 
21
45
  var _usePress = require("./usePress");
46
+
47
+ var _useIsPressProps = require("./useIsPressProps");
48
+
49
+ var _useKeyboardDismisssable = require("./useKeyboardDismisssable");
22
50
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.web.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;AACA","sourcesContent":["export { useHover } from \"./useHover.web\";\nexport { usePress } from \"./usePress\";\n"]}
1
+ {"version":3,"sources":["index.web.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA","sourcesContent":["export { useHover } from './useHover.web';\nexport { usePress } from './usePress';\nexport { useIsPressProps } from './useIsPressProps';\nexport {\n keyboardDismissHandlerManager,\n useKeyboardDismissable,\n useBackHandler,\n} from './useKeyboardDismisssable';\n"]}
@@ -5,10 +5,16 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.useHover = void 0;
7
7
 
8
+ var _react = require("react");
9
+
8
10
  const useHover = (_props, _ref) => {
11
+ const [isHovered, setHovered] = (0, _react.useState)(false);
9
12
  let params = {
10
- hoverProps: {},
11
- isHovered: false
13
+ hoverProps: {
14
+ onHoverIn: () => setHovered(true),
15
+ onHoverOut: () => setHovered(false)
16
+ },
17
+ isHovered
12
18
  };
13
19
  return params;
14
20
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["useHover.ts"],"names":["useHover","_props","_ref","params","hoverProps","isHovered"],"mappings":";;;;;;;AAEO,MAAMA,QAAQ,GAAG,CAACC,MAAD,EAAqBC,IAArB,KAAmC;AACzD,MAAIC,MAAM,GAAG;AACXC,IAAAA,UAAU,EAAE,EADD;AAEXC,IAAAA,SAAS,EAAE;AAFA,GAAb;AAKA,SAAOF,MAAP;AACD,CAPM","sourcesContent":["import { HoverProps } from '@react-aria/interactions';\n\nexport const useHover = (_props: HoverProps, _ref: any) => {\n let params = {\n hoverProps: {},\n isHovered: false,\n };\n\n return params;\n};\n"]}
1
+ {"version":3,"sources":["useHover.ts"],"names":["useHover","_props","_ref","isHovered","setHovered","params","hoverProps","onHoverIn","onHoverOut"],"mappings":";;;;;;;AACA;;AAEO,MAAMA,QAAQ,GAAG,CAACC,MAAD,EAAqBC,IAArB,KAAoC;AAC1D,QAAM,CAACC,SAAD,EAAYC,UAAZ,IAA0B,qBAAS,KAAT,CAAhC;AACA,MAAIC,MAAM,GAAG;AACXC,IAAAA,UAAU,EAAE;AACVC,MAAAA,SAAS,EAAE,MAAMH,UAAU,CAAC,IAAD,CADjB;AAEVI,MAAAA,UAAU,EAAE,MAAMJ,UAAU,CAAC,KAAD;AAFlB,KADD;AAKXD,IAAAA;AALW,GAAb;AAQA,SAAOE,MAAP;AACD,CAXM","sourcesContent":["import { HoverProps } from '@react-aria/interactions';\nimport { useState } from 'react';\n\nexport const useHover = (_props: HoverProps, _ref?: any) => {\n const [isHovered, setHovered] = useState(false);\n let params = {\n hoverProps: {\n onHoverIn: () => setHovered(true),\n onHoverOut: () => setHovered(false),\n },\n isHovered,\n };\n\n return params;\n};\n"]}
@@ -14,7 +14,7 @@ var _utils = require("@react-native-aria/utils");
14
14
  const useHover = (props, ref) => {
15
15
  let params = (0, _interactions.useHover)(props);
16
16
  (0, _react.useEffect)(() => {
17
- (0, _utils.attachEventHandlersOnRef)(params.hoverProps, ref);
17
+ ref && ref.current && (0, _utils.attachEventHandlersOnRef)(params.hoverProps, ref);
18
18
  }, []);
19
19
  return params;
20
20
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["useHover.web.ts"],"names":["useHover","props","ref","params","hoverProps"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAEO,MAAMA,QAAQ,GAAG,CAACC,KAAD,EAAoBC,GAApB,KAAiC;AACvD,MAAIC,MAAM,GAAG,4BAAYF,KAAZ,CAAb;AACA,wBAAU,MAAM;AACd,yCAAyBE,MAAM,CAACC,UAAhC,EAA4CF,GAA5C;AACD,GAFD,EAEG,EAFH;AAIA,SAAOC,MAAP;AACD,CAPM","sourcesContent":["import { useHover as useHoverWeb, HoverProps } from '@react-aria/interactions';\nimport { useEffect } from 'react';\nimport { attachEventHandlersOnRef } from '@react-native-aria/utils';\n\nexport const useHover = (props: HoverProps, ref: any) => {\n let params = useHoverWeb(props);\n useEffect(() => {\n attachEventHandlersOnRef(params.hoverProps, ref);\n }, []);\n\n return params;\n};\n"]}
1
+ {"version":3,"sources":["useHover.web.ts"],"names":["useHover","props","ref","params","current","hoverProps"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAEO,MAAMA,QAAQ,GAAG,CAACC,KAAD,EAAoBC,GAApB,KAAkC;AACxD,MAAIC,MAAM,GAAG,4BAAYF,KAAZ,CAAb;AACA,wBAAU,MAAM;AACdC,IAAAA,GAAG,IAAIA,GAAG,CAACE,OAAX,IAAsB,qCAAyBD,MAAM,CAACE,UAAhC,EAA4CH,GAA5C,CAAtB;AACD,GAFD,EAEG,EAFH;AAIA,SAAOC,MAAP;AACD,CAPM","sourcesContent":["import { useHover as useHoverWeb, HoverProps } from '@react-aria/interactions';\nimport { useEffect } from 'react';\nimport { attachEventHandlersOnRef } from '@react-native-aria/utils';\n\nexport const useHover = (props: HoverProps, ref?: any) => {\n let params = useHoverWeb(props);\n useEffect(() => {\n ref && ref.current && attachEventHandlersOnRef(params.hoverProps, ref);\n }, []);\n\n return params;\n};\n"]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useIsPressProps = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ const useIsPressProps = () => {
11
+ const [isPressed, setIsPressed] = (0, _react.useState)(false);
12
+ return {
13
+ pressableProps: {
14
+ onPressIn: () => setIsPressed(true),
15
+ onPressOut: () => setIsPressed(false)
16
+ },
17
+ isPressed
18
+ };
19
+ };
20
+
21
+ exports.useIsPressProps = useIsPressProps;
22
+ //# sourceMappingURL=useIsPressProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useIsPressProps.ts"],"names":["useIsPressProps","isPressed","setIsPressed","pressableProps","onPressIn","onPressOut"],"mappings":";;;;;;;AAAA;;AAEO,MAAMA,eAAe,GAAG,MAAM;AACnC,QAAM,CAACC,SAAD,EAAYC,YAAZ,IAA4B,qBAAS,KAAT,CAAlC;AACA,SAAO;AACLC,IAAAA,cAAc,EAAE;AACdC,MAAAA,SAAS,EAAE,MAAMF,YAAY,CAAC,IAAD,CADf;AAEdG,MAAAA,UAAU,EAAE,MAAMH,YAAY,CAAC,KAAD;AAFhB,KADX;AAKLD,IAAAA;AALK,GAAP;AAOD,CATM","sourcesContent":["import { useState } from 'react';\n\nexport const useIsPressProps = () => {\n const [isPressed, setIsPressed] = useState(false);\n return {\n pressableProps: {\n onPressIn: () => setIsPressed(true),\n onPressOut: () => setIsPressed(false),\n },\n isPressed,\n };\n};\n"]}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useBackHandler = useBackHandler;
7
+ exports.useKeyboardDismissable = exports.keyboardDismissHandlerManager = void 0;
8
+
9
+ var _react = _interopRequireWildcard(require("react"));
10
+
11
+ var _reactNative = require("react-native");
12
+
13
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
14
+
15
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+
17
+ let keyboardDismissHandlers = [];
18
+ const keyboardDismissHandlerManager = {
19
+ push: handler => {
20
+ keyboardDismissHandlers.push(handler);
21
+ return () => {
22
+ keyboardDismissHandlers = keyboardDismissHandlers.filter(h => h !== handler);
23
+ };
24
+ },
25
+ length: () => keyboardDismissHandlers.length,
26
+ pop: () => {
27
+ return keyboardDismissHandlers.pop();
28
+ }
29
+ };
30
+ /**
31
+ * Handles attaching callback for Escape key listener on web and Back button listener on Android
32
+ */
33
+
34
+ exports.keyboardDismissHandlerManager = keyboardDismissHandlerManager;
35
+
36
+ const useKeyboardDismissable = ({
37
+ enabled,
38
+ callback
39
+ }) => {
40
+ _react.default.useEffect(() => {
41
+ let cleanupFn = () => {};
42
+
43
+ if (enabled) {
44
+ cleanupFn = keyboardDismissHandlerManager.push(callback);
45
+ } else {
46
+ cleanupFn();
47
+ }
48
+
49
+ return () => {
50
+ cleanupFn();
51
+ };
52
+ }, [enabled, callback]);
53
+
54
+ useBackHandler({
55
+ enabled,
56
+ callback
57
+ });
58
+ };
59
+
60
+ exports.useKeyboardDismissable = useKeyboardDismissable;
61
+
62
+ function useBackHandler({
63
+ enabled,
64
+ callback
65
+ }) {
66
+ (0, _react.useEffect)(() => {
67
+ let backHandler = () => {
68
+ callback();
69
+ return true;
70
+ };
71
+
72
+ if (enabled) {
73
+ _reactNative.BackHandler.addEventListener('hardwareBackPress', backHandler);
74
+ } else {
75
+ _reactNative.BackHandler.removeEventListener('hardwareBackPress', backHandler);
76
+ }
77
+
78
+ return () => _reactNative.BackHandler.removeEventListener('hardwareBackPress', backHandler);
79
+ }, [enabled, callback]);
80
+ }
81
+ //# sourceMappingURL=useKeyboardDismisssable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useKeyboardDismisssable.ts"],"names":["keyboardDismissHandlers","keyboardDismissHandlerManager","push","handler","filter","h","length","pop","useKeyboardDismissable","enabled","callback","React","useEffect","cleanupFn","useBackHandler","backHandler","BackHandler","addEventListener","removeEventListener"],"mappings":";;;;;;;;AAAA;;AAEA;;;;;;AAOA,IAAIA,uBAAyC,GAAG,EAAhD;AACO,MAAMC,6BAA6B,GAAG;AAC3CC,EAAAA,IAAI,EAAGC,OAAD,IAAwB;AAC5BH,IAAAA,uBAAuB,CAACE,IAAxB,CAA6BC,OAA7B;AACA,WAAO,MAAM;AACXH,MAAAA,uBAAuB,GAAGA,uBAAuB,CAACI,MAAxB,CACvBC,CAAD,IAAOA,CAAC,KAAKF,OADW,CAA1B;AAGD,KAJD;AAKD,GAR0C;AAS3CG,EAAAA,MAAM,EAAE,MAAMN,uBAAuB,CAACM,MATK;AAU3CC,EAAAA,GAAG,EAAE,MAAM;AACT,WAAOP,uBAAuB,CAACO,GAAxB,EAAP;AACD;AAZ0C,CAAtC;AAeP;AACA;AACA;;;;AACO,MAAMC,sBAAsB,GAAG,CAAC;AAAEC,EAAAA,OAAF;AAAWC,EAAAA;AAAX,CAAD,KAAoC;AACxEC,iBAAMC,SAAN,CAAgB,MAAM;AACpB,QAAIC,SAAS,GAAG,MAAM,CAAE,CAAxB;;AACA,QAAIJ,OAAJ,EAAa;AACXI,MAAAA,SAAS,GAAGZ,6BAA6B,CAACC,IAA9B,CAAmCQ,QAAnC,CAAZ;AACD,KAFD,MAEO;AACLG,MAAAA,SAAS;AACV;;AACD,WAAO,MAAM;AACXA,MAAAA,SAAS;AACV,KAFD;AAGD,GAVD,EAUG,CAACJ,OAAD,EAAUC,QAAV,CAVH;;AAYAI,EAAAA,cAAc,CAAC;AAAEL,IAAAA,OAAF;AAAWC,IAAAA;AAAX,GAAD,CAAd;AACD,CAdM;;;;AAgBA,SAASI,cAAT,CAAwB;AAAEL,EAAAA,OAAF;AAAWC,EAAAA;AAAX,CAAxB,EAAwD;AAC7D,wBAAU,MAAM;AACd,QAAIK,WAAW,GAAG,MAAM;AACtBL,MAAAA,QAAQ;AACR,aAAO,IAAP;AACD,KAHD;;AAIA,QAAID,OAAJ,EAAa;AACXO,+BAAYC,gBAAZ,CAA6B,mBAA7B,EAAkDF,WAAlD;AACD,KAFD,MAEO;AACLC,+BAAYE,mBAAZ,CAAgC,mBAAhC,EAAqDH,WAArD;AACD;;AACD,WAAO,MACLC,yBAAYE,mBAAZ,CAAgC,mBAAhC,EAAqDH,WAArD,CADF;AAED,GAZD,EAYG,CAACN,OAAD,EAAUC,QAAV,CAZH;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"]}
@@ -1,3 +1,5 @@
1
- export * from './useHover';
2
- export * from './usePress';
1
+ export { useHover } from './useHover';
2
+ export { usePress, PressEvents, PressHookProps, PressProps, PressResult } from './usePress';
3
+ export { useIsPressProps } from './useIsPressProps';
4
+ export { keyboardDismissHandlerManager, useKeyboardDismissable, useBackHandler } from './useKeyboardDismisssable';
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAd;AACA,cAAc,YAAd","sourcesContent":["export * from './useHover';\nexport * from './usePress';\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["useHover","usePress","PressEvents","PressHookProps","PressProps","PressResult","useIsPressProps","keyboardDismissHandlerManager","useKeyboardDismissable","useBackHandler"],"mappings":"AAAA,SAASA,QAAT,QAAyB,YAAzB;AACA,SACEC,QADF,EAEEC,WAFF,EAGEC,cAHF,EAIEC,UAJF,EAKEC,WALF,QAMO,YANP;AAOA,SAASC,eAAT,QAAgC,mBAAhC;AACA,SACEC,6BADF,EAEEC,sBAFF,EAGEC,cAHF,QAIO,2BAJP","sourcesContent":["export { useHover } from './useHover';\nexport {\n usePress,\n PressEvents,\n PressHookProps,\n PressProps,\n PressResult,\n} from './usePress';\nexport { useIsPressProps } from './useIsPressProps';\nexport {\n keyboardDismissHandlerManager,\n useKeyboardDismissable,\n useBackHandler,\n} from './useKeyboardDismisssable';\n"]}
@@ -1,3 +1,5 @@
1
- export { useHover } from "./useHover.web";
2
- export { usePress } from "./usePress";
1
+ export { useHover } from './useHover.web';
2
+ export { usePress } from './usePress';
3
+ export { useIsPressProps } from './useIsPressProps';
4
+ export { keyboardDismissHandlerManager, useKeyboardDismissable, useBackHandler } from './useKeyboardDismisssable';
3
5
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.web.ts"],"names":["useHover","usePress"],"mappings":"AAAA,SAASA,QAAT,QAAyB,gBAAzB;AACA,SAASC,QAAT,QAAyB,YAAzB","sourcesContent":["export { useHover } from \"./useHover.web\";\nexport { usePress } from \"./usePress\";\n"]}
1
+ {"version":3,"sources":["index.web.ts"],"names":["useHover","usePress","useIsPressProps","keyboardDismissHandlerManager","useKeyboardDismissable","useBackHandler"],"mappings":"AAAA,SAASA,QAAT,QAAyB,gBAAzB;AACA,SAASC,QAAT,QAAyB,YAAzB;AACA,SAASC,eAAT,QAAgC,mBAAhC;AACA,SACEC,6BADF,EAEEC,sBAFF,EAGEC,cAHF,QAIO,2BAJP","sourcesContent":["export { useHover } from './useHover.web';\nexport { usePress } from './usePress';\nexport { useIsPressProps } from './useIsPressProps';\nexport {\n keyboardDismissHandlerManager,\n useKeyboardDismissable,\n useBackHandler,\n} from './useKeyboardDismisssable';\n"]}
@@ -1,7 +1,12 @@
1
+ import { useState } from 'react';
1
2
  export const useHover = (_props, _ref) => {
3
+ const [isHovered, setHovered] = useState(false);
2
4
  let params = {
3
- hoverProps: {},
4
- isHovered: false
5
+ hoverProps: {
6
+ onHoverIn: () => setHovered(true),
7
+ onHoverOut: () => setHovered(false)
8
+ },
9
+ isHovered
5
10
  };
6
11
  return params;
7
12
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["useHover.ts"],"names":["useHover","_props","_ref","params","hoverProps","isHovered"],"mappings":"AAEA,OAAO,MAAMA,QAAQ,GAAG,CAACC,MAAD,EAAqBC,IAArB,KAAmC;AACzD,MAAIC,MAAM,GAAG;AACXC,IAAAA,UAAU,EAAE,EADD;AAEXC,IAAAA,SAAS,EAAE;AAFA,GAAb;AAKA,SAAOF,MAAP;AACD,CAPM","sourcesContent":["import { HoverProps } from '@react-aria/interactions';\n\nexport const useHover = (_props: HoverProps, _ref: any) => {\n let params = {\n hoverProps: {},\n isHovered: false,\n };\n\n return params;\n};\n"]}
1
+ {"version":3,"sources":["useHover.ts"],"names":["useState","useHover","_props","_ref","isHovered","setHovered","params","hoverProps","onHoverIn","onHoverOut"],"mappings":"AACA,SAASA,QAAT,QAAyB,OAAzB;AAEA,OAAO,MAAMC,QAAQ,GAAG,CAACC,MAAD,EAAqBC,IAArB,KAAoC;AAC1D,QAAM,CAACC,SAAD,EAAYC,UAAZ,IAA0BL,QAAQ,CAAC,KAAD,CAAxC;AACA,MAAIM,MAAM,GAAG;AACXC,IAAAA,UAAU,EAAE;AACVC,MAAAA,SAAS,EAAE,MAAMH,UAAU,CAAC,IAAD,CADjB;AAEVI,MAAAA,UAAU,EAAE,MAAMJ,UAAU,CAAC,KAAD;AAFlB,KADD;AAKXD,IAAAA;AALW,GAAb;AAQA,SAAOE,MAAP;AACD,CAXM","sourcesContent":["import { HoverProps } from '@react-aria/interactions';\nimport { useState } from 'react';\n\nexport const useHover = (_props: HoverProps, _ref?: any) => {\n const [isHovered, setHovered] = useState(false);\n let params = {\n hoverProps: {\n onHoverIn: () => setHovered(true),\n onHoverOut: () => setHovered(false),\n },\n isHovered,\n };\n\n return params;\n};\n"]}
@@ -4,7 +4,7 @@ import { attachEventHandlersOnRef } from '@react-native-aria/utils';
4
4
  export const useHover = (props, ref) => {
5
5
  let params = useHoverWeb(props);
6
6
  useEffect(() => {
7
- attachEventHandlersOnRef(params.hoverProps, ref);
7
+ ref && ref.current && attachEventHandlersOnRef(params.hoverProps, ref);
8
8
  }, []);
9
9
  return params;
10
10
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["useHover.web.ts"],"names":["useHover","useHoverWeb","useEffect","attachEventHandlersOnRef","props","ref","params","hoverProps"],"mappings":"AAAA,SAASA,QAAQ,IAAIC,WAArB,QAAoD,0BAApD;AACA,SAASC,SAAT,QAA0B,OAA1B;AACA,SAASC,wBAAT,QAAyC,0BAAzC;AAEA,OAAO,MAAMH,QAAQ,GAAG,CAACI,KAAD,EAAoBC,GAApB,KAAiC;AACvD,MAAIC,MAAM,GAAGL,WAAW,CAACG,KAAD,CAAxB;AACAF,EAAAA,SAAS,CAAC,MAAM;AACdC,IAAAA,wBAAwB,CAACG,MAAM,CAACC,UAAR,EAAoBF,GAApB,CAAxB;AACD,GAFQ,EAEN,EAFM,CAAT;AAIA,SAAOC,MAAP;AACD,CAPM","sourcesContent":["import { useHover as useHoverWeb, HoverProps } from '@react-aria/interactions';\nimport { useEffect } from 'react';\nimport { attachEventHandlersOnRef } from '@react-native-aria/utils';\n\nexport const useHover = (props: HoverProps, ref: any) => {\n let params = useHoverWeb(props);\n useEffect(() => {\n attachEventHandlersOnRef(params.hoverProps, ref);\n }, []);\n\n return params;\n};\n"]}
1
+ {"version":3,"sources":["useHover.web.ts"],"names":["useHover","useHoverWeb","useEffect","attachEventHandlersOnRef","props","ref","params","current","hoverProps"],"mappings":"AAAA,SAASA,QAAQ,IAAIC,WAArB,QAAoD,0BAApD;AACA,SAASC,SAAT,QAA0B,OAA1B;AACA,SAASC,wBAAT,QAAyC,0BAAzC;AAEA,OAAO,MAAMH,QAAQ,GAAG,CAACI,KAAD,EAAoBC,GAApB,KAAkC;AACxD,MAAIC,MAAM,GAAGL,WAAW,CAACG,KAAD,CAAxB;AACAF,EAAAA,SAAS,CAAC,MAAM;AACdG,IAAAA,GAAG,IAAIA,GAAG,CAACE,OAAX,IAAsBJ,wBAAwB,CAACG,MAAM,CAACE,UAAR,EAAoBH,GAApB,CAA9C;AACD,GAFQ,EAEN,EAFM,CAAT;AAIA,SAAOC,MAAP;AACD,CAPM","sourcesContent":["import { useHover as useHoverWeb, HoverProps } from '@react-aria/interactions';\nimport { useEffect } from 'react';\nimport { attachEventHandlersOnRef } from '@react-native-aria/utils';\n\nexport const useHover = (props: HoverProps, ref?: any) => {\n let params = useHoverWeb(props);\n useEffect(() => {\n ref && ref.current && attachEventHandlersOnRef(params.hoverProps, ref);\n }, []);\n\n return params;\n};\n"]}
@@ -0,0 +1,12 @@
1
+ import { useState } from 'react';
2
+ export const useIsPressProps = () => {
3
+ const [isPressed, setIsPressed] = useState(false);
4
+ return {
5
+ pressableProps: {
6
+ onPressIn: () => setIsPressed(true),
7
+ onPressOut: () => setIsPressed(false)
8
+ },
9
+ isPressed
10
+ };
11
+ };
12
+ //# sourceMappingURL=useIsPressProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useIsPressProps.ts"],"names":["useState","useIsPressProps","isPressed","setIsPressed","pressableProps","onPressIn","onPressOut"],"mappings":"AAAA,SAASA,QAAT,QAAyB,OAAzB;AAEA,OAAO,MAAMC,eAAe,GAAG,MAAM;AACnC,QAAM,CAACC,SAAD,EAAYC,YAAZ,IAA4BH,QAAQ,CAAC,KAAD,CAA1C;AACA,SAAO;AACLI,IAAAA,cAAc,EAAE;AACdC,MAAAA,SAAS,EAAE,MAAMF,YAAY,CAAC,IAAD,CADf;AAEdG,MAAAA,UAAU,EAAE,MAAMH,YAAY,CAAC,KAAD;AAFhB,KADX;AAKLD,IAAAA;AALK,GAAP;AAOD,CATM","sourcesContent":["import { useState } from 'react';\n\nexport const useIsPressProps = () => {\n const [isPressed, setIsPressed] = useState(false);\n return {\n pressableProps: {\n onPressIn: () => setIsPressed(true),\n onPressOut: () => setIsPressed(false),\n },\n isPressed,\n };\n};\n"]}
@@ -0,0 +1,62 @@
1
+ import React from 'react';
2
+ import { useEffect } from 'react';
3
+ import { BackHandler } from 'react-native';
4
+ let keyboardDismissHandlers = [];
5
+ export const keyboardDismissHandlerManager = {
6
+ push: handler => {
7
+ keyboardDismissHandlers.push(handler);
8
+ return () => {
9
+ keyboardDismissHandlers = keyboardDismissHandlers.filter(h => h !== handler);
10
+ };
11
+ },
12
+ length: () => keyboardDismissHandlers.length,
13
+ pop: () => {
14
+ return keyboardDismissHandlers.pop();
15
+ }
16
+ };
17
+ /**
18
+ * Handles attaching callback for Escape key listener on web and Back button listener on Android
19
+ */
20
+
21
+ export const useKeyboardDismissable = ({
22
+ enabled,
23
+ callback
24
+ }) => {
25
+ React.useEffect(() => {
26
+ let cleanupFn = () => {};
27
+
28
+ if (enabled) {
29
+ cleanupFn = keyboardDismissHandlerManager.push(callback);
30
+ } else {
31
+ cleanupFn();
32
+ }
33
+
34
+ return () => {
35
+ cleanupFn();
36
+ };
37
+ }, [enabled, callback]);
38
+ useBackHandler({
39
+ enabled,
40
+ callback
41
+ });
42
+ };
43
+ export function useBackHandler({
44
+ enabled,
45
+ callback
46
+ }) {
47
+ useEffect(() => {
48
+ let backHandler = () => {
49
+ callback();
50
+ return true;
51
+ };
52
+
53
+ if (enabled) {
54
+ BackHandler.addEventListener('hardwareBackPress', backHandler);
55
+ } else {
56
+ BackHandler.removeEventListener('hardwareBackPress', backHandler);
57
+ }
58
+
59
+ return () => BackHandler.removeEventListener('hardwareBackPress', backHandler);
60
+ }, [enabled, callback]);
61
+ }
62
+ //# sourceMappingURL=useKeyboardDismisssable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useKeyboardDismisssable.ts"],"names":["React","useEffect","BackHandler","keyboardDismissHandlers","keyboardDismissHandlerManager","push","handler","filter","h","length","pop","useKeyboardDismissable","enabled","callback","cleanupFn","useBackHandler","backHandler","addEventListener","removeEventListener"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,SAAT,QAA0B,OAA1B;AACA,SAASC,WAAT,QAA4B,cAA5B;AAOA,IAAIC,uBAAyC,GAAG,EAAhD;AACA,OAAO,MAAMC,6BAA6B,GAAG;AAC3CC,EAAAA,IAAI,EAAGC,OAAD,IAAwB;AAC5BH,IAAAA,uBAAuB,CAACE,IAAxB,CAA6BC,OAA7B;AACA,WAAO,MAAM;AACXH,MAAAA,uBAAuB,GAAGA,uBAAuB,CAACI,MAAxB,CACvBC,CAAD,IAAOA,CAAC,KAAKF,OADW,CAA1B;AAGD,KAJD;AAKD,GAR0C;AAS3CG,EAAAA,MAAM,EAAE,MAAMN,uBAAuB,CAACM,MATK;AAU3CC,EAAAA,GAAG,EAAE,MAAM;AACT,WAAOP,uBAAuB,CAACO,GAAxB,EAAP;AACD;AAZ0C,CAAtC;AAeP;AACA;AACA;;AACA,OAAO,MAAMC,sBAAsB,GAAG,CAAC;AAAEC,EAAAA,OAAF;AAAWC,EAAAA;AAAX,CAAD,KAAoC;AACxEb,EAAAA,KAAK,CAACC,SAAN,CAAgB,MAAM;AACpB,QAAIa,SAAS,GAAG,MAAM,CAAE,CAAxB;;AACA,QAAIF,OAAJ,EAAa;AACXE,MAAAA,SAAS,GAAGV,6BAA6B,CAACC,IAA9B,CAAmCQ,QAAnC,CAAZ;AACD,KAFD,MAEO;AACLC,MAAAA,SAAS;AACV;;AACD,WAAO,MAAM;AACXA,MAAAA,SAAS;AACV,KAFD;AAGD,GAVD,EAUG,CAACF,OAAD,EAAUC,QAAV,CAVH;AAYAE,EAAAA,cAAc,CAAC;AAAEH,IAAAA,OAAF;AAAWC,IAAAA;AAAX,GAAD,CAAd;AACD,CAdM;AAgBP,OAAO,SAASE,cAAT,CAAwB;AAAEH,EAAAA,OAAF;AAAWC,EAAAA;AAAX,CAAxB,EAAwD;AAC7DZ,EAAAA,SAAS,CAAC,MAAM;AACd,QAAIe,WAAW,GAAG,MAAM;AACtBH,MAAAA,QAAQ;AACR,aAAO,IAAP;AACD,KAHD;;AAIA,QAAID,OAAJ,EAAa;AACXV,MAAAA,WAAW,CAACe,gBAAZ,CAA6B,mBAA7B,EAAkDD,WAAlD;AACD,KAFD,MAEO;AACLd,MAAAA,WAAW,CAACgB,mBAAZ,CAAgC,mBAAhC,EAAqDF,WAArD;AACD;;AACD,WAAO,MACLd,WAAW,CAACgB,mBAAZ,CAAgC,mBAAhC,EAAqDF,WAArD,CADF;AAED,GAZQ,EAYN,CAACJ,OAAD,EAAUC,QAAV,CAZM,CAAT;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"]}
@@ -1,2 +1,4 @@
1
- export * from './useHover';
2
- export * from './usePress';
1
+ export { useHover } from './useHover';
2
+ export { usePress, PressEvents, PressHookProps, PressProps, PressResult, } from './usePress';
3
+ export { useIsPressProps } from './useIsPressProps';
4
+ export { keyboardDismissHandlerManager, useKeyboardDismissable, useBackHandler, } from './useKeyboardDismisssable';
@@ -1,2 +1,4 @@
1
- export { useHover } from "./useHover.web";
2
- export { usePress } from "./usePress";
1
+ export { useHover } from './useHover.web';
2
+ export { usePress } from './usePress';
3
+ export { useIsPressProps } from './useIsPressProps';
4
+ export { keyboardDismissHandlerManager, useKeyboardDismissable, useBackHandler, } from './useKeyboardDismisssable';
@@ -1,5 +1,8 @@
1
1
  import { HoverProps } from '@react-aria/interactions';
2
- export declare const useHover: (_props: HoverProps, _ref: any) => {
3
- hoverProps: {};
2
+ export declare const useHover: (_props: HoverProps, _ref?: any) => {
3
+ hoverProps: {
4
+ onHoverIn: () => void;
5
+ onHoverOut: () => void;
6
+ };
4
7
  isHovered: boolean;
5
8
  };
@@ -1,2 +1,2 @@
1
1
  import { HoverProps } from '@react-aria/interactions';
2
- export declare const useHover: (props: HoverProps, ref: any) => import("@react-aria/interactions").HoverResult;
2
+ export declare const useHover: (props: HoverProps, ref?: any) => import("@react-aria/interactions").HoverResult;
@@ -0,0 +1,7 @@
1
+ export declare const useIsPressProps: () => {
2
+ pressableProps: {
3
+ onPressIn: () => void;
4
+ onPressOut: () => void;
5
+ };
6
+ isPressed: boolean;
7
+ };
@@ -0,0 +1,15 @@
1
+ declare type IParams = {
2
+ enabled?: boolean;
3
+ callback: () => any;
4
+ };
5
+ export declare const keyboardDismissHandlerManager: {
6
+ push: (handler: () => any) => () => void;
7
+ length: () => number;
8
+ pop: () => () => any;
9
+ };
10
+ /**
11
+ * Handles attaching callback for Escape key listener on web and Back button listener on Android
12
+ */
13
+ export declare const useKeyboardDismissable: ({ enabled, callback }: IParams) => void;
14
+ export declare function useBackHandler({ enabled, callback }: IParams): void;
15
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-native-aria/interactions",
3
- "version": "0.2.8",
3
+ "version": "0.2.10-alpha.0",
4
4
  "description": "mono repo setup with bob",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/src/index.ts CHANGED
@@ -1,2 +1,14 @@
1
- export * from './useHover';
2
- export * from './usePress';
1
+ export { useHover } from './useHover';
2
+ export {
3
+ usePress,
4
+ PressEvents,
5
+ PressHookProps,
6
+ PressProps,
7
+ PressResult,
8
+ } from './usePress';
9
+ export { useIsPressProps } from './useIsPressProps';
10
+ export {
11
+ keyboardDismissHandlerManager,
12
+ useKeyboardDismissable,
13
+ useBackHandler,
14
+ } from './useKeyboardDismisssable';
package/src/index.web.ts CHANGED
@@ -1,2 +1,8 @@
1
- export { useHover } from "./useHover.web";
2
- export { usePress } from "./usePress";
1
+ export { useHover } from './useHover.web';
2
+ export { usePress } from './usePress';
3
+ export { useIsPressProps } from './useIsPressProps';
4
+ export {
5
+ keyboardDismissHandlerManager,
6
+ useKeyboardDismissable,
7
+ useBackHandler,
8
+ } from './useKeyboardDismisssable';
package/src/useHover.ts CHANGED
@@ -1,9 +1,14 @@
1
1
  import { HoverProps } from '@react-aria/interactions';
2
+ import { useState } from 'react';
2
3
 
3
- export const useHover = (_props: HoverProps, _ref: any) => {
4
+ export const useHover = (_props: HoverProps, _ref?: any) => {
5
+ const [isHovered, setHovered] = useState(false);
4
6
  let params = {
5
- hoverProps: {},
6
- isHovered: false,
7
+ hoverProps: {
8
+ onHoverIn: () => setHovered(true),
9
+ onHoverOut: () => setHovered(false),
10
+ },
11
+ isHovered,
7
12
  };
8
13
 
9
14
  return params;
@@ -2,10 +2,10 @@ import { useHover as useHoverWeb, HoverProps } from '@react-aria/interactions';
2
2
  import { useEffect } from 'react';
3
3
  import { attachEventHandlersOnRef } from '@react-native-aria/utils';
4
4
 
5
- export const useHover = (props: HoverProps, ref: any) => {
5
+ export const useHover = (props: HoverProps, ref?: any) => {
6
6
  let params = useHoverWeb(props);
7
7
  useEffect(() => {
8
- attachEventHandlersOnRef(params.hoverProps, ref);
8
+ ref && ref.current && attachEventHandlersOnRef(params.hoverProps, ref);
9
9
  }, []);
10
10
 
11
11
  return params;
@@ -0,0 +1,12 @@
1
+ import { useState } from 'react';
2
+
3
+ export const useIsPressProps = () => {
4
+ const [isPressed, setIsPressed] = useState(false);
5
+ return {
6
+ pressableProps: {
7
+ onPressIn: () => setIsPressed(true),
8
+ onPressOut: () => setIsPressed(false),
9
+ },
10
+ isPressed,
11
+ };
12
+ };
@@ -0,0 +1,59 @@
1
+ import React from 'react';
2
+ import { useEffect } from 'react';
3
+ import { BackHandler } from 'react-native';
4
+
5
+ type IParams = {
6
+ enabled?: boolean;
7
+ callback: () => any;
8
+ };
9
+
10
+ let keyboardDismissHandlers: Array<() => any> = [];
11
+ export const keyboardDismissHandlerManager = {
12
+ push: (handler: () => any) => {
13
+ keyboardDismissHandlers.push(handler);
14
+ return () => {
15
+ keyboardDismissHandlers = keyboardDismissHandlers.filter(
16
+ (h) => h !== handler
17
+ );
18
+ };
19
+ },
20
+ length: () => keyboardDismissHandlers.length,
21
+ pop: () => {
22
+ return keyboardDismissHandlers.pop();
23
+ },
24
+ };
25
+
26
+ /**
27
+ * Handles attaching callback for Escape key listener on web and Back button listener on Android
28
+ */
29
+ export const useKeyboardDismissable = ({ enabled, callback }: IParams) => {
30
+ React.useEffect(() => {
31
+ let cleanupFn = () => {};
32
+ if (enabled) {
33
+ cleanupFn = keyboardDismissHandlerManager.push(callback);
34
+ } else {
35
+ cleanupFn();
36
+ }
37
+ return () => {
38
+ cleanupFn();
39
+ };
40
+ }, [enabled, callback]);
41
+
42
+ useBackHandler({ enabled, callback });
43
+ };
44
+
45
+ export function useBackHandler({ enabled, callback }: IParams) {
46
+ useEffect(() => {
47
+ let backHandler = () => {
48
+ callback();
49
+ return true;
50
+ };
51
+ if (enabled) {
52
+ BackHandler.addEventListener('hardwareBackPress', backHandler);
53
+ } else {
54
+ BackHandler.removeEventListener('hardwareBackPress', backHandler);
55
+ }
56
+ return () =>
57
+ BackHandler.removeEventListener('hardwareBackPress', backHandler);
58
+ }, [enabled, callback]);
59
+ }