@nocobase/client 0.7.0-alpha.26 → 0.7.0-alpha.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/block-provider/hooks/index.js +10 -2
- package/esm/block-provider/hooks/index.js.map +1 -1
- package/esm/collection-manager/hooks/useCollection.d.ts +1 -0
- package/esm/collection-manager/types.d.ts +1 -0
- package/esm/collection-manager/types.js.map +1 -1
- package/esm/locale/en_US.d.ts +4 -0
- package/esm/locale/en_US.js +6 -1
- package/esm/locale/en_US.js.map +1 -1
- package/esm/locale/index.d.ts +29 -7
- package/esm/locale/zh_CN.d.ts +25 -7
- package/esm/locale/zh_CN.js +25 -7
- package/esm/locale/zh_CN.js.map +1 -1
- package/esm/schema-component/antd/action/Action.Designer.js +6 -6
- package/esm/schema-component/antd/action/Action.Designer.js.map +1 -1
- package/esm/schema-component/antd/action/Action.Drawer.js +60 -3
- package/esm/schema-component/antd/action/Action.Drawer.js.map +1 -1
- package/esm/schema-component/antd/action/Action.js +36 -19
- package/esm/schema-component/antd/action/Action.js.map +1 -1
- package/esm/schema-component/antd/action/context.d.ts +2 -0
- package/esm/schema-component/antd/action/context.js.map +1 -1
- package/esm/schema-component/antd/action/hooks.d.ts +2 -0
- package/esm/schema-component/antd/filter/Filter.Action.Designer.js +1 -1
- package/esm/schema-component/antd/filter/Filter.Action.Designer.js.map +1 -1
- package/esm/schema-component/antd/filter/FilterGroup.js +12 -9
- package/esm/schema-component/antd/filter/FilterGroup.js.map +1 -1
- package/esm/schema-component/antd/filter/FilterItem.js +1 -1
- package/esm/schema-component/antd/filter/FilterItem.js.map +1 -1
- package/esm/schema-component/antd/form-v2/Form.js +27 -3
- package/esm/schema-component/antd/form-v2/Form.js.map +1 -1
- package/esm/schema-component/antd/grid/Grid.d.ts +2 -0
- package/esm/schema-component/antd/grid/Grid.js +10 -3
- package/esm/schema-component/antd/grid/Grid.js.map +1 -1
- package/esm/schema-component/antd/menu/Menu.Designer.js +35 -23
- package/esm/schema-component/antd/menu/Menu.Designer.js.map +1 -1
- package/esm/schema-component/antd/menu/Menu.js +3 -3
- package/esm/schema-component/antd/menu/Menu.js.map +1 -1
- package/esm/schema-component/antd/record-picker/ReadPrettyRecordPicker.js +3 -1
- package/esm/schema-component/antd/record-picker/ReadPrettyRecordPicker.js.map +1 -1
- package/esm/schema-component/antd/table/Table.Void.Designer.js +1 -1
- package/esm/schema-component/antd/table/Table.Void.Designer.js.map +1 -1
- package/esm/schema-component/antd/table-v2/Table.Column.Designer.js +2 -2
- package/esm/schema-component/antd/table-v2/Table.Column.Designer.js.map +1 -1
- package/esm/schema-component/antd/table-v2/TableBlockDesigner.js +2 -2
- package/esm/schema-component/antd/table-v2/TableBlockDesigner.js.map +1 -1
- package/esm/schema-component/antd/table-v2/TableSelectorDesigner.js +1 -1
- package/esm/schema-component/antd/table-v2/TableSelectorDesigner.js.map +1 -1
- package/esm/schema-component/antd/tabs/Tabs.Designer.js +13 -2
- package/esm/schema-component/antd/tabs/Tabs.Designer.js.map +1 -1
- package/esm/schema-component/common/dnd-context/index.js +2 -1
- package/esm/schema-component/common/dnd-context/index.js.map +1 -1
- package/esm/schema-initializer/buttons/BlockInitializers.js +1 -1
- package/esm/schema-initializer/buttons/BlockInitializers.js.map +1 -1
- package/esm/schema-initializer/buttons/CreateFormBlockInitializers.js +2 -1
- package/esm/schema-initializer/buttons/CreateFormBlockInitializers.js.map +1 -1
- package/esm/schema-initializer/buttons/FormItemInitializers.js +3 -13
- package/esm/schema-initializer/buttons/FormItemInitializers.js.map +1 -1
- package/esm/schema-initializer/buttons/ReadPrettyFormItemInitializers.js +3 -13
- package/esm/schema-initializer/buttons/ReadPrettyFormItemInitializers.js.map +1 -1
- package/esm/schema-initializer/buttons/RecordBlockInitializers.js +2 -1
- package/esm/schema-initializer/buttons/RecordBlockInitializers.js.map +1 -1
- package/esm/schema-settings/GeneralSchemaDesigner.js +17 -6
- package/esm/schema-settings/GeneralSchemaDesigner.js.map +1 -1
- package/esm/schema-templates/schemas/uiSchemaTemplates.js +67 -10
- package/esm/schema-templates/schemas/uiSchemaTemplates.js.map +1 -1
- package/esm/workflow/WorkflowCanvas.js +2 -2
- package/esm/workflow/WorkflowCanvas.js.map +1 -1
- package/esm/workflow/WorkflowLink.js +1 -1
- package/esm/workflow/WorkflowLink.js.map +1 -1
- package/esm/workflow/calculators.js +7 -5
- package/esm/workflow/calculators.js.map +1 -1
- package/esm/workflow/nodes/condition.d.ts +1 -1
- package/esm/workflow/nodes/condition.js +16 -13
- package/esm/workflow/nodes/condition.js.map +1 -1
- package/esm/workflow/nodes/create.d.ts +1 -0
- package/esm/workflow/nodes/index.js +4 -4
- package/esm/workflow/nodes/index.js.map +1 -1
- package/esm/workflow/nodes/parallel.js +8 -5
- package/esm/workflow/nodes/parallel.js.map +1 -1
- package/esm/workflow/nodes/query.js +1 -1
- package/esm/workflow/nodes/query.js.map +1 -1
- package/esm/workflow/nodes/update.d.ts +2 -1
- package/esm/workflow/nodes/update.js +12 -1
- package/esm/workflow/nodes/update.js.map +1 -1
- package/esm/workflow/schemas/collection.d.ts +1 -0
- package/esm/workflow/schemas/collection.js +3 -2
- package/esm/workflow/schemas/collection.js.map +1 -1
- package/esm/workflow/schemas/workflows.js +3 -2
- package/esm/workflow/schemas/workflows.js.map +1 -1
- package/esm/workflow/style.d.ts +1 -0
- package/esm/workflow/style.js +5 -4
- package/esm/workflow/style.js.map +1 -1
- package/esm/workflow/triggers/{model.d.ts → collection.d.ts} +5 -4
- package/esm/workflow/triggers/{model.js → collection.js} +23 -31
- package/esm/workflow/triggers/collection.js.map +1 -0
- package/esm/workflow/triggers/index.js +11 -8
- package/esm/workflow/triggers/index.js.map +1 -1
- package/lib/block-provider/hooks/index.js +9 -1
- package/lib/block-provider/hooks/index.js.map +1 -1
- package/lib/collection-manager/hooks/useCollection.d.ts +1 -0
- package/lib/collection-manager/types.d.ts +1 -0
- package/lib/collection-manager/types.js.map +1 -1
- package/lib/locale/en_US.d.ts +4 -0
- package/lib/locale/en_US.js +6 -1
- package/lib/locale/en_US.js.map +1 -1
- package/lib/locale/index.d.ts +29 -7
- package/lib/locale/zh_CN.d.ts +25 -7
- package/lib/locale/zh_CN.js +25 -7
- package/lib/locale/zh_CN.js.map +1 -1
- package/lib/schema-component/antd/action/Action.Designer.js +6 -6
- package/lib/schema-component/antd/action/Action.Designer.js.map +1 -1
- package/lib/schema-component/antd/action/Action.Drawer.js +59 -2
- package/lib/schema-component/antd/action/Action.Drawer.js.map +1 -1
- package/lib/schema-component/antd/action/Action.js +35 -18
- package/lib/schema-component/antd/action/Action.js.map +1 -1
- package/lib/schema-component/antd/action/context.d.ts +2 -0
- package/lib/schema-component/antd/action/context.js.map +1 -1
- package/lib/schema-component/antd/action/hooks.d.ts +2 -0
- package/lib/schema-component/antd/filter/Filter.Action.Designer.js +1 -1
- package/lib/schema-component/antd/filter/Filter.Action.Designer.js.map +1 -1
- package/lib/schema-component/antd/filter/FilterGroup.js +12 -9
- package/lib/schema-component/antd/filter/FilterGroup.js.map +1 -1
- package/lib/schema-component/antd/filter/FilterItem.js +1 -1
- package/lib/schema-component/antd/filter/FilterItem.js.map +1 -1
- package/lib/schema-component/antd/form-v2/Form.js +29 -5
- package/lib/schema-component/antd/form-v2/Form.js.map +1 -1
- package/lib/schema-component/antd/grid/Grid.d.ts +2 -0
- package/lib/schema-component/antd/grid/Grid.js +13 -4
- package/lib/schema-component/antd/grid/Grid.js.map +1 -1
- package/lib/schema-component/antd/menu/Menu.Designer.js +35 -23
- package/lib/schema-component/antd/menu/Menu.Designer.js.map +1 -1
- package/lib/schema-component/antd/menu/Menu.js +2 -2
- package/lib/schema-component/antd/menu/Menu.js.map +1 -1
- package/lib/schema-component/antd/record-picker/ReadPrettyRecordPicker.js +3 -1
- package/lib/schema-component/antd/record-picker/ReadPrettyRecordPicker.js.map +1 -1
- package/lib/schema-component/antd/table/Table.Void.Designer.js +1 -1
- package/lib/schema-component/antd/table/Table.Void.Designer.js.map +1 -1
- package/lib/schema-component/antd/table-v2/Table.Column.Designer.js +2 -2
- package/lib/schema-component/antd/table-v2/Table.Column.Designer.js.map +1 -1
- package/lib/schema-component/antd/table-v2/TableBlockDesigner.js +2 -2
- package/lib/schema-component/antd/table-v2/TableBlockDesigner.js.map +1 -1
- package/lib/schema-component/antd/table-v2/TableSelectorDesigner.js +1 -1
- package/lib/schema-component/antd/table-v2/TableSelectorDesigner.js.map +1 -1
- package/lib/schema-component/antd/tabs/Tabs.Designer.js +13 -2
- package/lib/schema-component/antd/tabs/Tabs.Designer.js.map +1 -1
- package/lib/schema-component/common/dnd-context/index.js +2 -1
- package/lib/schema-component/common/dnd-context/index.js.map +1 -1
- package/lib/schema-initializer/buttons/BlockInitializers.js +1 -1
- package/lib/schema-initializer/buttons/BlockInitializers.js.map +1 -1
- package/lib/schema-initializer/buttons/CreateFormBlockInitializers.js +2 -1
- package/lib/schema-initializer/buttons/CreateFormBlockInitializers.js.map +1 -1
- package/lib/schema-initializer/buttons/FormItemInitializers.js +3 -13
- package/lib/schema-initializer/buttons/FormItemInitializers.js.map +1 -1
- package/lib/schema-initializer/buttons/ReadPrettyFormItemInitializers.js +3 -13
- package/lib/schema-initializer/buttons/ReadPrettyFormItemInitializers.js.map +1 -1
- package/lib/schema-initializer/buttons/RecordBlockInitializers.js +2 -1
- package/lib/schema-initializer/buttons/RecordBlockInitializers.js.map +1 -1
- package/lib/schema-settings/GeneralSchemaDesigner.js +15 -4
- package/lib/schema-settings/GeneralSchemaDesigner.js.map +1 -1
- package/lib/schema-templates/schemas/uiSchemaTemplates.js +67 -10
- package/lib/schema-templates/schemas/uiSchemaTemplates.js.map +1 -1
- package/lib/workflow/WorkflowCanvas.js +2 -2
- package/lib/workflow/WorkflowCanvas.js.map +1 -1
- package/lib/workflow/WorkflowLink.js +1 -1
- package/lib/workflow/WorkflowLink.js.map +1 -1
- package/lib/workflow/calculators.js +7 -5
- package/lib/workflow/calculators.js.map +1 -1
- package/lib/workflow/nodes/condition.d.ts +1 -1
- package/lib/workflow/nodes/condition.js +13 -10
- package/lib/workflow/nodes/condition.js.map +1 -1
- package/lib/workflow/nodes/create.d.ts +1 -0
- package/lib/workflow/nodes/index.js +3 -3
- package/lib/workflow/nodes/index.js.map +1 -1
- package/lib/workflow/nodes/parallel.js +8 -5
- package/lib/workflow/nodes/parallel.js.map +1 -1
- package/lib/workflow/nodes/query.js +1 -1
- package/lib/workflow/nodes/query.js.map +1 -1
- package/lib/workflow/nodes/update.d.ts +2 -1
- package/lib/workflow/nodes/update.js +12 -1
- package/lib/workflow/nodes/update.js.map +1 -1
- package/lib/workflow/schemas/collection.d.ts +1 -0
- package/lib/workflow/schemas/collection.js +3 -2
- package/lib/workflow/schemas/collection.js.map +1 -1
- package/lib/workflow/schemas/workflows.js +3 -2
- package/lib/workflow/schemas/workflows.js.map +1 -1
- package/lib/workflow/style.d.ts +1 -0
- package/lib/workflow/style.js +6 -5
- package/lib/workflow/style.js.map +1 -1
- package/lib/workflow/triggers/{model.d.ts → collection.d.ts} +5 -4
- package/lib/workflow/triggers/{model.js → collection.js} +22 -30
- package/lib/workflow/triggers/collection.js.map +1 -0
- package/lib/workflow/triggers/index.js +10 -7
- package/lib/workflow/triggers/index.js.map +1 -1
- package/package.json +3 -3
- package/src/block-provider/hooks/index.ts +10 -2
- package/src/collection-manager/types.ts +1 -0
- package/src/locale/en_US.ts +8 -1
- package/src/locale/zh_CN.ts +27 -7
- package/src/schema-component/antd/action/Action.Designer.tsx +2 -2
- package/src/schema-component/antd/action/Action.Drawer.tsx +20 -3
- package/src/schema-component/antd/action/Action.tsx +19 -5
- package/src/schema-component/antd/action/context.tsx +2 -0
- package/src/schema-component/antd/filter/Filter.Action.Designer.tsx +1 -1
- package/src/schema-component/antd/filter/FilterGroup.tsx +14 -9
- package/src/schema-component/antd/filter/FilterItem.tsx +1 -1
- package/src/schema-component/antd/form-v2/Form.tsx +29 -3
- package/src/schema-component/antd/grid/Grid.tsx +31 -20
- package/src/schema-component/antd/menu/Menu.Designer.tsx +36 -26
- package/src/schema-component/antd/menu/Menu.tsx +12 -2
- package/src/schema-component/antd/record-picker/ReadPrettyRecordPicker.tsx +3 -1
- package/src/schema-component/antd/table/Table.Void.Designer.tsx +1 -1
- package/src/schema-component/antd/table-v2/Table.Column.Designer.tsx +1 -1
- package/src/schema-component/antd/table-v2/TableBlockDesigner.tsx +2 -2
- package/src/schema-component/antd/table-v2/TableSelectorDesigner.tsx +1 -1
- package/src/schema-component/antd/tabs/Tabs.Designer.tsx +1 -1
- package/src/schema-component/common/dnd-context/index.tsx +2 -1
- package/src/schema-initializer/buttons/BlockInitializers.tsx +1 -1
- package/src/schema-initializer/buttons/CreateFormBlockInitializers.tsx +4 -1
- package/src/schema-initializer/buttons/FormItemInitializers.tsx +5 -3
- package/src/schema-initializer/buttons/ReadPrettyFormItemInitializers.tsx +5 -3
- package/src/schema-initializer/buttons/RecordBlockInitializers.tsx +4 -1
- package/src/schema-settings/GeneralSchemaDesigner.tsx +20 -5
- package/src/schema-templates/schemas/uiSchemaTemplates.ts +23 -10
- package/src/workflow/WorkflowCanvas.tsx +2 -3
- package/src/workflow/WorkflowLink.tsx +1 -1
- package/src/workflow/calculators.tsx +10 -8
- package/src/workflow/nodes/condition.tsx +21 -38
- package/src/workflow/nodes/index.tsx +6 -4
- package/src/workflow/nodes/parallel.tsx +10 -7
- package/src/workflow/nodes/query.tsx +1 -1
- package/src/workflow/nodes/update.tsx +4 -1
- package/src/workflow/schemas/collection.ts +3 -3
- package/src/workflow/schemas/workflows.ts +3 -2
- package/src/workflow/style.tsx +4 -0
- package/src/workflow/triggers/{model.tsx → collection.tsx} +25 -25
- package/src/workflow/triggers/index.tsx +13 -6
- package/esm/workflow/triggers/model.js.map +0 -1
- package/lib/workflow/triggers/model.js.map +0 -1
package/src/locale/zh_CN.ts
CHANGED
|
@@ -318,6 +318,7 @@ export default {
|
|
|
318
318
|
|
|
319
319
|
'Skip required validation': '跳过必填校验',
|
|
320
320
|
'Form values': '表单值',
|
|
321
|
+
'Fields values': '字段值',
|
|
321
322
|
'When submitting the following fields, the saved values are': '提交以下字段时,保存的值为',
|
|
322
323
|
'After successful submission': '提交成功后',
|
|
323
324
|
'Then': '然后',
|
|
@@ -407,25 +408,24 @@ export default {
|
|
|
407
408
|
|
|
408
409
|
// plugins/workflow
|
|
409
410
|
'Workflow': '工作流',
|
|
410
|
-
'
|
|
411
|
-
'Executions': '执行历史',
|
|
411
|
+
'Execution History': '执行历史',
|
|
412
412
|
'Trigger type': '触发方式',
|
|
413
413
|
'Description': '描述',
|
|
414
414
|
'Status': '状态',
|
|
415
415
|
'Enabled': '启用',
|
|
416
416
|
'Disabled': '禁用',
|
|
417
|
-
'Trigger configuration': '触发器配置',
|
|
418
417
|
'Load failed': '加载失败',
|
|
419
418
|
|
|
420
|
-
'
|
|
419
|
+
'Trigger': '触发器',
|
|
420
|
+
'Collection event': '数据表事件',
|
|
421
421
|
'Trigger on': '触发时机',
|
|
422
422
|
'After record added': '新增数据后',
|
|
423
423
|
'After record updated': '更新数据后',
|
|
424
424
|
'After record added or updated': '新增或更新数据后',
|
|
425
425
|
'After record deleted': '删除数据后',
|
|
426
426
|
'Changed fields': '发生变动的字段',
|
|
427
|
-
'
|
|
428
|
-
'
|
|
427
|
+
'Triggered only if one of the selected fields changes. If unselected, it means that it will be triggered when any field changes. When record is added or deleted, any field is considered to have been changed.': '只有被选中的某个字段发生变动时才会触发。如果不选择,则表示任何字段变动时都会触发。新增或删除数据时,任意字段都被认为发生变动。',
|
|
428
|
+
'Only triggers when match conditions': '满足以下条件才触发',
|
|
429
429
|
|
|
430
430
|
'End': '结束',
|
|
431
431
|
|
|
@@ -445,7 +445,6 @@ export default {
|
|
|
445
445
|
'Failed': '失败',
|
|
446
446
|
'Canceled': '已取消',
|
|
447
447
|
|
|
448
|
-
'Node configuration': '配置节点',
|
|
449
448
|
'This node contains branches, deleting will also be preformed to them, are you sure?': '节点包含分支,将同时删除其所有分支下的子节点,确定继续?',
|
|
450
449
|
|
|
451
450
|
'Control': '流程控制',
|
|
@@ -456,8 +455,29 @@ export default {
|
|
|
456
455
|
'Calculation': '运算',
|
|
457
456
|
'Configure calculation': '配置运算',
|
|
458
457
|
'Calculation result': '运算结果',
|
|
458
|
+
'True': '真',
|
|
459
|
+
'False': '假',
|
|
460
|
+
|
|
461
|
+
'Condition': '条件判断',
|
|
462
|
+
'Mode': '模式',
|
|
463
|
+
'Continue when "Yes"': '“是”则继续',
|
|
464
|
+
'Branch into "Yes" and "No"': '“是”和“否”分别继续',
|
|
465
|
+
'Conditions': '条件配置',
|
|
466
|
+
|
|
467
|
+
'Parallel branch': '分支',
|
|
468
|
+
'All succeeded': '全部成功',
|
|
469
|
+
'Any succeeded': '任意成功',
|
|
470
|
+
'Continue after all branches succeeded': '全部分支都成功后才能继续',
|
|
471
|
+
'Continue after any branch succeeded': '任意分支成功后就继续',
|
|
459
472
|
|
|
460
473
|
'Create record': '新增数据',
|
|
461
474
|
'Update record': '更新数据',
|
|
462
475
|
'Query record': '查询数据',
|
|
476
|
+
'Multiple records': '多条数据',
|
|
477
|
+
'Please select collection first': '请先选择数据表',
|
|
478
|
+
'Only update records matching conditions': '只更新满足条件的数据',
|
|
479
|
+
'Fields that are not assigned a value will be set to the default value, and those that do not have a default value are set to null.': '未被赋值的字段将被设置为默认值,没有默认值的设置为空值。',
|
|
480
|
+
'Unsaved changes': '未保存修改',
|
|
481
|
+
'Are you sure you don\'t want to save?': '你确定不保存修改吗?',
|
|
482
|
+
'Dragging': '拖拽中',
|
|
463
483
|
}
|
|
@@ -11,7 +11,7 @@ export const ActionDesigner = (props) => {
|
|
|
11
11
|
const { t } = useTranslation();
|
|
12
12
|
const isPopupAction = ['create', 'update', 'view'].includes(fieldSchema['x-action'] || '');
|
|
13
13
|
return (
|
|
14
|
-
<GeneralSchemaDesigner {...props}>
|
|
14
|
+
<GeneralSchemaDesigner {...props} disableInitializer>
|
|
15
15
|
<SchemaSettings.ModalItem
|
|
16
16
|
title={t('Edit button')}
|
|
17
17
|
schema={
|
|
@@ -65,7 +65,7 @@ export const ActionDesigner = (props) => {
|
|
|
65
65
|
{ label: t('Drawer'), value: 'drawer' },
|
|
66
66
|
{ label: t('Dialog'), value: 'modal' },
|
|
67
67
|
]}
|
|
68
|
-
value={
|
|
68
|
+
value={fieldSchema?.['x-component-props']?.['openMode']}
|
|
69
69
|
onChange={(value) => {
|
|
70
70
|
field.componentProps.openMode = value;
|
|
71
71
|
fieldSchema['x-component-props']['openMode'] = value;
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { css } from '@emotion/css';
|
|
2
2
|
import { observer, RecursionField, useField, useFieldSchema } from '@formily/react';
|
|
3
|
-
import { Drawer } from 'antd';
|
|
3
|
+
import { Drawer, Modal as AntdModal } from 'antd';
|
|
4
4
|
import classNames from 'classnames';
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import { createPortal } from 'react-dom';
|
|
7
|
+
import { useTranslation } from 'react-i18next';
|
|
7
8
|
import { useActionContext } from './hooks';
|
|
8
9
|
import { ComposedActionDrawer } from './types';
|
|
9
10
|
|
|
10
11
|
export const ActionDrawer: ComposedActionDrawer = observer((props) => {
|
|
11
12
|
const { footerNodeName = 'Action.Drawer.Footer', ...others } = props;
|
|
12
|
-
const {
|
|
13
|
+
const { t } = useTranslation();
|
|
14
|
+
const { visible, setVisible, formValueChanged, setFormValueChanged } = useActionContext();
|
|
13
15
|
const schema = useFieldSchema();
|
|
14
16
|
const field = useField();
|
|
15
17
|
const footerSchema = schema.reduceProperties((buf, s) => {
|
|
@@ -18,6 +20,21 @@ export const ActionDrawer: ComposedActionDrawer = observer((props) => {
|
|
|
18
20
|
}
|
|
19
21
|
return buf;
|
|
20
22
|
});
|
|
23
|
+
|
|
24
|
+
const closeHandler = () => {
|
|
25
|
+
if (!formValueChanged) {
|
|
26
|
+
setVisible(false);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
AntdModal.confirm({
|
|
30
|
+
title: t('Unsaved changes'),
|
|
31
|
+
content: t("Are you sure you don't want to save?"),
|
|
32
|
+
async onOk() {
|
|
33
|
+
setFormValueChanged(false);
|
|
34
|
+
setVisible(false);
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
};
|
|
21
38
|
return (
|
|
22
39
|
<>
|
|
23
40
|
{createPortal(
|
|
@@ -32,7 +49,7 @@ export const ActionDrawer: ComposedActionDrawer = observer((props) => {
|
|
|
32
49
|
{...others}
|
|
33
50
|
destroyOnClose
|
|
34
51
|
visible={visible}
|
|
35
|
-
onClose={
|
|
52
|
+
onClose={closeHandler}
|
|
36
53
|
className={classNames(
|
|
37
54
|
others.className,
|
|
38
55
|
css`
|
|
@@ -6,7 +6,7 @@ import React, { useState } from 'react';
|
|
|
6
6
|
import { useActionContext } from '../..';
|
|
7
7
|
import { Icon } from '../../../icon';
|
|
8
8
|
import { SortableItem } from '../../common';
|
|
9
|
-
import { useDesigner } from '../../hooks';
|
|
9
|
+
import { useCompile, useDesigner } from '../../hooks';
|
|
10
10
|
import { useProps } from '../../hooks/useProps';
|
|
11
11
|
import ActionContainer from './Action.Container';
|
|
12
12
|
import { ActionDesigner } from './Action.Designer';
|
|
@@ -69,7 +69,7 @@ export const Action: ComposedAction = observer((props: any) => {
|
|
|
69
69
|
const {
|
|
70
70
|
popover,
|
|
71
71
|
confirm,
|
|
72
|
-
openMode,
|
|
72
|
+
// openMode,
|
|
73
73
|
containerRefKey,
|
|
74
74
|
component,
|
|
75
75
|
useAction = useA,
|
|
@@ -80,14 +80,18 @@ export const Action: ComposedAction = observer((props: any) => {
|
|
|
80
80
|
} = props;
|
|
81
81
|
const { onClick } = useProps(props);
|
|
82
82
|
const [visible, setVisible] = useState(false);
|
|
83
|
+
const [formValueChanged, setFormValueChanged] = useState(false);
|
|
83
84
|
const Designer = useDesigner();
|
|
84
|
-
const field = useField();
|
|
85
|
+
const field = useField<any>();
|
|
85
86
|
const { run } = useAction();
|
|
86
87
|
const fieldSchema = useFieldSchema();
|
|
88
|
+
const compile = useCompile();
|
|
87
89
|
const designerProps = fieldSchema['x-designer-props'];
|
|
90
|
+
const openMode = fieldSchema?.['x-component-props']?.['openMode'];
|
|
88
91
|
const renderButton = () => (
|
|
89
92
|
<SortableItem
|
|
90
93
|
{...others}
|
|
94
|
+
loading={field?.data?.loading}
|
|
91
95
|
icon={<Icon type={icon} />}
|
|
92
96
|
onClick={(e: React.MouseEvent) => {
|
|
93
97
|
e.preventDefault();
|
|
@@ -109,12 +113,22 @@ export const Action: ComposedAction = observer((props: any) => {
|
|
|
109
113
|
component={component || Button}
|
|
110
114
|
className={classnames(className, actionDesignerCss)}
|
|
111
115
|
>
|
|
112
|
-
{
|
|
116
|
+
{compile(fieldSchema.title)}
|
|
113
117
|
<Designer {...designerProps} />
|
|
114
118
|
</SortableItem>
|
|
115
119
|
);
|
|
116
120
|
return (
|
|
117
|
-
<ActionContext.Provider
|
|
121
|
+
<ActionContext.Provider
|
|
122
|
+
value={{
|
|
123
|
+
button: renderButton(),
|
|
124
|
+
visible,
|
|
125
|
+
setVisible,
|
|
126
|
+
formValueChanged,
|
|
127
|
+
setFormValueChanged,
|
|
128
|
+
openMode,
|
|
129
|
+
containerRefKey,
|
|
130
|
+
}}
|
|
131
|
+
>
|
|
118
132
|
{popover && <RecursionField basePath={field.address} onlyRenderProperties schema={fieldSchema} />}
|
|
119
133
|
{!popover && renderButton()}
|
|
120
134
|
{!popover && props.children}
|
|
@@ -31,7 +31,7 @@ export const FilterActionDesigner = (props) => {
|
|
|
31
31
|
const { t } = useTranslation();
|
|
32
32
|
const nonfilterable = fieldSchema?.['x-component-props']?.nonfilterable || [];
|
|
33
33
|
return (
|
|
34
|
-
<GeneralSchemaDesigner {...props}>
|
|
34
|
+
<GeneralSchemaDesigner {...props} disableInitializer>
|
|
35
35
|
<SchemaSettings.ItemGroup title={t('Filterable fields')}>
|
|
36
36
|
{fields.map((field) => {
|
|
37
37
|
const checked = !nonfilterable.includes(field.name);
|
|
@@ -23,15 +23,19 @@ export const FilterGroup = connect((props) => {
|
|
|
23
23
|
return (
|
|
24
24
|
<FilterLogicContext.Provider value={logic}>
|
|
25
25
|
<div
|
|
26
|
-
style={
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
style={
|
|
27
|
+
bordered
|
|
28
|
+
? {
|
|
29
|
+
position: 'relative',
|
|
30
|
+
border: '1px dashed #dedede',
|
|
31
|
+
padding: 14,
|
|
32
|
+
marginBottom: 8,
|
|
33
|
+
}
|
|
34
|
+
: {
|
|
35
|
+
position: 'relative',
|
|
36
|
+
marginBottom: 8,
|
|
37
|
+
}
|
|
38
|
+
}
|
|
35
39
|
>
|
|
36
40
|
{remove && (
|
|
37
41
|
<a>
|
|
@@ -40,6 +44,7 @@ export const FilterGroup = connect((props) => {
|
|
|
40
44
|
position: 'absolute',
|
|
41
45
|
right: 10,
|
|
42
46
|
top: 10,
|
|
47
|
+
color: '#bfbfbf',
|
|
43
48
|
}}
|
|
44
49
|
onClick={() => remove()}
|
|
45
50
|
/>
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { FormLayout } from '@formily/antd';
|
|
2
|
-
import { createForm, Field } from '@formily/core';
|
|
2
|
+
import { createForm, Field, onFormInputChange } from '@formily/core';
|
|
3
3
|
import { FieldContext, FormContext, observer, RecursionField, useField, useFieldSchema } from '@formily/react';
|
|
4
|
+
import { uid } from '@nocobase/utils';
|
|
4
5
|
import { Spin } from 'antd';
|
|
5
|
-
import React, { useMemo } from 'react';
|
|
6
|
+
import React, { useEffect, useMemo } from 'react';
|
|
7
|
+
import { useActionContext } from '..';
|
|
6
8
|
import { useAttach, useComponent } from '../..';
|
|
7
9
|
import { useProps } from '../../hooks/useProps';
|
|
8
10
|
|
|
@@ -53,13 +55,37 @@ const FormDecorator: React.FC<FormProps> = (props) => {
|
|
|
53
55
|
};
|
|
54
56
|
|
|
55
57
|
const WithForm = (props) => {
|
|
58
|
+
const { form } = props;
|
|
56
59
|
const fieldSchema = useFieldSchema();
|
|
60
|
+
const { setFormValueChanged } = useActionContext();
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
const id = uid();
|
|
63
|
+
form.addEffects(id, () => {
|
|
64
|
+
onFormInputChange((form) => {
|
|
65
|
+
setFormValueChanged(true);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
return () => {
|
|
69
|
+
form.removeEffects(id);
|
|
70
|
+
};
|
|
71
|
+
}, []);
|
|
57
72
|
return fieldSchema['x-decorator'] === 'Form' ? <FormDecorator {...props} /> : <FormComponent {...props} />;
|
|
58
73
|
};
|
|
59
74
|
|
|
60
75
|
const WithoutForm = (props) => {
|
|
61
76
|
const fieldSchema = useFieldSchema();
|
|
62
|
-
const
|
|
77
|
+
const { setFormValueChanged } = useActionContext();
|
|
78
|
+
const form = useMemo(
|
|
79
|
+
() =>
|
|
80
|
+
createForm({
|
|
81
|
+
effects() {
|
|
82
|
+
onFormInputChange((form) => {
|
|
83
|
+
setFormValueChanged(true);
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
}),
|
|
87
|
+
[],
|
|
88
|
+
);
|
|
63
89
|
return fieldSchema['x-decorator'] === 'Form' ? (
|
|
64
90
|
<FormDecorator form={form} {...props} />
|
|
65
91
|
) : (
|
|
@@ -9,6 +9,7 @@ import { DndContext } from '../../common/dnd-context';
|
|
|
9
9
|
|
|
10
10
|
const GridRowContext = createContext(null);
|
|
11
11
|
const GridColContext = createContext(null);
|
|
12
|
+
const GridContext = createContext<any>({});
|
|
12
13
|
|
|
13
14
|
const ColDivider = (props) => {
|
|
14
15
|
const { isOver, setNodeRef } = useDroppable({
|
|
@@ -147,6 +148,14 @@ const DndWrapper = (props) => {
|
|
|
147
148
|
return <DndContext {...props.dndContext}>{props.children}</DndContext>;
|
|
148
149
|
};
|
|
149
150
|
|
|
151
|
+
export const useGridContext = () => {
|
|
152
|
+
return useContext(GridContext);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export const useGridRowContext = () => {
|
|
156
|
+
return useContext(GridRowContext);
|
|
157
|
+
}
|
|
158
|
+
|
|
150
159
|
export const Grid: any = observer((props: any) => {
|
|
151
160
|
const field = useField();
|
|
152
161
|
const fieldSchema = useFieldSchema();
|
|
@@ -154,26 +163,28 @@ export const Grid: any = observer((props: any) => {
|
|
|
154
163
|
const addr = field.address.toString();
|
|
155
164
|
const rows = useRowProperties();
|
|
156
165
|
return (
|
|
157
|
-
<
|
|
158
|
-
<
|
|
159
|
-
<
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
<
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
166
|
+
<GridContext.Provider value={{ fieldSchema, renderSchemaInitializer: render }}>
|
|
167
|
+
<div className={'nb-grid'} style={{ position: 'relative' }}>
|
|
168
|
+
<DndWrapper dndContext={props.dndContext}>
|
|
169
|
+
<RowDivider
|
|
170
|
+
id={`${addr}_0`}
|
|
171
|
+
data={{ wrapSchema: wrapRowSchema, insertAdjacent: 'afterBegin', schema: fieldSchema }}
|
|
172
|
+
/>
|
|
173
|
+
{rows.map((schema, index) => {
|
|
174
|
+
return (
|
|
175
|
+
<React.Fragment key={schema.name}>
|
|
176
|
+
<RecursionField name={schema.name} schema={schema} />
|
|
177
|
+
<RowDivider
|
|
178
|
+
id={`${addr}_${index + 1}`}
|
|
179
|
+
data={{ wrapSchema: wrapRowSchema, insertAdjacent: 'afterEnd', schema }}
|
|
180
|
+
/>
|
|
181
|
+
</React.Fragment>
|
|
182
|
+
);
|
|
183
|
+
})}
|
|
184
|
+
</DndWrapper>
|
|
185
|
+
{render()}
|
|
186
|
+
</div>
|
|
187
|
+
</GridContext.Provider>
|
|
177
188
|
);
|
|
178
189
|
});
|
|
179
190
|
|
|
@@ -223,35 +223,43 @@ export const MenuDesigner = () => {
|
|
|
223
223
|
});
|
|
224
224
|
});
|
|
225
225
|
};
|
|
226
|
+
const schema = {
|
|
227
|
+
type: 'object',
|
|
228
|
+
title: t('Edit menu item'),
|
|
229
|
+
properties: {
|
|
230
|
+
title: {
|
|
231
|
+
title: t('Menu item title'),
|
|
232
|
+
required: true,
|
|
233
|
+
'x-decorator': 'FormItem',
|
|
234
|
+
'x-component': 'Input',
|
|
235
|
+
'x-component-props': {},
|
|
236
|
+
},
|
|
237
|
+
icon: {
|
|
238
|
+
title: t('Menu item icon'),
|
|
239
|
+
'x-component': 'IconPicker',
|
|
240
|
+
'x-decorator': 'FormItem',
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
const initialValues = {
|
|
245
|
+
title: field.title,
|
|
246
|
+
icon: field.componentProps.icon,
|
|
247
|
+
};
|
|
248
|
+
if (fieldSchema['x-component'] === 'Menu.URL') {
|
|
249
|
+
schema.properties['href'] = {
|
|
250
|
+
title: t('Link'),
|
|
251
|
+
'x-component': 'Input',
|
|
252
|
+
'x-decorator': 'FormItem',
|
|
253
|
+
};
|
|
254
|
+
initialValues['href'] = field.componentProps.href;
|
|
255
|
+
}
|
|
226
256
|
return (
|
|
227
257
|
<GeneralSchemaDesigner>
|
|
228
258
|
<SchemaSettings.ModalItem
|
|
229
259
|
title={t('Edit')}
|
|
230
|
-
schema={
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
title: t('Edit menu item'),
|
|
234
|
-
properties: {
|
|
235
|
-
title: {
|
|
236
|
-
title: t('Menu item title'),
|
|
237
|
-
required: true,
|
|
238
|
-
'x-decorator': 'FormItem',
|
|
239
|
-
'x-component': 'Input',
|
|
240
|
-
'x-component-props': {},
|
|
241
|
-
},
|
|
242
|
-
icon: {
|
|
243
|
-
title: t('Menu item icon'),
|
|
244
|
-
'x-component': 'IconPicker',
|
|
245
|
-
'x-decorator': 'FormItem',
|
|
246
|
-
},
|
|
247
|
-
},
|
|
248
|
-
} as ISchema
|
|
249
|
-
}
|
|
250
|
-
initialValues={{
|
|
251
|
-
title: field.title,
|
|
252
|
-
icon: field.componentProps.icon,
|
|
253
|
-
}}
|
|
254
|
-
onSubmit={({ title, icon }) => {
|
|
260
|
+
schema={schema as ISchema}
|
|
261
|
+
initialValues={initialValues}
|
|
262
|
+
onSubmit={({ title, icon, href }) => {
|
|
255
263
|
const schema = {
|
|
256
264
|
['x-uid']: fieldSchema['x-uid'],
|
|
257
265
|
};
|
|
@@ -262,9 +270,11 @@ export const MenuDesigner = () => {
|
|
|
262
270
|
refresh();
|
|
263
271
|
}
|
|
264
272
|
field.componentProps.icon = icon;
|
|
265
|
-
|
|
273
|
+
field.componentProps.href = href;
|
|
274
|
+
schema['x-component-props'] = { icon, href };
|
|
266
275
|
fieldSchema['x-component-props'] = fieldSchema['x-component-props'] || {};
|
|
267
276
|
fieldSchema['x-component-props']['icon'] = icon;
|
|
277
|
+
fieldSchema['x-component-props']['href'] = href;
|
|
268
278
|
dn.emit('patch', {
|
|
269
279
|
schema,
|
|
270
280
|
});
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
Schema,
|
|
6
6
|
SchemaExpressionScopeContext,
|
|
7
7
|
useField,
|
|
8
|
-
useFieldSchema
|
|
8
|
+
useFieldSchema,
|
|
9
9
|
} from '@formily/react';
|
|
10
10
|
import { Menu as AntdMenu } from 'antd';
|
|
11
11
|
import React, { createContext, useContext, useEffect, useState } from 'react';
|
|
@@ -386,7 +386,17 @@ Menu.URL = observer((props) => {
|
|
|
386
386
|
>
|
|
387
387
|
<SortableItem className={designerCss}>
|
|
388
388
|
<Icon type={icon} />
|
|
389
|
-
|
|
389
|
+
<span
|
|
390
|
+
className={css`
|
|
391
|
+
overflow: hidden;
|
|
392
|
+
text-overflow: ellipsis;
|
|
393
|
+
display: inline-block;
|
|
394
|
+
width: 100%;
|
|
395
|
+
vertical-align: middle;
|
|
396
|
+
`}
|
|
397
|
+
>
|
|
398
|
+
{field.title}
|
|
399
|
+
</span>
|
|
390
400
|
<Designer />
|
|
391
401
|
</SortableItem>
|
|
392
402
|
</AntdMenu.Item>
|
|
@@ -7,6 +7,7 @@ import { BlockAssociationContext } from '../../../block-provider';
|
|
|
7
7
|
import { CollectionProvider, useCollection } from '../../../collection-manager';
|
|
8
8
|
import { RecordProvider } from '../../../record-provider';
|
|
9
9
|
import { FormProvider } from '../../core';
|
|
10
|
+
import { useCompile } from '../../hooks';
|
|
10
11
|
import { ActionContext } from '../action';
|
|
11
12
|
import { useFieldNames } from './useFieldNames';
|
|
12
13
|
|
|
@@ -18,6 +19,7 @@ export const ReadPrettyRecordPicker: React.FC = observer((props: any) => {
|
|
|
18
19
|
const { getField } = useCollection();
|
|
19
20
|
const collectionField = getField(fieldSchema.name);
|
|
20
21
|
const [record, setRecord] = useState({});
|
|
22
|
+
const compile = useCompile();
|
|
21
23
|
return collectionField ? (
|
|
22
24
|
<div>
|
|
23
25
|
<BlockAssociationContext.Provider value={`${collectionField.collectionName}.${collectionField.name}`}>
|
|
@@ -34,7 +36,7 @@ export const ReadPrettyRecordPicker: React.FC = observer((props: any) => {
|
|
|
34
36
|
setRecord(record);
|
|
35
37
|
}}
|
|
36
38
|
>
|
|
37
|
-
{record?.[fieldNames?.label || 'label']}
|
|
39
|
+
{compile(record?.[fieldNames?.label || 'label'])}
|
|
38
40
|
</a>
|
|
39
41
|
</span>
|
|
40
42
|
);
|
|
@@ -39,7 +39,7 @@ export const TableVoidDesigner = () => {
|
|
|
39
39
|
onChange={(dragSort) => {
|
|
40
40
|
field.decoratorProps.dragSort = dragSort;
|
|
41
41
|
fieldSchema['x-decorator-props'].dragSort = dragSort;
|
|
42
|
-
ctx.run({ ...ctx.params?.[0], sort:
|
|
42
|
+
ctx.run({ ...ctx.params?.[0], sort: 'sort' });
|
|
43
43
|
dn.emit('patch', {
|
|
44
44
|
schema: {
|
|
45
45
|
['x-uid']: fieldSchema['x-uid'],
|
|
@@ -32,7 +32,7 @@ export const TableColumnDesigner = (props) => {
|
|
|
32
32
|
fieldSchema?.['x-component-props']?.['fieldNames'] || uiSchema?.['x-component-props']?.['fieldNames'];
|
|
33
33
|
const options = useLabelFields(collectionField?.target);
|
|
34
34
|
return (
|
|
35
|
-
<GeneralSchemaDesigner>
|
|
35
|
+
<GeneralSchemaDesigner disableInitializer>
|
|
36
36
|
<SchemaSettings.ModalItem
|
|
37
37
|
title={t('Custom column title')}
|
|
38
38
|
schema={
|
|
@@ -10,7 +10,7 @@ import { useSchemaTemplate } from '../../../schema-templates';
|
|
|
10
10
|
import { useDesignable } from '../../hooks';
|
|
11
11
|
|
|
12
12
|
export const TableBlockDesigner = () => {
|
|
13
|
-
const { name, title } = useCollection();
|
|
13
|
+
const { name, title, sortable } = useCollection();
|
|
14
14
|
const field = useField();
|
|
15
15
|
const fieldSchema = useFieldSchema();
|
|
16
16
|
const dataSource = useCollectionFilterOptions(name);
|
|
@@ -41,7 +41,7 @@ export const TableBlockDesigner = () => {
|
|
|
41
41
|
onChange={(dragSort) => {
|
|
42
42
|
field.decoratorProps.dragSort = dragSort;
|
|
43
43
|
fieldSchema['x-decorator-props'].dragSort = dragSort;
|
|
44
|
-
service.run({ ...service.params?.[0], sort:
|
|
44
|
+
service.run({ ...service.params?.[0], sort: 'sort' });
|
|
45
45
|
dn.emit('patch', {
|
|
46
46
|
schema: {
|
|
47
47
|
['x-uid']: fieldSchema['x-uid'],
|
|
@@ -34,7 +34,7 @@ export const TableSelectorDesigner = () => {
|
|
|
34
34
|
const template = useSchemaTemplate();
|
|
35
35
|
const { dragSort } = field.decoratorProps;
|
|
36
36
|
return (
|
|
37
|
-
<GeneralSchemaDesigner template={template} title={title || name}>
|
|
37
|
+
<GeneralSchemaDesigner template={template} title={title || name} disableInitializer>
|
|
38
38
|
<SchemaSettings.ModalItem
|
|
39
39
|
title={t('Set the data scope')}
|
|
40
40
|
schema={
|
|
@@ -57,6 +57,7 @@ const useDragEnd = (props?: any) => {
|
|
|
57
57
|
};
|
|
58
58
|
|
|
59
59
|
export const DndContext = observer((props: Props) => {
|
|
60
|
+
const { t } = useTranslation();
|
|
60
61
|
return (
|
|
61
62
|
<DndKitContext collisionDetection={rectIntersection} {...props} onDragEnd={useDragEnd(props)}>
|
|
62
63
|
<DragOverlay
|
|
@@ -65,7 +66,7 @@ export const DndContext = observer((props: Props) => {
|
|
|
65
66
|
easing: 'cubic-bezier(0.18, 0.67, 0.6, 1.22)',
|
|
66
67
|
}}
|
|
67
68
|
>
|
|
68
|
-
<span style={{ whiteSpace: 'nowrap' }}
|
|
69
|
+
<span style={{ whiteSpace: 'nowrap' }}>{t('Dragging')}</span>
|
|
69
70
|
</DragOverlay>
|
|
70
71
|
{props.children}
|
|
71
72
|
</DndKitContext>
|
|
@@ -5,11 +5,14 @@ import { gridRowColWrap } from '../utils';
|
|
|
5
5
|
|
|
6
6
|
export const CreateFormBlockInitializers = (props: any) => {
|
|
7
7
|
const { t } = useTranslation();
|
|
8
|
+
const { insertPosition, component } = props;
|
|
8
9
|
return (
|
|
9
10
|
<SchemaInitializer.Button
|
|
10
11
|
wrap={gridRowColWrap}
|
|
11
|
-
title={t('Add block')}
|
|
12
|
+
title={component ? null : t('Add block')}
|
|
12
13
|
icon={'PlusOutlined'}
|
|
14
|
+
insertPosition={insertPosition}
|
|
15
|
+
component={component}
|
|
13
16
|
items={[
|
|
14
17
|
{
|
|
15
18
|
type: 'itemGroup',
|
|
@@ -6,6 +6,7 @@ import { gridRowColWrap, useFormItemInitializerFields } from '../utils';
|
|
|
6
6
|
// 表单里配置字段
|
|
7
7
|
export const FormItemInitializers = (props: any) => {
|
|
8
8
|
const { t } = useTranslation();
|
|
9
|
+
const { insertPosition, component } = props;
|
|
9
10
|
return (
|
|
10
11
|
<SchemaInitializer.Button
|
|
11
12
|
wrap={gridRowColWrap}
|
|
@@ -35,8 +36,9 @@ export const FormItemInitializers = (props: any) => {
|
|
|
35
36
|
},
|
|
36
37
|
},
|
|
37
38
|
]}
|
|
38
|
-
|
|
39
|
-
{
|
|
40
|
-
|
|
39
|
+
insertPosition={insertPosition}
|
|
40
|
+
component={component}
|
|
41
|
+
title={component ? null : t('Configure fields')}
|
|
42
|
+
/>
|
|
41
43
|
);
|
|
42
44
|
};
|