UNPKG

rn-custom-style-sheet

Version:

React Native component to select a specific value from a range of values.

101 lines (98 loc) 2.8 kB
import { makeQuery, matchMedia, MediaQueryProps } from '../../../MediaQuery'; import { ShortHandProperties } from '../Scale'; import { getObjectDepth } from './Flatten'; /** * Is object * @param {*} obj */ function isObject(obj) { return obj !== null && obj !== undefined && typeof obj === 'object'; } /** * Is string is media query * @param {String} str */ function isMediaQuery(str) { return str !== null && str !== undefined && typeof str === 'string' && str.length > 0 && str.startsWith(MediaQueryProps.PREFIX); } /** * Merge media query obj into parent obj * @param {Record<string, any>} obj * @param {Record<string, any>} mqObj */ function merge(obj, mqObj) { Object.keys(mqObj).forEach(key => { if (isObject(obj[key]) && isObject(mqObj[key])) { Object.assign(obj[key], mqObj[key]); } else { obj[key] = mqObj[key]; } }); } function convertValue(obj, fnScaleFunc) { if (isObject(obj)) { return Object.keys(obj).reduce((res, key) => { if (ShortHandProperties.hasOwnProperty(key)) { ShortHandProperties[key]?.forEach(keys => { // @ts-ignore res[keys] = fnScaleFunc ? fnScaleFunc(obj[key]) : obj[key]; }); } else { // @ts-ignore res[key] = fnScaleFunc ? fnScaleFunc(obj[key]) : obj[key]; } return res; }, {}); } else { return fnScaleFunc ? fnScaleFunc(obj) : obj; } } export function styleProcess({ styles, guideLineBreakpoint, device, scaleFunc }) { return Object.keys(styles).reduce((resource, key) => { if (!isMediaQuery(key)) { if (getObjectDepth(styles[key], guideLineBreakpoint) > 1) { resource[key] = styleProcess({ styles: styles[key], guideLineBreakpoint, device, scaleFunc }); } else { if (ShortHandProperties.hasOwnProperty(key)) { ShortHandProperties[key]?.forEach(keys => { resource[keys] = convertValue(styles[key], scaleFunc); }); } else { resource[key] = convertValue(styles[key], scaleFunc); } } } else { if (device !== null && device !== undefined) { const query = makeQuery({ query: key }); if (query === undefined || query === null || query?.trim() === '' || (query?.trim()?.length ?? 0) === 0) { throw new Error('Invalid or missing MediaQuery!'); } const { isMatches } = matchMedia(query, device, guideLineBreakpoint); if (isMatches) { merge(resource, styleProcess({ styles: styles[key], guideLineBreakpoint, device, scaleFunc })); } } } return resource; }, {}); } //# sourceMappingURL=DeepMap.js.map