UNPKG

react-object-form

Version:
1,319 lines (1,132 loc) 54.1 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("react"), require("react-select")); else if(typeof define === 'function' && define.amd) define(["react", "react-select"], factory); else if(typeof exports === 'object') exports["ReactObjectForm"] = factory(require("react"), require("react-select")); else root["ReactObjectForm"] = factory(root["React"], root["Select"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_7__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PropertyConfig = exports.BaseFormRenderer = exports.MultiSelectRenderer = exports.SelectRenderer = exports.ObjectFormRenderer = exports.FieldRenderer = exports.NumberValueInput = exports.BooleanValueInput = undefined; 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 _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _react = __webpack_require__(1); var _react2 = _interopRequireDefault(_react); var _reactSelect = __webpack_require__(7); var _reactSelect2 = _interopRequireDefault(_reactSelect); var _GenericValueInput = __webpack_require__(8); var _GenericValueInput2 = _interopRequireDefault(_GenericValueInput); var _propTypes = __webpack_require__(2); var _propTypes2 = _interopRequireDefault(_propTypes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } 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; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } //Workaround. See -> https://phabricator.babeljs.io/T6777 true ? 'undefined' : _typeof(undefined); var console = console ? console : {}; console.log = console.log ? console.log : function () {}; //TODO: Make all components configurable by checking for component override via config var InternalObjectValuePropType = _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.bool, _propTypes2.default.number, _propTypes2.default.string, _propTypes2.default.arrayOf([_propTypes2.default.bool, _propTypes2.default.number, _propTypes2.default.string])]); //Base shape for property config var PropertyConfig = { //Property key in Object name: _propTypes2.default.string.isRequired, //If property is a child-object configs for its properties can be supplied config: _propTypes2.default.arrayOf(_propTypes2.default.shape(PropertyConfig)), //Possible values for this property options: _propTypes2.default.array, //true if property can contain values which are not listed in "options" allowCustomValues: _propTypes2.default.bool, //true if form field should be read-only disabled: _propTypes2.default.bool, clearable: _propTypes2.default.bool, resetValue: _propTypes2.default.shape({ label: _propTypes2.default.string, option: InternalObjectValuePropType }), placeholder: _propTypes2.default.string, label: _propTypes2.default.string, //TODO: concept / implement validator: _propTypes2.default.func, caption: _propTypes2.default.string, changeHandler: _propTypes2.default.func, hide: _propTypes2.default.bool, trim: _propTypes2.default.bool }; var ReactObjectForm = function (_React$Component) { _inherits(ReactObjectForm, _React$Component); function ReactObjectForm() { _classCallCheck(this, ReactObjectForm); return _possibleConstructorReturn(this, (ReactObjectForm.__proto__ || Object.getPrototypeOf(ReactObjectForm)).apply(this, arguments)); } _createClass(ReactObjectForm, [{ key: 'render', value: function render() { var _props = this.props, object = _props.object, config = _props.config, id = _props.id, rest = _objectWithoutProperties(_props, ['object', 'config', 'id']); var configtmp = {}; configtmp.config = config; //obey PropTypes configtmp.name = id ? id : 'react-object'; configtmp = Object.assign({}, config, configtmp); return _react2.default.createElement( 'form', { className: configtmp.name + '-form' }, _react2.default.createElement(BaseFormRenderer, _extends({}, rest, configtmp, { id: configtmp.name, object: object })) ); } }]); return ReactObjectForm; }(_react2.default.Component); ReactObjectForm.propTypes = { object: _propTypes2.default.object.isRequired, config: _propTypes2.default.arrayOf(_propTypes2.default.shape(PropertyConfig)), changeHandler: _propTypes2.default.func, id: _propTypes2.default.string }; var BooleanValueInput = function BooleanValueInput(_ref) { var value = _ref.value, id = _ref.id, name = _ref.name, changeHandler = _ref.changeHandler, disabled = _ref.disabled, rest = _objectWithoutProperties(_ref, ['value', 'id', 'name', 'changeHandler', 'disabled']); var internalChangeHandler = function internalChangeHandler(event) { return changeHandler(event.target.checked); }; return _react2.default.createElement('input', _extends({}, rest, { id: id + '-input', className: (disabled ? 'disabled' : '') + ' form-control boolean-value-input', type: 'checkbox', checked: value ? 'checked' : null, value: name, name: name, onChange: internalChangeHandler, disabled: disabled ? 'disabled' : null })); }; exports.BooleanValueInput = BooleanValueInput; BooleanValueInput.propTypes = _extends({}, PropertyConfig, { value: _propTypes2.default.bool, config: _propTypes2.default.shape(PropertyConfig) }); var NumberValueInput = exports.NumberValueInput = function (_React$Component2) { _inherits(NumberValueInput, _React$Component2); function NumberValueInput(props) { _classCallCheck(this, NumberValueInput); var _this2 = _possibleConstructorReturn(this, (NumberValueInput.__proto__ || Object.getPrototypeOf(NumberValueInput)).call(this, props)); _this2.state = { value: props.value }; _this2.numberParsingChangeHandler = _this2.numberParsingChangeHandler.bind(_this2); return _this2; } _createClass(NumberValueInput, [{ key: 'componentWillReceiveProps', value: function componentWillReceiveProps(next) { if (next.value != this.state.value) { this.setState({ value: next.value }); } } }, { key: 'numberParsingChangeHandler', value: function numberParsingChangeHandler(value) { this.setState({ value: value }); var parsed = Number.parseFloat(value); if (Number.isFinite(parsed)) { this.props.changeHandler(parsed); } else if (value === '') { this.setState({ value: Number.NaN }); this.props.changeHandler(Number.NaN); } } }, { key: 'render', value: function render() { var _props2 = this.props, value = _props2.value, rest = _objectWithoutProperties(_props2, ['value']); return _react2.default.createElement(_GenericValueInput2.default, _extends({}, rest, { value: Number.isNaN(value) ? '' : this.state.value, changeHandler: this.numberParsingChangeHandler })); } }]); return NumberValueInput; }(_react2.default.Component); NumberValueInput.propTypes = _extends({}, PropertyConfig, { value: _propTypes2.default.bool, config: _propTypes2.default.shape(PropertyConfig) }); var FieldRenderer = function FieldRenderer(_ref2) { var name = _ref2.name, id = _ref2.id, object = _ref2.object, caption = _ref2.caption, label = _ref2.label, rest = _objectWithoutProperties(_ref2, ['name', 'id', 'object', 'caption', 'label']); //Use capitalized field name as label if not set var labelString = void 0; if (label) { labelString = label; } else { var _name = _toArray(name), firstLetter = _name[0], _rest = _name.slice(1); labelString = firstLetter.toLocaleUpperCase() + _rest.join(''); } return _react2.default.createElement( 'div', { className: 'form-group' }, _react2.default.createElement( 'label', null, labelString ), _react2.default.createElement( 'div', null, _react2.default.createElement(BaseFormRenderer, _extends({}, rest, { id: id, name: name, object: object })), _react2.default.createElement( 'span', null, caption ) ) ); }; exports.FieldRenderer = FieldRenderer; FieldRenderer.propTypes = { config: _propTypes2.default.arrayOf(_propTypes2.default.shape(PropertyConfig)), object: InternalObjectValuePropType, name: _propTypes2.default.string.isRequired, id: _propTypes2.default.string.isRequired, caption: _propTypes2.default.string, label: _propTypes2.default.string }; var ObjectFormRenderer = function ObjectFormRenderer(_ref3) { var object = _ref3.object, config = _ref3.config, changeHandler = _ref3.changeHandler, id = _ref3.id, rest = _objectWithoutProperties(_ref3, ['object', 'config', 'changeHandler', 'id']); var childConfig = function childConfig(name) { return config ? config.find(function (currentConfig) { return currentConfig.name === name; }) : null; }; var createChildChangeHandler = function createChildChangeHandler(name) { return function (newObjectValue) { if (childConfig(name) && childConfig(name).hasOwnProperty('changeHandler') && 'function' == typeof childConfig(name).changeHandler) { childConfig(name).changeHandler(newObjectValue, changeHandler); } else { var changedObject = Object.assign({}, object); changedObject[name] = newObjectValue; changeHandler(changedObject); } }; }; //add configured fields in configured order var objectFields = Object.keys(object); var fields = config ? config.map(function (c) { return c.name; }) : []; //add remaining fields without config objectFields.forEach(function (f) { if (!fields.includes(f)) { fields.push(f); } }); fields = fields.filter(function (name) { var currchildConfig = childConfig(name); if (!currchildConfig) { return true; } return !currchildConfig.hide; }).map(function (childPropertyName) { var childPropertyConfig = childConfig(childPropertyName); var prefix = id && id != '' ? id + '-' : id; return _react2.default.createElement(FieldRenderer, _extends({}, rest, childPropertyConfig, { key: childPropertyName, id: prefix + childPropertyName, name: childPropertyName, object: object[childPropertyName], changeHandler: createChildChangeHandler(childPropertyName) })); }); return _react2.default.createElement( 'fieldset', { id: id + '-fieldset' }, fields ); }; exports.ObjectFormRenderer = ObjectFormRenderer; ObjectFormRenderer.propTypes = { object: _propTypes2.default.object, config: _propTypes2.default.arrayOf(_propTypes2.default.shape(PropertyConfig)), changeHandler: _propTypes2.default.func, id: _propTypes2.default.string.isRequired }; var SelectRenderer = function SelectRenderer(_ref4) { var value = _ref4.value, options = _ref4.options, id = _ref4.id, changeHandler = _ref4.changeHandler, allowCustomValues = _ref4.allowCustomValues, multi = _ref4.multi, placeholder = _ref4.placeholder, resetValue = _ref4.resetValue, rest = _objectWithoutProperties(_ref4, ['value', 'options', 'id', 'changeHandler', 'allowCustomValues', 'multi', 'placeholder', 'resetValue']); var internalChangeHandler = function internalChangeHandler(values) { if (values) { if (Array.isArray(values)) { changeHandler(values.map(function (value) { return value.value ? value.value : null; })); } else { changeHandler(values.value ? values.value : null); } } }; //transform options if not in correct form var transformedOptions = options.map(function (option) { return (typeof option === 'undefined' ? 'undefined' : _typeof(option)) === 'object' ? option : { label: option, value: option }; }); //default behaviour of react-select is to use clearable = true, but to make this work a resetValue //in the correct format is needed return _react2.default.createElement(_reactSelect2.default, _extends({}, rest, { options: transformedOptions, name: id + '-select', value: value, onChange: internalChangeHandler, multi: multi, resetValue: resetValue ? resetValue : { label: '', value: null }, allowCreate: allowCustomValues, placeholder: placeholder ? placeholder : 'Select..' })); }; exports.SelectRenderer = SelectRenderer; SelectRenderer.propTypes = _extends({}, PropertyConfig); var MultiSelectRenderer = function MultiSelectRenderer(_ref5) { var value = _ref5.value, rest = _objectWithoutProperties(_ref5, ['value']); return _react2.default.createElement(SelectRenderer, _extends({}, rest, { value: value, multi: true })); }; exports.MultiSelectRenderer = MultiSelectRenderer; MultiSelectRenderer.propTypes = _extends({}, PropertyConfig); var BaseFormRenderer = function BaseFormRenderer(_ref6) { var object = _ref6.object, config = _ref6.config, name = _ref6.name, options = _ref6.options, Component = _ref6.component, rest = _objectWithoutProperties(_ref6, ['object', 'config', 'name', 'options', 'component']); //TODO: handle explicitly configured inputs if (Component) { return _react2.default.createElement(Component, _extends({}, rest, { value: object, name: name, config: config })); } //handle generic cases var valueType = typeof object === 'undefined' ? 'undefined' : _typeof(object); if (options && Array.isArray(options)) { return _react2.default.createElement(SelectRenderer, _extends({}, rest, config, { value: object, name: name, options: options })); } if (object === null && !options) { return _react2.default.createElement(_GenericValueInput2.default, _extends({ trim: true }, rest, config, { value: '', name: name })); } switch (valueType) { case 'number': return _react2.default.createElement(NumberValueInput, _extends({}, rest, config, { value: object, name: name })); case 'object': if (Array.isArray(object)) { return _react2.default.createElement(MultiSelectRenderer, _extends({}, rest, config, { value: object, name: name, options: options ? options : [] })); } return _react2.default.createElement(ObjectFormRenderer, _extends({}, rest, { config: config, object: object, name: name })); case 'boolean': return _react2.default.createElement(BooleanValueInput, _extends({}, rest, config, { value: object, name: name })); case 'string': //if there are options configured, use SelectRenderer if (options && Array.isArray(options)) { return _react2.default.createElement(SelectRenderer, _extends({}, rest, config, { value: object, name: name, options: options })); } return _react2.default.createElement(_GenericValueInput2.default, _extends({ trim: true }, rest, config, { value: object, name: name })); default: return _react2.default.createElement(_GenericValueInput2.default, _extends({ trim: true }, rest, config, { value: object, name: name })); } }; exports.BaseFormRenderer = BaseFormRenderer; BaseFormRenderer.propTypes = _extends({}, PropertyConfig, { object: InternalObjectValuePropType, config: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.shape(PropertyConfig)), _propTypes2.default.shape(PropertyConfig)]) }); exports.default = ReactObjectForm; exports.PropertyConfig = PropertyConfig; /***/ }), /* 1 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_1__; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { /** * Copyright 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ if (true) { var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element')) || 0xeac7; var isValidElement = function(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; }; // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; module.exports = __webpack_require__(9)(isValidElement, throwOnDirectAccess); } else { // By explicitly using `prop-types` you are opting into new production behavior. // http://fb.me/prop-types-in-prod module.exports = require('./factoryWithThrowingShims')(); } /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * */ function makeEmptyFunction(arg) { return function () { return arg; }; } /** * This function accepts and discards inputs; it has no side effects. This is * primarily useful idiomatically for overridable function endpoints which * always need to be callable, since JS lacks a null-call idiom ala Cocoa. */ var emptyFunction = function emptyFunction() {}; emptyFunction.thatReturns = makeEmptyFunction; emptyFunction.thatReturnsFalse = makeEmptyFunction(false); emptyFunction.thatReturnsTrue = makeEmptyFunction(true); emptyFunction.thatReturnsNull = makeEmptyFunction(null); emptyFunction.thatReturnsThis = function () { return this; }; emptyFunction.thatReturnsArgument = function (arg) { return arg; }; module.exports = emptyFunction; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * */ /** * Use invariant() to assert state which your program assumes to be true. * * Provide sprintf-style format (only %s is supported) and arguments * to provide information about what broke and what you were * expecting. * * The invariant message will be stripped in production, but the invariant * will remain to ensure logic does not differ in production. */ var validateFormat = function validateFormat(format) {}; if (true) { validateFormat = function validateFormat(format) { if (format === undefined) { throw new Error('invariant requires an error message argument'); } }; } function invariant(condition, format, a, b, c, d, e, f) { validateFormat(format); if (!condition) { var error; if (format === undefined) { error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); } else { var args = [a, b, c, d, e, f]; var argIndex = 0; error = new Error(format.replace(/%s/g, function () { return args[argIndex++]; })); error.name = 'Invariant Violation'; } error.framesToPop = 1; // we don't care about invariant's own frame throw error; } } module.exports = invariant; /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright 2014-2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * */ var emptyFunction = __webpack_require__(3); /** * Similar to invariant but only logs a warning if the condition is not met. * This can be used to log issues in development environments in critical * paths. Removing the logging code for production environments will keep the * same logic and follow the same code paths. */ var warning = emptyFunction; if (true) { var printWarning = function printWarning(format) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } var argIndex = 0; var message = 'Warning: ' + format.replace(/%s/g, function () { return args[argIndex++]; }); if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) {} }; warning = function warning(condition, format) { if (format === undefined) { throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); } if (format.indexOf('Failed Composite propType: ') === 0) { return; // Ignore CompositeComponent proptype check. } if (!condition) { for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { args[_key2 - 2] = arguments[_key2]; } printWarning.apply(undefined, [format].concat(args)); } }; } module.exports = warning; /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; module.exports = ReactPropTypesSecret; /***/ }), /* 7 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_7__; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { "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 _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _react = __webpack_require__(1); var _react2 = _interopRequireDefault(_react); var _ReactObjectForm = __webpack_require__(0); var _ReactObjectForm2 = _interopRequireDefault(_ReactObjectForm); var _propTypes = __webpack_require__(2); var _propTypes2 = _interopRequireDefault(_propTypes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var GenericValueInput = function (_React$Component) { _inherits(GenericValueInput, _React$Component); function GenericValueInput(props) { _classCallCheck(this, GenericValueInput); var _this = _possibleConstructorReturn(this, (GenericValueInput.__proto__ || Object.getPrototypeOf(GenericValueInput)).call(this, props)); _this.internalChangeHandler = _this.internalChangeHandler.bind(_this); _this.onBlur = _this.onBlur.bind(_this); return _this; } _createClass(GenericValueInput, [{ key: 'internalChangeHandler', value: function internalChangeHandler(event) { var returnValue = event.target.value; if (returnValue === '') { returnValue = null; } this.props.changeHandler(returnValue); } }, { key: 'onBlur', value: function onBlur() { if (this.props.trim) { var returnValue = this.props.value ? this.props.value.trim() : null; this.internalChangeHandler({ target: { value: returnValue } }); } } }, { key: 'render', value: function render() { var _props = this.props, value = _props.value, id = _props.id, placeholder = _props.placeholder, disabled = _props.disabled; return _react2.default.createElement('input', { id: id + '-input', className: (disabled ? 'disabled' : '') + ' form-control generic-value-input', type: 'text', value: value, onChange: this.internalChangeHandler, onBlur: this.onBlur, placeholder: placeholder, disabled: disabled ? 'disabled' : null }); } }]); return GenericValueInput; }(_react2.default.Component); GenericValueInput.propTypes = _extends({}, _ReactObjectForm2.default, { value: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string, _propTypes2.default.arrayOf([_propTypes2.default.number, _propTypes2.default.string])]), config: _propTypes2.default.shape(_ReactObjectForm2.default) }); exports.default = GenericValueInput; /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var emptyFunction = __webpack_require__(3); var invariant = __webpack_require__(4); var warning = __webpack_require__(5); var ReactPropTypesSecret = __webpack_require__(6); var checkPropTypes = __webpack_require__(10); module.exports = function(isValidElement, throwOnDirectAccess) { /* global Symbol */ var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. /** * Returns the iterator method function contained on the iterable object. * * Be sure to invoke the function with the iterable as context: * * var iteratorFn = getIteratorFn(myIterable); * if (iteratorFn) { * var iterator = iteratorFn.call(myIterable); * ... * } * * @param {?object} maybeIterable * @return {?function} */ function getIteratorFn(maybeIterable) { var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); if (typeof iteratorFn === 'function') { return iteratorFn; } } /** * Collection of methods that allow declaration and validation of props that are * supplied to React components. Example usage: * * var Props = require('ReactPropTypes'); * var MyArticle = React.createClass({ * propTypes: { * // An optional string prop named "description". * description: Props.string, * * // A required enum prop named "category". * category: Props.oneOf(['News','Photos']).isRequired, * * // A prop named "dialog" that requires an instance of Dialog. * dialog: Props.instanceOf(Dialog).isRequired * }, * render: function() { ... } * }); * * A more formal specification of how these methods are used: * * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) * decl := ReactPropTypes.{type}(.isRequired)? * * Each and every declaration produces a function with the same signature. This * allows the creation of custom validation functions. For example: * * var MyLink = React.createClass({ * propTypes: { * // An optional string or URI prop named "href". * href: function(props, propName, componentName) { * var propValue = props[propName]; * if (propValue != null && typeof propValue !== 'string' && * !(propValue instanceof URI)) { * return new Error( * 'Expected a string or an URI for ' + propName + ' in ' + * componentName * ); * } * } * }, * render: function() {...} * }); * * @internal */ var ANONYMOUS = '<<anonymous>>'; // Important! // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. var ReactPropTypes = { array: createPrimitiveTypeChecker('array'), bool: createPrimitiveTypeChecker('boolean'), func: createPrimitiveTypeChecker('function'), number: createPrimitiveTypeChecker('number'), object: createPrimitiveTypeChecker('object'), string: createPrimitiveTypeChecker('string'), symbol: createPrimitiveTypeChecker('symbol'), any: createAnyTypeChecker(), arrayOf: createArrayOfTypeChecker, element: createElementTypeChecker(), instanceOf: createInstanceTypeChecker, node: createNodeChecker(), objectOf: createObjectOfTypeChecker, oneOf: createEnumTypeChecker, oneOfType: createUnionTypeChecker, shape: createShapeTypeChecker }; /** * inlined Object.is polyfill to avoid requiring consumers ship their own * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ /*eslint-disable no-self-compare*/ function is(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 return x !== 0 || 1 / x === 1 / y; } else { // Step 6.a: NaN == NaN return x !== x && y !== y; } } /*eslint-enable no-self-compare*/ /** * We use an Error-like object for backward compatibility as people may call * PropTypes directly and inspect their output. However, we don't use real * Errors anymore. We don't inspect their stack anyway, and creating them * is prohibitively expensive if they are created too often, such as what * happens in oneOfType() for any type before the one that matched. */ function PropTypeError(message) { this.message = message; this.stack = ''; } // Make `instanceof Error` still work for returned errors. PropTypeError.prototype = Error.prototype; function createChainableTypeChecker(validate) { if (true) { var manualPropTypeCallCache = {}; var manualPropTypeWarningCount = 0; } function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { componentName = componentName || ANONYMOUS; propFullName = propFullName || propName; if (secret !== ReactPropTypesSecret) { if (throwOnDirectAccess) { // New behavior only for users of `prop-types` package invariant( false, 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types' ); } else if ("development" !== 'production' && typeof console !== 'undefined') { // Old behavior for people using React.PropTypes var cacheKey = componentName + ':' + propName; if ( !manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors manualPropTypeWarningCount < 3 ) { warning( false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.', propFullName, componentName ); manualPropTypeCallCache[cacheKey] = true; manualPropTypeWarningCount++; } } } if (props[propName] == null) { if (isRequired) { if (props[propName] === null) { return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); } return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); } return null; } else { return validate(props, propName, componentName, location, propFullName); } } var chainedCheckType = checkType.bind(null, false); chainedCheckType.isRequired = checkType.bind(null, true); return chainedCheckType; } function createPrimitiveTypeChecker(expectedType) { function validate(props, propName, componentName, location, propFullName, secret) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== expectedType) { // `propValue` being instance of, say, date/regexp, pass the 'object' // check, but we can offer a more precise error message here rather than // 'of type `object`'. var preciseType = getPreciseType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); } return null; } return createChainableTypeChecker(validate); } function createAnyTypeChecker() { return createChainableTypeChecker(emptyFunction.thatReturnsNull); } function createArrayOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); } var propValue = props[propName]; if (!Array.isArray(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); } for (var i = 0; i < propValue.length; i++) { var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); if (error instanceof Error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createElementTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!isValidElement(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); } return null; } return createChainableTypeChecker(validate); } function createInstanceTypeChecker(expectedClass) { function validate(props, propName, componentName, location, propFullName) { if (!(props[propName] instanceof expectedClass)) { var expectedClassName = expectedClass.name || ANONYMOUS; var actualClassName = getClassName(props[propName]); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); } return null; } return createChainableTypeChecker(validate); } function createEnumTypeChecker(expectedValues) { if (!Array.isArray(expectedValues)) { true ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0; return emptyFunction.thatReturnsNull; } function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; for (var i = 0; i < expectedValues.length; i++) { if (is(propValue, expectedValues[i])) { return null; } } var valuesString = JSON.stringify(expectedValues); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); } return createChainableTypeChecker(validate); } function createObjectOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); } var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); } for (var key in propValue) { if (propValue.hasOwnProperty(key)) { var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error instanceof Error) { return error; } } } return null; } return createChainableTypeChecker(validate); } function createUnionTypeChecker(arrayOfTypeCheckers) { if (!Array.isArray(arrayOfTypeCheckers)) { true ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0; return emptyFunction.thatReturnsNull; } for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; if (typeof checker !== 'function') { warning( false, 'Invalid argument supplid to oneOfType. Expected an array of check functions, but ' + 'received %s at index %s.', getPostfixForTypeWarning(checker), i ); return emptyFunction.thatReturnsNull; } } function validate(props, propName, componentName, location, propFullName) { for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) { return null; } } return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); } return createChainableTypeChecker(validate); } function createNodeChecker() { function validate(props, propName, componentName, location, propFullName) { if (!isNode(props[propName])) { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); } return null; } return createChainableTypeChecker(validate); } function createShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } for (var key in shapeTypes) { var checker = shapeTypes[key]; if (!checker) { continue; } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function isNode(propValue) { switch (typeof propValue) { case 'number': case 'string': case 'undefined': return true; case 'boolean': return !propValue; case 'object': if (Array.isArray(propValue)) { return propValue.every(isNode); } if (propValue === null || isValidElement(propValue)) { return true; } var iteratorFn = getIteratorFn(propValue); if (iteratorFn) { var iterator = iteratorFn.call(propValue); var step; if (iteratorFn !== propValue.entries) { while (!(step = iterator.next()).done) { if (!isNode(step.value)) { return false; } } } else { // Iterator will provide entry [k,v] tuples rather than values. while (!(step = iterator.next()).done) { var entry = step.value; if (entry) { if (!isNode(entry[1])) { return false; } } } } } else { return false; } return true; default: return false; } } function isSymbol(propType, propValue) { // Native Symbol. if (propType === 'symbol') { return true; } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' if (propValue['@@toStringTag'] === 'Symbol') { return true; } // Fallback for non-spec compliant Symbols which are polyfilled. if (typeof Symbol === 'function' && propValue instanceof Symbol) { return true; } return false; } // Equivalent of `typeof` but with special handling for array and regexp. function getPropType(propValue) { var propType = typeof propValue; if (Array.isArray(propValue)) { return 'array'; } if (propValue instanceof RegExp) { // Old webkits (at least until Android 4.0) return 'function' rather than // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ // passes PropTypes.object. return 'object'; } if (isSymbol(propType, propValue)) { return 'symbol'; } return propType; } // This handles more types than `getPropType`. Only used for error messages. // See `createPrimitiveTypeChecker`. function getPreciseType(propValue) {