UNPKG

prestyles

Version:

React Native StyleSheet alternative that supports platform switching and functional styles

70 lines (61 loc) 1.68 kB
import { StyleSheet } from 'react-native'; /** * Parse a single responsive style object * @param style * @param breakpoints * @param matchedBreakpoints * @param currentBreakpoint */ export const parseSingle = ( style, breakpoints, matchedBreakpoints, currentBreakpoint ) => { let parsed = { ...style }; matchedBreakpoints.forEach((bp) => { if (parsed[bp]) parsed = { ...parsed, ...parsed[bp] }; }); if (parsed['_' + currentBreakpoint]) { parsed = { ...parsed, ...parsed['_' + currentBreakpoint] }; } Object.keys(breakpoints).forEach((bpKey) => { if (parsed['_' + bpKey]) delete parsed['_' + bpKey]; if (parsed[bpKey]) delete parsed[bpKey]; }); return StyleSheet.flatten(parsed); }; /** * Parse multiple responsive style objects * @param styles * @param breakpoints * @param matchedBreakpoints * @param currentBreakpoint * @returns {{}} */ export const parseAll = ( styles, breakpoints, matchedBreakpoints, currentBreakpoint ) => { let fullParse = {}; for (let [key, style] of Object.entries(styles)) { fullParse[key] = typeof style === 'function' ? (params) => parseSingle( style(params), breakpoints, matchedBreakpoints, currentBreakpoint ) : parseSingle( style, breakpoints, matchedBreakpoints, currentBreakpoint ); } return fullParse; };