@gluestack-ui/hooks
Version:
Provides hooks used in gluestack-ui
34 lines (33 loc) • 1.01 kB
JavaScript
import React from 'react';
import { useBackHandler } from '../use-back-handler';
let keyboardDismissHandlers = [];
export const keyboardDismissHandlerManager = {
push: (handler) => {
keyboardDismissHandlers.push(handler);
return () => {
keyboardDismissHandlers = keyboardDismissHandlers.filter((h) => h !== handler);
};
},
length: () => keyboardDismissHandlers.length,
pop: () => {
return keyboardDismissHandlers.pop();
},
};
/**
* Handles attaching callback for Escape key listener on web and Back button listener on Android
*/
export const useKeyboardDismissable = ({ enabled, callback }) => {
React.useEffect(() => {
let cleanupFn = () => { };
if (enabled) {
cleanupFn = keyboardDismissHandlerManager.push(callback);
}
else {
cleanupFn();
}
return () => {
cleanupFn();
};
}, [enabled, callback]);
useBackHandler({ enabled, callback });
};