2024-05-20 10:54:13 +01:00
import React , { createContext , ReactNode , useEffect , useMemo , useState } from 'react' ;
2024-05-13 13:08:47 -04:00
import { Dimensions } from 'react-native' ;
2024-05-20 10:54:13 +01:00
2024-05-14 19:50:13 -04:00
import { isDesktop , isTablet } from '../../blue_modules/environment' ;
2024-05-13 13:08:47 -04:00
interface ILargeScreenContext {
isLargeScreen : boolean ;
}
export const LargeScreenContext = createContext < ILargeScreenContext | undefined > ( undefined ) ;
interface LargeScreenProviderProps {
children : ReactNode ;
}
export const LargeScreenProvider : React.FC < LargeScreenProviderProps > = ( { children } ) = > {
const [ windowWidth , setWindowWidth ] = useState < number > ( Dimensions . get ( 'window' ) . width ) ;
const screenWidth : number = useMemo ( ( ) = > Dimensions . get ( 'screen' ) . width , [ ] ) ;
useEffect ( ( ) = > {
const updateScreenUsage = ( ) : void = > {
const newWindowWidth = Dimensions . get ( 'window' ) . width ;
if ( newWindowWidth !== windowWidth ) {
setWindowWidth ( newWindowWidth ) ;
}
} ;
const subscription = Dimensions . addEventListener ( 'change' , updateScreenUsage ) ;
return ( ) = > subscription . remove ( ) ;
} , [ windowWidth ] ) ;
const isLargeScreen : boolean = useMemo ( ( ) = > {
const halfScreenWidth = windowWidth >= screenWidth / 2 ;
2024-05-15 08:05:42 -04:00
const condition = ( isTablet && halfScreenWidth ) || isDesktop ;
2024-05-13 13:08:47 -04:00
console . debug (
2024-05-15 08:05:42 -04:00
` LargeScreenProvider.isLargeScreen: width: ${ windowWidth } , Screen width: ${ screenWidth } , Is tablet: ${ isTablet } , Is large screen: ${ condition } , isDesktkop: ${ isDesktop } ` ,
2024-05-13 13:08:47 -04:00
) ;
return condition ;
} , [ windowWidth , screenWidth ] ) ;
return < LargeScreenContext.Provider value = { { isLargeScreen } } > { children } < / LargeScreenContext.Provider > ;
} ;