react-native-css-media-query-processor
Version:
Match style objects containing CSS Media Queries with React Native
60 lines (45 loc) • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.process = process;
var _deepmerge = _interopRequireDefault(require("deepmerge"));
var _microMemoize = _interopRequireDefault(require("micro-memoize"));
var _reactNative = require("react-native");
var _mediaquery = _interopRequireDefault(require("./mediaquery.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var PREFIX = "@media";
function isMediaQuery(str) {
return typeof str === "string" && str.indexOf(PREFIX) === 0;
}
function filterMq(obj) {
return Object.keys(obj).filter(function (key) {
return isMediaQuery(key);
});
}
function filterNonMq(obj) {
return Object.keys(obj).reduce(function (out, key) {
if (!isMediaQuery(key) && key !== "__mediaQueries") {
out[key] = obj[key];
}
return out;
}, {});
}
var mFilterMq = (0, _microMemoize.default)(filterMq);
var mFilterNonMq = (0, _microMemoize.default)(filterNonMq);
function process(obj, matchObject) {
var mqKeys = mFilterMq(obj);
var res = mFilterNonMq(obj);
mqKeys.forEach(function (key) {
if (/^@media\s+(not\s+)?(ios|android|dom|macos|web|windows)/i.test(key)) {
matchObject.type = _reactNative.Platform.OS;
} else {
matchObject.type = "screen";
}
var isMatch = _mediaquery.default.match(obj.__mediaQueries[key], matchObject);
if (isMatch) {
res = (0, _deepmerge.default)(res, obj[key]);
}
});
return res;
}