choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
405 lines (329 loc) • 13.6 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _tslib = require("tslib");
var _react = _interopRequireDefault(require("react"));
var _mobx = require("mobx");
var _isString = _interopRequireDefault(require("lodash/isString"));
var _omitBy = _interopRequireDefault(require("lodash/omitBy"));
var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
var _configure = require("../../../lib/configure");
var _Validity = _interopRequireDefault(require("./Validity"));
var _ValidationResult = _interopRequireDefault(require("./ValidationResult"));
var _rules = _interopRequireDefault(require("./rules"));
var _valueMissing = _interopRequireDefault(require("./rules/valueMissing"));
var _getReactNodeText = _interopRequireDefault(require("../_util/getReactNodeText"));
var _utils = require("../data-set/utils");
var Validator =
/*#__PURE__*/
function () {
function Validator(field, control) {
var _this = this;
(0, _classCallCheck2["default"])(this, Validator);
(0, _mobx.runInAction)(function () {
_this.field = field;
_this.control = control;
});
}
(0, _createClass2["default"])(Validator, [{
key: "reset",
value: function reset() {
this.clearErrors();
var uniqueRefFields = this.uniqueRefFields;
if (uniqueRefFields.length) {
uniqueRefFields.forEach(function (uniqueRefField) {
var validator = uniqueRefField.validator;
if (validator) {
validator.clearErrors();
}
});
}
}
}, {
key: "report",
value: function () {
var _report = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee(ret) {
var _this$props, name, dataSet, record, _console, validationMessage, value, reportMessage, dsName, id;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_this$props = this.props, name = _this$props.name, dataSet = _this$props.dataSet, record = _this$props.record;
if (!(process.env.NODE_ENV !== 'production' && typeof console !== 'undefined')) {
_context.next = 16;
break;
}
validationMessage = ret.validationMessage, value = ret.value;
if (!(0, _isString["default"])(validationMessage)) {
_context.next = 7;
break;
}
_context.t0 = validationMessage;
_context.next = 10;
break;
case 7:
_context.next = 9;
return (0, _getReactNodeText["default"])(_react["default"].createElement("span", null, validationMessage));
case 9:
_context.t0 = _context.sent;
case 10:
_context.t1 = _context.t0;
reportMessage = ['validation:', _context.t1];
if (dataSet) {
dsName = dataSet.name, id = dataSet.id;
if (dsName || id) {
reportMessage.push("\n[dataSet<".concat(dsName || id, ">]:"), dataSet);
} else {
reportMessage.push('\n[dataSet]:', dataSet);
}
}
if (record) {
if (dataSet) {
reportMessage.push("\n[record<".concat(dataSet.indexOf(record), ">]:"), record);
} else {
reportMessage.push("\n[record]:", record);
}
reportMessage.push("\n[field<".concat(name, ">]:"), record.getField(name));
} else {
reportMessage.push('[field]:', name);
}
reportMessage.push('\n[value]:', value);
(_console = console).warn.apply(_console, reportMessage);
case 16:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function report(_x) {
return _report.apply(this, arguments);
}
return report;
}()
}, {
key: "clearErrors",
value: function clearErrors() {
this.innerValidationResults = undefined;
}
}, {
key: "addError",
value: function addError(result) {
var innerValidationResults = (0, _utils.getIf)(this, 'innerValidationResults', []);
innerValidationResults.push(result);
this.report(result);
}
}, {
key: "execute",
value: function () {
var _execute = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee2(rules, value) {
var _this2 = this;
var props, method, results;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
props = this.props;
method = rules.shift();
if (!method) {
_context2.next = 10;
break;
}
_context2.next = 5;
return Promise.all(value.map(function (item) {
return method(item, props);
}));
case 5:
results = _context2.sent;
results.forEach(function (result) {
if (result instanceof _ValidationResult["default"]) {
_this2.addError(result);
var index = value.indexOf(result.value);
if (index !== -1) {
value.splice(index, 1);
}
}
});
if (!value.length) {
_context2.next = 10;
break;
}
_context2.next = 10;
return this.execute(rules, value);
case 10:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function execute(_x2, _x3) {
return _execute.apply(this, arguments);
}
return execute;
}()
}, {
key: "checkValidity",
value: function () {
var _checkValidity = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee3() {
var value,
valueMiss,
multiple,
_args3 = arguments;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
value = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null;
valueMiss = (0, _valueMissing["default"])(value, this.props);
this.clearErrors();
if (!(valueMiss !== true)) {
_context3.next = 7;
break;
}
this.addError(valueMiss);
_context3.next = 10;
break;
case 7:
multiple = this.props.multiple;
_context3.next = 10;
return this.execute(_rules["default"].slice(), multiple && (0, _mobx.isArrayLike)(value) ? value.slice() : [value]);
case 10:
return _context3.abrupt("return", this.validity.valid);
case 11:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function checkValidity() {
return _checkValidity.apply(this, arguments);
}
return checkValidity;
}()
}, {
key: "props",
get: function get() {
var control = this.control,
field = this.field;
var controlProps = control && (0, _omitBy["default"])(control.getValidatorProps(), _isUndefined["default"]);
var fieldProps = field && field.getValidatorProps();
return (0, _objectSpread2["default"])({}, fieldProps, {}, controlProps, {
defaultValidationMessages: (0, _objectSpread2["default"])({}, controlProps && controlProps.defaultValidationMessages, {}, (0, _configure.getConfig)('defaultValidationMessages'), {}, fieldProps && fieldProps.defaultValidationMessages)
});
}
}, {
key: "uniqueRefFields",
get: function get() {
var _this$props2 = this.props,
name = _this$props2.name,
unique = _this$props2.unique,
record = _this$props2.record;
if (record && (0, _isString["default"])(unique)) {
return (0, _toConsumableArray2["default"])(record.fields.values()).filter(function (field) {
return field.name !== name && field.get('unique') === unique && !field.get('multiple') && !field.get('range');
});
}
return [];
} // @computed
// private get bindingFieldWithValidationResult(): Field | undefined {
// const { name, record, type } = this.props;
// if (record && name && type === FieldType.object) {
// return findBindField(name, record.fields, field => !field.isValid());
// }
// return undefined;
// }
}, {
key: "uniqueRefValidationResult",
get: function get() {
var validationResult;
var uniqueRefFields = this.uniqueRefFields,
innerValidationResults = this.innerValidationResults;
if (uniqueRefFields.length && (!innerValidationResults || innerValidationResults.every(function (result) {
return result.ruleName !== 'uniqueError';
}))) {
uniqueRefFields.some(function (uniqueRefField) {
var validator = uniqueRefField.validator;
if (validator) {
var validatorInnerValidationResults = validator.innerValidationResults;
validationResult = validatorInnerValidationResults && validatorInnerValidationResults.find(function (result) {
return result.ruleName === 'uniqueError';
});
}
return !!validationResult;
});
}
return validationResult;
}
}, {
key: "validationResults",
get: function get() {
var uniqueRefValidationResult = this.uniqueRefValidationResult;
if (uniqueRefValidationResult) {
return [uniqueRefValidationResult];
}
var innerValidationResults = this.innerValidationResults;
if (innerValidationResults && innerValidationResults.length) {
return innerValidationResults;
} // const { bindingFieldWithValidationResult } = this;
// if (bindingFieldWithValidationResult) {
// return bindingFieldWithValidationResult.getValidationErrorValues();
// }
return [];
}
}, {
key: "currentValidationResult",
get: function get() {
var validationResults = this.validationResults;
return validationResults.length ? validationResults[0] : undefined;
}
}, {
key: "validity",
get: function get() {
var currentValidationResult = this.currentValidationResult;
return new _Validity["default"](currentValidationResult ? (0, _defineProperty2["default"])({}, currentValidationResult.ruleName, true) : undefined);
}
}, {
key: "injectionOptions",
get: function get() {
var currentValidationResult = this.currentValidationResult;
return currentValidationResult && currentValidationResult.injectionOptions || {};
}
}, {
key: "validationMessage",
get: function get() {
var currentValidationResult = this.currentValidationResult;
return currentValidationResult && currentValidationResult.validationMessage;
}
}]);
return Validator;
}();
exports["default"] = Validator;
(0, _tslib.__decorate)([_mobx.observable], Validator.prototype, "field", void 0);
(0, _tslib.__decorate)([_mobx.observable], Validator.prototype, "control", void 0);
(0, _tslib.__decorate)([_mobx.observable], Validator.prototype, "innerValidationResults", void 0);
(0, _tslib.__decorate)([_mobx.computed], Validator.prototype, "props", null);
(0, _tslib.__decorate)([_mobx.computed], Validator.prototype, "uniqueRefValidationResult", null);
(0, _tslib.__decorate)([_mobx.computed], Validator.prototype, "validity", null);
(0, _tslib.__decorate)([_mobx.action], Validator.prototype, "reset", null);
(0, _tslib.__decorate)([_mobx.action], Validator.prototype, "report", null);
(0, _tslib.__decorate)([_mobx.action], Validator.prototype, "clearErrors", null);
(0, _tslib.__decorate)([_mobx.action], Validator.prototype, "addError", null);
//# sourceMappingURL=Validator.js.map