diff --git a/CHANGELOG.md b/CHANGELOG.md index 7babe56e..64c7af3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed +## 0.6.2 - 2018-11-26 +### Added + +### Changed +- Updating project dependencies to latest version #135. Thanks @naeemba +- Flow #134. Thanks @naeemba + ## 0.6.1 - 2018-11-19 ### Added diff --git a/lib/Array.js b/lib/Array.js index 5759df59..54199fe8 100644 --- a/lib/Array.js +++ b/lib/Array.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true @@ -8,37 +8,41 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol 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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _styles = require('@material-ui/core/styles'); +var _styles = require("@material-ui/core/styles"); -var _Button = require('@material-ui/core/Button'); +var _Button = require("@material-ui/core/Button"); var _Button2 = _interopRequireDefault(_Button); -var _Card = require('@material-ui/core/Card'); +var _Card = require("@material-ui/core/Card"); var _Card2 = _interopRequireDefault(_Card); -var _IconButton = require('@material-ui/core/IconButton'); +var _IconButton = require("@material-ui/core/IconButton"); var _IconButton2 = _interopRequireDefault(_IconButton); -var _Close = require('@material-ui/icons/Close'); +var _Close = require("@material-ui/icons/Close"); var _Close2 = _interopRequireDefault(_Close); -var _cloneDeep = require('lodash/cloneDeep'); +var _Typography = require("@material-ui/core/Typography"); + +var _Typography2 = _interopRequireDefault(_Typography); + +var _cloneDeep = require("lodash/cloneDeep"); var _cloneDeep2 = _interopRequireDefault(_cloneDeep); -var _utils = require('./utils'); +var _utils = require("./utils"); var _utils2 = _interopRequireDefault(_utils); -var _ComposedComponent = require('./ComposedComponent'); +var _ComposedComponent = require("./ComposedComponent"); var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); @@ -48,22 +52,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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; } /** - * Created by steve on 11/09/15. - */ +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; } +/** + * Created by steve on 11/09/15. + */ var styles = function styles(theme) { return { arrayItem: { - position: 'relative', + position: "relative", padding: theme.spacing.unit, - marginBottom: theme.spacing.unit + marginBottom: theme.spacing.unit, + display: "flex" }, deleteItemButton: { - position: 'absolute', - top: -theme.spacing.unit, - right: -theme.spacing.unit + margin: [[-theme.spacing.unit, -theme.spacing.unit, "auto", "auto"]] }, addButton: { marginTop: theme.spacing.unit @@ -71,19 +75,22 @@ var styles = function styles(theme) { }; }; -var Array = function (_React$Component) { - _inherits(Array, _React$Component); +var Array = function (_Component) { + _inherits(Array, _Component); _createClass(Array, null, [{ - key: 'assignItemId', + key: "assignItemId", value: function assignItemId(item) { - if (item && (typeof item === 'undefined' ? 'undefined' : _typeof(item)) === 'object' && !item[Array.ITEM_ID]) { + if (item && (typeof item === "undefined" ? "undefined" : _typeof(item)) === "object" && !item[Array.ITEM_ID]) { + var newItem = Object.assign({}, item); // define hidden property with internal id - Object.defineProperty(item, Array.ITEM_ID, { + Object.defineProperty(newItem, Array.ITEM_ID, { enumerable: false, writable: true }); - item[Array.ITEM_ID] = Array._SEQUENCE++; + Array.SEQUENCE += 1; + newItem[Array.ITEM_ID] = Array.SEQUENCE; + return newItem; } return item; } @@ -94,155 +101,110 @@ var Array = function (_React$Component) { var _this = _possibleConstructorReturn(this, (Array.__proto__ || Object.getPrototypeOf(Array)).call(this, props)); - _this.onAppend = _this.onAppend.bind(_this); - _this.onDelete = _this.onDelete.bind(_this); + _initialiseProps.call(_this); + + var _this$props = _this.props, + form = _this$props.form, + model = _this$props.model; // we have the model here for the entire form, get the model for this array only // and add to the state. if is empty, add an entry by calling onAppend directly. + _this.state = { - model: _utils2.default.selectOrSet(_this.props.form.key, _this.props.model) || [] + model: _utils2.default.selectOrSet(form.key, model) || [] }; - //console.log('constructor', this.props.form.key, this.props.model, this.state.model); return _this; } _createClass(Array, [{ - key: 'componentDidMount', + key: "componentDidMount", value: function componentDidMount() { + var _props = this.props, + form = _props.form, + model = _props.model; // Always start with one empty form unless configured otherwise. - if (this.props.form.startEmpty !== true && this.state.model.length === 0) { + + if (form.startEmpty !== true && model.length === 0) { this.onAppend(); } } }, { - key: 'onAppend', - value: function onAppend() { - //console.log('onAppend is called this.state.model', this.state.model); - var empty; - if (this.props.form && this.props.form.schema && this.props.form.schema.items) { - var items = this.props.form.schema.items; - if (items.type && items.type.indexOf('object') !== -1) { - empty = {}; - - // Check for possible defaults - if (!this.props.options || this.props.options.setSchemaDefaults !== false) { - empty = typeof items['default'] !== 'undefined' ? items['default'] : empty; - - // Check for defaults further down in the schema. - // If the default instance sets the new array item to something falsy, i.e. null - // then there is no need to go further down. - if (empty) { - _utils2.default.traverseSchema(items, function (prop, path) { - if (typeof prop['default'] !== 'undefined') { - _utils2.default.selectOrSet(path, empty, prop['default']); - } - }); - } - } - } else if (items.type && items.type.indexOf('array') !== -1) { - empty = []; - if (!this.props.options || this.props.options.setSchemaDefaults !== false) { - empty = items['default'] || empty; - } - } else { - // No type? could still have defaults. - if (!this.props.options || this.props.options.setSchemaDefaults !== false) { - empty = items['default'] || empty; - } - } - } - var newModel = this.state.model; - Array.assignItemId(empty); - newModel.push(empty); - this.setState({ - model: newModel - }); - this.props.onChangeValidate(this.state.model); - //console.log('After append this.state.model', newModel); - } - }, { - key: 'onDelete', - value: function onDelete(index) { - // console.log('onDelete is called', index); - var newModel = this.state.model; - newModel.splice(index, 1); - this.setState({ - model: newModel - }); - this.props.onChangeValidate(this.state.model); - } - }, { - key: 'setIndex', - value: function setIndex(index) { - return function (form) { - if (form.key) { - form.key[form.key.indexOf('')] = index; - } - }; - } - }, { - key: 'copyWithIndex', - value: function copyWithIndex(form, index) { - var copy = (0, _cloneDeep2.default)(form); - copy.arrayIndex = index; - _utils2.default.traverseForm(copy, this.setIndex(index)); - return copy; - } - }, { - key: 'render', + key: "render", value: function render() { - //console.log('Array.render', this.props.form.items, this.props.model, this.state.model); - var _props = this.props, - classes = _props.classes, - form = _props.form; + var _this2 = this; + + var _props2 = this.props, + classes = _props2.classes, + form = _props2.form, + builder = _props2.builder, + model = _props2.model, + mapper = _props2.mapper, + onChange = _props2.onChange; + var stateModel = this.state.model; var arrays = []; - var model = this.state.model; - // console.log('Array.render', model); - for (var i = 0; i < model.length; i++) { - var item = model[i]; - var onItemDelete = this.onDelete.bind(this, i); - var forms = form.items.map(function (form, index) { - var copy = this.copyWithIndex(form, i); - return this.props.builder(copy, this.props.model, index, this.props.mapper, this.props.onChange, this.props.builder); - }.bind(this)); - //console.log('forms', i, forms); + + var _loop = function _loop(i) { + var item = stateModel[i]; + var forms = form.items.map(function (eachForm, index) { + var copy = Array.copyWithIndex(eachForm, i); + return builder(copy, model, index, mapper, onChange, builder); + }); arrays.push(_react2.default.createElement( _Card2.default, - { className: classes.arrayItem, key: item && item[Array.ITEM_ID] || i }, + { + className: classes.arrayItem, + key: item && item[Array.ITEM_ID] || i + }, _react2.default.createElement( - _IconButton2.default, - { onClick: onItemDelete, className: classes.deleteItemButton }, - _react2.default.createElement(_Close2.default, { fontSize: 'small' }) + "div", + null, + forms ), - forms + _react2.default.createElement( + _IconButton2.default, + { + onClick: _this2.onDelete(i), + className: classes.deleteItemButton + }, + _react2.default.createElement(_Close2.default, { fontSize: "small" }) + ) )); + }; + + for (var i = 0; i < stateModel.length; i += 1) { + _loop(i); } return _react2.default.createElement( - 'div', + "div", null, _react2.default.createElement( - 'div', + "div", null, _react2.default.createElement( - 'label', - null, - this.props.form.title + _Typography2.default, + { variant: "h6" }, + form.title ), _react2.default.createElement( - 'div', + "div", null, arrays ) ), _react2.default.createElement( _Button2.default, - { className: classes.addButton, variant: 'contained', color: 'primary', onClick: this.onAppend }, - this.props.form.add || 'Add' + { + className: classes.addButton, + variant: "contained", + color: "primary", + onClick: this.onAppend + }, + form.add || "Add" ) ); } }], [{ - key: 'getDerivedStateFromProps', + key: "getDerivedStateFromProps", value: function getDerivedStateFromProps(props, state) { var propsKey = props.form.key; if (props.form && propsKey === state.formKey && props.model && props.model[propsKey] === state.model) { @@ -257,8 +219,92 @@ var Array = function (_React$Component) { }]); return Array; -}(_react2.default.Component); +}(_react.Component); + +Array.ITEM_ID = "_SCHEMAFORM_ITEM_ID"; +Array.SEQUENCE = 1; + +Array.setIndex = function (index) { + return function (form) { + if (form.key) { + // todo fix mutable object + // eslint-disable-next-line no-param-reassign + form.key[form.key.indexOf("")] = index; + } + }; +}; + +Array.copyWithIndex = function (form, index) { + var copy = (0, _cloneDeep2.default)(form); + copy.arrayIndex = index; + _utils2.default.traverseForm(copy, Array.setIndex(index)); + return copy; +}; + +var _initialiseProps = function _initialiseProps() { + var _this3 = this; + + this.onAppend = function () { + var _props3 = _this3.props, + form = _props3.form, + options = _props3.options, + onChangeValidate = _props3.onChangeValidate; + var model = _this3.state.model; + + var empty = void 0; + if (form && form.schema && form.schema.items) { + var items = form.schema.items; + + if (items.type && items.type.indexOf("object") !== -1) { + empty = {}; + + // Check for possible defaults + if (!options || options.setSchemaDefaults !== false) { + empty = typeof items.default !== "undefined" ? items.default : empty; + + // Check for defaults further down in the schema. + // If the default instance sets the new array item to something falsy, i.e. null + // then there is no need to go further down. + if (empty) { + _utils2.default.traverseSchema(items, function (prop, path) { + if (typeof prop.default !== "undefined") { + _utils2.default.selectOrSet(path, empty, prop.default); + } + }); + } + } + } else if (items.type && items.type.indexOf("array") !== -1) { + empty = []; + if (!options || options.setSchemaDefaults !== false) { + empty = items.default || empty; + } + } else if (!options || options.setSchemaDefaults !== false) { + // No type? could still have defaults. + empty = items.default || empty; + } + } + var newModel = model; + Array.assignItemId(empty); + newModel.push(empty); + _this3.setState({ + model: newModel + }); + onChangeValidate(model); + }; + + this.onDelete = function (index) { + return function () { + var model = _this3.state.model; + var onChangeValidate = _this3.props.onChangeValidate; + + var newModel = model; + newModel.splice(index, 1); + _this3.setState({ + model: newModel + }); + onChangeValidate(model); + }; + }; +}; -Array.ITEM_ID = '_SCHEMAFORM_ITEM_ID'; -Array._SEQUENCE = 1; exports.default = (0, _ComposedComponent2.default)((0, _styles.withStyles)(styles)(Array)); \ No newline at end of file diff --git a/lib/Checkbox.js b/lib/Checkbox.js index f2474ecd..b12e3892 100644 --- a/lib/Checkbox.js +++ b/lib/Checkbox.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true @@ -6,39 +6,40 @@ Object.defineProperty(exports, "__esModule", { 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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _ComposedComponent = require('./ComposedComponent'); - -var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); - -var _Checkbox = require('@material-ui/core/Checkbox'); +var _Checkbox = require("@material-ui/core/Checkbox"); var _Checkbox2 = _interopRequireDefault(_Checkbox); -var _FormGroup = require('@material-ui/core/FormGroup'); +var _FormGroup = require("@material-ui/core/FormGroup"); var _FormGroup2 = _interopRequireDefault(_FormGroup); -var _FormControlLabel = require('@material-ui/core/FormControlLabel'); +var _FormControlLabel = require("@material-ui/core/FormControlLabel"); var _FormControlLabel2 = _interopRequireDefault(_FormControlLabel); +var _ComposedComponent = require("./ComposedComponent"); + +var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); + 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; } /** - * Created by steve on 20/09/15. - */ +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; } +/** + * Created by steve on 20/09/15. + */ -var FormCheckbox = function (_React$Component) { - _inherits(FormCheckbox, _React$Component); +var FormCheckbox = function (_Component) { + _inherits(FormCheckbox, _Component); function FormCheckbox() { var _ref; @@ -52,26 +53,35 @@ var FormCheckbox = function (_React$Component) { } return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = FormCheckbox.__proto__ || Object.getPrototypeOf(FormCheckbox)).call.apply(_ref, [this].concat(args))), _this), _this.handleChange = function (e) { - _this.props.onChangeValidate(e); + var onChangeValidate = _this.props.onChangeValidate; + + onChangeValidate(e); }, _temp), _possibleConstructorReturn(_this, _ret); } _createClass(FormCheckbox, [{ - key: 'render', + key: "render", value: function render() { - // let value = selectOrSet(this.props.form.key, this.props.model); + var _this2 = this; + + var _props = this.props, + form = _props.form, + value = _props.value; + return _react2.default.createElement( _FormGroup2.default, { row: true }, _react2.default.createElement(_FormControlLabel2.default, { - className: this.props.form.className, - label: this.props.form.title, + className: form.className, + label: form.title, control: _react2.default.createElement(_Checkbox2.default, { - name: this.props.form.key.slice(-1)[0], - value: this.props.form.key.slice(-1)[0], - checked: this.props.value || false, - disabled: this.props.form.readonly, - onChange: this.handleChange + name: form.key.slice(-1)[0], + value: form.key.slice(-1)[0], + checked: value || false, + disabled: form.readonly, + onChange: function onChange(e) { + return _this2.handleChange(e); + } }) }) ); @@ -79,6 +89,6 @@ var FormCheckbox = function (_React$Component) { }]); return FormCheckbox; -}(_react2.default.Component); +}(_react.Component); exports.default = (0, _ComposedComponent2.default)(FormCheckbox); \ No newline at end of file diff --git a/lib/ComposedComponent.js b/lib/ComposedComponent.js index ccff0fce..76b525ee 100755 --- a/lib/ComposedComponent.js +++ b/lib/ComposedComponent.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true @@ -8,37 +8,35 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument 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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + 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 React = require('react'); - - -var utils = require('./utils'); +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 defaultValue = function defaultValue(props) { // check if there is a value in the model, if there is, display it. Otherwise, check if // there is a default value, display it. - // console.log('Text.defaultValue key', this.props.form.key); - // console.log('Text.defaultValue model', this.props.model); var value = void 0; - if (props.form && props.form.key) value = utils.selectOrSet(props.form.key, props.model); - //console.log('Text defaultValue value = ', value); + if (props.form && props.form.key) value = _utils2.default.selectOrSet(props.form.key, props.model); // check if there is a default value - if (!value && props.form['default']) { - value = props.form['default']; - } - - if (!value && props.form.schema && props.form.schema['default']) { - value = props.form.schema['default']; + if (value === null || value === undefined) { + if (props.form.default) { + value = props.form.default; + } else if (props.form.schema && props.form.schema.default) { + value = props.form.schema.default; + } } return value; }; @@ -53,19 +51,23 @@ exports.default = function (ComposedComponent) { var _this = _possibleConstructorReturn(this, (Composed.__proto__ || Object.getPrototypeOf(Composed)).call(this, props)); + var _this$props = _this.props, + errorText = _this$props.errorText, + form = _this$props.form; + _this.onChangeValidate = _this.onChangeValidate.bind(_this); var value = defaultValue(_this.props); - var validationResult = utils.validate(_this.props.form, value); + var validationResult = _utils2.default.validate(form, value); _this.state = { value: value, valid: !!(validationResult.valid || !value), - error: !validationResult.valid && (value ? validationResult.error.message : null) || _this.props.errorText + error: !validationResult.valid && (value ? validationResult.error.message : null) || errorText }; return _this; } _createClass(Composed, [{ - key: 'onChangeValidate', + key: "onChangeValidate", /** @@ -73,57 +75,75 @@ exports.default = function (ComposedComponent) { * @param e The input element, or something. */ value: function onChangeValidate(e, v) { - var value = null; - switch (this.props.form.schema.type) { - case 'integer': - case 'number': - if (e.target.value.indexOf('.') == -1) { - value = parseInt(e.target.value); - } else { - value = parseFloat(e.target.value); - } + var _props = this.props, + form = _props.form, + onChange = _props.onChange; - if (isNaN(value)) { - value = undefined; - } + var value = null; + switch (form.schema.type) { + case "integer": + value = parseInt(e.target.value, 10); break; - case 'boolean': + case "number": + { + var values = e.target.value.split("."); + if (values.length < 2) { + value = parseInt(e.target.value, 10); + } else if (values.length > 1) { + if (values[1].length > 0) value = parseFloat(e.target.value);else value = parseInt(values[0], 10) + "."; + } + break; + } + case "boolean": value = e.target.checked; break; - case 'tBoolean': - if (e.target.value != 'yes' || e.target.value != 'no') { + case "tBoolean": + if (e.target.value !== "yes" || e.target.value !== "no") { value = v; } break; - case 'array': + case "array": value = e; break; - case 'object': + case "object": + if (form.type === "date") { + if (e.target.value.length > 0) { + value = new Date(e.target.value); + } else { + value = ""; + } + break; + } + value = e.target.value; + + break; default: value = e.target.value; + } - //console.log('onChangeValidate this.props.form, value', this.props.form, value); - var validationResult = utils.validate(this.props.form, value); + var validationResult = _utils2.default.validate(form, value); this.setState({ value: value, valid: validationResult.valid, error: validationResult.valid ? null : validationResult.error.message }); - this.props.onChange(this.props.form.key, value); + onChange(form.key, value); } }, { - key: 'render', + key: "render", value: function render() { - return _react2.default.createElement(ComposedComponent, _extends({}, defaultProps, this.props, this.state, { onChangeValidate: this.onChangeValidate })); + return _react2.default.createElement(ComposedComponent, _extends({}, defaultProps, this.props, this.state, { + onChangeValidate: this.onChangeValidate + })); } }], [{ - key: 'getDerivedStateFromProps', + key: "getDerivedStateFromProps", value: function getDerivedStateFromProps(nextProps) { var value = defaultValue(nextProps); - var validationResult = utils.validate(nextProps.form, value); + var validationResult = _utils2.default.validate(nextProps.form, value); return { value: value, valid: validationResult.valid, diff --git a/lib/Date.js b/lib/Date.js index ecfb7489..3ed5da9b 100644 --- a/lib/Date.js +++ b/lib/Date.js @@ -1,14 +1,14 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var _ComposedComponent = require('./ComposedComponent'); +var _ComposedComponent = require("./ComposedComponent"); var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); -var _NativeDateField = require('./NativeDateField'); +var _NativeDateField = require("./NativeDateField"); var _NativeDateField2 = _interopRequireDefault(_NativeDateField); @@ -17,4 +17,4 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de /** * Created by steve on 22/12/15. */ -exports.default = (0, _ComposedComponent2.default)(_NativeDateField2.default, { type: 'date' }); \ No newline at end of file +exports.default = (0, _ComposedComponent2.default)(_NativeDateField2.default, { type: "date" }); \ No newline at end of file diff --git a/lib/DateTime.js b/lib/DateTime.js index 49b108d6..d6359a96 100644 --- a/lib/DateTime.js +++ b/lib/DateTime.js @@ -1,17 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var _ComposedComponent = require('./ComposedComponent'); +var _ComposedComponent = require("./ComposedComponent"); var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); -var _NativeDateField = require('./NativeDateField'); +var _NativeDateField = require("./NativeDateField"); var _NativeDateField2 = _interopRequireDefault(_NativeDateField); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -exports.default = (0, _ComposedComponent2.default)(_NativeDateField2.default, { type: 'datetime-local' }); \ No newline at end of file +exports.default = (0, _ComposedComponent2.default)(_NativeDateField2.default, { type: "datetime-local" }); \ No newline at end of file diff --git a/lib/FieldSet.js b/lib/FieldSet.js index f4dc6915..829589fa 100644 --- a/lib/FieldSet.js +++ b/lib/FieldSet.js @@ -1,36 +1,28 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _FormControl = require('@material-ui/core/FormControl'); +var _FormControl = require("@material-ui/core/FormControl"); var _FormControl2 = _interopRequireDefault(_FormControl); -var _FormLabel = require('@material-ui/core/FormLabel'); +var _FormLabel = require("@material-ui/core/FormLabel"); var _FormLabel2 = _interopRequireDefault(_FormLabel); -var _styles = require('@material-ui/core/styles'); +var _styles = require("@material-ui/core/styles"); 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; } /** - * Created by steve on 11/09/15. - */ - - +/** + * Created by steve on 11/09/15. + */ var styles = function styles(theme) { return { root: { @@ -42,50 +34,32 @@ var styles = function styles(theme) { }; }; -var FieldSet = function (_React$Component) { - _inherits(FieldSet, _React$Component); - - function FieldSet() { - _classCallCheck(this, FieldSet); - - return _possibleConstructorReturn(this, (FieldSet.__proto__ || Object.getPrototypeOf(FieldSet)).apply(this, arguments)); - } - - _createClass(FieldSet, [{ - key: 'render', - value: function render() { - //console.log('FieldSet.render', this.props); - var _props = this.props, - form = _props.form, - mapper = _props.mapper, - builder = _props.builder, - model = _props.model, - onChange = _props.onChange, - classes = _props.classes; - // now render all the items in the fieldset - - var forms = form.items.map(function (f, index) { - return builder(f, model, index, mapper, onChange, builder); - }); - - return _react2.default.createElement( - _FormControl2.default, - { component: 'fieldset', className: classes.root }, - _react2.default.createElement( - _FormLabel2.default, - { component: 'legend' }, - form.title - ), - _react2.default.createElement( - 'div', - { className: classes.fields }, - forms - ) - ); - } - }]); - - return FieldSet; -}(_react2.default.Component); +var FieldSet = function FieldSet(_ref) { + var form = _ref.form, + mapper = _ref.mapper, + builder = _ref.builder, + model = _ref.model, + onChange = _ref.onChange, + classes = _ref.classes; + + var forms = form.items.map(function (f, index) { + return builder(f, model, index, mapper, onChange, builder); + }); + + return _react2.default.createElement( + _FormControl2.default, + { component: "fieldset", className: classes.root }, + _react2.default.createElement( + _FormLabel2.default, + { component: "legend" }, + form.title + ), + _react2.default.createElement( + "div", + { className: classes.fields }, + forms + ) + ); +}; exports.default = (0, _styles.withStyles)(styles)(FieldSet); \ No newline at end of file diff --git a/lib/Help.js b/lib/Help.js index f82e4047..1d740a76 100644 --- a/lib/Help.js +++ b/lib/Help.js @@ -1,53 +1,29 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _Typography = require('@material-ui/core/Typography'); +var _Typography = require("@material-ui/core/Typography"); var _Typography2 = _interopRequireDefault(_Typography); 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; } /** - * Created by steve on 20/09/15. - */ - - -var Help = function (_React$Component) { - _inherits(Help, _React$Component); - - function Help() { - _classCallCheck(this, Help); - - return _possibleConstructorReturn(this, (Help.__proto__ || Object.getPrototypeOf(Help)).apply(this, arguments)); - } - - _createClass(Help, [{ - key: 'render', - value: function render() { - var description = this.props.form.description; - - return _react2.default.createElement( - _Typography2.default, - { variant: 'body2' }, - description - ); - } - }]); - - return Help; -}(_react2.default.Component); +/** + * Created by steve on 20/09/15. + */ +var Help = function Help(_ref) { + var description = _ref.form.description; + return _react2.default.createElement( + _Typography2.default, + { variant: "body2" }, + description + ); +}; exports.default = Help; \ No newline at end of file diff --git a/lib/MultiSelect.js b/lib/MultiSelect.js index 136946a0..9d7c9429 100644 --- a/lib/MultiSelect.js +++ b/lib/MultiSelect.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true @@ -6,37 +6,39 @@ Object.defineProperty(exports, "__esModule", { 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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _ComposedComponent = require('./ComposedComponent'); +var _styles = require("@material-ui/core/styles"); -var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); - -var _styles = require('@material-ui/core/styles'); - -var _MenuItem = require('@material-ui/core/MenuItem'); +var _MenuItem = require("@material-ui/core/MenuItem"); var _MenuItem2 = _interopRequireDefault(_MenuItem); -var _Select = require('@material-ui/core/Select'); +var _Select = require("@material-ui/core/Select"); var _Select2 = _interopRequireDefault(_Select); -var _InputLabel = require('@material-ui/core/InputLabel'); +var _InputLabel = require("@material-ui/core/InputLabel"); var _InputLabel2 = _interopRequireDefault(_InputLabel); -var _FormControl = require('@material-ui/core/FormControl'); +var _FormControl = require("@material-ui/core/FormControl"); var _FormControl2 = _interopRequireDefault(_FormControl); -var _Chip = require('@material-ui/core/Chip'); +var _Chip = require("@material-ui/core/Chip"); var _Chip2 = _interopRequireDefault(_Chip); -var _utils = require('./utils'); +var _ComposedComponent = require("./ComposedComponent"); + +var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -49,12 +51,12 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var styles = function styles(theme) { return { root: { - display: 'flex', - flexWrap: 'wrap' + display: "flex", + flexWrap: "wrap" }, chips: { - display: 'flex', - flexWrap: 'wrap' + display: "flex", + flexWrap: "wrap" }, chip: { margin: theme.spacing.unit / 4 @@ -88,33 +90,39 @@ var MultiSelect = function (_Component) { var _this = _possibleConstructorReturn(this, (MultiSelect.__proto__ || Object.getPrototypeOf(MultiSelect)).call(this, props)); _this.onSelected = function (event) { + var onChangeValidate = _this.props.onChangeValidate; + var currentValue = event.target.value; _this.setState({ currentValue: currentValue }); - _this.props.onChangeValidate(currentValue); + onChangeValidate(currentValue); }; + var _this$props = _this.props, + model = _this$props.model, + form = _this$props.form; + _this.state = { - currentValue: (0, _utils.getValueFromModel)(_this.props.model, _this.props.form.key) || [] + currentValue: _utils2.default.getValueFromModel(model, form.key) || [] }; return _this; } _createClass(MultiSelect, [{ - key: 'render', + key: "render", value: function render() { var _props = this.props, form = _props.form, classes = _props.classes; var currentValue = this.state.currentValue; - var getTitle = _utils.getTitleByValue.bind(this, form.titleMap); + var getTitle = _utils2.default.getTitleByValue.bind(this, form.titleMap); var menuItems = form.titleMap.map(function (item) { return _react2.default.createElement( _MenuItem2.default, { key: item.value, value: item.value, - className: currentValue.indexOf(name) === -1 ? classes.menuItem : classes.selectedMenuItem + className: currentValue.indexOf(item.value) === -1 ? classes.menuItem : classes.selectedMenuItem }, item.name ); @@ -131,17 +139,21 @@ var MultiSelect = function (_Component) { _Select2.default, { multiple: true, - value: this.state.currentValue || '', + value: currentValue || "", placeholder: form.title, disabled: form.readonly, onChange: this.onSelected, MenuProps: MenuProps, renderValue: function renderValue(selected) { return _react2.default.createElement( - 'div', + "div", { className: classes.chips }, selected.map(function (value) { - return _react2.default.createElement(_Chip2.default, { key: value, label: getTitle(value), className: classes.chip }); + return _react2.default.createElement(_Chip2.default, { + key: value, + label: getTitle(value), + className: classes.chip + }); }) ); } @@ -151,13 +163,14 @@ var MultiSelect = function (_Component) { ); } }], [{ - key: 'getDerivedStateFromProps', + key: "getDerivedStateFromProps", value: function getDerivedStateFromProps(props) { if (props.model && props.form.key) { return { - currentValue: (0, _utils.getValueFromModel)(props.model, props.form.key) || [] + currentValue: _utils2.default.getValueFromModel(props.model, props.form.key) || [] }; } + return null; } }]); diff --git a/lib/NativeDateField.js b/lib/NativeDateField.js index eb9c6be3..f900e0dd 100644 --- a/lib/NativeDateField.js +++ b/lib/NativeDateField.js @@ -1,71 +1,43 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -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; }; +/* +Native date field. +Contains common logic for final components Date and DateTime. +*/ -var _react = require('react'); + +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _TextField = require('@material-ui/core/TextField'); +var _TextField = require("@material-ui/core/TextField"); var _TextField2 = _interopRequireDefault(_TextField); 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; } /* - Native date field. - Contains common logic for final components Date and DateTime. - */ - - -var NativeDateField = function (_React$Component) { - _inherits(NativeDateField, _React$Component); - - function NativeDateField(props) { - _classCallCheck(this, NativeDateField); - - var _this = _possibleConstructorReturn(this, (NativeDateField.__proto__ || Object.getPrototypeOf(NativeDateField)).call(this, props)); - - _this.onDatePicked = _this.onDatePicked.bind(_this); - return _this; - } - - _createClass(NativeDateField, [{ - key: 'onDatePicked', - value: function onDatePicked(e) { - var date = new Date(e.target.value); - this.props.onChangeValidate(date); - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - form = _props.form, - value = _props.value, - type = _props.type; - // {shrink: true} fixes rendering of TextField without value - // see https://github.com/mui-org/material-ui/issues/8131#issuecomment-328373902 - - return _react2.default.createElement(_TextField2.default, { - label: form.title, - type: type, - defaultValue: value, - InputLabelProps: { shrink: true }, - onChange: this.onDatePicked, - disabled: form.readonly - }); - } - }]); - - return NativeDateField; -}(_react2.default.Component); +var NativeDateField = function NativeDateField(_ref) { + var form = _ref.form, + value = _ref.value, + type = _ref.type, + onChangeValidate = _ref.onChangeValidate; + + var fieldValue = value && (typeof value === "undefined" ? "undefined" : _typeof(value)) === "object" && value.toISOString().slice(0, 10) || value; + if (!fieldValue) fieldValue = ""; + if (fieldValue.length > 0) fieldValue = new Date(fieldValue).toISOString().slice(0, 10); + return _react2.default.createElement(_TextField2.default, { + label: form.title, + type: type, + value: fieldValue, + InputLabelProps: { shrink: true }, + onChange: onChangeValidate, + disabled: form.readonly + }); +}; exports.default = NativeDateField; \ No newline at end of file diff --git a/lib/Number.js b/lib/Number.js index 355db4f7..6ffd0dbb 100755 --- a/lib/Number.js +++ b/lib/Number.js @@ -1,117 +1,70 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _ComposedComponent = require('./ComposedComponent'); +var _FormControl = require("@material-ui/core/FormControl"); -var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); +var _FormControl2 = _interopRequireDefault(_FormControl); -var _TextField = require('@material-ui/core/TextField'); +var _FormHelperText = require("@material-ui/core/FormHelperText"); -var _TextField2 = _interopRequireDefault(_TextField); +var _FormHelperText2 = _interopRequireDefault(_FormHelperText); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _Input = require("@material-ui/core/Input"); + +var _Input2 = _interopRequireDefault(_Input); + +var _InputLabel = require("@material-ui/core/InputLabel"); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _InputLabel2 = _interopRequireDefault(_InputLabel); -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; } +var _ComposedComponent = require("./ComposedComponent"); -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; } /** - * Created by steve on 15/09/15. - */ +var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * There is no default number picker as part of Material-UI. * Instead, use a TextField and validate. */ -var Number = function (_React$Component) { - _inherits(Number, _React$Component); - - function Number(props) { - _classCallCheck(this, Number); - - var _this = _possibleConstructorReturn(this, (Number.__proto__ || Object.getPrototypeOf(Number)).call(this, props)); - - _this.preValidationCheck = _this.preValidationCheck.bind(_this); - _this.state = { - lastSuccessfulValue: _this.props.value - }; - _this.numberField = _react2.default.createRef(); - return _this; - } - - _createClass(Number, [{ - key: 'isNumeric', - value: function isNumeric(n) { - return !isNaN(parseFloat(n)) && isFinite(n); - } - }, { - key: 'isEmpty', - value: function isEmpty(n) { - return !n || 0 === n.length; - } - - /** - * Prevent the field from accepting non-numeric characters. - * @param e - */ - - }, { - key: 'preValidationCheck', - value: function preValidationCheck(e) { - if (this.isNumeric(e.target.value)) { - this.setState({ - lastSuccessfulValue: e.target.value - }); - this.props.onChangeValidate(e); - } else if (this.isEmpty(e.target.value)) { - this.setState({ - lastSuccessfulValue: e.target.value - }); - this.props.onChangeValidate(e); - } else { - this.numberField.current.value = this.state.lastSuccessfulValue; - } - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - form = _props.form, - error = _props.error; - - return _react2.default.createElement(_TextField2.default, { - type: form.type, - label: form.title, - placeholder: form.placeholder, - helperText: error || form.description, - error: !!error, - onChange: this.preValidationCheck, - value: this.state.lastSuccessfulValue, - ref: this.numberField, - disabled: form.readonly, - fullWidth: true - }); - } - }], [{ - key: 'getDerivedStateFromProps', - value: function getDerivedStateFromProps(nextProps) { - return { - lastSuccessfulValue: nextProps.value - }; - } - }]); - - return Number; -}(_react2.default.Component); - -exports.default = (0, _ComposedComponent2.default)(Number); \ No newline at end of file + +/** + * Created by steve on 15/09/15. + */ +var NumberComponent = function NumberComponent(_ref) { + var form = _ref.form, + error = _ref.error, + onChangeValidate = _ref.onChangeValidate, + value = _ref.value; + return _react2.default.createElement( + _FormControl2.default, + { fullWidth: true, error: !!error }, + _react2.default.createElement( + _InputLabel2.default, + { htmlFor: "input-" + form.key[0], required: form.required }, + form.title + ), + _react2.default.createElement(_Input2.default, { + id: "input-" + form.key[0], + type: "string", + placeholder: form.placeholder, + onChange: onChangeValidate, + value: value || value === 0 ? value : "", + disabled: form.readonly + }), + Boolean(error || form.description) && _react2.default.createElement( + _FormHelperText2.default, + null, + error || form.description + ) + ); +}; + +exports.default = (0, _ComposedComponent2.default)(NumberComponent); \ No newline at end of file diff --git a/lib/Radios.js b/lib/Radios.js index f19728dc..bf0a5155 100644 --- a/lib/Radios.js +++ b/lib/Radios.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true @@ -6,33 +6,33 @@ Object.defineProperty(exports, "__esModule", { 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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _FormControl = require('@material-ui/core/FormControl'); +var _FormControl = require("@material-ui/core/FormControl"); var _FormControl2 = _interopRequireDefault(_FormControl); -var _FormControlLabel = require('@material-ui/core/FormControlLabel'); +var _FormControlLabel = require("@material-ui/core/FormControlLabel"); var _FormControlLabel2 = _interopRequireDefault(_FormControlLabel); -var _FormLabel = require('@material-ui/core/FormLabel'); +var _FormLabel = require("@material-ui/core/FormLabel"); var _FormLabel2 = _interopRequireDefault(_FormLabel); -var _RadioGroup = require('@material-ui/core/RadioGroup'); +var _RadioGroup = require("@material-ui/core/RadioGroup"); var _RadioGroup2 = _interopRequireDefault(_RadioGroup); -var _Radio = require('@material-ui/core/Radio'); +var _Radio = require("@material-ui/core/Radio"); var _Radio2 = _interopRequireDefault(_Radio); -var _styles = require('@material-ui/core/styles'); +var _styles = require("@material-ui/core/styles"); -var _ComposedComponent = require('./ComposedComponent'); +var _ComposedComponent = require("./ComposedComponent"); var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); @@ -50,60 +50,71 @@ var styles = function styles(theme) { marginTop: theme.spacing.unit }, group: { - margin: theme.spacing.unit + 'px 0' + margin: theme.spacing.unit + "px 0" } }; }; -var Radios = function (_React$Component) { - _inherits(Radios, _React$Component); +var Radios = function (_Component) { + _inherits(Radios, _Component); function Radios() { + var _ref; + + var _temp, _this, _ret; + _classCallCheck(this, Radios); - return _possibleConstructorReturn(this, (Radios.__proto__ || Object.getPrototypeOf(Radios)).apply(this, arguments)); - } + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } - _createClass(Radios, [{ - key: 'renderItems', - value: function renderItems(form) { + return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Radios.__proto__ || Object.getPrototypeOf(Radios)).call.apply(_ref, [this].concat(args))), _this), _this.renderItems = function (form) { return form.titleMap.map(function (item, index) { - return _react2.default.createElement(_FormControlLabel2.default, { - key: index, + return _react2.default.createElement(_FormControlLabel2.default + // eslint-disable-next-line react/no-array-index-key + , { key: index, control: _react2.default.createElement(_Radio2.default, null), label: item.name, value: item.value, disabled: form.readonly }); }); - } - }, { - key: 'render', + }, _temp), _possibleConstructorReturn(_this, _ret); + } + + _createClass(Radios, [{ + key: "render", value: function render() { - var classes = this.props.classes; + var _props = this.props, + classes = _props.classes, + form = _props.form, + value = _props.value, + onChangeValidate = _props.onChangeValidate; return _react2.default.createElement( _FormControl2.default, - { component: 'fieldset', className: classes.formControl }, + { component: "fieldset", className: classes.formControl }, _react2.default.createElement( _FormLabel2.default, - { component: 'legend' }, - this.props.form.title + { component: "legend" }, + form.title ), _react2.default.createElement( _RadioGroup2.default, { - value: this.props.value, - name: this.props.form.title, - onChange: this.props.onChangeValidate, - className: classes.group }, - this.renderItems(this.props.form) + value: value, + name: form.title, + onChange: onChangeValidate, + className: classes.group + }, + this.renderItems(form) ) ); } }]); return Radios; -}(_react2.default.Component); +}(_react.Component); exports.default = (0, _ComposedComponent2.default)((0, _styles.withStyles)(styles)(Radios)); \ No newline at end of file diff --git a/lib/SchemaForm.js b/lib/SchemaForm.js index f649873d..eddf8210 100644 --- a/lib/SchemaForm.js +++ b/lib/SchemaForm.js @@ -1,88 +1,93 @@ -'use strict'; +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); 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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _utils = require('./utils'); +var _merge = require("lodash/merge"); + +var _merge2 = _interopRequireDefault(_merge); + +var _isNil = require("lodash/isNil"); + +var _isNil2 = _interopRequireDefault(_isNil); + +var _utils = require("./utils"); var _utils2 = _interopRequireDefault(_utils); -var _Number = require('./Number'); +var _Number = require("./Number"); var _Number2 = _interopRequireDefault(_Number); -var _Text = require('./Text'); +var _Text = require("./Text"); var _Text2 = _interopRequireDefault(_Text); -var _TextArea = require('./TextArea'); +var _TextArea = require("./TextArea"); var _TextArea2 = _interopRequireDefault(_TextArea); -var _TextSuggest = require('./TextSuggest'); +var _TextSuggest = require("./TextSuggest"); var _TextSuggest2 = _interopRequireDefault(_TextSuggest); -var _Select = require('./Select'); +var _Select = require("./Select"); var _Select2 = _interopRequireDefault(_Select); -var _MultiSelect = require('./MultiSelect'); +var _MultiSelect = require("./MultiSelect"); var _MultiSelect2 = _interopRequireDefault(_MultiSelect); -var _Radios = require('./Radios'); +var _Radios = require("./Radios"); var _Radios2 = _interopRequireDefault(_Radios); -var _Date = require('./Date'); +var _Date = require("./Date"); var _Date2 = _interopRequireDefault(_Date); -var _Checkbox = require('./Checkbox'); +var _Checkbox = require("./Checkbox"); var _Checkbox2 = _interopRequireDefault(_Checkbox); -var _Help = require('./Help'); +var _Help = require("./Help"); var _Help2 = _interopRequireDefault(_Help); -var _Array = require('./Array'); +var _Array = require("./Array"); var _Array2 = _interopRequireDefault(_Array); -var _FieldSet = require('./FieldSet'); +var _FieldSet = require("./FieldSet"); var _FieldSet2 = _interopRequireDefault(_FieldSet); -var _TripleBoolean = require('./TripleBoolean'); +var _TripleBoolean = require("./TripleBoolean"); var _TripleBoolean2 = _interopRequireDefault(_TripleBoolean); -var _merge = require('lodash/merge'); - -var _merge2 = _interopRequireDefault(_merge); - -var _isNil = require('lodash/isNil'); - -var _isNil2 = _interopRequireDefault(_isNil); - 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; } /** - * Created by steve on 11/09/15. - */ +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; } +/** + * Created by steve on 11/09/15. + */ -var SchemaForm = function (_React$Component) { - _inherits(SchemaForm, _React$Component); +var SchemaForm = function (_Component) { + _inherits(SchemaForm, _Component); function SchemaForm(props) { _classCallCheck(this, SchemaForm); @@ -90,27 +95,29 @@ var SchemaForm = function (_React$Component) { var _this = _possibleConstructorReturn(this, (SchemaForm.__proto__ || Object.getPrototypeOf(SchemaForm)).call(this, props)); _this.mapper = { - 'number': _Number2.default, - 'text': _Text2.default, - 'password': _Text2.default, - 'textarea': _TextArea2.default, - 'textsuggest': _TextSuggest2.default, - 'select': _Select2.default, - 'radios': _Radios2.default, - 'date': _Date2.default, - 'checkbox': _Checkbox2.default, - 'help': _Help2.default, - 'array': _Array2.default, - 'tBoolean': _TripleBoolean2.default, - 'fieldset': _FieldSet2.default, - 'multiselect': _MultiSelect2.default + number: _Number2.default, + text: _Text2.default, + password: _Text2.default, + textarea: _TextArea2.default, + textsuggest: _TextSuggest2.default, + select: _Select2.default, + radios: _Radios2.default, + date: _Date2.default, + checkbox: _Checkbox2.default, + help: _Help2.default, + array: _Array2.default, + tBoolean: _TripleBoolean2.default, + fieldset: _FieldSet2.default, + multiselect: _MultiSelect2.default }; _this.setDefault = function (key, model, form, value) { + var onModelChange = _this.props.onModelChange; + var currentValue = _utils2.default.selectOrSet(key, model); // If current value is not setted and exist a default, apply the default over the model - if ((0, _isNil2.default)(currentValue) && !(0, _isNil2.default)(value)) _this.props.onModelChange(key, value, form.type, form); + if ((0, _isNil2.default)(currentValue) && !(0, _isNil2.default)(value)) onModelChange(key, value, form.type, form); }; _this.onChange = _this.onChange.bind(_this); @@ -118,21 +125,23 @@ var SchemaForm = function (_React$Component) { return _this; } - // Assign default values and save it to the model - - _createClass(SchemaForm, [{ - key: 'onChange', + key: "onChange", value: function onChange(key, val) { - //console.log('SchemaForm.onChange', key, val); - this.props.onModelChange(key, val); + var onModelChange = this.props.onModelChange; + + onModelChange(key, val); } + + // Assign default values and save it to the model + }, { - key: 'builder', + key: "builder", value: function builder(form, model, index, mapper, onChange, _builder) { + var errors = this.props.errors; + var Field = this.mapper[form.type]; if (!Field) { - // console.log('Invalid field: "' + form.key[0] + '"!'); return null; } @@ -141,10 +150,9 @@ var SchemaForm = function (_React$Component) { return null; } - var key = form.key && form.key.join('.') || index; + var key = form.key && form.key.join(".") || index; - var errors = this.props && this.props.errors ? this.props.errors : {}; - var error = key in errors ? errors[key] : null; + var error = errors && key in errors ? errors[key] : null; return _react2.default.createElement(Field, { model: model, @@ -158,28 +166,38 @@ var SchemaForm = function (_React$Component) { }); } }, { - key: 'render', + key: "render", value: function render() { - var merged = _utils2.default.merge(this.props.schema, this.props.form, this.props.ignore, this.props.option); - - //console.log('SchemaForm merged = ', JSON.stringify(merged, undefined, 2)); - var mapper = this.mapper; - if (this.props.mapper) { - mapper = (0, _merge2.default)(this.mapper, this.props.mapper); + var _this2 = this; + + var _props = this.props, + schema = _props.schema, + form = _props.form, + ignore = _props.ignore, + option = _props.option, + model = _props.model, + className = _props.className, + mapper = _props.mapper; + + var merged = _utils2.default.merge(schema, form, ignore, option); + + var mergedMapper = this.mapper; + if (mapper) { + mergedMapper = (0, _merge2.default)(this.mapper, mapper); } - var forms = merged.map(function (form, index) { - return this.builder(form, this.props.model, index, mapper, this.onChange, this.builder); - }.bind(this)); + var forms = merged.map(function (formPart, index) { + return _this2.builder(formPart, model, index, mergedMapper, _this2.onChange, _this2.builder); + }); return _react2.default.createElement( - 'div', - { className: this.props.className }, + "div", + { className: className }, forms ); } }]); return SchemaForm; -}(_react2.default.Component); +}(_react.Component); -module.exports = SchemaForm; \ No newline at end of file +exports.default = SchemaForm; \ No newline at end of file diff --git a/lib/Select.js b/lib/Select.js index 0c006e93..4ff86dd1 100644 --- a/lib/Select.js +++ b/lib/Select.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true @@ -6,31 +6,33 @@ Object.defineProperty(exports, "__esModule", { 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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _ComposedComponent = require('./ComposedComponent'); - -var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); - -var _MenuItem = require('@material-ui/core/MenuItem'); +var _MenuItem = require("@material-ui/core/MenuItem"); var _MenuItem2 = _interopRequireDefault(_MenuItem); -var _Select = require('@material-ui/core/Select'); +var _Select = require("@material-ui/core/Select"); var _Select2 = _interopRequireDefault(_Select); -var _InputLabel = require('@material-ui/core/InputLabel'); +var _InputLabel = require("@material-ui/core/InputLabel"); var _InputLabel2 = _interopRequireDefault(_InputLabel); -var _FormControl = require('@material-ui/core/FormControl'); +var _FormControl = require("@material-ui/core/FormControl"); var _FormControl2 = _interopRequireDefault(_FormControl); -var _utils = require('./utils'); +var _ComposedComponent = require("./ComposedComponent"); + +var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -49,27 +51,37 @@ var Select = function (_Component) { var _this = _possibleConstructorReturn(this, (Select.__proto__ || Object.getPrototypeOf(Select)).call(this, props)); _this.onSelected = function (event) { + var onChangeValidate = _this.props.onChangeValidate; + var currentValue = event.target.value; _this.setState({ currentValue: currentValue }); - _this.props.onChangeValidate(event); + onChangeValidate(event); }; + var _this$props = _this.props, + model = _this$props.model, + form = _this$props.form; + _this.state = { - currentValue: (0, _utils.getValueFromModel)(_this.props.model, _this.props.form.key) || '' + currentValue: _utils2.default.getValueFromModel(model, form.key) || "" }; return _this; } _createClass(Select, [{ - key: 'render', + key: "render", value: function render() { var form = this.props.form; + var currentValue = this.state.currentValue; var menuItems = form.titleMap.map(function (item, idx) { - return _react2.default.createElement( - _MenuItem2.default, - { key: idx, value: item.value }, - item.name + return ( + // eslint-disable-next-line react/no-array-index-key + _react2.default.createElement( + _MenuItem2.default, + { key: idx, value: item.value }, + item.name + ) ); }); return _react2.default.createElement( @@ -83,22 +95,24 @@ var Select = function (_Component) { _react2.default.createElement( _Select2.default, { - value: this.state.currentValue || '', + value: currentValue || "", placeholder: form.title, disabled: form.readonly, - onChange: this.onSelected }, + onChange: this.onSelected + }, menuItems ) ); } }], [{ - key: 'getDerivedStateFromProps', + key: "getDerivedStateFromProps", value: function getDerivedStateFromProps(props) { if (props.model && props.form.key) { return { - currentValue: (0, _utils.getValueFromModel)(props.model, props.form.key) + currentValue: _utils2.default.getValueFromModel(props.model, props.form.key) }; } + return null; } }]); diff --git a/lib/Text.js b/lib/Text.js index a9b20eaa..abfa53a6 100755 --- a/lib/Text.js +++ b/lib/Text.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true @@ -6,17 +6,17 @@ Object.defineProperty(exports, "__esModule", { 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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _ComposedComponent = require('./ComposedComponent'); +var _TextField = require("@material-ui/core/TextField"); -var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); +var _TextField2 = _interopRequireDefault(_TextField); -var _TextField = require('@material-ui/core/TextField'); +var _ComposedComponent = require("./ComposedComponent"); -var _TextField2 = _interopRequireDefault(_TextField); +var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -24,9 +24,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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; } /** - * Created by steve on 15/09/15. - */ +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; } +/** + * Created by steve on 15/09/15. + */ var Text = function (_React$Component) { @@ -40,15 +41,16 @@ var Text = function (_React$Component) { var _this$props = _this.props, model = _this$props.model, form = _this$props.form, - value = _this$props.value; + value = _this$props.value, + setDefault = _this$props.setDefault; var key = form.key; - _this.props.setDefault(key, model, form, value); + setDefault(key, model, form, value); return _this; } _createClass(Text, [{ - key: 'render', + key: "render", value: function render() { var _props = this.props, form = _props.form, @@ -63,7 +65,7 @@ var Text = function (_React$Component) { helperText: error || form.description, error: !!error, onChange: onChangeValidate, - value: value, + value: value || "", disabled: form.readonly, fullWidth: true }); diff --git a/lib/TextArea.js b/lib/TextArea.js index 76871e13..20bd99a1 100644 --- a/lib/TextArea.js +++ b/lib/TextArea.js @@ -1,71 +1,44 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _ComposedComponent = require('./ComposedComponent'); - -var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); - -var _TextField = require('@material-ui/core/TextField'); +var _TextField = require("@material-ui/core/TextField"); var _TextField2 = _interopRequireDefault(_TextField); -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; } /** - * Created by steve on 15/09/15. - */ +var _ComposedComponent = require("./ComposedComponent"); +var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); -var TextArea = function (_React$Component) { - _inherits(TextArea, _React$Component); - - function TextArea() { - _classCallCheck(this, TextArea); - - return _possibleConstructorReturn(this, (TextArea.__proto__ || Object.getPrototypeOf(TextArea)).apply(this, arguments)); - } - - _createClass(TextArea, [{ - key: 'render', - value: function render() { - var _props = this.props, - form = _props.form, - value = _props.value, - error = _props.error, - onChangeValidate = _props.onChangeValidate; - // FIXME: Obviously fix rowsMax eventually.. - - return _react2.default.createElement(_TextField2.default, { - type: form.type, - label: form.title, - placeholder: form.placeholder, - helperText: error || form.description, - onChange: onChangeValidate, - error: !!error, - value: value, - multiline: true, - rows: form.rows, - rowsMax: form.rowsMax, - disabled: form.readonly, - fullWidth: true - }); - } - }]); - - return TextArea; -}(_react2.default.Component); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var TextArea = function TextArea(_ref) { + var form = _ref.form, + value = _ref.value, + error = _ref.error, + onChangeValidate = _ref.onChangeValidate; + return _react2.default.createElement(_TextField2.default, { + type: form.type, + label: form.title, + placeholder: form.placeholder, + helperText: error || form.description, + onChange: onChangeValidate, + error: !!error, + value: value, + multiline: true, + rows: form.rows, + rowsMax: form.rowsMax, + disabled: form.readonly, + fullWidth: true + }); +}; +/** + * Created by steve on 15/09/15. + */ exports.default = (0, _ComposedComponent2.default)(TextArea); \ No newline at end of file diff --git a/lib/TextSuggest.js b/lib/TextSuggest.js index a39c97fe..daeb1e14 100644 --- a/lib/TextSuggest.js +++ b/lib/TextSuggest.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true @@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", { 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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _ComposedComponent = require('./ComposedComponent'); +var _ComposedComponent = require("./ComposedComponent"); var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); @@ -28,8 +28,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var dataSourceConfig = { - text: 'name', - value: 'value' + text: "name", + value: "value" }; var TextSuggest = function (_React$Component) { @@ -50,16 +50,13 @@ var TextSuggest = function (_React$Component) { var key = _this.props.form.key; var type = _this.props.form.schema.type; - return _this.props.onChange(key, newValue[dataSourceConfig['value']], type, _this.props.form); + return _this.props.onChange(key, newValue[dataSourceConfig.value], type, _this.props.form); }, _this.handleInit = function (init_value) { if (!_this.props.form.schema || !_this.props.form.schema.enum) return init_value.toString(); var names = _this.props.form.schema.enumNames || _this.props.form.schema.enum; var values = _this.props.form.schema.enum; - // console.log(names, values); - // console.log("indexOf", values.indexOf(init_value)); - // console.log("names[values.indexOf(init_value)]", names[values.indexOf(init_value)]); var init_value_name = names[values.indexOf(init_value)]; // this.handleUpdate({[dataSourceConfig['value']]: init_value, [dataSourceConfig['text']]: init_value_name}) @@ -69,27 +66,22 @@ var TextSuggest = function (_React$Component) { } _createClass(TextSuggest, [{ - key: 'render', + key: "render", value: function render() { - // console.log('TextSuggest', this.props); // assign the filter, by default case insensitive var filter = function (filter) { switch (filter) { - case 'fuzzy': + case "fuzzy": return AutoComplete.fuzzyFilter; - break; default: return AutoComplete.caseInsensitiveFilter; - break; } }(this.props.form.filter); - // console.log("TEXTSUG", this.props); - var value = this.props.value && this.handleInit(this.props.value); return _react2.default.createElement( - 'div', + "div", { className: this.props.form.htmlClass }, _react2.default.createElement(AutoComplete, { type: this.props.form.type, @@ -98,10 +90,10 @@ var TextSuggest = function (_React$Component) { errorText: this.props.error, onNewRequest: this.handleUpdate, disabled: this.props.form.readonly, - style: this.props.form.style || { width: '100%' }, + style: this.props.form.style || { width: "100%" }, openOnFocus: true, searchText: value, - dataSource: this.props.form.titleMap || ['Loading...'], + dataSource: this.props.form.titleMap || ["Loading..."], filter: filter, maxSearchResults: this.props.form.maxSearchResults || 5, dataSourceConfig: dataSourceConfig diff --git a/lib/TripleBoolean.js b/lib/TripleBoolean.js index 49996a61..ed19cca5 100644 --- a/lib/TripleBoolean.js +++ b/lib/TripleBoolean.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true @@ -6,15 +6,15 @@ Object.defineProperty(exports, "__esModule", { 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 = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _ComposedComponent = require('./ComposedComponent'); +var _core = require("@material-ui/core"); -var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); +var _ComposedComponent = require("./ComposedComponent"); -var _core = require('@material-ui/core'); +var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -22,20 +22,28 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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; } /** - * Created by steve on 15/09/15. - */ - +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; } +/** + * Created by steve on 15/09/15. + */ -// import { withStyles } from 'material-ui/styles'; -// import Typography from 'material-ui/styles/typography'; /** * There is no default number picker as part of Material-UI. * Instead, use a TextField and validate. */ -var TripleBoolean = function (_React$Component) { - _inherits(TripleBoolean, _React$Component); +var TripleBoolean = function (_Component) { + _inherits(TripleBoolean, _Component); + + _createClass(TripleBoolean, null, [{ + key: "getDerivedStateFromProps", + value: function getDerivedStateFromProps(nextProps) { + return { + yesChecked: nextProps.value === "yes", + noChecked: nextProps.value === "no" + }; + } + }]); function TripleBoolean(props) { _classCallCheck(this, TripleBoolean); @@ -47,66 +55,74 @@ var TripleBoolean = function (_React$Component) { noChecked: false }; _this.divStyle = { - padding: '20px' - }; - _this.butStyle = { - color: '#07f' + padding: "20px" }; var _this$props = _this.props, model = _this$props.model, form = _this$props.form, - value = _this$props.value; + value = _this$props.value, + setDefault = _this$props.setDefault; var key = form.key; - _this.props.setDefault(key, model, form, value); + setDefault(key, model, form, value); return _this; } _createClass(TripleBoolean, [{ - key: 'displaySwitch', + key: "displaySwitch", value: function displaySwitch() { - var _this2 = this; - - var renderBlock = null; + var _props = this.props, + form = _props.form, + onChangeValidate = _props.onChangeValidate, + value = _props.value; + var _state = this.state, + yesChecked = _state.yesChecked, + noChecked = _state.noChecked; - renderBlock = _react2.default.createElement( - 'div', + return _react2.default.createElement( + "div", { style: this.divStyle }, - this.props.form.title, - _react2.default.createElement('br', null), + form.title, + _react2.default.createElement("br", null), _react2.default.createElement( _core.FormGroup, null, - _react2.default.createElement(_core.FormControlLabel, { control: _react2.default.createElement(_core.Checkbox, { onClick: function onClick(e) { - _this2.props.onChangeValidate(e, 'yes'); + _react2.default.createElement(_core.FormControlLabel, { + control: _react2.default.createElement(_core.Checkbox, { + onClick: function onClick(e) { + onChangeValidate(e, "yes"); }, - checked: this.state.yesChecked + checked: yesChecked }), - label: 'Yes' + label: "Yes" }), - _react2.default.createElement(_core.FormControlLabel, { control: _react2.default.createElement(_core.Checkbox, { onClick: function onClick(e) { - _this2.props.onChangeValidate(e, 'no'); + _react2.default.createElement(_core.FormControlLabel, { + control: _react2.default.createElement(_core.Checkbox, { + onClick: function onClick(e) { + onChangeValidate(e, "no"); }, - checked: this.state.noChecked + checked: noChecked }), - label: 'No' + label: "No" }) ), - this.props.value === 'yes' || this.props.value === 'no' ? _react2.default.createElement( + value === "yes" || value === "no" ? _react2.default.createElement( _core.Button, - { id: 'temp', variant: 'text', color: 'primary', + { + id: "temp", + variant: "text", + color: "primary", onClick: function onClick(e) { - return _this2.props.onChangeValidate(e, 'unanswered'); - } }, - 'clear responce' - ) : '' + return onChangeValidate(e, "unanswered"); + } + }, + "clear responce" + ) : "" ); - - return renderBlock; } }, { - key: 'render', + key: "render", value: function render() { return _react2.default.createElement( _core.Card, @@ -114,17 +130,9 @@ var TripleBoolean = function (_React$Component) { this.displaySwitch() ); } - }], [{ - key: 'getDerivedStateFromProps', - value: function getDerivedStateFromProps(nextProps) { - return { - yesChecked: nextProps.value === 'yes', - noChecked: nextProps.value === 'no' - }; - } }]); return TripleBoolean; -}(_react2.default.Component); +}(_react.Component); exports.default = (0, _ComposedComponent2.default)(TripleBoolean); \ No newline at end of file diff --git a/lib/__tests__/ArrayCapture-test.js b/lib/__tests__/ArrayCapture-test.js index f68fc75d..4d052e02 100644 --- a/lib/__tests__/ArrayCapture-test.js +++ b/lib/__tests__/ArrayCapture-test.js @@ -1,83 +1,89 @@ -'use strict'; +"use strict"; -var _enzyme = require('enzyme'); +var _react = require("react"); -var _enzymeAdapterReact = require('enzyme-adapter-react-16'); +var _react2 = _interopRequireDefault(_react); + +var _enzyme = require("enzyme"); + +var _enzymeAdapterReact = require("enzyme-adapter-react-16"); var _enzymeAdapterReact2 = _interopRequireDefault(_enzymeAdapterReact); -var _utils = require('../utils'); +var _utils = require("../utils"); var _utils2 = _interopRequireDefault(_utils); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _SchemaForm = require("../SchemaForm"); -var React = require('react'); -var SchemaForm = require('../SchemaForm'); +var _SchemaForm2 = _interopRequireDefault(_SchemaForm); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } (0, _enzyme.configure)({ adapter: new _enzymeAdapterReact2.default() }); -jest.dontMock('../ComposedComponent'); -jest.dontMock('../utils'); -jest.dontMock('lodash'); +jest.dontMock("../ComposedComponent"); +jest.dontMock("../utils"); +jest.dontMock("lodash"); function onModelChange(key, val, type) { - var newModel = this.state.model; + var model = this.state.model; + + var newModel = model; _utils2.default.selectOrSet(key, newModel, val, type); this.setState({ model: newModel }); } -describe('Composed component test', function () { - it('Output from model with 3 comps must have length 3: ', function () { +describe("Composed component test", function () { + it("Output from model with 3 comps must have length 3: ", function () { var cfg = { form: [{ - 'key': 'comments', - 'add': 'New', - 'style': { - 'add': 'btn-success' + key: "comments", + add: "New", + style: { + add: "btn-success" }, - 'items': ['comments[].name'] + items: ["comments[].name"] }], schema: { - 'type': 'object', - 'title': 'Comment', - 'required': ['comments'], - 'properties': { - 'comments': { - 'type': 'array', - 'maxItems': 2, - 'items': { - 'type': 'object', - 'properties': { - 'name': { - 'title': 'Name', - 'type': 'string' + type: "object", + title: "Comment", + required: ["comments"], + properties: { + comments: { + type: "array", + maxItems: 2, + items: { + type: "object", + properties: { + name: { + title: "Name", + type: "string" } }, - 'required': ['name'] + required: ["name"] } } } }, model: { - 'comments': [{ - 'name': 'some value' + comments: [{ + name: "some value" }, { - 'name': 'some next value' + name: "some next value" }, { - 'name': 'some other value' + name: "some other value" }] } }; - var display = (0, _enzyme.render)(React.createElement(SchemaForm, { + var display = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { form: cfg.form, schema: cfg.schema, model: cfg.model, onModelChange: onModelChange })); - expect(display.find('input').length).toEqual(3); + expect(display.find("input").length).toEqual(3); }); }); \ No newline at end of file diff --git a/lib/__tests__/ComposedCollection-test.js b/lib/__tests__/ComposedCollection-test.js index 54bd4839..f6779281 100644 --- a/lib/__tests__/ComposedCollection-test.js +++ b/lib/__tests__/ComposedCollection-test.js @@ -1,36 +1,44 @@ -'use strict'; +"use strict"; -var React = require('react'); -var Text = require('../Text').default; -var Composed = require('../ComposedComponent').default; -var Shalow = require('react-test-renderer/shallow'); +var _react = require("react"); -test('Composed component test', function () { +var _react2 = _interopRequireDefault(_react); - var renderer = new Shalow(); +var _shallow = require("react-test-renderer/shallow"); + +var _shallow2 = _interopRequireDefault(_shallow); + +var _Text = require("../Text"); + +var _Text2 = _interopRequireDefault(_Text); + +var _ComposedComponent = require("../ComposedComponent"); + +var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +test("Composed component test", function () { + var renderer = new _shallow2.default(); var cfg = { form: { - key: ['name'], + key: ["name"], schema: { - default: 'steeve', - title: 'name', - type: 'String' + default: "steeve", + title: "name", + type: "String" }, - type: 'text', - title: 'name' + type: "text", + title: "name" }, - model: { name: 'steeve' }, + model: { name: "steeve" }, mapper: {} }; - var TestText = Composed(Text); - renderer.render(React.createElement(TestText, { - form: cfg.form, - model: cfg.model, - mapper: cfg.mapper - })); + var TestText = (0, _ComposedComponent2.default)(_Text2.default); + renderer.render(_react2.default.createElement(TestText, { form: cfg.form, model: cfg.model, mapper: cfg.mapper })); var result = renderer.getRenderOutput(); - expect(result.props.value).toEqual('steeve'); + expect(result.props.value).toEqual("steeve"); }); \ No newline at end of file diff --git a/lib/__tests__/ComposedComponent-test.js b/lib/__tests__/ComposedComponent-test.js index affc13b4..9626637e 100644 --- a/lib/__tests__/ComposedComponent-test.js +++ b/lib/__tests__/ComposedComponent-test.js @@ -1,86 +1,77 @@ -'use strict'; +"use strict"; -var _react = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _shallow = require('react-test-renderer/shallow'); +var _shallow = require("react-test-renderer/shallow"); var _shallow2 = _interopRequireDefault(_shallow); -var _ComposedComponent = require('../ComposedComponent'); +var _ComposedComponent = require("../ComposedComponent"); var _ComposedComponent2 = _interopRequireDefault(_ComposedComponent); -var _Text = require('../Text'); +var _Text = require("../Text"); var _Text2 = _interopRequireDefault(_Text); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -jest.dontMock('../ComposedComponent'); -jest.dontMock('../utils'); -jest.dontMock('lodash'); - -describe('ComposedComponent', function () { - - it('shows default value at text field', function () { - var renderer = new _shallow2.default(); - var cfg = { - form: { - key: ['name'], - schema: { - default: 'steeve', - title: 'name', - type: 'String' - }, - type: 'text', - title: 'name' - }, - model: { name: 'steeve' }, - mapper: {} - }; - - var Composed = (0, _ComposedComponent2.default)(_Text2.default); - - renderer.render(_react2.default.createElement(Composed, { - form: cfg.form, - model: cfg.model, - mapper: cfg.mapper - })); - - var result = renderer.getRenderOutput(); - - expect(result.props.value).toEqual('steeve'); - }); - - it('shows an error when there is an error', function () { - var renderer = new _shallow2.default(); - var cfg = { - form: { - key: ['name'], - required: true, - schema: { - title: 'name', - type: 'String' - }, - type: 'text', - title: 'name' - }, - model: { name: '' }, - mapper: {} - }; - - var Composed = (0, _ComposedComponent2.default)(_Text2.default); - - renderer.render(_react2.default.createElement(Composed, { - form: cfg.form, - model: cfg.model, - mapper: cfg.mapper - })); - - var result = renderer.getRenderOutput(); - - expect(result.props.error).toEqual('Missing required property: name'); - }); +jest.dontMock("../ComposedComponent"); +jest.dontMock("../utils"); +jest.dontMock("lodash"); + +describe("ComposedComponent", function () { + it("shows default value at text field", function () { + var renderer = new _shallow2.default(); + var cfg = { + form: { + key: ["name"], + schema: { + default: "steeve", + title: "name", + type: "String" + }, + type: "text", + title: "name" + }, + model: { name: "steeve" }, + mapper: {} + }; + + var Composed = (0, _ComposedComponent2.default)(_Text2.default); + + renderer.render(_react2.default.createElement(Composed, { form: cfg.form, model: cfg.model, mapper: cfg.mapper })); + + var result = renderer.getRenderOutput(); + + expect(result.props.value).toEqual("steeve"); + }); + + it("shows an error when there is an error", function () { + var renderer = new _shallow2.default(); + var cfg = { + form: { + key: ["name"], + required: true, + schema: { + title: "name", + type: "String" + }, + type: "text", + title: "name" + }, + model: { name: "" }, + mapper: {} + }; + + var Composed = (0, _ComposedComponent2.default)(_Text2.default); + + renderer.render(_react2.default.createElement(Composed, { form: cfg.form, model: cfg.model, mapper: cfg.mapper })); + + var result = renderer.getRenderOutput(); + + expect(result.props.error).toEqual("Missing required property: name"); + }); }); \ No newline at end of file diff --git a/lib/__tests__/ConditionalCapture-test.js b/lib/__tests__/ConditionalCapture-test.js index 7ffd62f5..dadb3d6b 100644 --- a/lib/__tests__/ConditionalCapture-test.js +++ b/lib/__tests__/ConditionalCapture-test.js @@ -1,98 +1,80 @@ -'use strict'; +"use strict"; -var _react = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _SchemaForm = require('../SchemaForm'); +var _enzyme = require("enzyme"); -var _SchemaForm2 = _interopRequireDefault(_SchemaForm); +var _enzymeAdapterReact = require("enzyme-adapter-react-16"); -var _enzyme = require('enzyme'); +var _enzymeAdapterReact2 = _interopRequireDefault(_enzymeAdapterReact); -var _enzymeAdapterReact = require('enzyme-adapter-react-16'); +var _SchemaForm = require("../SchemaForm"); -var _enzymeAdapterReact2 = _interopRequireDefault(_enzymeAdapterReact); +var _SchemaForm2 = _interopRequireDefault(_SchemaForm); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } (0, _enzyme.configure)({ adapter: new _enzymeAdapterReact2.default() }); var cfg = { - form: ['name', { - 'key': 'date', - 'type': 'date', - 'condition': 'model.name !== "" && model.name !== undefined' + form: ["name", { + key: "date", + type: "date", + condition: 'model.name !== "" && model.name !== undefined' }], schema: { - 'type': 'object', - 'title': 'Types', - 'properties': { - 'name': { - 'type': 'string', - 'minLength': 3 + type: "object", + title: "Types", + properties: { + name: { + type: "string", + minLength: 3 }, - 'date': { - 'title': 'Date', - 'type': 'object' + date: { + title: "Date", + type: "object" } }, - 'required': ['name', 'date'] + required: ["name", "date"] }, model: { - 'name': 'some value' + name: "some value" } }; -describe('Composed component test', function () { - - it('The simple condition :', function () { - var display = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { - form: cfg.form, - schema: cfg.schema, - model: cfg.model - })); +describe("Composed component test", function () { + it("The simple condition :", function () { + var display = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { form: cfg.form, schema: cfg.schema, model: cfg.model })); // Output must have two inputs - expect(display.find('input').length).toEqual(2); + expect(display.find("input").length).toEqual(2); // And secont inputs type have to be of type 'date' - expect(display.find('input')[1].attribs.type).toEqual('date'); + expect(display.find("input")[1].attribs.type).toEqual("date"); }); - it('The complex condition :', function () { - - var newForm = ['name', { - 'key': 'date', - 'type': 'date', - 'condition': 'model.name !== "" && (2 > 1 && (model.name === "some" || model.name === "value"))' + it("The complex condition :", function () { + var newForm = ["name", { + key: "date", + type: "date", + condition: 'model.name !== "" && (2 > 1 && (model.name === "some" || model.name === "value"))' }]; - var model = { 'name': 'some' }; + var model = { name: "some" }; - var display = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { - form: newForm, - schema: cfg.schema, - model: model - })); + var display = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { form: newForm, schema: cfg.schema, model: model })); // this case expected to have addictional date input - expect(display.find('input').length).toEqual(2); - - model = { 'name': 'value' }; - display = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { - form: newForm, - schema: cfg.schema, - model: model - })); + expect(display.find("input").length).toEqual(2); + + model = { name: "value" }; + display = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { form: newForm, schema: cfg.schema, model: model })); // and this one too - expect(display.find('input').length).toEqual(2); - - model = { 'name': 'some other value' }; - display = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { - form: newForm, - schema: cfg.schema, - model: model - })); + expect(display.find("input").length).toEqual(2); + + model = { name: "some other value" }; + display = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { form: newForm, schema: cfg.schema, model: model })); // here a date input is not expected cause condition is falsy - expect(display.find('input').length).toEqual(1); + expect(display.find("input").length).toEqual(1); }); }); \ No newline at end of file diff --git a/lib/__tests__/DateCapture-test.js b/lib/__tests__/DateCapture-test.js index 15920a40..f93c2885 100644 --- a/lib/__tests__/DateCapture-test.js +++ b/lib/__tests__/DateCapture-test.js @@ -1,20 +1,20 @@ -'use strict'; +"use strict"; -var _react = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _SchemaForm = require('../SchemaForm'); +var _enzyme = require("enzyme"); -var _SchemaForm2 = _interopRequireDefault(_SchemaForm); +var _enzymeAdapterReact = require("enzyme-adapter-react-16"); -var _enzyme = require('enzyme'); +var _enzymeAdapterReact2 = _interopRequireDefault(_enzymeAdapterReact); -var _enzymeAdapterReact = require('enzyme-adapter-react-16'); +var _SchemaForm = require("../SchemaForm"); -var _enzymeAdapterReact2 = _interopRequireDefault(_enzymeAdapterReact); +var _SchemaForm2 = _interopRequireDefault(_SchemaForm); -var _utils = require('../utils'); +var _utils = require("../utils"); var _utils2 = _interopRequireDefault(_utils); @@ -29,26 +29,25 @@ function onModelChange(key, val, type) { var cfg = { schema: { - 'type': 'object', - 'title': 'Types', - 'properties': { - 'date': { - 'title': 'Birthday', - 'type': 'object' + type: "object", + title: "Types", + properties: { + date: { + title: "Birthday", + type: "object" } } }, form: [{ - 'key': 'date', - 'type': 'date' + key: "date", + type: "date" }], model: { - 'date': '1947-01-8' + date: "1947-01-8" } }; -describe('Date capture main test', function () { - +describe("Date capture main test", function () { it('Bowie"s birthday :', function () { var result = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { form: cfg.form, @@ -56,7 +55,6 @@ describe('Date capture main test', function () { model: cfg.model, onModelChange: onModelChange })); - - expect(result.find('input')[0].attribs.value).toEqual('1947-01-8'); + expect(result.find("input")[0].attribs.value).toEqual(new Date("1947-01-8").toISOString().slice(0, 10)); }); }); \ No newline at end of file diff --git a/lib/__tests__/SchemaForm-test.js b/lib/__tests__/SchemaForm-test.js index 7dc983fd..7d525467 100644 --- a/lib/__tests__/SchemaForm-test.js +++ b/lib/__tests__/SchemaForm-test.js @@ -1,27 +1,33 @@ -'use strict'; - -var React = require('react'); -var ShallowRenderer = require('react-test-renderer/shallow'); -var SchemaForm = require('../SchemaForm'); - -describe('SchemaForm test', function () { - - it('shows SchemaForm', function () { - var shallowRenderer = new ShallowRenderer(); - var cfg = { - form: {}, - schema: { - 'type': 'object' - }, - model: {}, - mapper: {} - }; - shallowRenderer.render(React.createElement(SchemaForm, { - schema: cfg.schema, - mapper: cfg.mapper - })); - var result = shallowRenderer.getRenderOutput(); - expect(result.type).toEqual('div'); - expect(result.props.children).toEqual([]); - }); +"use strict"; + +var _react = require("react"); + +var _react2 = _interopRequireDefault(_react); + +var _shallow = require("react-test-renderer/shallow"); + +var _shallow2 = _interopRequireDefault(_shallow); + +var _SchemaForm = require("../SchemaForm"); + +var _SchemaForm2 = _interopRequireDefault(_SchemaForm); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +describe("SchemaForm test", function () { + it("shows SchemaForm", function () { + var shallowRenderer = new _shallow2.default(); + var cfg = { + form: {}, + schema: { + type: "object" + }, + model: {}, + mapper: {} + }; + shallowRenderer.render(_react2.default.createElement(_SchemaForm2.default, { schema: cfg.schema, mapper: cfg.mapper })); + var result = shallowRenderer.getRenderOutput(); + expect(result.type).toEqual("div"); + expect(result.props.children).toEqual([]); + }); }); \ No newline at end of file diff --git a/lib/__tests__/TripleBoolean-test.js b/lib/__tests__/TripleBoolean-test.js index 4a95cc13..97962199 100644 --- a/lib/__tests__/TripleBoolean-test.js +++ b/lib/__tests__/TripleBoolean-test.js @@ -1,22 +1,22 @@ -'use strict'; +"use strict"; -var _react = require('react'); +var _react = require("react"); var _react2 = _interopRequireDefault(_react); -var _SchemaForm = require('../SchemaForm'); +var _enzyme = require("enzyme"); -var _SchemaForm2 = _interopRequireDefault(_SchemaForm); +var _enzymeAdapterReact = require("enzyme-adapter-react-16"); -var _utils = require('../utils'); +var _enzymeAdapterReact2 = _interopRequireDefault(_enzymeAdapterReact); -var _utils2 = _interopRequireDefault(_utils); +var _SchemaForm = require("../SchemaForm"); -var _enzyme = require('enzyme'); +var _SchemaForm2 = _interopRequireDefault(_SchemaForm); -var _enzymeAdapterReact = require('enzyme-adapter-react-16'); +var _utils = require("../utils"); -var _enzymeAdapterReact2 = _interopRequireDefault(_enzymeAdapterReact); +var _utils2 = _interopRequireDefault(_utils); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -28,15 +28,15 @@ function onModelChange(key, val, type) { } var cfg = { - form: ['issues'], + form: ["issues"], schema: { - 'type': 'object', - 'title': 'Issues', - 'properties': { - 'issues': { - 'title': 'Did you have any issues?', - 'type': 'tBoolean', - 'default': 'unanswered' + type: "object", + title: "Issues", + properties: { + issues: { + title: "Did you have any issues?", + type: "tBoolean", + default: "unanswered" } } }, @@ -44,9 +44,8 @@ var cfg = { mapper: {} }; -describe('SchemaForm test', function () { - - it('shows SchemaForm', function () { +describe("SchemaForm test", function () { + it("shows SchemaForm", function () { var result = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { form: cfg.form, model: cfg.model, @@ -55,9 +54,9 @@ describe('SchemaForm test', function () { })); // the initial phase, we don't a clear button so we don't expect it render - expect(result.find('Button').length).toEqual(0); + expect(result.find("Button").length).toEqual(0); - cfg.model['issues'] = 'no'; + cfg.model.issues = "no"; result = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { form: cfg.form, model: cfg.model, @@ -65,9 +64,9 @@ describe('SchemaForm test', function () { onModelChange: onModelChange })); // Second phase, user have made the choice so we expect clear button to render - expect(result.find('Button').length).toEqual(1); + expect(result.find("Button").length).toEqual(1); - cfg.model['issues'] = 'unanswered'; + cfg.model.issues = "unanswered"; result = (0, _enzyme.render)(_react2.default.createElement(_SchemaForm2.default, { form: cfg.form, model: cfg.model, @@ -75,6 +74,6 @@ describe('SchemaForm test', function () { onModelChange: onModelChange })); // user cleared his choice so we expect button to hide - expect(result.find('Button').length).toEqual(0); + expect(result.find("Button").length).toEqual(0); }); }); \ No newline at end of file diff --git a/lib/__tests__/utils-test.js b/lib/__tests__/utils-test.js index dc2a5d32..cdd85fe4 100644 --- a/lib/__tests__/utils-test.js +++ b/lib/__tests__/utils-test.js @@ -1,51 +1,53 @@ -'use strict'; +"use strict"; + +var _lodash = require("lodash"); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _utils = require("../utils"); + +var _utils2 = _interopRequireDefault(_utils); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Created by steve on 11/09/15. */ -jest.dontMock('../utils'); -jest.dontMock('lodash'); - -describe('utils', function () { +jest.dontMock("../utils"); +jest.dontMock("lodash"); - var utils; - var _; - beforeEach(function () { - utils = require('../utils'); - _ = require('lodash'); - }); - - it('gets defaults from schema and form', function () { +describe("utils", function () { + it("gets defaults from schema and form", function () { var schema = { - 'type': 'object', - 'properties': { - 'name': { - 'title': 'Name', - 'description': 'Gimme yea name lad', - 'type': 'string' + type: "object", + properties: { + name: { + title: "Name", + description: "Gimme yea name lad", + type: "string" }, - 'gender': { - 'title': 'Choose', - 'type': 'string', - 'enum': ['undefined', 'null', 'NaN'] + gender: { + title: "Choose", + type: "string", + enum: ["undefined", "null", "NaN"] }, - 'overEighteen': { - 'title': 'Are you over 18 years old?', - 'type': 'boolean', - 'default': false + overEighteen: { + title: "Are you over 18 years old?", + type: "boolean", + default: false }, - 'attributes': { - 'type': 'object', - 'required': ['eyecolor'], - 'properties': { - 'eyecolor': { 'type': 'string', 'title': 'Eye color' }, - 'haircolor': { 'type': 'string', 'title': 'Hair color' }, - 'shoulders': { - 'type': 'object', - 'title': 'Shoulders', - 'properties': { - 'left': { 'type': 'string' }, - 'right': { 'type': 'string' } + attributes: { + type: "object", + required: ["eyecolor"], + properties: { + eyecolor: { type: "string", title: "Eye color" }, + haircolor: { type: "string", title: "Hair color" }, + shoulders: { + type: "object", + title: "Shoulders", + properties: { + left: { type: "string" }, + right: { type: "string" } } } } @@ -54,266 +56,265 @@ describe('utils', function () { }; var form = [{ - 'title': 'Name', - 'description': 'Gimme yea name lad', - 'schema': { - 'title': 'Name', - 'description': 'Gimme yea name lad', - 'type': 'string' + title: "Name", + description: "Gimme yea name lad", + schema: { + title: "Name", + description: "Gimme yea name lad", + type: "string" }, - 'key': ['name'], - 'type': 'text' + key: ["name"], + type: "text" }, { - 'title': 'Choose', - 'schema': { - 'title': 'Choose', - 'type': 'string', - 'enum': ['undefined', 'null', 'NaN'] + title: "Choose", + schema: { + title: "Choose", + type: "string", + enum: ["undefined", "null", "NaN"] }, - 'key': ['gender'], - 'type': 'select', - 'titleMap': [{ - 'name': 'undefined', - 'value': 'undefined' + key: ["gender"], + type: "select", + titleMap: [{ + name: "undefined", + value: "undefined" }, { - 'name': 'null', - 'value': 'null' + name: "null", + value: "null" }, { - 'name': 'NaN', - 'value': 'NaN' + name: "NaN", + value: "NaN" }] }, { - 'title': 'Are you over 18 years old?', - 'schema': { - 'title': 'Are you over 18 years old?', - 'type': 'boolean', - 'default': false + title: "Are you over 18 years old?", + schema: { + title: "Are you over 18 years old?", + type: "boolean", + default: false }, - 'key': ['overEighteen'], - 'type': 'checkbox' + key: ["overEighteen"], + type: "checkbox" }, { - 'title': 'attributes', - 'schema': { - 'type': 'object', - 'required': ['eyecolor'], - 'properties': { - 'eyecolor': { - 'type': 'string', - 'title': 'Eye color' + title: "attributes", + schema: { + type: "object", + required: ["eyecolor"], + properties: { + eyecolor: { + type: "string", + title: "Eye color" }, - 'haircolor': { - 'type': 'string', - 'title': 'Hair color' + haircolor: { + type: "string", + title: "Hair color" }, - 'shoulders': { - 'type': 'object', - 'title': 'Shoulders', - 'properties': { - 'left': { - 'type': 'string' + shoulders: { + type: "object", + title: "Shoulders", + properties: { + left: { + type: "string" }, - 'right': { - 'type': 'string' + right: { + type: "string" } } } } }, - 'type': 'fieldset', - 'items': [{ - 'title': 'Eye color', - 'required': true, - 'schema': { - 'type': 'string', - 'title': 'Eye color' + type: "fieldset", + items: [{ + title: "Eye color", + required: true, + schema: { + type: "string", + title: "Eye color" }, - 'key': ['attributes', 'eyecolor'], - 'type': 'text' + key: ["attributes", "eyecolor"], + type: "text" }, { - 'title': 'Hair color', - 'schema': { - 'type': 'string', - 'title': 'Hair color' + title: "Hair color", + schema: { + type: "string", + title: "Hair color" }, - 'key': ['attributes', 'haircolor'], - 'type': 'text' + key: ["attributes", "haircolor"], + type: "text" }, { - 'title': 'Shoulders', - 'schema': { - 'type': 'object', - 'title': 'Shoulders', - 'properties': { - 'left': { - 'type': 'string' + title: "Shoulders", + schema: { + type: "object", + title: "Shoulders", + properties: { + left: { + type: "string" }, - 'right': { - 'type': 'string' + right: { + type: "string" } } }, - 'type': 'fieldset', - 'items': [{ - 'title': 'left', - 'schema': { - 'type': 'string' + type: "fieldset", + items: [{ + title: "left", + schema: { + type: "string" }, - 'key': ['attributes', 'shoulders', 'left'], - 'type': 'text' + key: ["attributes", "shoulders", "left"], + type: "text" }, { - 'title': 'right', - 'schema': { - 'type': 'string' + title: "right", + schema: { + type: "string" }, - 'key': ['attributes', 'shoulders', 'right'], - 'type': 'text' + key: ["attributes", "shoulders", "right"], + type: "text" }] }] }]; - var f = utils.getDefaults(schema); - //console.log('f = ', f); + var f = _utils2.default.getDefaults(schema); expect(f.form).toEqual(form); }); - it('should handle global defaults', function () { + it("should handle global defaults", function () { var schema = { - 'type': 'object', - 'properties': { - 'name': { - 'title': 'Name', - 'description': 'Gimme yea name lad', - 'type': 'string' + type: "object", + properties: { + name: { + title: "Name", + description: "Gimme yea name lad", + type: "string" } } }; var form = [{ - 'title': 'Name', - 'description': 'Gimme yea name lad', - 'schema': { - 'title': 'Name', - 'description': 'Gimme yea name lad', - 'type': 'string' + title: "Name", + description: "Gimme yea name lad", + schema: { + title: "Name", + description: "Gimme yea name lad", + type: "string" }, - 'foo': 'bar', - 'key': ['name'], - 'type': 'text' + foo: "bar", + key: ["name"], + type: "text" }]; - var f = utils.getDefaults(schema, {}, { formDefaults: { foo: 'bar' } }); + var f = _utils2.default.getDefaults(schema, {}, { formDefaults: { foo: "bar" } }); expect(f.form).toEqual(form); }); - it('should handle x-schema-form defaults', function () { + it("should handle x-schema-form defaults", function () { var schema = { - 'type': 'object', - 'properties': { - 'name': { - 'title': 'Name', - 'description': 'Gimme yea name lad', - 'type': 'string', - 'x-schema-form': { - 'type': 'textarea' + type: "object", + properties: { + name: { + title: "Name", + description: "Gimme yea name lad", + type: "string", + "x-schema-form": { + type: "textarea" } } } }; - var f = utils.getDefaults(schema, {}); - expect(f.form[0].type).toEqual('textarea'); + var f = _utils2.default.getDefaults(schema, {}); + expect(f.form[0].type).toEqual("textarea"); }); - it('should ignore parts of schema in ignore list', function () { + it("should ignore parts of schema in ignore list", function () { var schema = { - 'type': 'object', - 'properties': { - 'name': { - 'title': 'Name', - 'description': 'Gimme yea name lad', - 'type': 'string' + type: "object", + properties: { + name: { + title: "Name", + description: "Gimme yea name lad", + type: "string" }, - 'gender': { - 'title': 'Choose', - 'type': 'string', - 'enum': ['undefined', 'null', 'NaN'] + gender: { + title: "Choose", + type: "string", + enum: ["undefined", "null", "NaN"] } } }; - //no form is implicitly ['*'] - var defaults = utils.getDefaults(schema).form; - expect(utils.merge(schema, ['*'], { gender: true })).toEqual([defaults[0]]); + // no form is implicitly ['*'] + var defaults = _utils2.default.getDefaults(schema).form; + expect(_utils2.default.merge(schema, ["*"], { gender: true })).toEqual([defaults[0]]); }); - it('merges schema with different forms', function () { + it("merges schema with different forms", function () { var schema = { - 'type': 'object', - 'properties': { - 'name': { - 'title': 'Name', - 'description': 'Gimme yea name lad', - 'type': 'string' + type: "object", + properties: { + name: { + title: "Name", + description: "Gimme yea name lad", + type: "string" }, - 'gender': { - 'title': 'Choose', - 'type': 'string', - 'enum': ['undefined', 'null', 'NaN'] + gender: { + title: "Choose", + type: "string", + enum: ["undefined", "null", "NaN"] } } }; - //no form is implicitly ['*'] - var defaults = utils.getDefaults(schema).form; - expect(utils.merge(schema)).toEqual(defaults); - expect(utils.merge(schema, ['*'])).toEqual(defaults); - expect(utils.merge(schema, ['*', { type: 'fieldset' }])).toEqual(defaults.concat([{ type: 'fieldset' }])); - - //simple form - expect(utils.merge(schema, ['gender'])).toEqual([defaults[1]]); - expect(utils.merge(schema, ['gender', 'name'])).toEqual([defaults[1], defaults[0]]); - - //change it up - var f = _.cloneDeep(defaults[0]); - f.title = 'Foobar'; - f.type = 'password'; - expect(utils.merge(schema, [{ key: 'name', title: 'Foobar', type: 'password' }])).toEqual([f]); + // no form is implicitly ['*'] + var defaults = _utils2.default.getDefaults(schema).form; + expect(_utils2.default.merge(schema)).toEqual(defaults); + expect(_utils2.default.merge(schema, ["*"])).toEqual(defaults); + expect(_utils2.default.merge(schema, ["*", { type: "fieldset" }])).toEqual(defaults.concat([{ type: "fieldset" }])); + + // simple form + expect(_utils2.default.merge(schema, ["gender"])).toEqual([defaults[1]]); + expect(_utils2.default.merge(schema, ["gender", "name"])).toEqual([defaults[1], defaults[0]]); + + // change it up + var f = _lodash2.default.cloneDeep(defaults[0]); + f.title = "Foobar"; + f.type = "password"; + expect(_utils2.default.merge(schema, [{ key: "name", title: "Foobar", type: "password" }])).toEqual([f]); }); - it('should translate readOnly in schema to readonly on the merged form defintion', function () { + it("should translate readOnly in schema to readonly on the merged form defintion", function () { var schema = { - 'type': 'object', - 'properties': { - 'name': { - 'title': 'Name', - 'description': 'Gimme yea name lad', - 'type': 'string' + type: "object", + properties: { + name: { + title: "Name", + description: "Gimme yea name lad", + type: "string" }, - 'gender': { - 'readOnly': true, - 'title': 'Choose', - 'type': 'string', - 'enum': ['undefined', 'null', 'NaN'] + gender: { + readOnly: true, + title: "Choose", + type: "string", + enum: ["undefined", "null", "NaN"] } } }; - var merged = utils.merge(schema, ['gender']); + var merged = _utils2.default.merge(schema, ["gender"]); expect(merged[0].readonly).toEqual(true); }); - it('should push readOnly in schema down into objects and arrays', function () { + it("should push readOnly in schema down into objects and arrays", function () { var schema = { - 'type': 'object', - 'readOnly': true, - 'properties': { - 'sub': { - 'type': 'object', - 'properties': { - 'array': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'foo': { - 'type': 'string' + type: "object", + readOnly: true, + properties: { + sub: { + type: "object", + properties: { + array: { + type: "array", + items: { + type: "object", + properties: { + foo: { + type: "string" } } } @@ -323,32 +324,32 @@ describe('utils', function () { } }; - var merged = utils.merge(schema, ['*']); + var merged = _utils2.default.merge(schema, ["*"]); - //sub + // sub expect(merged[0].readonly).toEqual(true); - //array + // array expect(merged[0].items[0].readonly).toEqual(true); - //array items + // array items expect(merged[0].items[0].items[0].readonly).toEqual(true); }); - it('should push readonly in form def down into objects and arrays', function () { + it("should push readonly in form def down into objects and arrays", function () { var schema = { - 'type': 'object', - 'properties': { - 'sub': { - 'type': 'object', - 'properties': { - 'array': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'foo': { - 'type': 'string' + type: "object", + properties: { + sub: { + type: "object", + properties: { + array: { + type: "array", + items: { + type: "object", + properties: { + foo: { + type: "string" } } } @@ -358,114 +359,114 @@ describe('utils', function () { } }; - var merged = utils.merge(schema, [{ key: 'sub', readonly: true }]); + var merged = _utils2.default.merge(schema, [{ key: "sub", readonly: true }]); - //sub + // sub expect(merged[0].readonly).toEqual(true); - //array + // array expect(merged[0].items[0].readonly).toEqual(true); - //array items + // array items expect(merged[0].items[0].items[0].readonly).toEqual(true); }); - xit('should select and set into objects and arrays', function () { + xit("should select and set into objects and arrays", function () { var schema = { - 'key': ['comments'], - 'add': 'New', - 'style': { - 'add': 'btn-success' + key: ["comments"], + add: "New", + style: { + add: "btn-success" }, - 'items': [{ - 'key': ['comments', '', 'name'], - 'title': 'Name', - 'required': true, - 'schema': { - 'title': 'Name', - 'type': 'string' + items: [{ + key: ["comments", "", "name"], + title: "Name", + required: true, + schema: { + title: "Name", + type: "string" }, - 'type': 'text' + type: "text" }, { - 'key': ['comments', '', 'email'], - 'title': 'Email', - 'description': 'Email will be used for evil.', - 'schema': { - 'title': 'Email', - 'type': 'string', - 'pattern': '^\\S+@\\S+$', - 'description': 'Email will be used for evil.' + key: ["comments", "", "email"], + title: "Email", + description: "Email will be used for evil.", + schema: { + title: "Email", + type: "string", + pattern: "^\\S+@\\S+$", + description: "Email will be used for evil." }, - 'type': 'text' + type: "text" }, { - 'key': ['comments', '', 'spam'], - 'type': 'checkbox', - 'title': 'Yes I want spam.', - 'condition': 'model.comments[arrayIndex].email', - 'schema': { - 'title': 'Spam', - 'type': 'boolean', - 'default': true + key: ["comments", "", "spam"], + type: "checkbox", + title: "Yes I want spam.", + condition: "model.comments[arrayIndex].email", + schema: { + title: "Spam", + type: "boolean", + default: true } }, { - 'key': ['comments', '', 'comment'], - 'type': 'textarea', - 'title': 'Comment', - 'required': true, - 'maxlength': 20, - 'validationMessage': 'Don\'t be greedy!', - 'schema': { - 'title': 'Comment', - 'type': 'string', - 'maxLength': 20, - 'validationMessage': 'Don\'t be greedy!' + key: ["comments", "", "comment"], + type: "textarea", + title: "Comment", + required: true, + maxlength: 20, + validationMessage: "Don't be greedy!", + schema: { + title: "Comment", + type: "string", + maxLength: 20, + validationMessage: "Don't be greedy!" } }], - 'title': 'comments', - 'required': true, - 'schema': { - 'type': 'array', - 'maxItems': 2, - 'items': { - 'type': 'object', - 'properties': { - 'name': { - 'title': 'Name', - 'type': 'string' + title: "comments", + required: true, + schema: { + type: "array", + maxItems: 2, + items: { + type: "object", + properties: { + name: { + title: "Name", + type: "string" }, - 'email': { - 'title': 'Email', - 'type': 'string', - 'pattern': '^\\S+@\\S+$', - 'description': 'Email will be used for evil.' + email: { + title: "Email", + type: "string", + pattern: "^\\S+@\\S+$", + description: "Email will be used for evil." }, - 'spam': { - 'title': 'Spam', - 'type': 'boolean', - 'default': true + spam: { + title: "Spam", + type: "boolean", + default: true }, - 'comment': { - 'title': 'Comment', - 'type': 'string', - 'maxLength': 20, - 'validationMessage': 'Don\'t be greedy!' + comment: { + title: "Comment", + type: "string", + maxLength: 20, + validationMessage: "Don't be greedy!" } }, - 'required': ['name', 'comment'] + required: ["name", "comment"] } }, - 'type': 'array' + type: "array" }; - //var list = utils.selectOrSet(schema, [{key: 'sub', readonly: true}]); - var merged = utils.merge(schema, [{ key: 'sub', readonly: true }]); + // var list = utils.selectOrSet(schema, [{key: 'sub', readonly: true}]); + var merged = _utils2.default.merge(schema, [{ key: "sub", readonly: true }]); // sub expect(merged[0].readonly).toEqual(true); - //array + // array expect(merged[0].items[0].readonly).toEqual(true); - //array items + // array items expect(merged[0].items[0].items[0].readonly).toEqual(true); }); }); \ No newline at end of file diff --git a/lib/index.js b/lib/index.js index 79f6ff09..df38718f 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,5 +1,34 @@ -'use strict'; +"use strict"; -exports.SchemaForm = require('./SchemaForm'); -exports.utils = require('./utils'); -exports.ComposedComponent = require('./ComposedComponent'); \ No newline at end of file +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _SchemaForm = require("./SchemaForm"); + +Object.defineProperty(exports, "SchemaForm", { + enumerable: true, + get: function get() { + return _interopRequireDefault(_SchemaForm).default; + } +}); + +var _ComposedComponent = require("./ComposedComponent"); + +Object.defineProperty(exports, "ComposedComponent", { + enumerable: true, + get: function get() { + return _interopRequireDefault(_ComposedComponent).default; + } +}); + +var _utils = require("./utils"); + +Object.defineProperty(exports, "utils", { + enumerable: true, + get: function get() { + return _interopRequireDefault(_utils).default; + } +}); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } \ No newline at end of file diff --git a/lib/utils.js b/lib/utils.js index 4ef3d118..5e9496c8 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -1,56 +1,61 @@ -'use strict'; +"use strict"; -var _isObject = require('lodash/isObject'); +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _isObject = require("lodash/isObject"); var _isObject2 = _interopRequireDefault(_isObject); -var _cloneDeep = require('lodash/cloneDeep'); +var _cloneDeep = require("lodash/cloneDeep"); var _cloneDeep2 = _interopRequireDefault(_cloneDeep); -var _extend = require('lodash/extend'); +var _extend = require("lodash/extend"); var _extend2 = _interopRequireDefault(_extend); -var _isUndefined = require('lodash/isUndefined'); +var _isUndefined = require("lodash/isUndefined"); var _isUndefined2 = _interopRequireDefault(_isUndefined); -var _objectpath = require('objectpath'); +var _objectpath = require("objectpath"); var _objectpath2 = _interopRequireDefault(_objectpath); -var _tv = require('tv4'); +var _tv = require("tv4"); var _tv2 = _interopRequireDefault(_tv); -var _notevil = require('notevil'); +var _notevil = require("notevil"); var _notevil2 = _interopRequireDefault(_notevil); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -//Evaluates an expression in a safe way -function safeEval(condition, scope) { +// Evaluates an expression in a safe way +var safeEval = function safeEval(condition, scope) { try { - var scope_safe = (0, _cloneDeep2.default)(scope); - return (0, _notevil2.default)(condition, scope_safe); + var scopeSafe = (0, _cloneDeep2.default)(scope); + return (0, _notevil2.default)(condition, scopeSafe); } catch (error) { return undefined; } -} +}; /* eslint-disable no-param-reassign */ + -function stripNullType(type) { - if (Array.isArray(type) && type.length == 2) { - if (type[0] === 'null') return type[1]; - if (type[1] === 'null') return type[0]; +var stripNullType = function stripNullType(type) { + if (Array.isArray(type) && type.length === 2) { + if (type[0] === "null") return type[1]; + if (type[1] === "null") return type[0]; } return type; -} +}; -//Creates an default titleMap list from an enum, i.e. a list of strings. +// Creates an default titleMap list from an enum, i.e. a list of strings. var enumToTitleMap = function enumToTitleMap(enm) { - var titleMap = []; //canonical titleMap format is a list. + var titleMap = []; // canonical titleMap format is a list. enm.forEach(function (name) { titleMap.push({ name: name, value: name }); }); @@ -63,14 +68,14 @@ var canonicalTitleMap = function canonicalTitleMap(titleMap, originalEnum) { if (!originalEnum) return titleMap; var canonical = []; - var _enum = Object.keys(titleMap).length == 0 ? originalEnum : titleMap; + var enumValues = Object.keys(titleMap).length === 0 ? originalEnum : titleMap; originalEnum.forEach(function (value, idx) { - canonical.push({ name: _enum[idx], value: value }); + canonical.push({ name: enumValues[idx], value: value }); }); return canonical; }; -//Creates a form object with all common properties +// Creates a form object with all common properties var stdFormObj = function stdFormObj(name, schema, options) { options = options || {}; var f = options.global && options.global.formDefaults ? (0, _cloneDeep2.default)(options.global.formDefaults) : {}; @@ -108,7 +113,7 @@ var stdFormObj = function stdFormObj(name, schema, options) { f.validationMessage = schema.validationMessage; } if (schema.enumNames) { - f.titleMap = canonicalTitleMap(schema.enumNames, schema['enum']); + f.titleMap = canonicalTitleMap(schema.enumNames, schema.enum); } f.schema = schema; @@ -116,136 +121,166 @@ var stdFormObj = function stdFormObj(name, schema, options) { }; var tBoolean = function tBoolean(name, schema, options) { - if (stripNullType(schema.type) === 'tBoolean' && !schema['enum']) { + if (stripNullType(schema.type) === "tBoolean" && !schema.enum) { var f = stdFormObj(name, schema, options); f.key = options.path; - f.type = 'tBoolean'; + f.type = "tBoolean"; options.lookup[_objectpath2.default.stringify(options.path)] = f; - return f; } + return undefined; }; var text = function text(name, schema, options) { - if (stripNullType(schema.type) === 'string' && !schema['enum']) { + if (stripNullType(schema.type) === "string" && !schema.enum) { var f = stdFormObj(name, schema, options); f.key = options.path; - f.type = 'text'; + f.type = "text"; options.lookup[_objectpath2.default.stringify(options.path)] = f; return f; } + return undefined; }; -//default in json form for number and integer is a text field -//input type="number" would be more suitable don't ya think? +// default in json form for number and integer is a text field +// input type="number" would be more suitable don't ya think? var number = function number(name, schema, options) { - if (stripNullType(schema.type) === 'number') { + if (stripNullType(schema.type) === "number") { var f = stdFormObj(name, schema, options); f.key = options.path; - f.type = 'number'; + f.type = "number"; options.lookup[_objectpath2.default.stringify(options.path)] = f; return f; } + return undefined; }; var integer = function integer(name, schema, options) { - if (stripNullType(schema.type) === 'integer') { + if (stripNullType(schema.type) === "integer") { var f = stdFormObj(name, schema, options); f.key = options.path; - f.type = 'number'; + f.type = "number"; options.lookup[_objectpath2.default.stringify(options.path)] = f; return f; } + return undefined; }; var date = function date(name, schema, options) { - if (stripNullType(schema.type) === 'date') { + if (stripNullType(schema.type) === "date") { var f = stdFormObj(name, schema, options); f.key = options.path; - f.type = 'date'; + f.type = "date"; options.lookup[_objectpath2.default.stringify(options.path)] = f; return f; } + return undefined; }; var checkbox = function checkbox(name, schema, options) { - if (stripNullType(schema.type) === 'boolean') { + if (stripNullType(schema.type) === "boolean") { var f = stdFormObj(name, schema, options); f.key = options.path; - f.type = 'checkbox'; + f.type = "checkbox"; options.lookup[_objectpath2.default.stringify(options.path)] = f; return f; } + return undefined; }; var select = function select(name, schema, options) { - if (stripNullType(schema.type) === 'string' && schema['enum']) { + if (stripNullType(schema.type) === "string" && schema.enum) { var f = stdFormObj(name, schema, options); f.key = options.path; - f.type = 'select'; + f.type = "select"; if (!f.titleMap) { - f.titleMap = enumToTitleMap(schema['enum']); + f.titleMap = enumToTitleMap(schema.enum); } options.lookup[_objectpath2.default.stringify(options.path)] = f; return f; } + return undefined; }; var checkboxes = function checkboxes(name, schema, options) { - if (stripNullType(schema.type) === 'array' && schema.items && schema.items['enum']) { + if (stripNullType(schema.type) === "array" && schema.items && schema.items.enum) { var f = stdFormObj(name, schema, options); f.key = options.path; - f.type = 'checkboxes'; + f.type = "checkboxes"; if (!f.titleMap) { - f.titleMap = enumToTitleMap(schema.items['enum']); + f.titleMap = enumToTitleMap(schema.items.enum); } options.lookup[_objectpath2.default.stringify(options.path)] = f; return f; } + return undefined; +}; + +var defaultFormDefinition = function defaultFormDefinition(name, schema, options) { + // eslint-disable-next-line no-use-before-define + var rules = defaults[stripNullType(schema.type)]; + if (rules) { + var def = void 0; + for (var i = 0; i < rules.length; i += 1) { + def = rules[i](name, schema, options); + + // first handler in list that actually returns something is our handler! + if (def) { + // Do we have form defaults in the schema under the x-schema-form-attribute? + if (def.schema["x-schema-form"] && (0, _isObject2.default)(def.schema["x-schema-form"])) { + def = (0, _extend2.default)(def, def.schema["x-schema-form"]); + } + return def; + } + } + } + return undefined; }; var fieldset = function fieldset(name, schema, options) { - if (stripNullType(schema.type) === 'object') { + if (stripNullType(schema.type) === "object") { var f = stdFormObj(name, schema, options); - f.type = 'fieldset'; + f.type = "fieldset"; f.items = []; options.lookup[_objectpath2.default.stringify(options.path)] = f; - //recurse down into properties - for (var k in schema.properties) { - if (schema.properties.hasOwnProperty(k)) { - var path = options.path.slice(); - path.push(k); - if (options.ignore[_objectpath2.default.stringify(path)] !== true) { - var required = schema.required && schema.required.indexOf(k) !== -1; - - var def = defaultFormDefinition(k, schema.properties[k], { - path: path, - required: required || false, - lookup: options.lookup, - ignore: options.ignore, - global: options.global - }); - if (def) { - f.items.push(def); + // recurse down into properties + if (schema.properties) { + Object.keys(schema.properties).forEach(function (key) { + if (Object.prototype.hasOwnProperty.call(schema.properties, key)) { + var path = options.path.slice(); + path.push(key); + if (options.ignore[_objectpath2.default.stringify(path)] !== true) { + var required = schema.required && schema.required.indexOf(key) !== -1; + + var def = defaultFormDefinition(key, schema.properties[key], { + path: path, + required: required || false, + lookup: options.lookup, + ignore: options.ignore, + global: options.global + }); + if (def) { + f.items.push(def); + } } } - } + }); } return f; } + return undefined; }; var array = function array(name, schema, options) { - - if (stripNullType(schema.type) === 'array') { + if (stripNullType(schema.type) === "array") { var f = stdFormObj(name, schema, options); - f.type = 'array'; + f.type = "array"; f.key = options.path; options.lookup[_objectpath2.default.stringify(options.path)] = f; // don't do anything if items is not defined. - if (typeof schema.items !== 'undefined') { + if (typeof schema.items !== "undefined") { var required = schema.required && schema.required.indexOf(options.path[options.path.length - 1]) !== -1; // The default is to always just create one child. This works since if the @@ -254,7 +289,7 @@ var array = function array(name, schema, options) { // signify arrays. var arrPath = options.path.slice(); - arrPath.push(''); + arrPath.push(""); var def = defaultFormDefinition(name, schema.items, { path: arrPath, required: required || false, @@ -271,6 +306,7 @@ var array = function array(name, schema, options) { } return f; } + return undefined; }; var defaults = { @@ -284,63 +320,36 @@ var defaults = { tBoolean: [tBoolean] }; -function defaultFormDefinition(name, schema, options) { - //console.log("defaultFormDefinition name, schema", name, schema); - var rules = defaults[stripNullType(schema.type)]; - //console.log('defaultFormDefinition:defaults = ', defaults); - //console.log('defaultFormDefinition:rules = ', rules); - if (rules) { - var def; - for (var i = 0; i < rules.length; i++) { - def = rules[i](name, schema, options); - - //first handler in list that actually returns something is our handler! - if (def) { - - // Do we have form defaults in the schema under the x-schema-form-attribute? - if (def.schema['x-schema-form'] && (0, _isObject2.default)(def.schema['x-schema-form'])) { - def = (0, _extend2.default)(def, def.schema['x-schema-form']); - } - return def; - } - } - } -} - -function getDefaults(schema, ignore, globalOptions) { +var getDefaults = function getDefaults(schema, ignore, globalOptions) { var form = []; - var lookup = {}; //Map path => form obj for fast lookup in merging + var lookup = {}; // Map path => form obj for fast lookup in merging ignore = ignore || {}; globalOptions = globalOptions || {}; - //console.log('getDefaults:schema.type = ', schema.type); - if (stripNullType(schema.type) === 'object') { - //console.log('getDefaults:schema.properties = ', schema.properties); - for (var k in schema.properties) { - if (schema.properties.hasOwnProperty(k)) { - if (ignore[k] !== true) { - var required = schema.required && schema.required.indexOf(k) !== -1; - //console.log('getDefaults:required = ', required); - //console.log('getDefaults: k = ', k); - //console.log('getDefaults: v = ', schema.properties[k]); - var def = defaultFormDefinition(k, schema.properties[k], { - path: [k], // Path to this property in bracket notation. - lookup: lookup, // Extra map to register with. Optimization for merger. - ignore: ignore, // The ignore list of paths (sans root level name) - required: required, // Is it required? (v4 json schema style) - global: globalOptions // Global options, including form defaults - }); - //console.log('getDefaults:def = ', def); - if (def) { - form.push(def); + if (stripNullType(schema.type) === "object") { + if (schema.properties) { + Object.keys(schema.properties).forEach(function (key) { + if (Object.prototype.hasOwnProperty.call(schema.properties, key)) { + if (ignore[key] !== true) { + var required = schema.required && schema.required.indexOf(key) !== -1; + var def = defaultFormDefinition(key, schema.properties[key], { + path: [key], // Path to this property in bracket notation. + lookup: lookup, // Extra map to register with. Optimization for merger. + ignore: ignore, // The ignore list of paths (sans root level name) + required: required, // Is it required? (v4 json schema style) + global: globalOptions // Global options, including form defaults + }); + if (def) { + form.push(def); + } } } - } + }); } } else { throw new Error('Not implemented. Only type "object" allowed at root level of schema.'); } return { form: form, lookup: lookup }; -} +}; var postProcessFn = function postProcessFn(form) { return form; @@ -352,55 +361,58 @@ var postProcessFn = function postProcessFn(form) { * @param {Function} rule a function(propertyName,propertySchema,options) that returns a form * definition or undefined */ -function appendRule(type, rule) { +var appendRule = function appendRule(type, rule) { if (!defaults[type]) { defaults[type] = []; } defaults[type].push(rule); -} +}; /** * Prepend default form rule * @param {string} type json schema type * @param {Function} rule a function(propertyName,propertySchema,options) that returns a form * definition or undefined */ -function prependRule(type, rule) { +var prependRule = function prependRule(type, rule) { if (!defaults[type]) { defaults[type] = []; } defaults[type].unshift(rule); -} +}; -//Utility functions +// Utility functions /** * Traverse a schema, applying a function(schema,path) on every sub schema * i.e. every property of an object. */ -function traverseSchema(schema, fn, path, ignoreArrays) { - ignoreArrays = typeof ignoreArrays !== 'undefined' ? ignoreArrays : true; +var traverseSchema = function traverseSchema(schema, fn, path, ignoreArrays) { + ignoreArrays = typeof ignoreArrays !== "undefined" ? ignoreArrays : true; path = path || []; - var traverse = function traverse(schema, fn, path) { - fn(schema, path); - for (var k in schema.properties) { - if (schema.properties.hasOwnProperty(k)) { - var currentPath = path.slice(); - currentPath.push(k); - traverse(schema.properties[k], fn, currentPath); - } + var traverse = function traverse(innerSchema, innerFunc, innerPath) { + innerFunc(innerSchema, innerPath); + if (innerSchema.properties) { + Object.keys(innerSchema.properties).forEach(function (key) { + if (Object.prototype.hasOwnProperty.call(innerSchema.properties, key)) { + var currentPath = innerPath.slice(); + currentPath.push(key); + traverse(innerSchema.properties[key], innerFunc, currentPath); + } + }); } - //Only support type "array" which have a schema as "items". - if (!ignoreArrays && schema.items) { - var arrPath = path.slice();arrPath.push(''); - traverse(schema.items, fn, arrPath); + // Only support type "array" which have a schema as "items". + if (!ignoreArrays && innerSchema.items) { + var arrPath = innerPath.slice(); + arrPath.push(""); + traverse(innerSchema.items, innerFunc, arrPath); } }; traverse(schema, fn, path || []); -} +}; -function traverseForm(form, fn) { +var traverseForm = function traverseForm(form, fn) { fn(form); if (form.items) { form.items.forEach(function (f) { @@ -415,70 +427,60 @@ function traverseForm(form, fn) { }); }); } -} +}; -function merge(schema, form, ignore, options, readonly) { - //console.log('merge schema', schema); - //console.log('merge form', form); - form = form || ['*']; +var merge = function merge(schema, form, ignore, options, readonly) { + form = form || ["*"]; options = options || {}; // Get readonly from root object readonly = readonly || schema.readonly || schema.readOnly; var stdForm = getDefaults(schema, ignore, options); - //console.log('merge stdForm', stdForm); - //simple case, we have a "*", just put the stdForm there - var idx = form.indexOf('*'); + // simple case, we have a "*", just put the stdForm there + var idx = form.indexOf("*"); if (idx !== -1) { form = form.slice(0, idx).concat(stdForm.form).concat(form.slice(idx + 1)); } - //ok let's merge! - //We look at the supplied form and extend it with schema standards + // ok let's merge! + // We look at the supplied form and extend it with schema standards var lookup = stdForm.lookup; - //console.log('form', form); - return postProcessFn(form.map(function (obj) { - //handle the shortcut with just a name - if (typeof obj === 'string') { + return postProcessFn(form.map(function (obj) { + // handle the shortcut with just a name + if (typeof obj === "string") { obj = { key: obj }; } if (obj.key) { - if (typeof obj.key === 'string') { + if (typeof obj.key === "string") { obj.key = _objectpath2.default.parse(obj.key); } } - //If it has a titleMap make sure to update it with latest enum and names - // if (obj.titleMap) { - // obj.titleMap = canonicalTitleMap(obj.schema.enumNames, obj.schema.enum); - // } - - // if (obj.itemForm) { obj.items = []; var str = _objectpath2.default.stringify(obj.key); - var stdForm = lookup[str]; - stdForm.items.forEach(function (item) { + var foundForm = lookup[str]; + foundForm.items.forEach(function (item) { var o = (0, _cloneDeep2.default)(obj.itemForm); o.key = item.key; obj.items.push(o); }); } - //extend with std form from schema. + // extend with std form from schema. if (obj.key) { var strid = _objectpath2.default.stringify(obj.key); if (lookup[strid]) { var schemaDefaults = lookup[strid]; - for (var k in schemaDefaults) { - if (schemaDefaults.hasOwnProperty(k)) { - if (obj[k] === undefined) { - obj[k] = schemaDefaults[k]; + Object.keys(schemaDefaults).forEach(function (key) { + if (Object.prototype.hasOwnProperty.call(schemaDefaults, key)) { + if (obj[key] === undefined) { + obj[key] = schemaDefaults[key]; } } - } + }); } } @@ -488,15 +490,12 @@ function merge(schema, form, ignore, options, readonly) { obj.readonly = true; } - //if it's a type with items, merge 'em! + // if it's a type with items, merge 'em! if (obj.items && obj.items.length > 0) { - //console.log('items is not empty schema', schema); - //console.log('items is not empty obj.items', obj.items); - obj.items = merge(schema, obj.items, ignore, options, obj.readonly); } - //if its has tabs, merge them also! + // if its has tabs, merge them also! if (obj.tabs) { obj.tabs.forEach(function (tab) { tab.items = merge(schema, tab.items, ignore, options, obj.readonly); @@ -505,108 +504,104 @@ function merge(schema, form, ignore, options, readonly) { // Special case: checkbox // Since have to ternary state we need a default - if (obj.type === 'checkbox' && (0, _isUndefined2.default)(obj.schema['default'])) { - obj.schema['default'] = false; + if (obj.type === "checkbox" && (0, _isUndefined2.default)(obj.schema.default)) { + obj.schema.default = false; } return obj; })); -} +}; function selectOrSet(projection, obj, valueToSet, type) { - //console.log('selectOrSet', projection, obj, valueToSet); var numRe = /^\d+$/; if (!obj) { obj = this; } - //Support [] array syntax - var parts = typeof projection === 'string' ? _objectpath2.default.parse(projection) : projection; + // Support [] array syntax + var parts = typeof projection === "string" ? _objectpath2.default.parse(projection) : projection; - if (typeof valueToSet !== 'undefined' && parts.length === 1) { - //special case, just setting one variable + if (typeof valueToSet !== "undefined" && parts.length === 1) { + // special case, just setting one variable obj[parts[0]] = valueToSet; return obj; } - if (typeof valueToSet !== 'undefined' && typeof obj[parts[0]] === 'undefined') { + if (typeof valueToSet !== "undefined" && typeof obj[parts[0]] === "undefined") { // We need to look ahead to check if array is appropriate obj[parts[0]] = parts.length > 2 && numRe.test(parts[1]) ? [] : {}; } - if (typeof type !== 'undefined' && ['number', 'integer'].indexOf(type) > -1 && typeof valueToSet === 'undefined') { + if (typeof type !== "undefined" && ["number", "integer"].indexOf(type) > -1 && typeof valueToSet === "undefined") { // number or integer can undefined obj[parts[0]] = valueToSet; return obj; } var value = obj[parts[0]]; - for (var i = 1; i < parts.length; i++) { + for (var i = 1; i < parts.length; i += 1) { // Special case: We allow JSON Form syntax for arrays using empty brackets // These will of course not work here so we exit if they are found. - if (parts[i] === '') { + if (parts[i] === "") { return undefined; } - if (typeof valueToSet !== 'undefined') { + if (typeof valueToSet !== "undefined") { if (i === parts.length - 1) { - //last step. Let's set the value + // last step. Let's set the value value[parts[i]] = valueToSet; return valueToSet; - } else { - // Make sure to create new objects on the way if they are not there. - // We need to look ahead to check if array is appropriate - var tmp = value[parts[i]]; - if (typeof tmp === 'undefined' || tmp === null) { - tmp = numRe.test(parts[i + 1]) ? [] : {}; - value[parts[i]] = tmp; - } - value = tmp; } + // Make sure to create new objects on the way if they are not there. + // We need to look ahead to check if array is appropriate + var tmp = value[parts[i]]; + if (typeof tmp === "undefined" || tmp === null) { + tmp = numRe.test(parts[i + 1]) ? [] : {}; + value[parts[i]] = tmp; + } + value = tmp; } else if (value) { - //Just get nex value. + // Just get nex value. value = value[parts[i]]; } } return value; } -function validateBySchema(schema, value) { +var validateBySchema = function validateBySchema(schema, value) { return _tv2.default.validateResult(value, schema); -} +}; -function validate(form, value) { - //console.log('utils validate form ', form); +var validate = function validate(form, value) { if (!form) { return { valid: true }; } var schema = form.schema; + if (!schema) { return { valid: true }; } - //console.log('utils validate schema = ', schema); // Input of type text and textareas will give us a viewValue of '' // when empty, this is a valid value in a schema and does not count as something // that breaks validation of 'required'. But for our own sanity an empty field should // not validate if it's required. - if (value === '') { + if (value === "") { value = undefined; } // Numbers fields will give a null value, which also means empty field - if (form.type === 'number' && value === null) { - //console.log('utils validate form.type is number'); + if (form.type === "number" && value === null) { value = undefined; } - if (form.type === 'number' && isNaN(parseFloat(value))) { + if (form.type === "number" && Number.isNaN(parseFloat(value))) { value = undefined; } // Version 4 of JSON Schema has the required property not on the // property itself but on the wrapping object. Since we like to test // only this property we wrap it in a fake object. - var wrap = { type: 'object', 'properties': {} }; + var wrap = { type: "object", properties: {} }; var propName = form.key[form.key.length - 1]; wrap.properties[propName] = schema; @@ -614,21 +609,18 @@ function validate(form, value) { wrap.required = [propName]; } var valueWrap = {}; - if (typeof value !== 'undefined') { + if (typeof value !== "undefined") { valueWrap[propName] = value; } - //console.log('utils validate value = ', typeof value); - //console.log('utils validate valueWrap = ', valueWrap); - //console.log('utils validate wrap = ', wrap); var tv4Result = _tv2.default.validateResult(valueWrap, wrap); - if (tv4Result != null && !tv4Result.valid && form.validationMessage != null && typeof value !== 'undefined') { + if (tv4Result != null && !tv4Result.valid && form.validationMessage != null && typeof value !== "undefined") { tv4Result.error.message = form.validationMessage; } return tv4Result; -} +}; -function getValueFromModel(model, key) { +var getValueFromModel = function getValueFromModel(model, key) { var result = void 0; if (Array.isArray(key)) { key.reduce(function (cur, nxt) { @@ -641,16 +633,17 @@ function getValueFromModel(model, key) { result = model[key]; } return result; -} +}; -function getTitleByValue(titleMap, value) { - for (var i = titleMap.length; --i >= 0;) { +var getTitleByValue = function getTitleByValue(titleMap, value) { + for (var i = titleMap.length; i >= 0; i -= 1) { var item = titleMap[i]; if (item.value === value) return item.name; } -} + return undefined; +}; -module.exports = { +exports.default = { traverseForm: traverseForm, traverseSchema: traverseSchema, prependRule: prependRule, diff --git a/package.json b/package.json index f323ce5a..a39000f9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-schema-form", - "version": "0.6.1", + "version": "0.6.2", "description": "React json schema form", "keywords": [ "json schema",