about summary refs log tree commit diff
path: root/src/lib/hooks
diff options
context:
space:
mode:
authorJohn Fawcett <jrf0110@gmail.com>2023-04-12 20:27:55 -0500
committerGitHub <noreply@github.com>2023-04-12 18:27:55 -0700
commitf6769b283fe83d7abbc0545077b3dca978184eed (patch)
treefab3973591fd0514d290de18f37280baca5563f9 /src/lib/hooks
parent2fed6c402159c6084dd481ab87c5e8b034e910ac (diff)
downloadvoidsky-f6769b283fe83d7abbc0545077b3dca978184eed.tar.zst
Mobile Web (#427)
* WIP

* WIP

* Fix header offset on web

* Remove debug

* Fix web mobile feed and FAB layout

* Fix modals on mobile web

* Remove dead code

* Remove ios config that shouldnt be committed now

* Move bottom bar into its own folder

* Fix web drawer navigation and state behaviors

* Remove dark mode toggle from web drawer for now

* Fix search on mobile web

* Fix the logged out splash screen on mobile web

* Fixes to detox simulator

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
Diffstat (limited to 'src/lib/hooks')
-rw-r--r--src/lib/hooks/useMinimalShellMode.tsx32
-rw-r--r--src/lib/hooks/useNavigationTabState.ts13
-rw-r--r--src/lib/hooks/useNavigationTabState.web.ts13
-rw-r--r--src/lib/hooks/useWebMediaQueries.tsx8
4 files changed, 66 insertions, 0 deletions
diff --git a/src/lib/hooks/useMinimalShellMode.tsx b/src/lib/hooks/useMinimalShellMode.tsx
new file mode 100644
index 000000000..e28a0e884
--- /dev/null
+++ b/src/lib/hooks/useMinimalShellMode.tsx
@@ -0,0 +1,32 @@
+import React from 'react'
+import {useStores} from 'state/index'
+import {Animated} from 'react-native'
+import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
+
+export function useMinimalShellMode() {
+  const store = useStores()
+  const minimalShellInterp = useAnimatedValue(0)
+  const footerMinimalShellTransform = {
+    transform: [{translateY: Animated.multiply(minimalShellInterp, 100)}],
+  }
+
+  React.useEffect(() => {
+    if (store.shell.minimalShellMode) {
+      Animated.timing(minimalShellInterp, {
+        toValue: 1,
+        duration: 100,
+        useNativeDriver: true,
+        isInteraction: false,
+      }).start()
+    } else {
+      Animated.timing(minimalShellInterp, {
+        toValue: 0,
+        duration: 100,
+        useNativeDriver: true,
+        isInteraction: false,
+      }).start()
+    }
+  }, [minimalShellInterp, store.shell.minimalShellMode])
+
+  return {footerMinimalShellTransform}
+}
diff --git a/src/lib/hooks/useNavigationTabState.ts b/src/lib/hooks/useNavigationTabState.ts
new file mode 100644
index 000000000..8afc799eb
--- /dev/null
+++ b/src/lib/hooks/useNavigationTabState.ts
@@ -0,0 +1,13 @@
+import {useNavigationState} from '@react-navigation/native'
+import {getTabState, TabState} from 'lib/routes/helpers'
+
+export function useNavigationTabState() {
+  return useNavigationState(state => {
+    return {
+      isAtHome: getTabState(state, 'Home') !== TabState.Outside,
+      isAtSearch: getTabState(state, 'Search') !== TabState.Outside,
+      isAtNotifications:
+        getTabState(state, 'Notifications') !== TabState.Outside,
+    }
+  })
+}
diff --git a/src/lib/hooks/useNavigationTabState.web.ts b/src/lib/hooks/useNavigationTabState.web.ts
new file mode 100644
index 000000000..d0173aa0f
--- /dev/null
+++ b/src/lib/hooks/useNavigationTabState.web.ts
@@ -0,0 +1,13 @@
+import {useNavigationState} from '@react-navigation/native'
+import {getCurrentRoute} from 'lib/routes/helpers'
+
+export function useNavigationTabState() {
+  return useNavigationState(state => {
+    let currentRoute = state ? getCurrentRoute(state).name : 'Home'
+    return {
+      isAtHome: currentRoute === 'Home',
+      isAtSearch: currentRoute === 'Search',
+      isAtNotifications: currentRoute === 'Notifications',
+    }
+  })
+}
diff --git a/src/lib/hooks/useWebMediaQueries.tsx b/src/lib/hooks/useWebMediaQueries.tsx
new file mode 100644
index 000000000..441585442
--- /dev/null
+++ b/src/lib/hooks/useWebMediaQueries.tsx
@@ -0,0 +1,8 @@
+import {useMediaQuery} from 'react-responsive'
+
+export function useWebMediaQueries() {
+  const isDesktop = useMediaQuery({
+    query: '(min-width: 1230px)',
+  })
+  return {isDesktop}
+}