terra-form
Version:
Components for building forms
159 lines (128 loc) • 4.17 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 _Field = require('./Field');
var _Field2 = _interopRequireDefault(_Field);
var _Select = require('./Select');
var _Select2 = _interopRequireDefault(_Select);
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 propTypes = {
/**
* List of choices to be selected.
* If choices and options array are supplied, options array will be used over choices.
*/
choices: _propTypes2.default.array,
/**
* List of object key and value pairs for choices to be selected.
* If choices and options array are supplied, options array will be used over choices.
*/
options: _propTypes2.default.arrayOf(_propTypes2.default.shape({
value: _propTypes2.default.string.isRequired,
display: _propTypes2.default.string.isRequired
})),
/**
* Error message for when the input is invalid.
*/
error: _propTypes2.default.node,
/**
* Help element to display with the input.
*/
help: _propTypes2.default.node,
/**
* Whether the field is inline.
*/
isInline: _propTypes2.default.bool,
/**
* Label of the input.
*/
label: _propTypes2.default.node,
/**
* Attributes to attach to the label.
*/
labelAttrs: _propTypes2.default.object,
/**
* Function to trigger when the user changes the select value. Provide a function to create a controlled input.
*/
onChange: _propTypes2.default.func,
/**
* Name of the select field.
*/
name: _propTypes2.default.string,
/**
* Custom attributes to apply to the select.
*/
selectAttrs: _propTypes2.default.object,
/**
* Whether the select is required or not.
*/
required: _propTypes2.default.bool,
/**
* The value to start the select on.
*/
defaultValue: _propTypes2.default.string,
/**
* The value of the select element. Use this to create a controlled input.
*/
value: _propTypes2.default.string
};
var defaultProps = {
choices: null,
options: null,
error: null,
help: null,
isInline: false,
label: null,
labelAttrs: {},
onChange: undefined,
name: null,
required: false,
selectAttrs: {},
defaultValue: undefined,
value: undefined
};
var SelectField = function SelectField(_ref) {
var choices = _ref.choices,
options = _ref.options,
error = _ref.error,
help = _ref.help,
isInline = _ref.isInline,
label = _ref.label,
labelAttrs = _ref.labelAttrs,
onChange = _ref.onChange,
name = _ref.name,
required = _ref.required,
selectAttrs = _ref.selectAttrs,
defaultValue = _ref.defaultValue,
value = _ref.value,
customProps = _objectWithoutProperties(_ref, ['choices', 'options', 'error', 'help', 'isInline', 'label', 'labelAttrs', 'onChange', 'name', 'required', 'selectAttrs', 'defaultValue', 'value']);
return _react2.default.createElement(
_Field2.default,
_extends({}, customProps, {
error: error,
help: help,
isInline: isInline,
label: label,
labelAttrs: labelAttrs,
required: required
}),
_react2.default.createElement(_Select2.default, _extends({}, selectAttrs, {
choices: choices,
options: options,
onChange: onChange,
name: name,
required: required,
defaultValue: defaultValue,
value: value
}))
);
};
SelectField.propTypes = propTypes;
SelectField.defaultProps = defaultProps;
exports.default = SelectField;