UNPKG

react-bootstrap

Version:

Bootstrap 3 components build with React

243 lines (198 loc) 8.29 kB
'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; var _classCallCheck = require('babel-runtime/helpers/class-call-check')['default']; var _extends = require('babel-runtime/helpers/extends')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; exports.__esModule = true; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _FormGroup = require('./FormGroup'); var _FormGroup2 = _interopRequireDefault(_FormGroup); var InputBase = (function (_React$Component) { _inherits(InputBase, _React$Component); function InputBase() { _classCallCheck(this, InputBase); _React$Component.apply(this, arguments); } InputBase.prototype.getInputDOMNode = function getInputDOMNode() { return _react2['default'].findDOMNode(this.refs.input); }; InputBase.prototype.getValue = function getValue() { if (this.props.type === 'static') { return this.props.value; } else if (this.props.type) { if (this.props.type === 'select' && this.props.multiple) { return this.getSelectedOptions(); } else { return this.getInputDOMNode().value; } } else { throw 'Cannot use getValue without specifying input type.'; } }; InputBase.prototype.getChecked = function getChecked() { return this.getInputDOMNode().checked; }; InputBase.prototype.getSelectedOptions = function getSelectedOptions() { var values = []; Array.prototype.forEach.call(this.getInputDOMNode().getElementsByTagName('option'), function (option) { if (option.selected) { var value = option.getAttribute('value') || option.innerHtml; values.push(value); } }); return values; }; InputBase.prototype.isCheckboxOrRadio = function isCheckboxOrRadio() { return this.props.type === 'checkbox' || this.props.type === 'radio'; }; InputBase.prototype.isFile = function isFile() { return this.props.type === 'file'; }; InputBase.prototype.renderInputGroup = function renderInputGroup(children) { var addonBefore = this.props.addonBefore ? _react2['default'].createElement( 'span', { className: "input-group-addon", key: "addonBefore" }, this.props.addonBefore ) : null; var addonAfter = this.props.addonAfter ? _react2['default'].createElement( 'span', { className: "input-group-addon", key: "addonAfter" }, this.props.addonAfter ) : null; var buttonBefore = this.props.buttonBefore ? _react2['default'].createElement( 'span', { className: "input-group-btn" }, this.props.buttonBefore ) : null; var buttonAfter = this.props.buttonAfter ? _react2['default'].createElement( 'span', { className: "input-group-btn" }, this.props.buttonAfter ) : null; var inputGroupClassName = undefined; switch (this.props.bsSize) { case 'small': inputGroupClassName = 'input-group-sm';break; case 'large': inputGroupClassName = 'input-group-lg';break; } return addonBefore || addonAfter || buttonBefore || buttonAfter ? _react2['default'].createElement( 'div', { className: _classnames2['default'](inputGroupClassName, 'input-group'), key: "input-group" }, addonBefore, buttonBefore, children, addonAfter, buttonAfter ) : children; }; InputBase.prototype.renderIcon = function renderIcon() { var classes = { 'glyphicon': true, 'form-control-feedback': true, 'glyphicon-ok': this.props.bsStyle === 'success', 'glyphicon-warning-sign': this.props.bsStyle === 'warning', 'glyphicon-remove': this.props.bsStyle === 'error' }; return this.props.hasFeedback ? _react2['default'].createElement('span', { className: _classnames2['default'](classes), key: "icon" }) : null; }; InputBase.prototype.renderHelp = function renderHelp() { return this.props.help ? _react2['default'].createElement( 'span', { className: "help-block", key: "help" }, this.props.help ) : null; }; InputBase.prototype.renderCheckboxAndRadioWrapper = function renderCheckboxAndRadioWrapper(children) { var classes = { 'checkbox': this.props.type === 'checkbox', 'radio': this.props.type === 'radio' }; return _react2['default'].createElement( 'div', { className: _classnames2['default'](classes), key: "checkboxRadioWrapper" }, children ); }; InputBase.prototype.renderWrapper = function renderWrapper(children) { return this.props.wrapperClassName ? _react2['default'].createElement( 'div', { className: this.props.wrapperClassName, key: "wrapper" }, children ) : children; }; InputBase.prototype.renderLabel = function renderLabel(children) { var classes = { 'control-label': !this.isCheckboxOrRadio() }; classes[this.props.labelClassName] = this.props.labelClassName; return this.props.label ? _react2['default'].createElement( 'label', { htmlFor: this.props.id, className: _classnames2['default'](classes), key: "label" }, children, this.props.label ) : children; }; InputBase.prototype.renderInput = function renderInput() { if (!this.props.type) { return this.props.children; } switch (this.props.type) { case 'select': return _react2['default'].createElement( 'select', _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'form-control'), ref: "input", key: "input" }), this.props.children ); case 'textarea': return _react2['default'].createElement('textarea', _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'form-control'), ref: "input", key: "input" })); case 'static': return _react2['default'].createElement( 'p', _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'form-control-static'), ref: "input", key: "input" }), this.props.value ); } var className = this.isCheckboxOrRadio() || this.isFile() ? '' : 'form-control'; return _react2['default'].createElement('input', _extends({}, this.props, { className: _classnames2['default'](this.props.className, className), ref: "input", key: "input" })); }; InputBase.prototype.renderFormGroup = function renderFormGroup(children) { return _react2['default'].createElement( _FormGroup2['default'], this.props, children ); }; InputBase.prototype.renderChildren = function renderChildren() { return !this.isCheckboxOrRadio() ? [this.renderLabel(), this.renderWrapper([this.renderInputGroup(this.renderInput()), this.renderIcon(), this.renderHelp()])] : this.renderWrapper([this.renderCheckboxAndRadioWrapper(this.renderLabel(this.renderInput())), this.renderHelp()]); }; InputBase.prototype.render = function render() { var children = this.renderChildren(); return this.renderFormGroup(children); }; return InputBase; })(_react2['default'].Component); InputBase.propTypes = { type: _react2['default'].PropTypes.string, label: _react2['default'].PropTypes.node, help: _react2['default'].PropTypes.node, addonBefore: _react2['default'].PropTypes.node, addonAfter: _react2['default'].PropTypes.node, buttonBefore: _react2['default'].PropTypes.node, buttonAfter: _react2['default'].PropTypes.node, bsSize: _react2['default'].PropTypes.oneOf(['small', 'medium', 'large']), bsStyle: _react2['default'].PropTypes.oneOf(['success', 'warning', 'error']), hasFeedback: _react2['default'].PropTypes.bool, id: _react2['default'].PropTypes.string, groupClassName: _react2['default'].PropTypes.string, wrapperClassName: _react2['default'].PropTypes.string, labelClassName: _react2['default'].PropTypes.string, multiple: _react2['default'].PropTypes.bool, disabled: _react2['default'].PropTypes.bool, value: _react2['default'].PropTypes.any }; exports['default'] = InputBase; module.exports = exports['default'];