UNPKG

react-native-komect-uikit

Version:
80 lines (65 loc) 2 kB
/** * @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 'use strict'; 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(); } }