UNPKG

zent

Version:

一套前端设计语言和基于React的实现

106 lines (86 loc) 2.74 kB
'use strict'; 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'];