import { Dimensions } from 'react-native' ; import { theme } from './theme' ; export function breakpoint ( direction , values ) { return ( props ) => { const breakpoints = theme ( 'breakpoints' ) ( props ) ; const directionBreakpoints = breakpoints [ direction ] ; const size = Dimensions . get ( 'window' ) [ direction ] ; let value = values . default ; function getValueFromDirectionBreakpoints ( directionBreakpoints ) { const directionBreakpointsArray = Object . entries ( directionBreakpoints ) . reverse ( ) ; let hasMatched ; let value ; directionBreakpointsArray . forEach ( ( [ breakpoint , upperLimit ] , index ) => { if ( hasMatched ) return ; const lowerLimit = directionBreakpointsArray ?. [ index + 1 ] ?. [ 1 ] || 0 ; if ( size < upperLimit && size >= lowerLimit ) { const matchedValue = values [ breakpoint ] ; value = matchedValue || value ; hasMatched = Boolean ( matchedValue ) ; } if ( size >= lowerLimit ) { const matcher = `min-${ breakpoint }` ; const matchedValue = values [ matcher ] ; value = matchedValue || value ; hasMatched = Boolean ( matchedValue ) ; } if ( size < upperLimit ) { const matcher = `max-${ breakpoint }` ; value = values [ matcher ] || value ; } } ) ; return value ; } if ( Array . isArray ( directionBreakpoints ) ) { directionBreakpoints . forEach ( ( directionBreakpoints ) => { const maybeValue = getValueFromDirectionBreakpoints ( directionBreakpoints ) ; if ( maybeValue ) { value = maybeValue ; } } ) ; return value ; } const maybeValue = getValueFromDirectionBreakpoints ( directionBreakpoints ) ; if ( maybeValue ) { value = maybeValue ; } return value ; } ; }