terra-form
Version:
Components for building forms
119 lines (97 loc) • 3.25 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _bind = require('classnames/bind');
var _bind2 = _interopRequireDefault(_bind);
require('terra-base/lib/baseStyles');
var _Field = require('./Field.scss');
var _Field2 = _interopRequireDefault(_Field);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
var cx = _bind2.default.bind(_Field2.default);
var propTypes = {
/**
* Children the Field contains.
*/
children: _propTypes2.default.node,
/**
* Error message for when the input is invalid.
*/
error: _propTypes2.default.node,
/**
* Help element to display with the input.
*/
help: _propTypes2.default.node,
/**
* The htmlFor attribute on the field label.
*/
htmlFor: _propTypes2.default.string,
/**
* Determines whether the field is an inline field.
*/
isInline: _propTypes2.default.bool,
/**
* Label of the input.
*/
label: _propTypes2.default.node,
/**
* Attributes to attach to the label.
*/
labelAttrs: _propTypes2.default.object,
/**
* Determines whether the field is required.
*/
required: _propTypes2.default.bool
};
var defaultProps = {
children: null,
error: null,
help: null,
htmlFor: undefined,
isInline: false,
label: null,
labelAttrs: {},
required: false
};
var Field = function Field(_ref) {
var children = _ref.children,
error = _ref.error,
help = _ref.help,
htmlFor = _ref.htmlFor,
isInline = _ref.isInline,
label = _ref.label,
labelAttrs = _ref.labelAttrs,
required = _ref.required,
customProps = _objectWithoutProperties(_ref, ['children', 'error', 'help', 'htmlFor', 'isInline', 'label', 'labelAttrs', 'required']);
var fieldClasses = cx(['field', { 'field-inline': isInline }, { 'field-required': required }, customProps.className]);
var labelClassNames = cx(['label', labelAttrs.className]);
return _react2.default.createElement(
'div',
_extends({}, customProps, { className: fieldClasses }),
label && _react2.default.createElement(
'label',
_extends({ htmlFor: htmlFor }, labelAttrs, { className: labelClassNames }),
label
),
children,
help && _react2.default.createElement(
'small',
{ className: cx('help-text'), tabIndex: '-1' },
help
),
error && _react2.default.createElement(
'small',
{ className: cx('error'), tabIndex: '-1' },
error
)
);
};
Field.propTypes = propTypes;
Field.defaultProps = defaultProps;
exports.default = Field;