choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
167 lines (133 loc) • 5.5 kB
JavaScript
import _regeneratorRuntime from "@babel/runtime/regenerator";
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
import isString from 'lodash/isString';
import ValidationResult from '../ValidationResult';
import { $l } from '../../locale-context';
import isEmpty from '../../_util/isEmpty';
import { axiosConfigAdapter } from '../../data-set/utils';
import { FieldType } from '../../data-set/enum';
export default function uniqueError(_x, _x2) {
return _uniqueError.apply(this, arguments);
}
function _uniqueError() {
_uniqueError = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee(value, props) {
var dataSet, record, unique, name, multiple, range, defaultValidationMessages, myField, dirty, fields, invalid, newConfig, results, ruleName, _defaultValidationMes, validationMessage;
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
dataSet = props.dataSet, record = props.record, unique = props.unique, name = props.name, multiple = props.multiple, range = props.range, defaultValidationMessages = props.defaultValidationMessages;
if (!(!isEmpty(value) && dataSet && record && unique && name && !multiple && !range)) {
_context.next = 26;
break;
}
myField = record.getField(name);
if (!(myField && myField.get('type') === FieldType.object)) {
_context.next = 7;
break;
}
value = value[myField.get('valueField')];
if (!isEmpty(value)) {
_context.next = 7;
break;
}
return _context.abrupt("return", true);
case 7:
if (!myField) {
_context.next = 26;
break;
}
dirty = myField.dirty;
fields = _defineProperty({}, name, value);
if (!(isString(unique) && _toConsumableArray(record.fields.entries()).some(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2),
fieldName = _ref2[0],
field = _ref2[1];
if (fieldName !== name && field && field.get('unique') === unique && !field.get('multiple') && !field.get('range')) {
var otherValue = record.get(fieldName);
if (isEmpty(otherValue)) {
return true;
}
if (!dirty && field.dirty) {
dirty = true;
}
if (field && field.get('type') === FieldType.object) {
var otherObjectValue = otherValue[field.get('valueField')];
if (isEmpty(otherObjectValue)) {
return true;
}
fields[fieldName] = otherObjectValue;
} else {
fields[fieldName] = otherValue;
}
}
return false;
}))) {
_context.next = 12;
break;
}
return _context.abrupt("return", true);
case 12:
if (dirty) {
_context.next = 14;
break;
}
return _context.abrupt("return", true);
case 14:
invalid = dataSet.data.some(function (item) {
return item !== record && Object.keys(fields).every(function (field) {
var dataSetField = record.getField(name);
if (dataSetField && dataSetField.get('type') === FieldType.object) {
var valueField = dataSetField.get('valueField');
return fields[field] === item.get(field)[valueField];
}
return fields[field] === item.get(field);
});
});
if (invalid) {
_context.next = 22;
break;
}
newConfig = axiosConfigAdapter('validate', dataSet, {
unique: [fields]
});
if (!newConfig.url) {
_context.next = 22;
break;
}
_context.next = 20;
return dataSet.axios(newConfig);
case 20:
results = _context.sent;
invalid = [].concat(results).some(function (result) {
return !result;
});
case 22:
if (!invalid) {
_context.next = 26;
break;
}
ruleName = 'uniqueError';
_defaultValidationMes = defaultValidationMessages[ruleName], validationMessage = _defaultValidationMes === void 0 ? $l('Validator', 'unique') : _defaultValidationMes;
return _context.abrupt("return", new ValidationResult({
validationMessage: validationMessage,
value: value,
ruleName: ruleName
}));
case 26:
return _context.abrupt("return", true);
case 27:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _uniqueError.apply(this, arguments);
}
//# sourceMappingURL=uniqueError.js.map