UNPKG

1.04 kBJavaScriptView Raw
1import { observable } from '@nx-js/observer-util'
2import { Dimensions } from 'react-native'
3import { batch } from 'startupjs'
4import debounce from 'lodash/debounce'
5import { media } from '../config/helpers'
6
7const { mobile, ...MEDIA } = media // mobile is DEPRECATED
8const DIMENSIONS_UPDATE_DELAY = 200
9const mediaFlags = observable({})
10
11const debouncedUpdateMedia = debounce(
12 updateMediaFlags,
13 DIMENSIONS_UPDATE_DELAY,
14 { leading: false, trailing: true }
15)
16
17listenForMediaUpdates()
18
19export default function useMedia () {
20 return mediaFlags
21}
22
23function updateMediaFlags ({ window }) {
24 batch(() => {
25 for (const breakpoint of Object.keys(MEDIA).reverse()) {
26 if (window.width >= MEDIA[breakpoint]) {
27 if (!mediaFlags[breakpoint]) mediaFlags[breakpoint] = true
28 } else {
29 if (mediaFlags[breakpoint]) mediaFlags[breakpoint] = false
30 }
31 }
32 })
33}
34
35function listenForMediaUpdates () {
36 updateMediaFlags({ window: Dimensions.get('window') })
37 Dimensions.addEventListener('change', debouncedUpdateMedia)
38}