mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import {interpolate, useAnimatedStyle} from 'react-native-reanimated' 2 3import {useMinimalShellMode} from '#/state/shell/minimal-mode' 4import {useShellLayout} from '#/state/shell/shell-layout' 5 6// Keep these separated so that we only pay for useAnimatedStyle that gets used. 7 8export function useMinimalShellHeaderTransform() { 9 const mode = useMinimalShellMode() 10 const {headerHeight} = useShellLayout() 11 12 const headerTransform = useAnimatedStyle(() => { 13 return { 14 pointerEvents: mode.value === 0 ? 'auto' : 'none', 15 opacity: Math.pow(1 - mode.value, 2), 16 transform: [ 17 { 18 translateY: interpolate(mode.value, [0, 1], [0, -headerHeight.value]), 19 }, 20 ], 21 } 22 }) 23 24 return headerTransform 25} 26 27export function useMinimalShellFooterTransform() { 28 const mode = useMinimalShellMode() 29 const {footerHeight} = useShellLayout() 30 31 const footerTransform = useAnimatedStyle(() => { 32 return { 33 pointerEvents: mode.value === 0 ? 'auto' : 'none', 34 opacity: Math.pow(1 - mode.value, 2), 35 transform: [ 36 { 37 translateY: interpolate(mode.value, [0, 1], [0, footerHeight.value]), 38 }, 39 ], 40 } 41 }) 42 return footerTransform 43} 44 45export function useMinimalShellFabTransform() { 46 const mode = useMinimalShellMode() 47 48 const fabTransform = useAnimatedStyle(() => { 49 return { 50 transform: [ 51 { 52 translateY: interpolate(mode.value, [0, 1], [-44, 0]), 53 }, 54 ], 55 } 56 }) 57 return fabTransform 58}