UNPKG

1.71 kBTypeScriptView Raw
1import * as React from 'react';
2import { Keyboard, NativeEventSubscription, Platform } from 'react-native';
3
4type Props = {
5 onShow: () => void;
6 onHide: () => void;
7};
8export default function useIsKeyboardShown({ onShow, onHide }: Props) {
9 React.useEffect(() => {
10 let willShowSubscription: NativeEventSubscription | undefined;
11 let willHideSubscription: NativeEventSubscription | undefined;
12 let didShowSubscription: NativeEventSubscription | undefined;
13 let didHideSubscription: NativeEventSubscription | undefined;
14
15 if (Platform.OS === 'ios') {
16 willShowSubscription = Keyboard.addListener('keyboardWillShow', onShow);
17 willHideSubscription = Keyboard.addListener('keyboardWillHide', onHide);
18 } else {
19 didShowSubscription = Keyboard.addListener('keyboardDidShow', onShow);
20 didHideSubscription = Keyboard.addListener('keyboardDidHide', onHide);
21 }
22
23 return () => {
24 if (Platform.OS === 'ios') {
25 if (willShowSubscription?.remove) {
26 willShowSubscription.remove();
27 } else {
28 Keyboard.removeListener('keyboardWillShow', onShow);
29 }
30
31 if (willHideSubscription?.remove) {
32 willHideSubscription.remove();
33 } else {
34 Keyboard.removeListener('keyboardWillHide', onHide);
35 }
36 } else {
37 if (didShowSubscription?.remove) {
38 didShowSubscription.remove();
39 } else {
40 Keyboard.removeListener('keyboardDidShow', onShow);
41 }
42
43 if (didHideSubscription?.remove) {
44 didHideSubscription.remove();
45 } else {
46 Keyboard.removeListener('keyboardDidHide', onHide);
47 }
48 }
49 };
50 }, [onHide, onShow]);
51}