UNPKG

elemental

Version:
54 lines (46 loc) 1.87 kB
'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 ) ); } });