UNPKG

react-native-keyboard-controller

Version:

Keyboard manager which works in identical way on both iOS and Android

62 lines (52 loc) 1.46 kB
import { useSharedValue } from "react-native-reanimated"; import { useKeyboardHandler } from "./hooks"; export const KeyboardState = { UNKNOWN: 0, OPENING: 1, OPEN: 2, CLOSING: 3, CLOSED: 4, }; /** * A compatibility layer for migration from https://docs.swmansion.com/react-native-reanimated/docs/device/useAnimatedKeyboard. * * @returns An object containing `height` and `state` properties represented as `SharedValue<number>`. * @example * ```ts * import { useAnimatedKeyboard, useAnimatedStyle } from 'react-native-keyboard-controller'; * * export default function App() { * const keyboard = useAnimatedKeyboard(); * * const animatedStyles = useAnimatedStyle(() => ({ * transform: [{ translateY: -keyboard.height.value }], * })); * } */ export const useAnimatedKeyboard = () => { const height = useSharedValue(0); const state = useSharedValue(KeyboardState.UNKNOWN); useKeyboardHandler( { onStart: (e) => { "worklet"; state.set(e.height > 0 ? KeyboardState.OPENING : KeyboardState.CLOSING); }, onMove: (e) => { "worklet"; height.set(e.height); }, onInteractive: (e) => { "worklet"; height.set(e.height); }, onEnd: (e) => { "worklet"; state.set(e.height > 0 ? KeyboardState.OPEN : KeyboardState.CLOSED); height.set(e.height); }, }, [], ); return { height, state }; };