Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
at main 53 lines 1.6 kB view raw
1import {createContext, useCallback, useContext, useState} from 'react' 2import {useFocusEffect} from '@react-navigation/native' 3 4type HideBottomBarBorderSetter = () => () => void 5 6const HideBottomBarBorderContext = createContext<boolean>(false) 7HideBottomBarBorderContext.displayName = 'HideBottomBarBorderContext' 8const HideBottomBarBorderSetterContext = 9 createContext<HideBottomBarBorderSetter | null>(null) 10HideBottomBarBorderSetterContext.displayName = 11 'HideBottomBarBorderSetterContext' 12 13export function useHideBottomBarBorderSetter() { 14 const hideBottomBarBorder = useContext(HideBottomBarBorderSetterContext) 15 if (!hideBottomBarBorder) { 16 throw new Error( 17 'useHideBottomBarBorderSetter must be used within a HideBottomBarBorderProvider', 18 ) 19 } 20 return hideBottomBarBorder 21} 22 23export function useHideBottomBarBorderForScreen() { 24 const hideBorder = useHideBottomBarBorderSetter() 25 26 useFocusEffect( 27 useCallback(() => { 28 const cleanup = hideBorder() 29 return () => cleanup() 30 }, [hideBorder]), 31 ) 32} 33 34export function useHideBottomBarBorder() { 35 return useContext(HideBottomBarBorderContext) 36} 37 38export function Provider({children}: {children: React.ReactNode}) { 39 const [refCount, setRefCount] = useState(0) 40 41 const setter = useCallback(() => { 42 setRefCount(prev => prev + 1) 43 return () => setRefCount(prev => prev - 1) 44 }, []) 45 46 return ( 47 <HideBottomBarBorderSetterContext.Provider value={setter}> 48 <HideBottomBarBorderContext.Provider value={refCount > 0}> 49 {children} 50 </HideBottomBarBorderContext.Provider> 51 </HideBottomBarBorderSetterContext.Provider> 52 ) 53}