zent
Version:
一套前端设计语言和基于React的实现
106 lines (86 loc) • 2.74 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _isPromise = require('zent-utils/isPromise');
var _isPromise2 = _interopRequireDefault(_isPromise);
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.setFormPristine(false);
// 如果有异步校验未完成,阻止表单提交
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) {
var error = submitError instanceof _SubmissionError2['default'] ? submitError.errors : undefined;
if (onSubmitFail) {
onSubmitFail(error);
}
if (error || onSubmitFail) {
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) {
return error;
}
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) {
return error;
}
throw submitError;
});
}
// submit是一个同步过程,直接当成功处理
if (onSubmitSuccess) {
onSubmitSuccess(result);
}
return result;
};
return doSubmit();
}
};
exports['default'] = handleSubmit;
module.exports = exports['default'];
;