@attio/react-native-bottom-sheet-toolbox
Version:
56 lines (54 loc) • 2.21 kB
JavaScript
;
import { Keyboard } from "react-native";
import { runOnJS, useAnimatedReaction } from "react-native-reanimated";
import { useBottomSheetToolboxInternalContext, useKeyboardHeightSharedValue, useKeyboardProgressSharedValue } from "../context";
import { normalizeSheetPosition } from "../utils";
import { useBottomSheetDirection } from "./use-bottom-sheet-direction";
const dismiss = () => {
Keyboard.dismiss();
};
/**
* Dismiss the keyboard if the bottom sheet moves downwardly beneath the keyboard.
*/
export function useBottomSheetKeyboardDismiss(extraBuffer) {
const {
isReadySharedValue,
currentPositionSharedValue,
childrenHeightSharedValue,
wrapperHeightSharedValue,
footerHeightSharedValue
} = useBottomSheetToolboxInternalContext();
const keyboardHeightSharedValue = useKeyboardHeightSharedValue();
const keyboardProgressSharedValue = useKeyboardProgressSharedValue();
const directionSharedValue = useBottomSheetDirection();
useAnimatedReaction(() => {
if (!isReadySharedValue.get() || keyboardProgressSharedValue.get() !== 1) {
return null;
}
const normalizedBuffer = extraBuffer ? normalizeSheetPosition({
sheetPosition: extraBuffer,
childrenHeightSharedValue,
wrapperHeightSharedValue,
footerHeightSharedValue
}) : 0;
if (normalizedBuffer === null) return null;
const keyboardDismissTriggerHeight = keyboardHeightSharedValue.get() + normalizedBuffer;
return {
keyboardDismissTriggerHeight,
currentPosition: currentPositionSharedValue.get(),
direction: directionSharedValue.get()
};
}, result => {
if (result === null) return;
const {
keyboardDismissTriggerHeight,
currentPosition,
direction
} = result;
const shouldDismiss = currentPosition < keyboardDismissTriggerHeight && direction < 0;
if (shouldDismiss) {
runOnJS(dismiss)();
}
}, [extraBuffer, isReadySharedValue, currentPositionSharedValue, childrenHeightSharedValue, wrapperHeightSharedValue, directionSharedValue, keyboardHeightSharedValue, keyboardProgressSharedValue, footerHeightSharedValue]);
}
//# sourceMappingURL=use-bottom-sheet-keyboard-dismiss.js.map