diff options
Diffstat (limited to 'src/lib/hooks/useMinimalShellTransform.ts')
-rw-r--r-- | src/lib/hooks/useMinimalShellTransform.ts | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/lib/hooks/useMinimalShellTransform.ts b/src/lib/hooks/useMinimalShellTransform.ts new file mode 100644 index 000000000..9875840d6 --- /dev/null +++ b/src/lib/hooks/useMinimalShellTransform.ts @@ -0,0 +1,58 @@ +import {interpolate, useAnimatedStyle} from 'react-native-reanimated' + +import {useMinimalShellMode} from '#/state/shell/minimal-mode' +import {useShellLayout} from '#/state/shell/shell-layout' + +// Keep these separated so that we only pay for useAnimatedStyle that gets used. + +export function useMinimalShellHeaderTransform() { + const mode = useMinimalShellMode() + const {headerHeight} = useShellLayout() + + const headerTransform = useAnimatedStyle(() => { + return { + pointerEvents: mode.value === 0 ? 'auto' : 'none', + opacity: Math.pow(1 - mode.value, 2), + transform: [ + { + translateY: interpolate(mode.value, [0, 1], [0, -headerHeight.value]), + }, + ], + } + }) + + return headerTransform +} + +export function useMinimalShellFooterTransform() { + const mode = useMinimalShellMode() + const {footerHeight} = useShellLayout() + + const footerTransform = useAnimatedStyle(() => { + return { + pointerEvents: mode.value === 0 ? 'auto' : 'none', + opacity: Math.pow(1 - mode.value, 2), + transform: [ + { + translateY: interpolate(mode.value, [0, 1], [0, footerHeight.value]), + }, + ], + } + }) + return footerTransform +} + +export function useMinimalShellFabTransform() { + const mode = useMinimalShellMode() + + const fabTransform = useAnimatedStyle(() => { + return { + transform: [ + { + translateY: interpolate(mode.value, [0, 1], [-44, 0]), + }, + ], + } + }) + return fabTransform +} |