diff options
Diffstat (limited to 'src/state/shell/minimal-mode.tsx')
-rw-r--r-- | src/state/shell/minimal-mode.tsx | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/src/state/shell/minimal-mode.tsx b/src/state/shell/minimal-mode.tsx index 69ce13062..9230339dd 100644 --- a/src/state/shell/minimal-mode.tsx +++ b/src/state/shell/minimal-mode.tsx @@ -6,32 +6,55 @@ import { withSpring, } from 'react-native-reanimated' -type StateContext = SharedValue<number> +type StateContext = { + headerMode: SharedValue<number> + footerMode: SharedValue<number> +} type SetContext = (v: boolean) => void const stateContext = React.createContext<StateContext>({ - value: 0, - addListener() {}, - removeListener() {}, - modify() {}, + headerMode: { + value: 0, + addListener() {}, + removeListener() {}, + modify() {}, + }, + footerMode: { + value: 0, + addListener() {}, + removeListener() {}, + modify() {}, + }, }) const setContext = React.createContext<SetContext>((_: boolean) => {}) export function Provider({children}: React.PropsWithChildren<{}>) { - const mode = useSharedValue(0) + const headerMode = useSharedValue(0) + const footerMode = useSharedValue(0) const setMode = React.useCallback( (v: boolean) => { 'worklet' // Cancel any existing animation - cancelAnimation(mode) - mode.value = withSpring(v ? 1 : 0, { + cancelAnimation(headerMode) + headerMode.value = withSpring(v ? 1 : 0, { + overshootClamping: true, + }) + cancelAnimation(footerMode) + footerMode.value = withSpring(v ? 1 : 0, { overshootClamping: true, }) }, - [mode], + [headerMode, footerMode], + ) + const value = React.useMemo( + () => ({ + headerMode, + footerMode, + }), + [headerMode, footerMode], ) return ( - <stateContext.Provider value={mode}> + <stateContext.Provider value={value}> <setContext.Provider value={setMode}>{children}</setContext.Provider> </stateContext.Provider> ) |