@gluestack-ui/hooks
Version:
Provides hooks used in gluestack-ui
43 lines (38 loc) • 1.04 kB
text/typescript
import React from 'react';
import { useBackHandler } from '../use-back-handler';
type IParams = {
enabled?: boolean;
callback: () => any;
};
let keyboardDismissHandlers: Array<() => any> = [];
export const keyboardDismissHandlerManager = {
push: (handler: () => any) => {
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 }: IParams) => {
React.useEffect(() => {
let cleanupFn = () => {};
if (enabled) {
cleanupFn = keyboardDismissHandlerManager.push(callback);
} else {
cleanupFn();
}
return () => {
cleanupFn();
};
}, [enabled, callback]);
useBackHandler({ enabled, callback });
};