Bluesky app fork with some witchin' additions 馃挮
witchsky.app
bluesky
fork
client
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}