Skip to content

Commit f5fa160

Browse files
authored
Merge pull request #1478 from leshalv/master
支持 footer 透传dom元素
2 parents f692511 + 084aefc commit f5fa160

File tree

3 files changed

+46
-24
lines changed

3 files changed

+46
-24
lines changed

docs/form-render/advanced-layout.md

+24-1
Original file line numberDiff line numberDiff line change
@@ -343,4 +343,27 @@ export default () => {
343343
/>
344344
);
345345
}
346-
```
346+
```
347+
348+
- `footer` dom 元素透传
349+
```jsx
350+
import React, { useState } from 'react';
351+
import { Button, Space, Form, Radio } from 'antd';
352+
import FormRender, { useForm } from 'form-render';
353+
import schema from './schema/simple';
354+
355+
export default () => {
356+
const form = useForm();
357+
358+
return (
359+
<FormRender
360+
schema={schema}
361+
form={form}
362+
maxWidth={360}
363+
footer={(dom) => (
364+
<Space>{dom}</Space>
365+
)}
366+
/>
367+
);
368+
}
369+
```

packages/form-render/src/form-core/index.tsx

+21-22
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,23 @@ const FormCore:FC<FRProps> = (props) => {
195195
};
196196

197197
const operlabelCol = getFormItemLayout(column, {}, { labelWidth })?.labelCol;
198+
199+
const footerDom: React.JSX.Element[] = [];
200+
if (!footer?.reset?.hide) {
201+
footerDom.push(
202+
<Button {...footer?.reset} onClick={() => form.resetFields()}>
203+
{footer?.reset?.text || t('reset')}
204+
</Button>
205+
);
206+
}
207+
if (!footer?.submit?.hide) {
208+
footerDom.push(
209+
<Button type="primary" onClick={form.submit} {...footer?.submit}>
210+
{footer?.submit?.text || t('submit')}
211+
</Button>
212+
);
213+
}
214+
198215
return (
199216
<Form
200217
className={classNames('fr-form', { [className]: !!className } )}
@@ -218,28 +235,10 @@ const FormCore:FC<FRProps> = (props) => {
218235
labelCol={operlabelCol}
219236
className='fr-hide-label'
220237
>
221-
{isFunction(footer) ? (
222-
<Space>{footer()}</Space>
223-
): (
224-
<Space>
225-
{!footer?.reset?.hide && (
226-
<Button
227-
{...footer?.reset}
228-
onClick={() => form.resetFields()}
229-
>
230-
{footer?.reset?.text || t('reset')}
231-
</Button>
232-
)}
233-
{!footer?.submit?.hide && (
234-
<Button
235-
type='primary'
236-
onClick={form.submit}
237-
{...footer?.submit}
238-
>
239-
{footer?.submit?.text || t('submit')}
240-
</Button>
241-
)}
242-
</Space>
238+
{isFunction(footer) ? (
239+
<Space>{footer(footerDom)}</Space>
240+
) : (
241+
<Space>{footerDom}</Space>
243242
)}
244243
</Form.Item>
245244
</Col>

packages/form-render/src/type.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ export interface FRProps extends Omit<AntdFormProps, 'form'> {
403403
methods?: Record<string, Function>;
404404
operateExtra?: React.ReactNode;
405405
maxWidth?: number | string;
406-
footer?: boolean | (() => React.ReactNode) | Partial<ActionProps> ;
406+
footer?: boolean | ((dom: React.JSX.Element[]) => React.ReactNode) | Partial<ActionProps> ;
407407
}
408408

409409
export interface SearchProps<RecordType> extends Omit<FRProps, 'form'> {

0 commit comments

Comments
 (0)