UNPKG

rc-adminlte

Version:

AdminLTE template ported to React

100 lines (92 loc) 3.53 kB
import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import Label from './Label'; import { Sizes } from '../../PropTypes'; import { splitIcon } from '../../Utilities'; class InputWrapper extends Component { state = {} render() { const { iconLeft, iconRight, addonLeft, addonRight, size, checkboxLeft, checkboxRight, radioLeft, radioRight, buttonLeft, buttonRight, children, checkboxLeftProps, checkboxRightProps, radioLeftProps, radioRightProps, width, help, ...props } = this.props; const groupClasses = [ 'input-group', size ? `input-group-${size}` : null, ].filter(p => p).join(' '); if (iconLeft || iconRight || addonLeft || addonRight || checkboxLeft || checkboxRight || radioLeft || radioRight || buttonLeft || buttonRight) { const iconLeftClass = splitIcon(iconLeft); const iconRightClass = splitIcon(iconRight); return ( <Label {...props}> <div className={groupClasses} style={{ width }}> {addonLeft && <span className="input-group-addon">{addonLeft}</span>} {iconLeft && <span className="input-group-addon"><FontAwesomeIcon icon={iconLeftClass} /></span>} {checkboxLeft && <span className="input-group-addon"><input type="checkbox" {...checkboxLeftProps} /></span>} {radioLeft && <span className="input-group-addon"><input type="radio" {...radioLeftProps} /></span>} {buttonLeft && <div className="input-group-btn">{buttonLeft}</div>} {children} {addonRight && <span className="input-group-addon">{addonRight}</span>} {iconRight && <span className="input-group-addon"><FontAwesomeIcon icon={iconRightClass} /></span>} {checkboxRight && <span className="input-group-addon"><input type="checkbox" {...checkboxRightProps} /></span>} {radioRight && <span className="input-group-addon"><input type="radio" {...radioRightProps} /></span>} {buttonRight && <div className="input-group-btn">{buttonRight}</div>} </div> </Label> ); } return ( <Label {...this.props}> <div className={groupClasses} style={{ width }}> {children} </div> {help && <p className="help-block">{help}</p>} </Label> ); } } InputWrapper.propTypes = { iconLeft: PropTypes.string, iconRight: PropTypes.string, addonLeft: PropTypes.oneOf([PropTypes.string, PropTypes.node]), addonRight: PropTypes.oneOf([PropTypes.string, PropTypes.node]), size: PropTypes.oneOf(Sizes), checkboxLeft: PropTypes.bool, checkboxLeftProps: PropTypes.shape({}), checkboxRight: PropTypes.bool, checkboxRightProps: PropTypes.shape({}), radioLeft: PropTypes.bool, radioLeftProps: PropTypes.shape({}), radioRight: PropTypes.bool, radioRightProps: PropTypes.shape({}), buttonLeft: PropTypes.node, buttonRight: PropTypes.node, children: PropTypes.node.isRequired, width: PropTypes.string, help: PropTypes.string, }; InputWrapper.defaultProps = { iconLeft: null, iconRight: null, addonLeft: null, addonRight: null, size: null, checkboxLeft: false, checkboxLeftProps: null, checkboxRight: false, checkboxRightProps: null, radioLeft: false, radioLeftProps: null, radioRight: false, radioRightProps: null, buttonLeft: null, buttonRight: null, width: '100%', help: null, }; export default InputWrapper;