@sendbird/uikit-react-native-foundation
Version:
A foundational UI kit for building chat-enabled React Native apps.
71 lines (69 loc) • 2.99 kB
JavaScript
import { StyleSheet } from 'react-native';
import { DEFAULT_SCALE_FACTOR } from './createScaleFactor';
const SCALE_FACTOR_WITH_DIMENSION_VALUE = val => {
return typeof val === 'number' ? DEFAULT_SCALE_FACTOR(val) : val;
};
const DEFAULT_SCALE_FACTOR_WITH_NUMERIC_VALUE = val => {
return typeof val === 'number' ? DEFAULT_SCALE_FACTOR(val) : val;
};
const preProcessor = {
'fontSize': DEFAULT_SCALE_FACTOR,
'lineHeight': DEFAULT_SCALE_FACTOR,
//@ts-ignore : Ensure compatibility with all supported React Native versions
'borderRadius': DEFAULT_SCALE_FACTOR_WITH_NUMERIC_VALUE,
'minWidth': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'maxWidth': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'minHeight': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'maxHeight': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'height': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'width': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'padding': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'paddingVertical': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'paddingHorizontal': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'paddingTop': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'paddingBottom': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'paddingLeft': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'paddingRight': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'paddingStart': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'paddingEnd': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'margin': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'marginVertical': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'marginHorizontal': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'marginTop': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'marginBottom': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'marginLeft': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'marginRight': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'marginStart': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'marginEnd': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'top': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'bottom': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'left': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'right': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'start': SCALE_FACTOR_WITH_DIMENSION_VALUE,
'end': SCALE_FACTOR_WITH_DIMENSION_VALUE
};
const preProcessorKeys = Object.keys(preProcessor);
const preProcessorLen = preProcessorKeys.length;
/**
* Create StyleSheet with customized pre-processor
* Return a StyleSheet that pre-processed
* @param styles
* @returns StyleSheet
* */
/* eslint-disable @typescript-eslint/no-explicit-any */
const createStyleSheet = styles => {
Object.values(styles).forEach(style => {
// @ts-ignore
const styleKeys = Object.keys(style);
const styleLen = styleKeys.length;
const keys = styleLen < preProcessorLen ? styleKeys : preProcessorKeys;
keys.forEach(key => {
// @ts-ignore
if (preProcessor[key] && typeof style[key] !== 'undefined') style[key] = preProcessor[key](style[key]);
});
});
return StyleSheet.create(styles);
};
/* eslint-enable @typescript-eslint/no-explicit-any */
export default createStyleSheet;
//# sourceMappingURL=createStyleSheet.js.map