feat: add a secondary confirmation function to the direct execution o… (#3161)

* feat: add a secondary confirmation function to the direct execution of the move operation button

* feat: add a secondary confirmation function to the direct execution of the move operation button

* fix: fix the problem of uncontrolled confirm

* fix: copywriting repair

---------

Co-authored-by: zhangboya3 <zhangboya3@xiaomi.com>
Co-authored-by: chenos <chenlinxh@gmail.com>
This commit is contained in:
by 2023-12-18 20:45:37 +08:00 committed by GitHub
parent 5a55987033
commit 9b1c02b63c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 69 additions and 3 deletions

View File

@ -830,6 +830,9 @@
"Please use a valid SELECT or WITH AS statement": "请使用有效的 SELECT 或 WITH AS 语句", "Please use a valid SELECT or WITH AS statement": "请使用有效的 SELECT 或 WITH AS 语句",
"Please confirm the SQL statement first": "请先确认 SQL 语句", "Please confirm the SQL statement first": "请先确认 SQL 语句",
"Automatically drop objects that depend on the collection (such as views), and in turn all objects that depend on those objects": "自动删除依赖于该表的对象,以及依赖这些对象的对象", "Automatically drop objects that depend on the collection (such as views), and in turn all objects that depend on those objects": "自动删除依赖于该表的对象,以及依赖这些对象的对象",
"Second confirmation": "二次确认",
"Perform the {{title}}": "执行{{title}}",
"Are you sure you want to perform the {{title}} action?": "你确定执行{{title}}操作吗?",
"Sign in with another account": "登录其他账号", "Sign in with another account": "登录其他账号",
"Return to the main application": "返回主应用", "Return to the main application": "返回主应用",
"Permission denied": "没有权限" "Permission denied": "没有权限"

View File

@ -28,6 +28,7 @@ import {
import { DefaultValueProvider } from '../../../schema-settings/hooks/useIsAllowToSetDefaultValue'; import { DefaultValueProvider } from '../../../schema-settings/hooks/useIsAllowToSetDefaultValue';
import { useLinkageAction } from './hooks'; import { useLinkageAction } from './hooks';
import { requestSettingsSchema } from './utils'; import { requestSettingsSchema } from './utils';
import { Field } from '@formily/core';
const Tree = connect( const Tree = connect(
AntdTree, AntdTree,
@ -695,6 +696,33 @@ export const actionSettingsItems: SchemaSettingOptions['items'] = [
}; };
}, },
}, },
{
name: 'updateMode',
Component: UpdateMode,
useVisible() {
const fieldSchema = useFieldSchema();
const isUpdateModePopupAction = ['customize:bulkUpdate', 'customize:bulkEdit'].includes(
fieldSchema['x-action'],
);
return isUpdateModePopupAction;
},
},
{
name: 'secondConFirm',
Component: SecondConFirm,
useVisible() {
const fieldSchema = useFieldSchema();
const isPopupAction = [
'create',
'update',
'view',
'customize:popup',
'duplicate',
'customize:create',
].includes(fieldSchema['x-action'] || '');
return !isPopupAction;
},
},
{ {
name: 'assignFieldValues', name: 'assignFieldValues',
Component: AssignedFieldValues, Component: AssignedFieldValues,
@ -769,7 +797,42 @@ export const actionSettingsItems: SchemaSettingOptions['items'] = [
], ],
}, },
]; ];
function SecondConFirm() {
const { dn } = useDesignable();
const fieldSchema = useFieldSchema();
const { t } = useTranslation();
const field = useField<Field>();
return (
<SchemaSettingsSwitchItem
title={t('Second confirmation')}
checked={!!fieldSchema?.['x-component-props']?.confirm?.content}
onChange={(value) => {
if (!fieldSchema['x-component-props']) {
fieldSchema['x-component-props'] = {};
}
if (value) {
fieldSchema['x-component-props'].confirm = value
? {
title: 'Perform the {{title}}',
content: 'Are you sure you want to perform the {{title}} action?',
}
: {};
} else {
fieldSchema['x-component-props'].confirm = {};
}
field.componentProps.confirm = { ...fieldSchema['x-component-props']?.confirm };
dn.emit('patch', {
schema: {
['x-uid']: fieldSchema['x-uid'],
'x-component-props': { ...fieldSchema['x-component-props'] },
},
});
}}
/>
);
}
export const actionSettings = new SchemaSettings({ export const actionSettings = new SchemaSettings({
name: 'ActionSettings', name: 'ActionSettings',
items: actionSettingsItems, items: actionSettingsItems,

View File

@ -65,7 +65,6 @@ export const Action: ComposedAction = observer(
const variables = useVariables(); const variables = useVariables();
const localVariables = useLocalVariables({ currentForm: { values: record } as any }); const localVariables = useLocalVariables({ currentForm: { values: record } as any });
const { getAriaLabel } = useGetAriaLabelOfAction(title); const { getAriaLabel } = useGetAriaLabelOfAction(title);
let actionTitle = title || compile(fieldSchema.title); let actionTitle = title || compile(fieldSchema.title);
actionTitle = lodash.isString(actionTitle) ? t(actionTitle) : actionTitle; actionTitle = lodash.isString(actionTitle) ? t(actionTitle) : actionTitle;
@ -106,9 +105,10 @@ export const Action: ComposedAction = observer(
setVisible(true); setVisible(true);
run(); run();
}; };
if (confirm) { if (confirm?.content) {
modal.confirm({ modal.confirm({
...confirm, title: t(confirm.title, { title: actionTitle }),
content: t(confirm.content, { title: actionTitle }),
onOk, onOk,
}); });
} else { } else {