mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
at verify-code 1.7 kB view raw
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 return { 14 pointerEvents: headerMode.value === 0 ? 'auto' : 'none', 15 opacity: Math.pow(1 - headerMode.value, 2), 16 transform: [ 17 { 18 translateY: interpolate( 19 headerMode.value, 20 [0, 1], 21 [0, -headerHeight.value], 22 ), 23 }, 24 ], 25 } 26 }) 27 28 return headerTransform 29} 30 31export function useMinimalShellFooterTransform() { 32 const {footerMode} = useMinimalShellMode() 33 const {footerHeight} = useShellLayout() 34 35 const footerTransform = useAnimatedStyle(() => { 36 return { 37 pointerEvents: footerMode.value === 0 ? 'auto' : 'none', 38 opacity: Math.pow(1 - footerMode.value, 2), 39 transform: [ 40 { 41 translateY: interpolate( 42 footerMode.value, 43 [0, 1], 44 [0, footerHeight.value], 45 ), 46 }, 47 ], 48 } 49 }) 50 51 return footerTransform 52} 53 54export function useMinimalShellFabTransform() { 55 const {footerMode} = useMinimalShellMode() 56 57 const fabTransform = useAnimatedStyle(() => { 58 return { 59 transform: [ 60 { 61 translateY: interpolate(footerMode.value, [0, 1], [-44, 0]), 62 }, 63 ], 64 } 65 }) 66 return fabTransform 67}