Edge to edge support (#7497)
This commit is contained in:
committed by
GitHub
parent
6e80b340c8
commit
a770f5635b
@@ -1,44 +1,17 @@
|
||||
import {createContext, useContext, useEffect, useState} from 'react'
|
||||
|
||||
import {isWeb} from '#/platform/detection'
|
||||
|
||||
const LightStatusBarRefCountContext = createContext<boolean>(false)
|
||||
const SetLightStatusBarRefCountContext = createContext<React.Dispatch<
|
||||
React.SetStateAction<number>
|
||||
> | null>(null)
|
||||
|
||||
export function useLightStatusBar() {
|
||||
return useContext(LightStatusBarRefCountContext)
|
||||
}
|
||||
import {useEffect} from 'react'
|
||||
import {SystemBars} from 'react-native-edge-to-edge'
|
||||
|
||||
export function useSetLightStatusBar(enabled: boolean) {
|
||||
const setRefCount = useContext(SetLightStatusBarRefCountContext)
|
||||
useEffect(() => {
|
||||
// noop on web -sfn
|
||||
if (isWeb) return
|
||||
|
||||
if (!setRefCount) {
|
||||
if (__DEV__)
|
||||
console.error(
|
||||
'useLightStatusBar was used without a SetLightStatusBarRefCountContext provider',
|
||||
)
|
||||
return
|
||||
}
|
||||
if (enabled) {
|
||||
setRefCount(prev => prev + 1)
|
||||
return () => setRefCount(prev => prev - 1)
|
||||
const entry = SystemBars.pushStackEntry({
|
||||
style: {
|
||||
statusBar: 'light',
|
||||
},
|
||||
})
|
||||
return () => {
|
||||
SystemBars.popStackEntry(entry)
|
||||
}
|
||||
}
|
||||
}, [enabled, setRefCount])
|
||||
}
|
||||
|
||||
export function Provider({children}: React.PropsWithChildren<{}>) {
|
||||
const [refCount, setRefCount] = useState(0)
|
||||
|
||||
return (
|
||||
<SetLightStatusBarRefCountContext.Provider value={setRefCount}>
|
||||
<LightStatusBarRefCountContext.Provider value={refCount > 0}>
|
||||
{children}
|
||||
</LightStatusBarRefCountContext.Provider>
|
||||
</SetLightStatusBarRefCountContext.Provider>
|
||||
)
|
||||
}, [enabled])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user