zent
Version:
一套前端设计语言和基于React的实现
124 lines (102 loc) • 3.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _isPromise = require('../utils/isPromise');
var _isPromise2 = _interopRequireDefault(_isPromise);
var _map = require('lodash/map');
var _map2 = _interopRequireDefault(_map);
var _SubmissionError = require('./SubmissionError');
var _SubmissionError2 = _interopRequireDefault(_SubmissionError);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var handleSubmit = function handleSubmit(submit, zentForm) {
var props = zentForm.props;
var values = zentForm.getFormValues();
var onSubmitSuccess = props.onSubmitSuccess,
onSubmitFail = props.onSubmitFail;
var validationErrors = void 0;
zentForm.setFormDirty(true);
// 如果有异步校验未完成,阻止表单提交
if (zentForm.isValidating()) {
if (onSubmitFail) {
onSubmitFail(new _SubmissionError2['default']({
isValidating: true
}));
}
return;
}
if (!zentForm.isValid()) {
// 存在校验错误
validationErrors = zentForm.getValidationErrors();
if (onSubmitFail) {
onSubmitFail(new _SubmissionError2['default'](validationErrors));
}
} else {
var handleSubmitError = function handleSubmitError(submitError) {
// 只处理SubmissionError类型的错误
var error = submitError instanceof _SubmissionError2['default'] ? submitError.errors : undefined;
if (onSubmitFail) {
onSubmitFail(error);
}
return error;
};
var doSubmit = function doSubmit() {
var result = void 0;
try {
// 传入zentForm是为了使用服务端校验时可以调用setFieldExternalErrors方法
result = submit(values, zentForm);
} catch (submitError) {
var error = handleSubmitError(submitError);
if (error || onSubmitFail) {
return error;
}
// 没有处理过的error才throw
throw submitError;
}
if ((0, _isPromise2['default'])(result)) {
zentForm.setState({
isSubmitting: true
});
return result.then(function (submitResult) {
zentForm.setState({
isSubmitting: false
});
if (onSubmitSuccess) {
onSubmitSuccess(submitResult);
}
return submitResult;
}, function (submitError) {
zentForm.setState({
isSubmitting: false
});
var error = handleSubmitError(submitError);
if (error || onSubmitFail) {
return error;
}
throw submitError;
});
}
// submit是一个同步过程,直接当成功处理
if (onSubmitSuccess) {
onSubmitSuccess(result);
}
return result;
};
// 存在没有进行过的异步校验
if (!zentForm.isFormAsyncValidated()) {
var asyncValidations = (0, _map2['default'])(zentForm.fields, function (field) {
return zentForm.asyncValidate(field, field.getValue());
});
Promise.all(asyncValidations).then(function () {
return doSubmit();
})['catch'](function (error) {
if (onSubmitFail) {
onSubmitFail(new _SubmissionError2['default'](error));
}
});
} else {
return doSubmit();
}
}
};
exports['default'] = handleSubmit;