elemental
Version:
React UI Framework
54 lines (46 loc) • 1.87 kB
JavaScript
'use strict';
var React = require('react');
var blacklist = require('blacklist');
var classNames = require('classnames');
var FormField = require('./FormField');
var Spinner = require('./Spinner');
var ICON_MAP = require('../Octicons').map;
var ICON_KEYS = require('../Octicons').keys;
var COLOR_VARIANTS = ['danger', 'default', 'primary', 'success', 'warning'];
module.exports = React.createClass({
displayName: 'FormIconField',
propTypes: {
className: React.PropTypes.string,
iconColor: React.PropTypes.oneOf(COLOR_VARIANTS),
iconFill: React.PropTypes.oneOf(COLOR_VARIANTS),
iconIsLoading: React.PropTypes.bool,
iconKey: React.PropTypes.oneOf(ICON_KEYS).isRequired,
iconPosition: React.PropTypes.oneOf(['left', 'right'])
},
getDefaultProps: function getDefaultProps() {
return {
iconPosition: 'left'
};
},
render: function render() {
// props
var props = blacklist(this.props, 'children', 'iconPosition', 'iconKey', 'iconFill', 'iconColor', 'iconIsLoading');
// classes
var fieldClass = classNames('IconField', {
'has-fill-icon': this.props.iconFill,
'is-loading-icon': this.props.iconIsLoading
}, this.props.iconFill ? 'field-context-' + this.props.iconFill : null, this.props.iconColor ? 'field-context-' + this.props.iconColor : null, this.props.iconPosition);
var iconClass = classNames('IconField__icon', this.props.iconFill ? 'IconField__icon-fill--' + this.props.iconFill : null, this.props.iconColor ? 'IconField__icon-color--' + this.props.iconColor : null, ICON_MAP[this.props.iconKey].className);
var icon = this.props.iconIsLoading ? React.createElement(Spinner, { size: 'sm' }) : React.createElement('span', { className: iconClass });
return React.createElement(
FormField,
props,
React.createElement(
'div',
{ className: fieldClass },
this.props.children,
icon
)
);
}
});