about summary refs log tree commit diff
path: root/src/state/shell/shell-layout.tsx
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2023-11-09 20:15:05 +0000
committerGitHub <noreply@github.com>2023-11-09 12:15:05 -0800
commit7a55ca613347680cd94add01faa5dc3f216b9bd2 (patch)
treed9fa7951b43a8148b44e12a93452e214e1c4a798 /src/state/shell/shell-layout.tsx
parent1dcf882619bc2d6b3eefebf83e76f4b21871b791 (diff)
downloadvoidsky-7a55ca613347680cd94add01faa5dc3f216b9bd2.tar.zst
Sync top/bottom bar disappearance to the scroll (#1855)
* Disable existing code that toggles shell

* Make shell mode a float

* Translate based on the gesture

* Track header and footer heights

* Add web support

* Fix types and cleanup

* Add back isScrolled logic

* Add comments
Diffstat (limited to 'src/state/shell/shell-layout.tsx')
-rw-r--r--src/state/shell/shell-layout.tsx41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/state/shell/shell-layout.tsx b/src/state/shell/shell-layout.tsx
new file mode 100644
index 000000000..a58ba851c
--- /dev/null
+++ b/src/state/shell/shell-layout.tsx
@@ -0,0 +1,41 @@
+import React from 'react'
+import {SharedValue, useSharedValue} from 'react-native-reanimated'
+
+type StateContext = {
+  headerHeight: SharedValue<number>
+  footerHeight: SharedValue<number>
+}
+
+const stateContext = React.createContext<StateContext>({
+  headerHeight: {
+    value: 0,
+    addListener() {},
+    removeListener() {},
+    modify() {},
+  },
+  footerHeight: {
+    value: 0,
+    addListener() {},
+    removeListener() {},
+    modify() {},
+  },
+})
+
+export function Provider({children}: React.PropsWithChildren<{}>) {
+  const headerHeight = useSharedValue(0)
+  const footerHeight = useSharedValue(0)
+
+  const value = React.useMemo(
+    () => ({
+      headerHeight,
+      footerHeight,
+    }),
+    [headerHeight, footerHeight],
+  )
+
+  return <stateContext.Provider value={value}>{children}</stateContext.Provider>
+}
+
+export function useShellLayout() {
+  return React.useContext(stateContext)
+}