@kietpt2003/react-native-core-ui
Version:
React Native Core UI components by KietPT
37 lines (36 loc) • 1.55 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import React from "react";
import { useSharedValue } from "react-native-reanimated";
const NestableScrollContainerContext = React.createContext(undefined);
function useSetupNestableScrollContextValue({ forwardedRef, }) {
const [outerScrollEnabled, setOuterScrollEnabled] = React.useState(true);
const scrollViewSize = useSharedValue(0);
const scrollableRefInner = React.useRef(null);
const scrollableRef = forwardedRef || scrollableRefInner;
const outerScrollOffset = useSharedValue(0);
const containerSize = useSharedValue(0);
const contextVal = React.useMemo(() => ({
outerScrollEnabled,
setOuterScrollEnabled,
outerScrollOffset,
scrollViewSize,
scrollableRef,
containerSize,
}), [outerScrollEnabled]);
return contextVal;
}
export function NestableScrollContainerProvider({ children, forwardedRef, }) {
const contextVal = useSetupNestableScrollContextValue({ forwardedRef });
return (_jsx(NestableScrollContainerContext.Provider, { value: contextVal, children: children }));
}
export function useNestableScrollContainerContext() {
const value = React.useContext(NestableScrollContainerContext);
return value;
}
export function useSafeNestableScrollContainerContext() {
const value = useNestableScrollContainerContext();
if (!value) {
throw new Error("useSafeNestableScrollContainerContext must be called within a NestableScrollContainerContext.Provider");
}
return value;
}