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}