@configuratorware/configurator-admingui 1.48.6 → 1.48.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/App/Data.js CHANGED
@@ -32,6 +32,12 @@ _validate.validate.validators.emptyOrPositive = function (value, options) {
32
32
  }
33
33
  return (0, _i18n.t)('customValidators.numericality');
34
34
  };
35
+ _validate.validate.validators.positiveNumber = function (value, options) {
36
+ if (options && !isNaN(+value) && +value > 0) {
37
+ return null;
38
+ }
39
+ return (0, _i18n.t)((options === null || options === void 0 ? void 0 : options.message) || 'customValidators.numericality');
40
+ };
35
41
  _validate.validate.validators.numericOrEmpty = function (value, options) {
36
42
  if (value === '' || value === null) {
37
43
  return null;
@@ -229,7 +235,8 @@ var Data = exports["default"] = /*#__PURE__*/function () {
229
235
  }, {
230
236
  key: "validate",
231
237
  value: function validate() {
232
- var isValid = this._validator.validate();
238
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
239
+ var isValid = this._validator.validate(options);
233
240
  this._trigger(Data.EventTypes.validate, {
234
241
  isValid: isValid
235
242
  });
@@ -304,6 +311,7 @@ var DataValidator = exports.DataValidator = /*#__PURE__*/function () {
304
311
  }, {
305
312
  key: "validate",
306
313
  value: function validate() {
314
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
307
315
  var isValid = true;
308
316
  for (var prop in this._data) {
309
317
  var dataSchema = _lodash["default"].get(this._data[prop], 'schema');
@@ -311,7 +319,10 @@ var DataValidator = exports.DataValidator = /*#__PURE__*/function () {
311
319
  isValid = dataSchema.validate() && isValid;
312
320
  }
313
321
  }
314
- isValid = validateDataObject(this._data) && isValid;
322
+ var valueObject = options.valueObject,
323
+ idx = options.idx,
324
+ dataArr = options.dataArr;
325
+ isValid = validateDataObject(this._data, valueObject, idx, dataArr) && isValid;
315
326
  this._validation.isDone = true;
316
327
  return isValid;
317
328
  }
@@ -334,13 +345,38 @@ var DataValidator = exports.DataValidator = /*#__PURE__*/function () {
334
345
  }]);
335
346
  return DataValidator;
336
347
  }();
337
- var validateField = function validateField(prop, valueToValidate, idx) {
348
+ var prepareConstraints = function prepareConstraints() {
349
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
350
+ if (!options.prop.constraints) {
351
+ return null;
352
+ }
353
+ var constraints = _objectSpread({}, options.prop.constraints);
354
+ Object.keys(constraints).forEach(function (key) {
355
+ if (constraints[key].applyIf && !constraints[key].applyIf(options)) {
356
+ delete constraints[key];
357
+ }
358
+ });
359
+ return constraints;
360
+ };
361
+ var validateField = function validateField(prop, valueToValidate, idx, dataArr, dataObject) {
338
362
  var valid = true;
339
363
  if (prop.constraints) {
340
- var result = _validate.validate.single(valueToValidate, prop.constraints);
341
- if (idx !== undefined) {
342
- prop.error = prop.error || [];
343
- prop.error[idx] = result ? result.join(', ') : undefined;
364
+ var constraints = prepareConstraints({
365
+ prop: prop,
366
+ valueToValidate: valueToValidate,
367
+ idx: idx,
368
+ dataArr: dataArr,
369
+ dataObject: dataObject
370
+ });
371
+ if (!constraints) {
372
+ return valid;
373
+ }
374
+ var result = _validate.validate.single(valueToValidate, constraints);
375
+ if (Number.isInteger(idx) && idx >= 0) {
376
+ if (result) {
377
+ prop.error = prop.error || [];
378
+ prop.error[idx] = result ? result.join(', ') : undefined;
379
+ }
344
380
  } else {
345
381
  if (result) {
346
382
  prop.error = result.join(', ');
@@ -352,17 +388,22 @@ var validateField = function validateField(prop, valueToValidate, idx) {
352
388
  }
353
389
  return valid;
354
390
  };
355
- var validateDataObject = exports.validateDataObject = function validateDataObject(dataObject, valueObject, idx) {
391
+ var validateDataObject = exports.validateDataObject = function validateDataObject(dataObject, valueObject, idx, dataArr) {
356
392
  var valid = true;
357
393
  var _loop2 = function _loop2() {
358
394
  var prop = dataObject[p];
395
+ prop.beforeValidate && prop.beforeValidate({
396
+ prop: prop,
397
+ idx: idx,
398
+ dataArr: dataArr
399
+ });
359
400
  var valueToValidate = valueObject ? valueObject[p] : prop.value;
360
- valid = validateField(prop, valueToValidate, idx) && valid;
401
+ valid = validateField(prop, valueToValidate, idx, dataArr || prop.value, dataObject) && valid;
361
402
  if (prop.schema) {
362
403
  if (_lodash["default"].isArray(prop.value)) {
363
404
  // validate all values against the schema rules
364
405
  prop.value.forEach(function (value, idx) {
365
- valid = validateDataObject(prop.schema, value, idx) && valid;
406
+ valid = validateDataObject(prop.schema, value, idx, prop.value) && valid;
366
407
  });
367
408
  } else if (prop.value === null) {
368
409
  // skip validation, if the value is null
@@ -72,7 +72,11 @@ var InputArray = /*#__PURE__*/function (_Component) {
72
72
  updateOnly = _options$updateOnly === void 0 ? false : _options$updateOnly;
73
73
  var selectedRow = _this.state.selectedRow;
74
74
  var schema = _this.props.schema;
75
- if (schema.validate()) {
75
+ var dataArr = _this.props.value instanceof Array ? _this.props.value : undefined;
76
+ if (schema.validate({
77
+ dataArr: dataArr,
78
+ idx: selectedRow
79
+ })) {
76
80
  var value = _lodash["default"].isArray(_this.props.value) ? _this.props.value : [];
77
81
  var data = schema.getData();
78
82
  var updateOnPropertyMatch = _lodash["default"].get(_this.props, 'array.updateOnPropertyMatch');
@@ -99,13 +103,18 @@ var InputArray = /*#__PURE__*/function (_Component) {
99
103
  schema.reset();
100
104
  _this.setState({
101
105
  selectedRow: false,
102
- showEditor: false
106
+ showEditor: false,
107
+ validationErrors: false
103
108
  });
104
109
  }
105
110
  return true;
106
111
  } else {
112
+ var validationErrors = schema.getErrors();
107
113
  // eslint-disable-next-line no-console
108
- console.error('Validation error!', schema.getErrors());
114
+ console.error('Validation error!', validationErrors);
115
+ _this.setState({
116
+ validationErrors: validationErrors
117
+ });
109
118
  }
110
119
  return false;
111
120
  });
@@ -115,7 +124,8 @@ var InputArray = /*#__PURE__*/function (_Component) {
115
124
  _this.setState({
116
125
  selectedRow: false,
117
126
  showEditor: false,
118
- newItem: false
127
+ newItem: false,
128
+ validationErrors: false
119
129
  });
120
130
  });
121
131
  _defineProperty(_assertThisInitialized(_this), "onDelete", function (row) {
@@ -128,7 +138,8 @@ var InputArray = /*#__PURE__*/function (_Component) {
128
138
  schema.reset();
129
139
  _this.setState({
130
140
  selectedRow: false,
131
- showEditor: false
141
+ showEditor: false,
142
+ validationErrors: false
132
143
  });
133
144
  });
134
145
  _defineProperty(_assertThisInitialized(_this), "addNewItem", function () {
@@ -171,7 +182,8 @@ var InputArray = /*#__PURE__*/function (_Component) {
171
182
  _this.state = {
172
183
  showEditor: false,
173
184
  selectedRow: false,
174
- newItem: false
185
+ newItem: false,
186
+ validationErrors: false
175
187
  };
176
188
  return _this;
177
189
  }
@@ -184,7 +196,8 @@ var InputArray = /*#__PURE__*/function (_Component) {
184
196
  var event = _ref.event;
185
197
  return event.active !== _this2 && _this2.setState({
186
198
  selectedRow: false,
187
- showEditor: false
199
+ showEditor: false,
200
+ validationErrors: false
188
201
  });
189
202
  });
190
203
  this.props.setChangeListener(function () {
@@ -223,7 +236,6 @@ var InputArray = /*#__PURE__*/function (_Component) {
223
236
  label = _this$props3.label,
224
237
  array = _this$props3.array,
225
238
  value = _this$props3.value,
226
- errors = _this$props3.errors,
227
239
  _this$props3$buttonsP = _this$props3.buttonsPosition,
228
240
  buttonsPosition = _this$props3$buttonsP === void 0 ? '' : _this$props3$buttonsP,
229
241
  _this$props3$showPopu = _this$props3.showPopup,
@@ -231,9 +243,12 @@ var InputArray = /*#__PURE__*/function (_Component) {
231
243
  var fields = array.fields,
232
244
  disableDelete = array.disableDelete,
233
245
  disableEdit = array.disableEdit;
234
- var newItem = this.state.newItem;
246
+ var _this$state = this.state,
247
+ newItem = _this$state.newItem,
248
+ validationErrors = _this$state.validationErrors;
235
249
  var columns = array.columns || fields;
236
250
  var selectedRows = this.state.selectedRow === false ? [] : [this.state.selectedRow];
251
+ var errors = validationErrors !== null && validationErrors !== void 0 && validationErrors.length ? validationErrors : this.props.errors;
237
252
  return /*#__PURE__*/_react["default"].createElement("div", null, label && /*#__PURE__*/_react["default"].createElement("div", {
238
253
  className: "label"
239
254
  }, label), buttonsPosition === 'top' && /*#__PURE__*/_react["default"].createElement("div", {
@@ -205,7 +205,8 @@ var SimpleTable = /*#__PURE__*/function (_Component) {
205
205
  displayRowCheckbox: false,
206
206
  ref: "tableBody"
207
207
  }, data.map(function (row, index) {
208
- var style = _lodash["default"].isArray(errors) && errors.length ? {
208
+ var _this2$state$selected;
209
+ var style = _lodash["default"].isArray(errors) && errors.length && (_this2$state$selected = _this2.state.selectedRows) !== null && _this2$state$selected !== void 0 && _this2$state$selected.includes(index) ? {
209
210
  background: 'red'
210
211
  } : {};
211
212
  return /*#__PURE__*/_react["default"].createElement(_Table.TableRow, {
@@ -55,7 +55,24 @@ var initialState = _objectSpread({}, (0, _Reducer.getDefaultEntityState)(_object
55
55
  value: null
56
56
  },
57
57
  amountfrom: {
58
- value: 0
58
+ value: 0,
59
+ beforeValidate: function beforeValidate(_ref) {
60
+ var prop = _ref.prop,
61
+ dataArr = _ref.dataArr;
62
+ if ((dataArr === null || dataArr === void 0 ? void 0 : dataArr.length) === 0 && !prop.value) {
63
+ prop.value = 1;
64
+ }
65
+ },
66
+ constraints: {
67
+ positiveNumber: {
68
+ message: 'item.prices.validation.amountFromRequired',
69
+ applyIf: function applyIf(_ref2) {
70
+ var dataArr = _ref2.dataArr,
71
+ dataObject = _ref2.dataObject;
72
+ return (dataArr === null || dataArr === void 0 ? void 0 : dataArr.length) && (dataObject.price.value || dataObject.priceNet.value);
73
+ }
74
+ }
75
+ }
59
76
  }
60
77
  }
61
78
  },
@@ -19,8 +19,8 @@ require("../../App/i18n").use({
19
19
  editDialogHint: 'Use the checkboxes to select one or more entries in the list</br>and then click this icon to set the item status for them.',
20
20
  ItemClassifications: 'Product categories',
21
21
  visualizationData: {
22
- '2d': "2D",
23
- '3d': "3D",
22
+ '2d': '2D',
23
+ '3d': '3D',
24
24
  '2doverlay': '2D image in the foreground',
25
25
  visualizationComponent: 'Visualization component'
26
26
  },
@@ -32,7 +32,10 @@ require("../../App/i18n").use({
32
32
  item: {
33
33
  addButtonLabel: 'Add item',
34
34
  prices: {
35
- addButtonLabel: 'Add price'
35
+ addButtonLabel: 'Add price',
36
+ validation: {
37
+ amountFromRequired: 'Please add an amount from value'
38
+ }
36
39
  },
37
40
  attributes: {
38
41
  addButtonLabel: 'Add attribute',
@@ -108,8 +111,8 @@ require("../../App/i18n").use({
108
111
  editDialogHint: 'Nutze die Checkboxen in der Liste und klicke dann dieses Icon,</br>um den Status für einen oder mehrere Einträge zu setzen.',
109
112
  ItemClassifications: 'Produktkategorien',
110
113
  visualizationData: {
111
- '2d': "2D",
112
- '3d': "3D",
114
+ '2d': '2D',
115
+ '3d': '3D',
113
116
  '2doverlay': '2D, Bild im Vordergrund',
114
117
  visualizationComponent: 'Visualisierungskomponente'
115
118
  },
@@ -121,7 +124,10 @@ require("../../App/i18n").use({
121
124
  item: {
122
125
  addButtonLabel: 'Produkt hinzufügen',
123
126
  prices: {
124
- addButtonLabel: 'Preis hinzufügen'
127
+ addButtonLabel: 'Preis hinzufügen',
128
+ validation: {
129
+ amountFromRequired: 'Bitte geben Sie den Wert "Menge ab" ein'
130
+ }
125
131
  },
126
132
  attributes: {
127
133
  addButtonLabel: 'Attribut hinzufügen',
@@ -56,7 +56,24 @@ var initialState = _objectSpread({}, (0, _Reducer.getDefaultEntityState)(_object
56
56
  value: null
57
57
  },
58
58
  amountfrom: {
59
- value: 0
59
+ value: 0,
60
+ beforeValidate: function beforeValidate(_ref) {
61
+ var prop = _ref.prop,
62
+ dataArr = _ref.dataArr;
63
+ if ((dataArr === null || dataArr === void 0 ? void 0 : dataArr.length) === 0 && !prop.value) {
64
+ prop.value = 1;
65
+ }
66
+ },
67
+ constraints: {
68
+ positiveNumber: {
69
+ message: 'item.prices.validation.amountFromRequired',
70
+ applyIf: function applyIf(_ref2) {
71
+ var dataArr = _ref2.dataArr,
72
+ dataObject = _ref2.dataObject;
73
+ return (dataArr === null || dataArr === void 0 ? void 0 : dataArr.length) && (dataObject.price.value || dataObject.priceNet.value);
74
+ }
75
+ }
76
+ }
60
77
  }
61
78
  }
62
79
  },
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@configuratorware/configurator-admingui",
3
- "version": "1.48.6",
3
+ "version": "1.48.8",
4
4
  "license": "UNLICENSED",
5
5
  "private": false,
6
6
  "dependencies": {
7
7
  "@babel/polyfill": "^7.12.1",
8
- "@configuratorware/scripts": "1.48.6",
8
+ "@configuratorware/scripts": "1.48.8",
9
9
  "@material-ui/core": "^3.9.4",
10
10
  "@material-ui/icons": "^3.0.2",
11
11
  "@tweenjs/tween.js": "^17.6.0",
@@ -28,7 +28,7 @@
28
28
  "react-redux-i18n": "^1.9.3",
29
29
  "react-router": "^3.2.6",
30
30
  "react-sortable-hoc": "^1.11.0",
31
- "redhotmagma-visualization": "1.48.6",
31
+ "redhotmagma-visualization": "1.48.8",
32
32
  "redux": "^4.1.0",
33
33
  "redux-logger": "^3.0.6",
34
34
  "redux-persist": "^5.10.0",