feat: custom action initializer
This commit is contained in:
parent
fda9c71d66
commit
fd493dba9c
@ -1,4 +1,4 @@
|
|||||||
import { useForm } from '@formily/react';
|
import { useFieldSchema, useForm } from '@formily/react';
|
||||||
import { Modal } from 'antd';
|
import { Modal } from 'antd';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useHistory } from 'react-router-dom';
|
import { useHistory } from 'react-router-dom';
|
||||||
@ -35,11 +35,16 @@ export const useCreateActionProps = () => {
|
|||||||
const { field } = useFormBlockContext();
|
const { field } = useFormBlockContext();
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const actionSchema = useFieldSchema();
|
||||||
return {
|
return {
|
||||||
async onClick() {
|
async onClick() {
|
||||||
await form.submit();
|
await form.submit();
|
||||||
|
const initialValues = actionSchema?.['x-action-params']?.initialValues;
|
||||||
await resource.create({
|
await resource.create({
|
||||||
values: form.values,
|
values: {
|
||||||
|
...form.values,
|
||||||
|
...initialValues,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
__parent?.service?.refresh?.();
|
__parent?.service?.refresh?.();
|
||||||
setVisible?.(false);
|
setVisible?.(false);
|
||||||
@ -73,12 +78,17 @@ export const useUpdateActionProps = () => {
|
|||||||
const filterByTk = useFilterByTk();
|
const filterByTk = useFilterByTk();
|
||||||
const { resource, __parent } = useBlockRequestContext();
|
const { resource, __parent } = useBlockRequestContext();
|
||||||
const { setVisible } = useActionContext();
|
const { setVisible } = useActionContext();
|
||||||
|
const actionSchema = useFieldSchema();
|
||||||
return {
|
return {
|
||||||
async onClick() {
|
async onClick() {
|
||||||
|
const initialValues = actionSchema?.['x-action-params']?.initialValues;
|
||||||
await form.submit();
|
await form.submit();
|
||||||
await resource.update({
|
await resource.update({
|
||||||
filterByTk,
|
filterByTk,
|
||||||
values: form.values,
|
values: {
|
||||||
|
...form.values,
|
||||||
|
...initialValues,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
__parent?.service?.refresh?.();
|
__parent?.service?.refresh?.();
|
||||||
if (!(resource instanceof TableFieldResource)) {
|
if (!(resource instanceof TableFieldResource)) {
|
||||||
|
@ -77,6 +77,38 @@ export const ActionDesigner = (props) => {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
{fieldSchema['x-action-params'] && (
|
||||||
|
<SchemaSettings.ModalItem
|
||||||
|
title={'表单默认值'}
|
||||||
|
schema={
|
||||||
|
{
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
initialValues: {
|
||||||
|
'x-decorator': 'FormItem',
|
||||||
|
'x-component': 'Input.TextArea',
|
||||||
|
default: JSON.stringify(fieldSchema?.['x-action-params']?.initialValues),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as ISchema
|
||||||
|
}
|
||||||
|
onSubmit={({ initialValues }) => {
|
||||||
|
try {
|
||||||
|
const values = JSON.parse(initialValues);
|
||||||
|
fieldSchema['x-action-params']['initialValues'] = values;
|
||||||
|
dn.emit('patch', {
|
||||||
|
schema: {
|
||||||
|
['x-uid']: fieldSchema['x-uid'],
|
||||||
|
'x-action-params': {
|
||||||
|
initialValues: values,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
dn.refresh();
|
||||||
|
} catch (e) {}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
<SchemaSettings.Divider />
|
<SchemaSettings.Divider />
|
||||||
<SchemaSettings.Remove
|
<SchemaSettings.Remove
|
||||||
removeParentsIfNoChildren
|
removeParentsIfNoChildren
|
||||||
|
@ -11,7 +11,15 @@ export const ActionBar = observer((props: any) => {
|
|||||||
if (layout === 'one-column') {
|
if (layout === 'one-column') {
|
||||||
return (
|
return (
|
||||||
<div style={{ display: 'flex', ...style }} {...others}>
|
<div style={{ display: 'flex', ...style }} {...others}>
|
||||||
{props.children && <div style={{ marginRight: 8 }}>{props.children}</div>}
|
{props.children && (
|
||||||
|
<div style={{ marginRight: 8 }}>
|
||||||
|
<Space>
|
||||||
|
{fieldSchema.mapProperties((schema, key) => {
|
||||||
|
return <RecursionField key={key} name={key} schema={schema} />;
|
||||||
|
})}
|
||||||
|
</Space>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
{render()}
|
{render()}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -11,6 +11,33 @@ export const FormActionInitializers = {
|
|||||||
type: 'item',
|
type: 'item',
|
||||||
title: '{{t("Submit")}}',
|
title: '{{t("Submit")}}',
|
||||||
component: 'CreateSubmitActionInitializer',
|
component: 'CreateSubmitActionInitializer',
|
||||||
|
schema: {
|
||||||
|
'x-action-params': {
|
||||||
|
initialValues: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'subMenu',
|
||||||
|
title: '{{t("Customize")}}',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
type: 'item',
|
||||||
|
title: '{{t("Save action")}}',
|
||||||
|
component: 'CustomizeActionInitializer',
|
||||||
|
schema: {
|
||||||
|
title: '{{ t("Save") }}',
|
||||||
|
'x-component': 'Action',
|
||||||
|
'x-designer': 'Action.Designer',
|
||||||
|
'x-action-params': {
|
||||||
|
initialValues: {},
|
||||||
|
},
|
||||||
|
'x-component-props': {
|
||||||
|
useProps: '{{ useCreateActionProps }}',
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@ -29,6 +56,33 @@ export const CreateFormActionInitializers = {
|
|||||||
type: 'item',
|
type: 'item',
|
||||||
title: '{{t("Submit")}}',
|
title: '{{t("Submit")}}',
|
||||||
component: 'CreateSubmitActionInitializer',
|
component: 'CreateSubmitActionInitializer',
|
||||||
|
schema: {
|
||||||
|
'x-action-params': {
|
||||||
|
initialValues: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'subMenu',
|
||||||
|
title: '{{t("Customize")}}',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
type: 'item',
|
||||||
|
title: '{{t("Save action")}}',
|
||||||
|
component: 'CustomizeActionInitializer',
|
||||||
|
schema: {
|
||||||
|
title: '{{ t("Save") }}',
|
||||||
|
'x-component': 'Action',
|
||||||
|
'x-designer': 'Action.Designer',
|
||||||
|
'x-action-params': {
|
||||||
|
initialValues: {},
|
||||||
|
},
|
||||||
|
'x-component-props': {
|
||||||
|
useProps: '{{ useCreateActionProps }}',
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@ -47,6 +101,33 @@ export const UpdateFormActionInitializers = {
|
|||||||
type: 'item',
|
type: 'item',
|
||||||
title: '{{t("Submit")}}',
|
title: '{{t("Submit")}}',
|
||||||
component: 'UpdateSubmitActionInitializer',
|
component: 'UpdateSubmitActionInitializer',
|
||||||
|
schema: {
|
||||||
|
'x-action-params': {
|
||||||
|
initialValues: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'subMenu',
|
||||||
|
title: '{{t("Customize")}}',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
type: 'item',
|
||||||
|
title: '{{t("Save action")}}',
|
||||||
|
component: 'CustomizeActionInitializer',
|
||||||
|
schema: {
|
||||||
|
title: '{{ t("Save") }}',
|
||||||
|
'x-component': 'Action',
|
||||||
|
'x-designer': 'Action.Designer',
|
||||||
|
'x-action-params': {
|
||||||
|
initialValues: {},
|
||||||
|
},
|
||||||
|
'x-component-props': {
|
||||||
|
useProps: '{{ useUpdateActionProps }}',
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -36,6 +36,10 @@ export const BlockInitializer = (props) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const CustomizeActionInitializer = (props) => {
|
||||||
|
return <BlockInitializer {...props} />;
|
||||||
|
};
|
||||||
|
|
||||||
export const InitializerWithSwitch = (props) => {
|
export const InitializerWithSwitch = (props) => {
|
||||||
const { type, schema, item, insert } = props;
|
const { type, schema, item, insert } = props;
|
||||||
const { exists, remove } = useCurrentSchema(schema?.[type] || item?.schema?.[type], type, item.find, item.remove);
|
const { exists, remove } = useCurrentSchema(schema?.[type] || item?.schema?.[type], type, item.find, item.remove);
|
||||||
|
Loading…
Reference in New Issue
Block a user