react-native-komect-uikit
Version:
React Native UI Toolkit
80 lines (65 loc) • 2 kB
JavaScript
/**
* @Author: will
* @Date: 2017-06-19T17:49:44+08:00
* @Filename: Label.js
* @Last modified by: will
* @Last modified time: 2017-06-20T14:34:35+08:00
*/
// Label.js
;
import React, {Component, PropTypes} from "react";
import {Text} from 'react-native';
import Theme from '../themes/Theme';
export default class Label extends Text {
static propTypes = {
...Text.propTypes,
type: PropTypes.oneOf(['default', 'title', 'detail', 'danger']),
size: PropTypes.oneOf(['xl', 'lg', 'md', 'sm', 'xs']),
text: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
};
static defaultProps = {
...Text.defaultProps,
type: 'default',
size: 'md',
numberOfLines: 1,
};
buildProps() {
let {type, size, style, text, children, ...others} = this.props;
let color, fontSize;
switch (size) {
case 'xl': fontSize = Theme.labelFontSizeXL; break;
case 'lg': fontSize = Theme.labelFontSizeLG; break;
case 'sm': fontSize = Theme.labelFontSizeSM; break;
case 'xs': fontSize = Theme.labelFontSizeXS; break;
default: fontSize = Theme.labelFontSizeMD;
}
switch (type) {
case 'title':
color = Theme.labelTextTitleColor;
fontSize = Math.round(fontSize * Theme.labelTitleScale);
break;
case 'detail':
color = Theme.labelTextDetailColor;
fontSize = Math.round(fontSize * Theme.labelDetailScale);
break;
case 'danger':
color = Theme.labelTextDangerColor;
fontSize = Math.round(fontSize * Theme.labelDangerScale);
break;
default:
color = Theme.labelTextColor;
}
style = [{
backgroundColor: 'rgba(0, 0, 0, 0)',
color: color,
fontSize: fontSize,
overflow: 'hidden',
}].concat(style);
if (text || text === 0) children = text;
this.props = {type, size, style, text, children, ...others};
}
render() {
this.buildProps();
return super.render();
}
}