about summary refs log tree commit diff
path: root/src/lib/hooks/useMinimalShellTransform.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/hooks/useMinimalShellTransform.ts')
-rw-r--r--src/lib/hooks/useMinimalShellTransform.ts58
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
+}