UNPKG

@gluestack-ui/hooks

Version:
43 lines (38 loc) 1.04 kB
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 }); };