From 08b640e70385be5a6f84942641be9d568adfd18c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Grychto=C5=82?= <44443723+danielmark0116@users.noreply.github.com> Date: Mon, 27 May 2024 09:32:19 +0200 Subject: [PATCH] fix: split `useStatusBarHeightDetector` hook into web and native flavors (#266) fix: split useStatusBarHeightDetector hook into web and native flavours --- .../useStatusBarHeightDetector.native.ts | 27 +++++++++++++++++++ src/core/hooks/useStatusBarHeightDetector.ts | 22 ++------------- 2 files changed, 29 insertions(+), 20 deletions(-) create mode 100644 src/core/hooks/useStatusBarHeightDetector.native.ts diff --git a/src/core/hooks/useStatusBarHeightDetector.native.ts b/src/core/hooks/useStatusBarHeightDetector.native.ts new file mode 100644 index 00000000..3cb6c37f --- /dev/null +++ b/src/core/hooks/useStatusBarHeightDetector.native.ts @@ -0,0 +1,27 @@ +import { useEffect, useState } from 'react' +import { NativeModules, Platform, StatusBar } from 'react-native' + +type Props = { + isPortraitMode: boolean +} + +const NativeStatusBarManager = require('react-native/Libraries/Components/StatusBar/NativeStatusBarManagerIOS') + +export const useStatusBarHeightDetector = ({ isPortraitMode }: Props) => { + const { StatusBarManager } = NativeModules + const [barHeight, setBarHeight] = useState(0) + + useEffect(() => { + if (Platform.OS !== 'ios') return setBarHeight(StatusBar.currentHeight ?? 0) + // handling edge case when app is opened in landscape mode and barHeight = 0 + const StatusBarManagerModule = NativeStatusBarManager?.default || StatusBarManager + + StatusBarManagerModule?.getHeight(({ height }: { height: number }) => + setBarHeight(isPortraitMode && height !== 0 ? height : 50) + ) + }, [StatusBarManager, isPortraitMode]) + + return { + statusBarHeight: barHeight, + } +} diff --git a/src/core/hooks/useStatusBarHeightDetector.ts b/src/core/hooks/useStatusBarHeightDetector.ts index 3cb6c37f..5405e781 100644 --- a/src/core/hooks/useStatusBarHeightDetector.ts +++ b/src/core/hooks/useStatusBarHeightDetector.ts @@ -1,27 +1,9 @@ -import { useEffect, useState } from 'react' -import { NativeModules, Platform, StatusBar } from 'react-native' - type Props = { isPortraitMode: boolean } -const NativeStatusBarManager = require('react-native/Libraries/Components/StatusBar/NativeStatusBarManagerIOS') - -export const useStatusBarHeightDetector = ({ isPortraitMode }: Props) => { - const { StatusBarManager } = NativeModules - const [barHeight, setBarHeight] = useState(0) - - useEffect(() => { - if (Platform.OS !== 'ios') return setBarHeight(StatusBar.currentHeight ?? 0) - // handling edge case when app is opened in landscape mode and barHeight = 0 - const StatusBarManagerModule = NativeStatusBarManager?.default || StatusBarManager - - StatusBarManagerModule?.getHeight(({ height }: { height: number }) => - setBarHeight(isPortraitMode && height !== 0 ? height : 50) - ) - }, [StatusBarManager, isPortraitMode]) - +export const useStatusBarHeightDetector = ({ isPortraitMode: _ }: Props) => { return { - statusBarHeight: barHeight, + statusBarHeight: 0, } }