Commit 5bcf895a authored by afc163's avatar afc163

refactor render or AdvancedForm

parent 77d714f2
...@@ -74,6 +74,49 @@ class AdvancedForm extends PureComponent { ...@@ -74,6 +74,49 @@ class AdvancedForm extends PureComponent {
window.removeEventListener('resize', this.resizeFooterToolbar); window.removeEventListener('resize', this.resizeFooterToolbar);
} }
getErrorInfo = () => {
const {
form: { getFieldsError },
} = this.props;
const errors = getFieldsError();
const errorCount = Object.keys(errors).filter(key => errors[key]).length;
if (!errors || errorCount === 0) {
return null;
}
const scrollToField = fieldKey => {
const labelNode = document.querySelector(`label[for="${fieldKey}"]`);
if (labelNode) {
labelNode.scrollIntoView(true);
}
};
const errorList = Object.keys(errors).map(key => {
if (!errors[key]) {
return null;
}
return (
<li key={key} className={styles.errorListItem} onClick={() => scrollToField(key)}>
<Icon type="cross-circle-o" className={styles.errorIcon} />
<div className={styles.errorMessage}>{errors[key][0]}</div>
<div className={styles.errorField}>{fieldLabels[key]}</div>
</li>
);
});
return (
<span className={styles.errorIcon}>
<Popover
title="表单校验信息"
content={errorList}
overlayClassName={styles.errorPopover}
trigger="click"
getPopupContainer={trigger => trigger.parentNode}
>
<Icon type="exclamation-circle" />
</Popover>
{errorCount}
</span>
);
};
resizeFooterToolbar = () => { resizeFooterToolbar = () => {
requestAnimationFrame(() => { requestAnimationFrame(() => {
const sider = document.querySelectorAll('.ant-layout-sider')[0]; const sider = document.querySelectorAll('.ant-layout-sider')[0];
...@@ -87,60 +130,29 @@ class AdvancedForm extends PureComponent { ...@@ -87,60 +130,29 @@ class AdvancedForm extends PureComponent {
}); });
}; };
render() { validate = () => {
const { form, dispatch, submitting } = this.props; const {
const { getFieldDecorator, validateFieldsAndScroll, getFieldsError } = form; form: { validateFieldsAndScroll },
const validate = () => { dispatch,
validateFieldsAndScroll((error, values) => { } = this.props;
if (!error) { validateFieldsAndScroll((error, values) => {
// submit the values if (!error) {
dispatch({ // submit the values
type: 'form/submitAdvancedForm', dispatch({
payload: values, type: 'form/submitAdvancedForm',
}); payload: values,
} });
});
};
const errors = getFieldsError();
const getErrorInfo = () => {
const errorCount = Object.keys(errors).filter(key => errors[key]).length;
if (!errors || errorCount === 0) {
return null;
} }
const scrollToField = fieldKey => { });
const labelNode = document.querySelector(`label[for="${fieldKey}"]`); };
if (labelNode) {
labelNode.scrollIntoView(true); render() {
} const {
}; form: { getFieldDecorator },
const errorList = Object.keys(errors).map(key => { submitting,
if (!errors[key]) { } = this.props;
return null;
}
return (
<li key={key} className={styles.errorListItem} onClick={() => scrollToField(key)}>
<Icon type="cross-circle-o" className={styles.errorIcon} />
<div className={styles.errorMessage}>{errors[key][0]}</div>
<div className={styles.errorField}>{fieldLabels[key]}</div>
</li>
);
});
return (
<span className={styles.errorIcon}>
<Popover
title="表单校验信息"
content={errorList}
overlayClassName={styles.errorPopover}
trigger="click"
getPopupContainer={trigger => trigger.parentNode}
>
<Icon type="exclamation-circle" />
</Popover>
{errorCount}
</span>
);
};
const { width } = this.state; const { width } = this.state;
return ( return (
<PageHeaderWrapper <PageHeaderWrapper
title="高级表单" title="高级表单"
...@@ -298,8 +310,8 @@ class AdvancedForm extends PureComponent { ...@@ -298,8 +310,8 @@ class AdvancedForm extends PureComponent {
})(<TableForm />)} })(<TableForm />)}
</Card> </Card>
<FooterToolbar style={{ width }}> <FooterToolbar style={{ width }}>
{getErrorInfo()} {this.getErrorInfo()}
<Button type="primary" onClick={validate} loading={submitting}> <Button type="primary" onClick={this.validate} loading={submitting}>
提交 提交
</Button> </Button>
</FooterToolbar> </FooterToolbar>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment