UNPKG

react-native-ui-lib

Version:

UI Components Library for React Native ###### Lateset version support RN44

287 lines (233 loc) • 11.2 kB
Object.defineProperty(exports,"__esModule",{value:true});var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[typeof Symbol==='function'?Symbol.iterator:'@@iterator'](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"])_i["return"]();}finally{if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if((typeof Symbol==='function'?Symbol.iterator:'@@iterator')in Object(arr)){return sliceIterator(arr,i);}else{throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}();var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();var _react=require('react'); var _reactNative=require('react-native'); var _lodash=require('lodash');var _lodash2=_interopRequireDefault(_lodash); var _style=require('../style'); var _helpers=require('../helpers');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i];}return arr2;}else{return Array.from(arr);}}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return call&&(typeof call==="object"||typeof call==="function")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;} var FLEX_KEY_PATTERN=/^flex(G|S)?(-\d*)?$/; var PADDING_KEY_PATTERN=/padding[LTRBHV]?-[0-9]*/; var MARGIN_KEY_PATTERN=/margin[LTRBHV]?-[0-9]*/; var ALIGNMENT_KEY_PATTERN=/(left|top|right|bottom|center|centerV|centerH|spread)/; var BACKGROUND_KEY_PATTERN=new RegExp(_lodash2.default.chain(_style.Colors). keys(). map(function(key){return['bg-'+key,'background-'+key];}). flatten(). join('|'). value());var BaseComponent=function(_Component){_inherits(BaseComponent,_Component);_createClass(BaseComponent,null,[{key:'extractOwnProps',value:function extractOwnProps( props){ var ownPropTypes=this.propTypes; var ownProps=_lodash2.default.pickBy(props,function(value,key){return _lodash2.default.includes(Object.keys(ownPropTypes),key);}); return ownProps; }}]); function BaseComponent(props){_classCallCheck(this,BaseComponent);var _this=_possibleConstructorReturn(this,(BaseComponent.__proto__||Object.getPrototypeOf(BaseComponent)).call(this, props)); if(!_this.styles){ _this.generateStyles(); } _this.state=_extends({}, _this.extractStyleProps());return _this; }_createClass(BaseComponent,[{key:'getSnippet',value:function getSnippet() { return _helpers.DocsGenerator.generateSnippet(_helpers.DocsGenerator.extractComponentInfo(this)); }},{key:'generateStyles',value:function generateStyles() { this.styles=_reactNative.StyleSheet.create({}); }},{key:'extractAnimationProps',value:function extractAnimationProps() { return _lodash2.default.pick(this.props,[ 'animation', 'duration', 'delay', 'direction', 'easing', 'iterationCount', 'transition', 'onAnimationBegin', 'onAnimationEnd', 'useNativeDriver']); }},{key:'extractContainerStyle',value:function extractContainerStyle( props){ var containerStyle={}; if(props.containerStyle){ containerStyle=_lodash2.default.pickBy(props.containerStyle,function(value,key){ return key.includes('margin')||_lodash2.default.includes(['alignSelf','transform'],key); }); } return containerStyle; }},{key:'extractTypographyValue',value:function extractTypographyValue() {var _this2=this; var typography=void 0; _lodash2.default.forEach(_style.Typography,function(value,key){ if(_this2.props[key]===true){ typography=value; } }); return typography; }},{key:'extractColorValue',value:function extractColorValue() {var _this3=this; var color=void 0; _lodash2.default.forEach(_style.Colors,function(value,key){ if(_this3.props[key]===true){ color=value; } }); return color; }},{key:'extractBackgroundColorValue',value:function extractBackgroundColorValue() {var _this4=this; var backgroundColor=void 0; _lodash2.default.forEach(_style.Colors,function(value,key){ if(_this4.props['background-'+key]===true||_this4.props['bg-'+key]===true){ backgroundColor=value; } }); return backgroundColor; }},{key:'extractBorderRadiusValue',value:function extractBorderRadiusValue() {var _this5=this; var borderRadius=void 0; _lodash2.default.forEach(_style.BorderRadiuses,function(value,key){ if(_this5.props[key]===true){ borderRadius=value; } }); return borderRadius; }},{key:'extractPaddingValues',value:function extractPaddingValues() {var _this6=this; var PADDING_VARIATIONS={ padding:'padding', paddingL:'paddingLeft', paddingT:'paddingTop', paddingR:'paddingRight', paddingB:'paddingBottom', paddingH:'paddingHorizontal', paddingV:'paddingVertical'}; var paddings={}; var paddingPropsKeys=_lodash2.default.chain(this.props).keys(this.props).filter(function(key){return PADDING_KEY_PATTERN.test(key);}).value(); _lodash2.default.forEach(paddingPropsKeys,function(key){ if(_this6.props[key]===true){var _key$split= key.split('-'),_key$split2=_slicedToArray(_key$split,2),paddingKey=_key$split2[0],paddingValue=_key$split2[1]; var paddingVariation=PADDING_VARIATIONS[paddingKey]; if(!isNaN(paddingValue)){ paddings[paddingVariation]=Number(paddingValue); } } }); return paddings; }},{key:'extractMarginValues',value:function extractMarginValues() {var _this7=this; var MARGIN_VARIATIONS={ margin:'margin', marginL:'marginLeft', marginT:'marginTop', marginR:'marginRight', marginB:'marginBottom', marginH:'marginHorizontal', marginV:'marginVertical'}; var margins={}; var marginPropsKeys=_lodash2.default.chain(this.props).keys(this.props).filter(function(key){return MARGIN_KEY_PATTERN.test(key);}).value(); _lodash2.default.forEach(marginPropsKeys,function(key){ if(_this7.props[key]===true){var _key$split3= key.split('-'),_key$split4=_slicedToArray(_key$split3,2),marginKey=_key$split4[0],marginValue=_key$split4[1]; var paddingVariation=MARGIN_VARIATIONS[marginKey]; if(!isNaN(marginValue)){ margins[paddingVariation]=Number(marginValue); } } }); return margins; }},{key:'extractAlignmentsValues',value:function extractAlignmentsValues() {var _this8=this;var _props= this.props,row=_props.row,center=_props.center; var alignments={}; var alignmentRules={}; if(row){ alignments.flexDirection='row'; alignmentRules.justifyContent=['left','right','centerH','spread']; alignmentRules.alignItems=['top','bottom','centerV']; }else{ alignmentRules.justifyContent=['top','bottom','centerV','spread']; alignmentRules.alignItems=['left','right','centerH']; } _lodash2.default.forEach(alignmentRules,function(positions,attribute){ _lodash2.default.forEach(positions,function(position){ if(_this8.props[position]){ if(_lodash2.default.includes(['top','left'],position)){ alignments[attribute]='flex-start'; }else if(_lodash2.default.includes(['bottom','right'],position)){ alignments[attribute]='flex-end'; }else if(_lodash2.default.includes(['centerH','centerV'],position)){ alignments[attribute]='center'; }else if(position==='spread'){ alignments[attribute]='space-between'; } } }); }); if(center){ alignments.justifyContent='center'; alignments.alignItems='center'; } return alignments; }},{key:'extractFlexValue',value:function extractFlexValue() { var flexPropKey=_lodash2.default.chain(this.props). keys(this.props). filter(function(key){return FLEX_KEY_PATTERN.test(key);}). last(). value(); if(flexPropKey&&this.props[flexPropKey]===true){ var value=flexPropKey.split('-').pop(); if(value==='flex'||value===''){ return 1; }else if(!isNaN(value)){ return Number(value); } } }},{key:'extractFlexStyle',value:function extractFlexStyle() { var STYLE_KEY_CONVERTERS={ flex:'flex', flexG:'flexGrow', flexS:'flexShrink'}; var flexPropKey=_lodash2.default.chain(this.props). keys(this.props). filter(function(key){return FLEX_KEY_PATTERN.test(key);}). last(). value(); if(flexPropKey&&this.props[flexPropKey]===true){var _flexPropKey$split= flexPropKey.split('-'),_flexPropKey$split2=_slicedToArray(_flexPropKey$split,2),flexKey=_flexPropKey$split2[0],flexValue=_flexPropKey$split2[1]; flexKey=STYLE_KEY_CONVERTERS[flexKey]; flexValue=_lodash2.default.isEmpty(flexValue)?1:Number(flexValue); return _defineProperty({},flexKey,flexValue); } }},{key:'extractStyleProps',value:function extractStyleProps() { var backgroundColor=this.extractBackgroundColorValue(); var borderRadius=this.extractBorderRadiusValue(); var paddings=this.extractPaddingValues(); var margins=this.extractMarginValues(); var alignments=this.extractAlignmentsValues(); var flexStyle=this.extractFlexStyle(); return{ backgroundColor:backgroundColor, borderRadius:borderRadius, paddings:paddings, margins:margins, alignments:alignments, flexStyle:flexStyle}; }},{key:'extractTextProps',value:function extractTextProps( props){ return _lodash2.default.pick(props,[].concat(_toConsumableArray(_lodash2.default.keys(_style.Typography)),_toConsumableArray(_lodash2.default.keys(_style.Colors)),['color'])); }},{key:'extractModifierProps',value:function extractModifierProps() { var patterns=[ FLEX_KEY_PATTERN, PADDING_KEY_PATTERN, MARGIN_KEY_PATTERN, ALIGNMENT_KEY_PATTERN, BACKGROUND_KEY_PATTERN]; var modifierProps=_lodash2.default.pickBy(this.props,function(value,key){ var isModifier=_lodash2.default.find(patterns,function(pattern){return pattern.test(key);}); return!!isModifier; }); return modifierProps; }}]);return BaseComponent;}(_react.Component);BaseComponent.propTypes=_extends({},_lodash2.default.mapValues(_style.Typography,function(){return _react.PropTypes.bool;}),_lodash2.default.mapValues(_style.Colors,function(){return _react.PropTypes.bool;}),{useNativeDriver:_react.PropTypes.bool});BaseComponent.defaultProps={useNativeDriver:true};exports.default=BaseComponent;