From 6e5a2c81b3355fb5c1c41aa291c7056dbc5f7e52 Mon Sep 17 00:00:00 2001 From: katherinehhh Date: Thu, 4 Apr 2024 09:30:13 +0800 Subject: [PATCH] feat: action support refreshDataBlockRequest configuration (#3882) * feat: action support refreshDataBlockRequest configuration * feat: refreshDataBlockRequest * fix: block templates * fix: bug * fix: bug * refactor: submitted * fix: bug * fix: bug * refactor: refreshDataBlockRequest * refactor: refreshDataBlockRequest * refactor: refreshDataBlockRequest * refactor: refreshDataBlockRequest * refactor: refreshDataBlockRequest * refactor: refreshDataBlockRequest * refactor: refreshDataBlockRequest * refactor: refreshDataBlockRequest * refactor: refreshDataBlockRequest * refactor: refreshDataBlockRequest * fix: bug * fix: bug * fix: bug * fix: bug --------- Co-authored-by: chenos --- .../client/src/block-provider/hooks/index.ts | 61 ++++++++++++------- packages/core/client/src/locale/zh-CN.json | 12 ++-- .../bulk-destroy/bulkDeleteActionSettings.tsx | 16 ++++- .../delete/DestroyActionInitializer.tsx | 1 + .../actions/delete/deleteActionSettings.tsx | 15 ++++- .../DisassociateActionInitializer.tsx | 1 + .../disassociateActionSettings.tsx | 15 ++++- .../customizeSaveRecordActionSettings.tsx | 10 +++ .../customizeUpdateRecordActionSettings.tsx | 10 +++ .../PopupActionInitializer.tsx | 1 + .../customizePopupActionSettings.tsx | 6 +- .../antd/action/Action.Designer.tsx | 38 ++++++++++++ .../schema-component/antd/action/Action.tsx | 17 ++++-- .../schema-component/antd/action/context.tsx | 29 ++++++++- .../components/CreateRecordAction.tsx | 2 +- .../schemas/uiSchemaTemplates.ts | 16 ++--- .../src/client/BulkEditAction.Settings.tsx | 2 - .../src/client/utils.tsx | 5 +- .../src/client/BulkUpdateAction.Settings.tsx | 10 +++ .../src/client/utils.tsx | 7 ++- .../hooks/useCustomizeRequestActionProps.ts | 7 ++- .../src/client/schemaSettings.ts | 10 +++ .../src/client/useImportAction.ts | 2 +- .../hooks/useTriggerWorkflowActionProps.ts | 10 ++- 24 files changed, 247 insertions(+), 56 deletions(-) diff --git a/packages/core/client/src/block-provider/hooks/index.ts b/packages/core/client/src/block-provider/hooks/index.ts index a1180dfaa9..23374619fe 100644 --- a/packages/core/client/src/block-provider/hooks/index.ts +++ b/packages/core/client/src/block-provider/hooks/index.ts @@ -189,7 +189,7 @@ export const useCreateActionProps = () => { const record = useCollectionRecord(); const form = useForm(); const { field, resource, __parent } = useBlockRequestContext(); - const { setVisible } = useActionContext(); + const { setVisible, setSubmitted, setFormValueChanged } = useActionContext(); const navigate = useNavigate(); const actionSchema = useFieldSchema(); const actionField = useField(); @@ -202,8 +202,6 @@ export const useCreateActionProps = () => { const filterKeys = actionField.componentProps.filterKeys?.checked || []; const dataLoadingMode = useDataLoadingMode(); - console.log('dataLoadingMode', dataLoadingMode); - return { async onClick() { const { onSuccess, skipValidator, triggerWorkflows } = actionSchema?.['x-action-settings'] ?? {}; @@ -226,9 +224,11 @@ export const useCreateActionProps = () => { updateAssociationValues, }); setVisible?.(false); + setSubmitted?.(true); + setFormValueChanged?.(false); actionField.data.loading = false; actionField.data.data = data; - __parent?.service?.refresh?.(); + // __parent?.service?.refresh?.(); if (!onSuccess?.successMessage) { message.success(t('Saved successfully')); await resetFormCorrectly(form); @@ -269,7 +269,7 @@ export const useCreateActionProps = () => { export const useAssociationCreateActionProps = () => { const form = useForm(); const { field, resource, __parent } = useBlockRequestContext(); - const { setVisible, fieldSchema } = useActionContext(); + const { setVisible, fieldSchema, setSubmitted } = useActionContext(); const actionSchema = useFieldSchema(); const actionField = useField(); const { fields, getField, getTreeParentField, name } = useCollection_deprecated(); @@ -352,6 +352,7 @@ export const useAssociationCreateActionProps = () => { actionField.data.data = data; __parent?.service?.refresh?.(); setVisible?.(false); + setSubmitted?.(true); if (!onSuccess?.successMessage) { return; } @@ -517,7 +518,7 @@ export const useCustomizeUpdateActionProps = () => { const { name, getField } = useCollection_deprecated(); return { - async onClick() { + async onClick(e?, callBack?) { const { assignedValues: originalAssignedValues = {}, onSuccess, @@ -558,7 +559,10 @@ export const useCustomizeUpdateActionProps = () => { ? triggerWorkflows.map((row) => [row.workflowKey, row.context].filter(Boolean).join('!')).join(',') : undefined, }); - service?.refresh?.(); + // service?.refresh?.(); + if (callBack) { + callBack?.(); + } if (!(resource instanceof TableFieldResource)) { __parent?.service?.refresh?.(); } @@ -670,7 +674,7 @@ export const useCustomizeBulkUpdateActionProps = () => { } finally { actionField.data.loading = false; } - service?.refresh?.(); + // service?.refresh?.(); if (!(resource instanceof TableFieldResource)) { __parent?.service?.refresh?.(); } @@ -805,7 +809,7 @@ export const useUpdateActionProps = () => { const form = useForm(); const filterByTk = useFilterByTk(); const { field, resource, __parent } = useBlockRequestContext(); - const { setVisible } = useActionContext(); + const { setVisible, setSubmitted, setFormValueChanged } = useActionContext(); const actionSchema = useFieldSchema(); const navigate = useNavigate(); const { fields, getField, name } = useCollection_deprecated(); @@ -881,8 +885,10 @@ export const useUpdateActionProps = () => { : undefined, }); actionField.data.loading = false; - __parent?.service?.refresh?.(); + // __parent?.service?.refresh?.(); setVisible?.(false); + setSubmitted?.(true); + setFormValueChanged?.(false); if (!onSuccess?.successMessage) { return; } @@ -920,11 +926,11 @@ export const useUpdateActionProps = () => { export const useDestroyActionProps = () => { const filterByTk = useFilterByTk(); const { resource, service, block, __parent } = useBlockRequestContext(); - const { setVisible } = useActionContext(); + const { setVisible, setSubmitted } = useActionContext(); const data = useParamsFromRecord(); const actionSchema = useFieldSchema(); return { - async onClick() { + async onClick(e?, callBack?) { const { triggerWorkflows } = actionSchema?.['x-action-settings'] ?? {}; await resource.destroy({ filterByTk, @@ -941,13 +947,18 @@ export const useDestroyActionProps = () => { ...service?.params?.[0], page: page - 1, }); - } else { - service?.refresh?.(); } - + if (callBack) { + callBack?.(); + } + // else { + // service?.refresh?.(); + // } + setSubmitted?.(true); if (block && block !== 'TableField') { __parent?.service?.refresh?.(); setVisible?.(false); + setSubmitted?.(true); } }, }; @@ -969,9 +980,9 @@ export const useRemoveActionProps = (associationName) => { export const useDisassociateActionProps = () => { const filterByTk = useFilterByTk(); const { resource, service, block, __parent } = useBlockRequestContext(); - const { setVisible } = useActionContext(); + const { setVisible, setSubmitted, setFormValueChanged } = useActionContext(); return { - async onClick() { + async onClick(e?, callBack?) { await resource.remove({ values: [filterByTk], }); @@ -983,12 +994,15 @@ export const useDisassociateActionProps = () => { page: page - 1, }); } else { - service?.refresh?.(); + if (callBack) { + callBack?.(); + } } - + setSubmitted?.(true); if (block && block !== 'TableField') { __parent?.service?.refresh?.(); setVisible?.(false); + setFormValueChanged?.(false); } }, }; @@ -1018,8 +1032,9 @@ export const useDetailPrintActionProps = () => { export const useBulkDestroyActionProps = () => { const { field } = useBlockRequestContext(); const { resource, service } = useBlockRequestContext(); + const { setSubmitted } = useActionContext(); return { - async onClick() { + async onClick(e?, callBack?) { if (!field?.data?.selectedRowKeys?.length) { return; } @@ -1032,7 +1047,11 @@ export const useBulkDestroyActionProps = () => { if (currentPage === totalPage) { service.params[0].page = currentPage - 1; } - service?.refresh?.(); + if (callBack) { + callBack?.(); + } + setSubmitted?.(true); + // service?.refresh?.(); }, }; }; diff --git a/packages/core/client/src/locale/zh-CN.json b/packages/core/client/src/locale/zh-CN.json index 67ecc232e7..5f064576b2 100644 --- a/packages/core/client/src/locale/zh-CN.json +++ b/packages/core/client/src/locale/zh-CN.json @@ -916,9 +916,11 @@ "Separator": "分隔符", "Prefix": "前缀", "Suffix": "后缀", - "Multiply by":"乘以", - "Divide by":"除以", - "Scientifix notation":"科学计数法", - "Normal":"常规", - "Automatically generate default values":"随机生成默认值" + "Multiply by": "乘以", + "Divide by": "除以", + "Scientifix notation": "科学计数法", + "Normal": "常规", + "Automatically generate default values": "随机生成默认值", + "Refresh data on close": "关闭后刷新数据", + "Refresh data on action": "执行后刷新数据" } diff --git a/packages/core/client/src/modules/actions/bulk-destroy/bulkDeleteActionSettings.tsx b/packages/core/client/src/modules/actions/bulk-destroy/bulkDeleteActionSettings.tsx index 698726ca8d..43e0472f48 100644 --- a/packages/core/client/src/modules/actions/bulk-destroy/bulkDeleteActionSettings.tsx +++ b/packages/core/client/src/modules/actions/bulk-destroy/bulkDeleteActionSettings.tsx @@ -1,6 +1,11 @@ import { useSchemaToolbar } from '../../../application'; import { SchemaSettings } from '../../../application/schema-settings/SchemaSettings'; -import { ButtonEditor, RemoveButton, SecondConFirm } from '../../../schema-component/antd/action/Action.Designer'; +import { + ButtonEditor, + RemoveButton, + SecondConFirm, + RefreshDataBlockRequest, +} from '../../../schema-component/antd/action/Action.Designer'; export const bulkDeleteActionSettings = new SchemaSettings({ name: 'actionSettings:bulkDelete', @@ -17,6 +22,15 @@ export const bulkDeleteActionSettings = new SchemaSettings({ name: 'secondConFirm', Component: SecondConFirm, }, + { + name: 'refreshDataBlockRequest', + Component: RefreshDataBlockRequest, + useComponentProps() { + return { + isPopupAction: false, + }; + }, + }, { name: 'remove', sort: 100, diff --git a/packages/core/client/src/modules/actions/delete/DestroyActionInitializer.tsx b/packages/core/client/src/modules/actions/delete/DestroyActionInitializer.tsx index 7f8447a525..e51c43fab7 100644 --- a/packages/core/client/src/modules/actions/delete/DestroyActionInitializer.tsx +++ b/packages/core/client/src/modules/actions/delete/DestroyActionInitializer.tsx @@ -16,6 +16,7 @@ export const DestroyActionInitializer = (props) => { title: "{{t('Delete record')}}", content: "{{t('Are you sure you want to delete it?')}}", }, + refreshDataBlockRequest: true, }, 'x-action-settings': { triggerWorkflows: [], diff --git a/packages/core/client/src/modules/actions/delete/deleteActionSettings.tsx b/packages/core/client/src/modules/actions/delete/deleteActionSettings.tsx index fd3fb8a2e6..c8c10b4841 100644 --- a/packages/core/client/src/modules/actions/delete/deleteActionSettings.tsx +++ b/packages/core/client/src/modules/actions/delete/deleteActionSettings.tsx @@ -1,7 +1,11 @@ import { useSchemaToolbar } from '../../../application'; import { SchemaSettings } from '../../../application/schema-settings/SchemaSettings'; import { useCollection_deprecated } from '../../../collection-manager'; -import { ButtonEditor, SecondConFirm } from '../../../schema-component/antd/action/Action.Designer'; +import { + ButtonEditor, + SecondConFirm, + RefreshDataBlockRequest, +} from '../../../schema-component/antd/action/Action.Designer'; import { SchemaSettingsLinkageRules } from '../../../schema-settings'; export const deleteActionSettings = new SchemaSettings({ @@ -31,6 +35,15 @@ export const deleteActionSettings = new SchemaSettings({ name: 'secondConFirm', Component: SecondConFirm, }, + { + name: 'refreshDataBlockRequest', + Component: RefreshDataBlockRequest, + useComponentProps() { + return { + isPopupAction: false, + }; + }, + }, { name: 'delete', type: 'remove', diff --git a/packages/core/client/src/modules/actions/disassociate/DisassociateActionInitializer.tsx b/packages/core/client/src/modules/actions/disassociate/DisassociateActionInitializer.tsx index d50377e286..b2da9ece27 100644 --- a/packages/core/client/src/modules/actions/disassociate/DisassociateActionInitializer.tsx +++ b/packages/core/client/src/modules/actions/disassociate/DisassociateActionInitializer.tsx @@ -16,6 +16,7 @@ export const DisassociateActionInitializer = (props) => { title: "{{t('Disassociate record')}}", content: "{{t('Are you sure you want to disassociate it?')}}", }, + refreshDataBlockRequest: true, }, 'x-action-settings': { triggerWorkflows: [], diff --git a/packages/core/client/src/modules/actions/disassociate/disassociateActionSettings.tsx b/packages/core/client/src/modules/actions/disassociate/disassociateActionSettings.tsx index d11d7be307..8263979203 100644 --- a/packages/core/client/src/modules/actions/disassociate/disassociateActionSettings.tsx +++ b/packages/core/client/src/modules/actions/disassociate/disassociateActionSettings.tsx @@ -1,7 +1,11 @@ import { useSchemaToolbar } from '../../../application'; import { SchemaSettings } from '../../../application/schema-settings/SchemaSettings'; import { useCollection_deprecated } from '../../../collection-manager'; -import { ButtonEditor, SecondConFirm } from '../../../schema-component/antd/action/Action.Designer'; +import { + ButtonEditor, + SecondConFirm, + RefreshDataBlockRequest, +} from '../../../schema-component/antd/action/Action.Designer'; import { SchemaSettingsLinkageRules } from '../../../schema-settings'; export const disassociateActionSettings = new SchemaSettings({ @@ -27,6 +31,15 @@ export const disassociateActionSettings = new SchemaSettings({ }; }, }, + { + name: 'refreshDataBlockRequest', + Component: RefreshDataBlockRequest, + useComponentProps() { + return { + isPopupAction: false, + }; + }, + }, { name: 'secondConFirm', Component: SecondConFirm, diff --git a/packages/core/client/src/modules/actions/save-record/customizeSaveRecordActionSettings.tsx b/packages/core/client/src/modules/actions/save-record/customizeSaveRecordActionSettings.tsx index 0c5762131c..ad50de97ba 100644 --- a/packages/core/client/src/modules/actions/save-record/customizeSaveRecordActionSettings.tsx +++ b/packages/core/client/src/modules/actions/save-record/customizeSaveRecordActionSettings.tsx @@ -10,6 +10,7 @@ import { SecondConFirm, SkipValidation, WorkflowConfig, + RefreshDataBlockRequest, } from '../../../schema-component/antd/action/Action.Designer'; export const customizeSaveRecordActionSettings = new SchemaSettings({ @@ -47,6 +48,15 @@ export const customizeSaveRecordActionSettings = new SchemaSettings({ name: 'bindWorkflow', Component: WorkflowConfig, }, + { + name: 'refreshDataBlockRequest', + Component: RefreshDataBlockRequest, + useComponentProps() { + return { + isPopupAction: false, + }; + }, + }, { name: 'delete', sort: 100, diff --git a/packages/core/client/src/modules/actions/update-record/customizeUpdateRecordActionSettings.tsx b/packages/core/client/src/modules/actions/update-record/customizeUpdateRecordActionSettings.tsx index 86ed008fee..8a3b0ab37d 100644 --- a/packages/core/client/src/modules/actions/update-record/customizeUpdateRecordActionSettings.tsx +++ b/packages/core/client/src/modules/actions/update-record/customizeUpdateRecordActionSettings.tsx @@ -10,6 +10,7 @@ import { RemoveButton, SecondConFirm, WorkflowConfig, + RefreshDataBlockRequest, } from '../../../schema-component/antd/action/Action.Designer'; import { SchemaSettingsLinkageRules } from '../../../schema-settings'; @@ -56,6 +57,15 @@ export const customizeUpdateRecordActionSettings = new SchemaSettings({ return isValid(fieldSchema?.['x-action-settings']?.triggerWorkflows); }, }, + { + name: 'refreshDataBlockRequest', + Component: RefreshDataBlockRequest, + useComponentProps() { + return { + isPopupAction: false, + }; + }, + }, { name: 'delete', sort: 100, diff --git a/packages/core/client/src/modules/actions/view-edit-popup/PopupActionInitializer.tsx b/packages/core/client/src/modules/actions/view-edit-popup/PopupActionInitializer.tsx index 06ae9a4ff6..385ba188d5 100644 --- a/packages/core/client/src/modules/actions/view-edit-popup/PopupActionInitializer.tsx +++ b/packages/core/client/src/modules/actions/view-edit-popup/PopupActionInitializer.tsx @@ -12,6 +12,7 @@ export const PopupActionInitializer = (props) => { 'x-component': props?.['x-component'] || 'Action.Link', 'x-component-props': { openMode: 'drawer', + refreshDataBlockRequest: true, }, properties: { drawer: { diff --git a/packages/core/client/src/modules/actions/view-edit-popup/customizePopupActionSettings.tsx b/packages/core/client/src/modules/actions/view-edit-popup/customizePopupActionSettings.tsx index c715097d41..454872f073 100644 --- a/packages/core/client/src/modules/actions/view-edit-popup/customizePopupActionSettings.tsx +++ b/packages/core/client/src/modules/actions/view-edit-popup/customizePopupActionSettings.tsx @@ -1,7 +1,11 @@ import { useSchemaToolbar } from '../../../application'; import { SchemaSettings } from '../../../application/schema-settings/SchemaSettings'; import { useCollection_deprecated } from '../../../collection-manager'; -import { ButtonEditor, RemoveButton } from '../../../schema-component/antd/action/Action.Designer'; +import { + ButtonEditor, + RemoveButton, + RefreshDataBlockRequest, +} from '../../../schema-component/antd/action/Action.Designer'; import { SchemaSettingOpenModeSchemaItems } from '../../../schema-items'; import { SchemaSettingsLinkageRules } from '../../../schema-settings'; diff --git a/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx b/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx index f73a0592bf..b853374ff7 100644 --- a/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx +++ b/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx @@ -703,6 +703,19 @@ export const actionSettingsItems: SchemaSettingOptions['items'] = [ }; }, }, + { + name: 'refreshDataBlockRequest', + Component: RefreshDataBlockRequest, + useComponentProps() { + return { + isPopupAction: false, + }; + }, + useVisible() { + const fieldSchema = useFieldSchema(); + return isValid(fieldSchema?.['x-action-settings']?.triggerWorkflows); + }, + }, { name: 'remove', sort: 100, @@ -792,5 +805,30 @@ export const ActionDesigner = (props) => { ); }; +export function RefreshDataBlockRequest(props) { + const { dn } = useDesignable(); + const fieldSchema = useFieldSchema(); + const { t } = useTranslation(); + const { refreshDataBlockRequest } = fieldSchema?.['x-component-props'] || {}; + return ( + { + fieldSchema['x-component-props'] = fieldSchema['x-component-props'] || {}; + fieldSchema['x-component-props'].refreshDataBlockRequest = value; + dn.emit('patch', { + schema: { + ['x-uid']: fieldSchema['x-uid'], + 'x-component-props': { + ...fieldSchema['x-component-props'], + }, + }, + }); + }} + /> + ); +} ActionDesigner.ButtonEditor = ButtonEditor; ActionDesigner.RemoveButton = RemoveButton; diff --git a/packages/core/client/src/schema-component/antd/action/Action.tsx b/packages/core/client/src/schema-component/antd/action/Action.tsx index 9b713fa88a..734d503211 100644 --- a/packages/core/client/src/schema-component/antd/action/Action.tsx +++ b/packages/core/client/src/schema-component/antd/action/Action.tsx @@ -27,6 +27,7 @@ import { useGetAriaLabelOfAction } from './hooks/useGetAriaLabelOfAction'; import { ComposedAction } from './types'; import { linkageAction } from './utils'; import { withDynamicSchemaProps } from '../../../application/hoc/withDynamicSchemaProps'; +import { useDataBlockRequest } from '../../../data-source'; export const Action: ComposedAction = withDynamicSchemaProps( observer((props: any) => { @@ -65,6 +66,7 @@ export const Action: ComposedAction = withDynamicSchemaProps( const designerProps = fieldSchema['x-designer-props']; const openMode = fieldSchema?.['x-component-props']?.['openMode']; const openSize = fieldSchema?.['x-component-props']?.['openSize']; + const refreshDataBlockRequest = fieldSchema?.['x-component-props']?.['refreshDataBlockRequest']; const disabled = form.disabled || field.disabled || field.data?.disabled || propsDisabled; const linkageRules = useMemo(() => fieldSchema?.['x-linkage-rules'] || [], [fieldSchema?.['x-linkage-rules']]); @@ -75,7 +77,7 @@ export const Action: ComposedAction = withDynamicSchemaProps( const localVariables = useLocalVariables({ currentForm: { values: record } as any }); const { getAriaLabel } = useGetAriaLabelOfAction(title); const [btnHover, setBtnHover] = useState(popover); - + const service = useDataBlockRequest(); useEffect(() => { if (popover) { setBtnHover(true); @@ -117,9 +119,16 @@ export const Action: ComposedAction = withDynamicSchemaProps( if (!disabled && aclCtx) { const onOk = () => { - onClick?.(e); - setVisible(true); - run(); + if (onClick) { + onClick(e, () => { + if (refreshDataBlockRequest !== false) { + service?.refresh?.(); + } + }); + } else { + setVisible(true); + run(); + } }; if (confirm?.content) { modal.confirm({ diff --git a/packages/core/client/src/schema-component/antd/action/context.tsx b/packages/core/client/src/schema-component/antd/action/context.tsx index fc29d737d9..e3f1d13873 100644 --- a/packages/core/client/src/schema-component/antd/action/context.tsx +++ b/packages/core/client/src/schema-component/antd/action/context.tsx @@ -1,15 +1,38 @@ import { Schema } from '@formily/react'; import { DrawerProps, ModalProps } from 'antd'; -import React, { createContext } from 'react'; +import React, { createContext, useEffect, useRef, useState } from 'react'; import { useActionContext } from './hooks'; +import { useDataBlockRequest } from '../../../data-source'; export const ActionContext = createContext({}); ActionContext.displayName = 'ActionContext'; export const ActionContextProvider: React.FC = (props) => { + const [submitted, setSubmitted] = useState(false); //是否有提交记录 const contextProps = useActionContext(); + const { visible } = { ...props, ...props.value } || {}; + const isFirstRender = useRef(true); // 使用ref跟踪是否为首次渲染 + const service = useDataBlockRequest(); + const { setSubmitted: setParentSubmitted } = { ...props, ...props.value, ...contextProps }; + + useEffect(() => { + if (visible !== undefined) { + if (isFirstRender.current) { + isFirstRender.current = false; + } else { + if (visible === false && submitted) { + service.refresh(); + setParentSubmitted?.(true); //传递给上一层 + } + } + } + return () => { + setSubmitted(false); + }; + }, [visible]); + return ( - + {props.children} ); @@ -29,4 +52,6 @@ export interface ActionContextProps { fieldSchema?: Schema; drawerProps?: DrawerProps; modalProps?: ModalProps; + submitted?: boolean; + setSubmitted?: (v: boolean) => void; } diff --git a/packages/core/client/src/schema-initializer/components/CreateRecordAction.tsx b/packages/core/client/src/schema-initializer/components/CreateRecordAction.tsx index 097945644e..0af9847b9d 100644 --- a/packages/core/client/src/schema-initializer/components/CreateRecordAction.tsx +++ b/packages/core/client/src/schema-initializer/components/CreateRecordAction.tsx @@ -130,7 +130,7 @@ const InternalCreateRecordAction = (props: any, ref) => { return ( //@ts-ignore
}> - + { diff --git a/packages/core/client/src/schema-templates/schemas/uiSchemaTemplates.ts b/packages/core/client/src/schema-templates/schemas/uiSchemaTemplates.ts index ae31ece899..d6a21af5d9 100644 --- a/packages/core/client/src/schema-templates/schemas/uiSchemaTemplates.ts +++ b/packages/core/client/src/schema-templates/schemas/uiSchemaTemplates.ts @@ -1,39 +1,40 @@ import { ISchema } from '@formily/react'; import { uid } from '@formily/shared'; import { useBulkDestroyActionProps, useDestroyActionProps, useUpdateActionProps } from '../../block-provider/hooks'; -import { useSchemaTemplateManager } from '../SchemaTemplateManagerProvider'; import { uiSchemaTemplatesCollection } from '../collections/uiSchemaTemplates'; import { CollectionTitle } from './CollectionTitle'; +import { useBlockRequestContext } from '../../block-provider'; const useUpdateSchemaTemplateActionProps = () => { const props = useUpdateActionProps(); - const { refresh } = useSchemaTemplateManager(); + const { __parent } = useBlockRequestContext(); return { async onClick() { await props.onClick(); - refresh(); + __parent?.service?.refresh?.(); }, }; }; const useBulkDestroyTemplateProps = () => { const props = useBulkDestroyActionProps(); - const { refresh } = useSchemaTemplateManager(); + const { service } = useBlockRequestContext(); + return { async onClick() { await props.onClick(); - refresh(); + service?.refresh?.(); }, }; }; const useDestroyTemplateProps = () => { const props = useDestroyActionProps(); - const { refresh } = useSchemaTemplateManager(); + const { service } = useBlockRequestContext(); return { async onClick() { await props.onClick(); - refresh(); + service?.refresh?.(); }, }; }; @@ -122,6 +123,7 @@ export const uiSchemaTemplatesSchema: ISchema = { 'x-component-props': { openMode: 'drawer', icon: 'EditOutlined', + refreshDataBlockRequest: false, }, properties: { drawer: { diff --git a/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/BulkEditAction.Settings.tsx b/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/BulkEditAction.Settings.tsx index 2f53ac9c51..2c9c81f343 100644 --- a/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/BulkEditAction.Settings.tsx +++ b/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/BulkEditAction.Settings.tsx @@ -4,10 +4,8 @@ import { SchemaInitializerOpenModeSchemaItems, SchemaSettings, SchemaSettingsDivider, - SchemaSettingsItemGroup, SchemaSettingsRemove, SchemaSettingsSelectItem, - useCompile, useDesignable, useSchemaToolbar, } from '@nocobase/client'; diff --git a/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/utils.tsx b/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/utils.tsx index ed7629cf35..e0c81be339 100644 --- a/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/utils.tsx +++ b/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/utils.tsx @@ -86,7 +86,7 @@ export const useCustomizeBulkEditActionProps = () => { const { rowKey } = tableBlockContext; const selectedRecordKeys = tableBlockContext.field?.data?.selectedRowKeys ?? expressionScope?.selectedRecordKeys ?? {}; - const { setVisible, fieldSchema: actionSchema } = actionContext; + const { setVisible, fieldSchema: actionSchema, setSubmitted } = actionContext; return { async onClick() { const { onSuccess, skipValidator, updateMode } = actionSchema?.['x-action-settings'] ?? {}; @@ -130,8 +130,9 @@ export const useCustomizeBulkEditActionProps = () => { if (!(resource instanceof TableFieldResource)) { __parent?.__parent?.service?.refresh?.(); } - __parent?.service?.refresh?.(); + // __parent?.service?.refresh?.(); setVisible?.(false); + setSubmitted(true); if (!onSuccess?.successMessage) { return; } diff --git a/packages/plugins/@nocobase/plugin-action-bulk-update/src/client/BulkUpdateAction.Settings.tsx b/packages/plugins/@nocobase/plugin-action-bulk-update/src/client/BulkUpdateAction.Settings.tsx index c783415858..dfd810cbda 100644 --- a/packages/plugins/@nocobase/plugin-action-bulk-update/src/client/BulkUpdateAction.Settings.tsx +++ b/packages/plugins/@nocobase/plugin-action-bulk-update/src/client/BulkUpdateAction.Settings.tsx @@ -9,6 +9,7 @@ import { AssignedFieldValues, useDesignable, useSchemaToolbar, + RefreshDataBlockRequest, } from '@nocobase/client'; import { useTranslation } from 'react-i18next'; import React from 'react'; @@ -139,6 +140,15 @@ const schemaSettingsItems: SchemaSettingsItemType[] = [ return isValid(fieldSchema?.['x-action-settings']?.onSuccess); }, }, + { + name: 'refreshDataBlockRequest', + Component: RefreshDataBlockRequest, + useComponentProps() { + return { + isPopupAction: false, + }; + }, + }, { name: 'remove', sort: 100, diff --git a/packages/plugins/@nocobase/plugin-action-bulk-update/src/client/utils.tsx b/packages/plugins/@nocobase/plugin-action-bulk-update/src/client/utils.tsx index 4dbf563eb1..ecb88b3bfc 100644 --- a/packages/plugins/@nocobase/plugin-action-bulk-update/src/client/utils.tsx +++ b/packages/plugins/@nocobase/plugin-action-bulk-update/src/client/utils.tsx @@ -36,7 +36,7 @@ export const useCustomizeBulkUpdateActionProps = () => { const localVariables = useLocalVariables(); return { - async onClick() { + async onClick(e, callBack) { const { assignedValues: originalAssignedValues = {}, onSuccess, @@ -98,7 +98,10 @@ export const useCustomizeBulkUpdateActionProps = () => { } finally { actionField.data.loading = false; } - service?.refresh?.(); + if (callBack) { + callBack?.(); + } + // service?.refresh?.(); if (!(resource instanceof TableFieldResource)) { __parent?.service?.refresh?.(); } diff --git a/packages/plugins/@nocobase/plugin-custom-request/src/client/hooks/useCustomizeRequestActionProps.ts b/packages/plugins/@nocobase/plugin-custom-request/src/client/hooks/useCustomizeRequestActionProps.ts index 89028f7af5..51047563b1 100644 --- a/packages/plugins/@nocobase/plugin-custom-request/src/client/hooks/useCustomizeRequestActionProps.ts +++ b/packages/plugins/@nocobase/plugin-custom-request/src/client/hooks/useCustomizeRequestActionProps.ts @@ -26,7 +26,7 @@ export const useCustomizeRequestActionProps = () => { const { setVisible } = useActionContext(); const { modal, message } = App.useApp(); return { - async onClick() { + async onClick(e?, callBack?) { const { skipValidator, onSuccess } = actionSchema?.['x-action-settings'] ?? {}; const xAction = actionSchema?.['x-action']; if (skipValidator !== true && xAction === 'customize:form:request') { @@ -56,7 +56,10 @@ export const useCustomizeRequestActionProps = () => { if (!(resource instanceof TableFieldResource)) { __parent?.service?.refresh?.(); } - service?.refresh?.(); + // service?.refresh?.(); + if (callBack) { + callBack?.(); + } if (xAction === 'customize:form:request') { setVisible?.(false); } diff --git a/packages/plugins/@nocobase/plugin-custom-request/src/client/schemaSettings.ts b/packages/plugins/@nocobase/plugin-custom-request/src/client/schemaSettings.ts index 48e92b942f..2c040b7701 100644 --- a/packages/plugins/@nocobase/plugin-custom-request/src/client/schemaSettings.ts +++ b/packages/plugins/@nocobase/plugin-custom-request/src/client/schemaSettings.ts @@ -7,6 +7,7 @@ import { SecondConFirm, useCollection, useSchemaToolbar, + RefreshDataBlockRequest, } from '@nocobase/client'; import { CustomRequestACL, CustomRequestSettingsItem } from './components/CustomRequestActionDesigner'; import { useFieldSchema } from '@formily/react'; @@ -52,6 +53,15 @@ export const customizeCustomRequestActionSettings = new SchemaSettings({ name: 'accessControl', Component: CustomRequestACL, }, + { + name: 'refreshDataBlockRequest', + Component: RefreshDataBlockRequest, + useComponentProps() { + return { + isPopupAction: false, + }; + }, + }, { name: 'delete', sort: 100, diff --git a/packages/plugins/@nocobase/plugin-import/src/client/useImportAction.ts b/packages/plugins/@nocobase/plugin-import/src/client/useImportAction.ts index bf5baef34f..8855a94c50 100644 --- a/packages/plugins/@nocobase/plugin-import/src/client/useImportAction.ts +++ b/packages/plugins/@nocobase/plugin-import/src/client/useImportAction.ts @@ -92,7 +92,7 @@ export const useImportStartAction = () => { const { t } = useTranslation(NAMESPACE); const { schema: importSchema } = useImportSchema(actionSchema); const form = useForm(); - const { setVisible } = useActionContext(); + const { setVisible, fieldSchema } = useActionContext(); const { setImportModalVisible, setImportStatus, setImportResult } = useImportContext(); return { async run() { diff --git a/packages/plugins/@nocobase/plugin-workflow/src/client/hooks/useTriggerWorkflowActionProps.ts b/packages/plugins/@nocobase/plugin-workflow/src/client/hooks/useTriggerWorkflowActionProps.ts index c6070dcc1b..9d5ddaa829 100644 --- a/packages/plugins/@nocobase/plugin-workflow/src/client/hooks/useTriggerWorkflowActionProps.ts +++ b/packages/plugins/@nocobase/plugin-workflow/src/client/hooks/useTriggerWorkflowActionProps.ts @@ -82,13 +82,13 @@ export function useRecordTriggerWorkflowsActionProps() { const actionField = useField(); const actionSchema = useFieldSchema(); const { field, __parent } = useBlockRequestContext(); - const { setVisible } = useActionContext(); + const { setVisible, setSubmitted } = useActionContext(); const { modal } = App.useApp(); const navigate = useNavigate(); const { onSuccess, triggerWorkflows } = actionSchema?.['x-action-settings'] ?? {}; return { - async onClick() { + async onClick(e?, callBack?) { actionField.data = field.data || {}; actionField.data.loading = true; @@ -100,8 +100,12 @@ export function useRecordTriggerWorkflowsActionProps() { ? triggerWorkflows.map((row) => [row.workflowKey, row.context].filter(Boolean).join('!')).join(',') : undefined, }); - __parent?.service?.refresh?.(); + // __parent?.service?.refresh?.(); + if (callBack) { + callBack(); + } setVisible?.(false); + setSubmitted?.(true); if (!onSuccess?.successMessage) { return; }