UNPKG

zent

Version:

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

92 lines (78 loc) 2.26 kB
import isPromise from 'zent-utils/isPromise'; import SubmissionError from './SubmissionError'; const handleSubmit = (submit, zentForm) => { const props = zentForm.props; const values = zentForm.getFormValues(); const { onSubmitSuccess, onSubmitFail } = props; let validationErrors; zentForm.setFormPristine(false); // 如果有异步校验未完成,阻止表单提交 if (zentForm.isValidating()) { if (onSubmitFail) { onSubmitFail(new SubmissionError({ isValidating: true })); } return; } if (!zentForm.isValid()) { validationErrors = zentForm.getValidationErrors(); if (onSubmitFail) { onSubmitFail(new SubmissionError(validationErrors)); } } else { const handleSubmitError = (submitError) => { const error = submitError instanceof SubmissionError ? submitError.errors : undefined; if (onSubmitFail) { onSubmitFail(error); } if (error || onSubmitFail) { return error; } }; const doSubmit = () => { let result; try { // 传入zentForm是为了使用服务端校验时可以调用setFieldExternalErrors方法 result = submit(values, zentForm); } catch (submitError) { const error = handleSubmitError(submitError); if (error) { return error; } throw submitError; } if (isPromise(result)) { zentForm.setState({ isSubmitting: true }); return result .then(submitResult => { zentForm.setState({ isSubmitting: false }); if (onSubmitSuccess) { onSubmitSuccess(submitResult); } return submitResult; }, submitError => { zentForm.setState({ isSubmitting: false }); const error = handleSubmitError(submitError); if (error) { return error; } throw submitError; }); } // submit是一个同步过程,直接当成功处理 if (onSubmitSuccess) { onSubmitSuccess(result); } return result; }; return doSubmit(); } }; export default handleSubmit;