mirror of
https://github.com/vale981/Vulcan
synced 2025-03-06 18:11:40 -05:00
126 lines
No EOL
3.3 KiB
JavaScript
126 lines
No EOL
3.3 KiB
JavaScript
/*jshint node:true */
|
|
|
|
'use strict';
|
|
|
|
var React = require('react');
|
|
var classNames = require('classnames/dedupe');
|
|
|
|
var Row = React.createClass({
|
|
|
|
propTypes: {
|
|
label: React.PropTypes.node,
|
|
rowClassName: React.PropTypes.oneOfType([
|
|
React.PropTypes.string,
|
|
React.PropTypes.array,
|
|
React.PropTypes.object
|
|
]),
|
|
labelClassName: React.PropTypes.oneOfType([
|
|
React.PropTypes.string,
|
|
React.PropTypes.array,
|
|
React.PropTypes.object
|
|
]),
|
|
elementWrapperClassName: React.PropTypes.oneOfType([
|
|
React.PropTypes.string,
|
|
React.PropTypes.array,
|
|
React.PropTypes.object
|
|
]),
|
|
required: React.PropTypes.bool,
|
|
hasErrors: React.PropTypes.bool,
|
|
fakeLabel: React.PropTypes.bool,
|
|
layout: React.PropTypes.oneOf(['horizontal', 'vertical', 'elementOnly']),
|
|
htmlFor: React.PropTypes.string
|
|
},
|
|
|
|
getDefaultProps: function() {
|
|
return {
|
|
label: '',
|
|
rowClassName: '',
|
|
labelClassName: '',
|
|
elementWrapperClassName: '',
|
|
required: false,
|
|
hasErrors: false,
|
|
fakeLabel: false
|
|
};
|
|
},
|
|
|
|
renderLabel: function() {
|
|
|
|
if (this.props.layout === 'elementOnly') {
|
|
return '';
|
|
}
|
|
|
|
var labelClassNames = [];
|
|
labelClassNames.push('control-label');
|
|
|
|
if (this.props.layout === 'horizontal') {
|
|
labelClassNames.push('col-sm-3');
|
|
}
|
|
|
|
labelClassNames.push(this.props.labelClassName);
|
|
|
|
if (this.props.fakeLabel) {
|
|
return (
|
|
<div className={classNames(labelClassNames)}>
|
|
<strong>
|
|
{this.props.label}
|
|
{this.props.required ? ' *' : null}
|
|
</strong>
|
|
</div>
|
|
);
|
|
}
|
|
return (
|
|
<label className={classNames(labelClassNames)} htmlFor={this.props.htmlFor}>
|
|
{this.props.label}
|
|
{this.props.required ? ' *' : null}
|
|
</label>
|
|
);
|
|
},
|
|
|
|
render: function() {
|
|
|
|
if (this.props.layout === 'elementOnly') {
|
|
return (
|
|
<span>
|
|
{this.props.children}
|
|
</span>
|
|
);
|
|
}
|
|
|
|
var cssClasses = {
|
|
row: ['form-group'],
|
|
elementWrapper: []
|
|
};
|
|
|
|
if (this.props.hasErrors) {
|
|
cssClasses.row.push('has-error');
|
|
cssClasses.row.push('has-feedback');
|
|
}
|
|
|
|
var element = this.props.children;
|
|
if (this.props.layout === 'horizontal') {
|
|
|
|
// Horizontal layout needs a 'row' class for Bootstrap 4
|
|
cssClasses.row.push('row');
|
|
|
|
cssClasses.elementWrapper.push('col-sm-9');
|
|
cssClasses.elementWrapper.push(this.props.elementWrapperClassName);
|
|
|
|
element = (
|
|
<div className={classNames(cssClasses.elementWrapper)}>
|
|
{this.props.children}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
cssClasses.row.push(this.props.rowClassName);
|
|
return (
|
|
<div className={classNames(cssClasses.row)}>
|
|
{this.renderLabel()}
|
|
{element}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
});
|
|
|
|
module.exports = Row; |