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 {headerMode} = useMinimalShellMode() 10 const {headerHeight} = useShellLayout() 11 12 const headerTransform = useAnimatedStyle(() => { 13 const headerModeValue = headerMode.get() 14 return { 15 pointerEvents: headerModeValue === 0 ? 'auto' : 'none', 16 opacity: Math.pow(1 - headerModeValue, 2), 17 transform: [ 18 { 19 translateY: interpolate( 20 headerModeValue, 21 [0, 1], 22 [0, -headerHeight.get()], 23 ), 24 }, 25 ], 26 } 27 }) 28 29 return headerTransform 30} 31 32export function useMinimalShellFooterTransform() { 33 const {footerMode} = useMinimalShellMode() 34 const {footerHeight} = useShellLayout() 35 36 const footerTransform = useAnimatedStyle(() => { 37 const footerModeValue = footerMode.get() 38 return { 39 pointerEvents: footerModeValue === 0 ? 'auto' : 'none', 40 opacity: Math.pow(1 - footerModeValue, 2), 41 transform: [ 42 { 43 translateY: interpolate( 44 footerModeValue, 45 [0, 1], 46 [0, footerHeight.get()], 47 ), 48 }, 49 ], 50 } 51 }) 52 53 return footerTransform 54} 55 56export function useMinimalShellFabTransform() { 57 const {footerMode} = useMinimalShellMode() 58 59 const fabTransform = useAnimatedStyle(() => { 60 return { 61 transform: [ 62 { 63 translateY: interpolate(footerMode.get(), [0, 1], [-44, 0]), 64 }, 65 ], 66 } 67 }) 68 return fabTransform 69}