import React from 'react' import {SharedValue, useSharedValue, withSpring} from 'react-native-reanimated' type StateContext = { headerMode: SharedValue footerMode: SharedValue } type SetContext = (v: boolean) => void const stateContext = React.createContext({ headerMode: { value: 0, addListener() {}, removeListener() {}, modify() {}, get() { return 0 }, set() {}, }, footerMode: { value: 0, addListener() {}, removeListener() {}, modify() {}, get() { return 0 }, set() {}, }, }) const setContext = React.createContext((_: boolean) => {}) export function Provider({children}: React.PropsWithChildren<{}>) { const headerMode = useSharedValue(0) const footerMode = useSharedValue(0) const setMode = React.useCallback( (v: boolean) => { 'worklet' headerMode.set(() => withSpring(v ? 1 : 0, { overshootClamping: true, }), ) footerMode.set(() => withSpring(v ? 1 : 0, { overshootClamping: true, }), ) }, [headerMode, footerMode], ) const value = React.useMemo( () => ({ headerMode, footerMode, }), [headerMode, footerMode], ) return ( {children} ) } export function useMinimalShellMode() { return React.useContext(stateContext) } export function useSetMinimalShellMode() { return React.useContext(setContext) }