diff options
author | Ansh <anshnanda10@gmail.com> | 2023-06-14 13:26:44 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-14 15:26:44 -0500 |
commit | 9b9f339e3e72587bb31e2d1b6e77e9ec804302bf (patch) | |
tree | abe53792959cd43f6ceab2b35df8fb6ecc4a80b6 /src | |
parent | 71af9fd04b49cd4ea0d33632a0b3b47f8a30fb0f (diff) | |
download | voidsky-9b9f339e3e72587bb31e2d1b6e77e9ec804302bf.tar.zst |
[APP-686] Fix mobile web styling (#876)
* fix desktop window size * fix desktop window size * add listener for resize events * fix when going from mobile to web * only add eventListener for web
Diffstat (limited to 'src')
-rw-r--r-- | src/platform/detection.ts | 3 | ||||
-rw-r--r-- | src/view/screens/Home.tsx | 32 |
2 files changed, 28 insertions, 7 deletions
diff --git a/src/platform/detection.ts b/src/platform/detection.ts index 5d2ffcb22..da33fdca7 100644 --- a/src/platform/detection.ts +++ b/src/platform/detection.ts @@ -4,8 +4,9 @@ export const isIOS = Platform.OS === 'ios' export const isAndroid = Platform.OS === 'android' export const isNative = isIOS || isAndroid export const isWeb = !isNative +export const isMobileWebMediaQuery = 'only screen and (max-width: 1230px)' export const isMobileWeb = isWeb && // @ts-ignore we know window exists -prf - global.window.matchMedia('only screen and (max-width: 1000px)')?.matches + global.window.matchMedia(isMobileWebMediaQuery)?.matches export const isDesktopWeb = isWeb && !isMobileWeb diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index f18e9d3ae..4b90c2147 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -21,9 +21,13 @@ import {s} from 'lib/styles' import {useOnMainScroll} from 'lib/hooks/useOnMainScroll' import {useAnalytics} from 'lib/analytics' import {ComposeIcon2} from 'lib/icons' -import {isDesktopWeb} from 'platform/detection' +import {isDesktopWeb, isMobileWebMediaQuery, isWeb} from 'platform/detection' -const HEADER_OFFSET = isDesktopWeb ? 50 : 78 +const HEADER_OFFSET_MOBILE = 78 +const HEADER_OFFSET_DESKTOP = 50 +const HEADER_OFFSET = isDesktopWeb + ? HEADER_OFFSET_DESKTOP + : HEADER_OFFSET_MOBILE const POLL_FREQ = 30e3 // 30sec type Props = NativeStackScreenProps<HomeTabNavigatorParams, 'Home'> @@ -152,6 +156,7 @@ const FeedPage = observer( const [onMainScroll, isScrolledDown, resetMainScroll] = useOnMainScroll(store) const {screen, track} = useAnalytics() + const [headerOffset, setHeaderOffset] = React.useState(HEADER_OFFSET) const scrollElRef = React.useRef<FlatList>(null) const {appState} = useAppState({ onForeground: () => doPoll(true), @@ -177,9 +182,9 @@ const FeedPage = observer( ) const scrollToTop = React.useCallback(() => { - scrollElRef.current?.scrollToOffset({offset: -HEADER_OFFSET}) + scrollElRef.current?.scrollToOffset({offset: -headerOffset}) resetMainScroll() - }, [scrollElRef, resetMainScroll]) + }, [headerOffset, resetMainScroll]) const onSoftReset = React.useCallback(() => { if (isPageFocused) { @@ -188,6 +193,17 @@ const FeedPage = observer( } }, [isPageFocused, scrollToTop, feed]) + // listens for resize events + const listenForResize = React.useCallback(() => { + // @ts-ignore we know window exists -prf + const isMobileWeb = global.window.matchMedia( + isMobileWebMediaQuery, + )?.matches + setHeaderOffset( + isMobileWeb ? HEADER_OFFSET_MOBILE : HEADER_OFFSET_DESKTOP, + ) + }, []) + // fires when screen is activated/deactivated // - set up polls/listeners, update content useFocusEffect( @@ -229,7 +245,11 @@ const FeedPage = observer( if (isPageFocused && isScreenFocused) { feed.checkForLatest() } - }, [isPageFocused, isScreenFocused, feed]) + isWeb && window.addEventListener('resize', listenForResize) + return () => { + isWeb && window.removeEventListener('resize', listenForResize) + } + }, [isPageFocused, isScreenFocused, feed, listenForResize]) const onPressCompose = React.useCallback(() => { track('HomeScreen:PressCompose') @@ -258,7 +278,7 @@ const FeedPage = observer( onScroll={onMainScroll} scrollEventThrottle={100} renderEmptyState={renderEmptyState} - headerOffset={HEADER_OFFSET} + headerOffset={headerOffset} /> {(isScrolledDown || hasNew) && ( <LoadLatestBtn |