diff --git a/.agignore b/.agignore index 1521c8b7..f2213879 100644 --- a/.agignore +++ b/.agignore @@ -1 +1,2 @@ dist +lib diff --git a/modules/config.js b/modules/config.js index 9a777124..9cbc9bdf 100644 --- a/modules/config.js +++ b/modules/config.js @@ -2,8 +2,20 @@ import type {PluginConfig, PluginResult} from './plugins'; +/* eslint-disable no-use-before-define */ +type MediaQueryListListener = (mql: MediaQueryList) => void; +/* eslint-enable no-use-before-define */ + +type MediaQueryList = { + matches: bool; + addListener(listener: MediaQueryListListener): void; + removeListener(listener: MediaQueryListListener): void; +}; + export type Plugin = (pluginConfig: PluginConfig) => PluginResult; +export type MatchMediaType = (mediaQueryString: string) => MediaQueryList; export type Config = { - plugins?: Array + matchMedia?: MatchMediaType; + plugins?: Array; }; diff --git a/modules/plugins/resolve-media-queries-plugin.js b/modules/plugins/resolve-media-queries-plugin.js index d169f34f..52dca7b5 100644 --- a/modules/plugins/resolve-media-queries-plugin.js +++ b/modules/plugins/resolve-media-queries-plugin.js @@ -1,5 +1,6 @@ /** @flow */ +import type {MatchMediaType} from '../config'; import type {PluginConfig, PluginResult} from '.'; var _windowMatchMedia; @@ -8,7 +9,8 @@ var _getWindowMatchMedia = function (ExecutionEnvironment) { _windowMatchMedia = !!ExecutionEnvironment.canUseDOM && !!window && !!window.matchMedia && - (mediaQueryString => window.matchMedia(mediaQueryString)); + (mediaQueryString => window.matchMedia(mediaQueryString)) || + null; } return _windowMatchMedia; }; @@ -24,7 +26,7 @@ var resolveMediaQueries = function ({ }: PluginConfig): PluginResult { var newComponentFields = {}; var newStyle = style; - var matchMedia = config.matchMedia || + var matchMedia: ?MatchMediaType = config.matchMedia || _getWindowMatchMedia(ExecutionEnvironment); if (!matchMedia) { return newStyle; @@ -41,7 +43,7 @@ var resolveMediaQueries = function ({ // Create a global MediaQueryList if one doesn't already exist var mql = mediaQueryListByQueryString[query]; - if (!mql) { + if (!mql && matchMedia) { mediaQueryListByQueryString[query] = mql = matchMedia(query); }