terra-form
Version:
Components for building forms
157 lines (139 loc) • 4.36 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 _Input = require('./Input');
var _Input2 = _interopRequireDefault(_Input);
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 = {
/**
* The defaultValue of the input element. Use this to create an uncontrolled input.
*/
defaultValue: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),
/**
* Error message for when the input is invalid.
*/
error: _propTypes2.default.node,
/**
* Help element to display with the input.
*/
help: _propTypes2.default.node,
/**
* Additional attributes to attach to the number input.
*/
inputAttrs: _propTypes2.default.object,
/**
* Id of the input. Also populates the 'htmlFor' prop of the field.
*/
inputId: _propTypes2.default.string,
/**
* 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,
/**
* Maximum value allowed for the input.
*/
max: _propTypes2.default.number,
/**
* Minimum value allowed for the input.
*/
min: _propTypes2.default.number,
/**
* Name of the input attribute.
*/
name: _propTypes2.default.string,
/**
* Function to trigger when user changes the input value. Provide a function to create a controlled input.
*/
onChange: _propTypes2.default.func,
/**
* Whether the input is required.
*/
required: _propTypes2.default.bool,
/**
* Incremental steps for increasing and descreasing the value.
*/
step: _propTypes2.default.number,
/**
* The defaultValue of the input element. Use this to create an uncontrolled input.
*/
value: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number])
};
var defaultProps = {
defaultValue: undefined,
error: null,
help: null,
inputAttrs: {},
inputId: undefined,
isInline: false,
label: null,
labelAttrs: {},
max: null,
min: null,
name: null,
onChange: undefined,
required: false,
step: null,
value: undefined
};
var NumberField = function NumberField(_ref) {
var error = _ref.error,
help = _ref.help,
inputAttrs = _ref.inputAttrs,
inputId = _ref.inputId,
isInline = _ref.isInline,
label = _ref.label,
labelAttrs = _ref.labelAttrs,
max = _ref.max,
min = _ref.min,
name = _ref.name,
onChange = _ref.onChange,
required = _ref.required,
step = _ref.step,
value = _ref.value,
defaultValue = _ref.defaultValue,
customProps = _objectWithoutProperties(_ref, ['error', 'help', 'inputAttrs', 'inputId', 'isInline', 'label', 'labelAttrs', 'max', 'min', 'name', 'onChange', 'required', 'step', 'value', 'defaultValue']);
return _react2.default.createElement(
_Field2.default,
_extends({
error: error,
label: label,
labelAttrs: labelAttrs,
help: help,
htmlFor: inputId,
isInline: isInline,
required: required
}, customProps),
_react2.default.createElement(_Input2.default, _extends({
type: 'number',
step: step,
max: max,
min: min,
required: required,
name: name,
id: inputId,
value: value,
defaultValue: defaultValue,
onChange: onChange
}, inputAttrs))
);
};
NumberField.propTypes = propTypes;
NumberField.defaultProps = defaultProps;
exports.default = NumberField;