UNPKG

@attio/react-native-bottom-sheet-toolbox

Version:
73 lines (70 loc) 2.32 kB
"use strict"; import { nanoid } from "nanoid/non-secure"; import * as React from "react"; import { useDerivedValue, useSharedValue } from "react-native-reanimated"; import { jsx as _jsx } from "react/jsx-runtime"; const InternalKeyboardContext = /*#__PURE__*/React.createContext(null); function useInternalKeyboardContext() { const context = React.useContext(InternalKeyboardContext); if (!context) { throw new Error("InternalKeyboardProvider not found."); } return context; } /** * The internal provider which maintains the additional keyboard height state. */ export function InternalKeyboardProvider({ children }) { const [additionalKeyboardHeights, setAdditionalKeyboardHeights] = React.useState({}); const value = React.useMemo(() => ({ additionalKeyboardHeights, setAdditionalKeyboardHeights }), [additionalKeyboardHeights]); return /*#__PURE__*/_jsx(InternalKeyboardContext.Provider, { value: value, children: children }); } /** * Returns a shared value representing the total of all additional keyboard * heights. */ export function useAdditionalKeyboardHeightTotal() { const { additionalKeyboardHeights } = useInternalKeyboardContext(); return useDerivedValue(() => Object.values(additionalKeyboardHeights).reduce((accumulator, value) => accumulator + value.get(), 0), [additionalKeyboardHeights]); } /** * Returns a shared value enabling you to attach an artificial offset to the * internal keyboard height. * * This is useful when implementing features such as keyboard toolbars. */ export function useAdditionalKeyboardHeight(id = nanoid()) { const { additionalKeyboardHeights, setAdditionalKeyboardHeights } = useInternalKeyboardContext(); const newHeightSharedValue = useSharedValue(0); const heightSharedValue = additionalKeyboardHeights[id] ?? newHeightSharedValue; React.useEffect(() => { setAdditionalKeyboardHeights(previous => ({ ...previous, [id]: heightSharedValue })); return () => { setAdditionalKeyboardHeights(previous => { const next = { ...previous }; delete next[id]; return next; }); }; }, [heightSharedValue, id, setAdditionalKeyboardHeights]); return heightSharedValue; } //# sourceMappingURL=internal-keyboard-context.js.map