diff --git a/packages/core/client/src/flow/models/TableModel.tsx b/packages/core/client/src/flow/models/TableModel.tsx index b44b19f131..daa0169a73 100644 --- a/packages/core/client/src/flow/models/TableModel.tsx +++ b/packages/core/client/src/flow/models/TableModel.tsx @@ -10,6 +10,7 @@ import { SettingOutlined } from '@ant-design/icons'; import { css } from '@emotion/css'; import { + AddActionButton, AddActionModel, AddFieldButton, Collection, @@ -83,7 +84,10 @@ export class TableModel extends BlockFlowModel { extraContext={{ currentModel: this, currentResource: this.resource }} /> ))} - + + + {/* [ @@ -104,7 +108,7 @@ export class TableModel extends BlockFlowModel { ]} > - + */} boolean; + /** + * 自定义 items(如果提供,将覆盖默认的action菜单) + */ + items?: SubModelItemsType; } /** @@ -51,12 +59,17 @@ export const AddActionButton: React.FC = ({ subModelKey = 'actions', children = , subModelType = 'array', + items, + filter, onModelAdded, }) => { - const items = useMemo(() => { - const blockClasses = model.flowEngine.filterModelClassByParent(subModelBaseClass); + const allActionsItems = useMemo(() => { + const actionClasses = model.flowEngine.filterModelClassByParent(subModelBaseClass); const registeredBlocks = []; - for (const [className, ModelClass] of blockClasses) { + for (const [className, ModelClass] of actionClasses) { + if (filter && !filter(ModelClass, className)) { + continue; + } const item = { key: className, label: ModelClass.meta?.title || className, @@ -76,7 +89,7 @@ export const AddActionButton: React.FC = ({ model={model} subModelKey={subModelKey} subModelType={subModelType} - items={items} + items={items ?? allActionsItems} onModelAdded={onModelAdded} > {children} diff --git a/packages/core/flow-engine/src/components/subModel/AddBlockButton.tsx b/packages/core/flow-engine/src/components/subModel/AddBlockButton.tsx index c8423da652..df284dd10e 100644 --- a/packages/core/flow-engine/src/components/subModel/AddBlockButton.tsx +++ b/packages/core/flow-engine/src/components/subModel/AddBlockButton.tsx @@ -34,13 +34,13 @@ interface AddBlockButtonProps { */ children?: React.ReactNode; /** - * 自定义 items(如果提供,将覆盖默认的数据源选择行为) + * 自定义 items(如果提供,将覆盖默认的区块菜单) */ items?: SubModelItemsType; /** - * 过滤区块类型的函数 + * 过滤Model菜单的函数 */ - filterBlocks?: (blockClass: ModelConstructor, className: string) => boolean; + filter?: (blockClass: ModelConstructor, className: string) => boolean; /** * 追加额外的菜单项到默认菜单中 */ @@ -80,7 +80,7 @@ export const AddBlockButton: React.FC = ({ children = , subModelType = 'array', items, - filterBlocks, + filter: filterBlocks, appendItems, onModelAdded, }) => { diff --git a/packages/core/flow-engine/src/components/subModel/AddFieldButton.tsx b/packages/core/flow-engine/src/components/subModel/AddFieldButton.tsx index e33a9ad053..1968002d78 100644 --- a/packages/core/flow-engine/src/components/subModel/AddFieldButton.tsx +++ b/packages/core/flow-engine/src/components/subModel/AddFieldButton.tsx @@ -42,6 +42,10 @@ export interface AddFieldButtonProps { * 显示的UI组件 */ children?: React.ReactNode; + /** + * 自定义 items(如果提供,将覆盖默认的字段菜单) + */ + items?: SubModelItemsType; } /** @@ -63,6 +67,7 @@ export const AddFieldButton: React.FC = ({ subModelType = 'array', collection, buildCreateModelOptions, + items, appendItems, onModelAdded, }) => { @@ -117,7 +122,7 @@ export const AddFieldButton: React.FC = ({ }; }, [model, subModelBaseClass, fields, buildCreateModelOptions]); - const items = useMemo(() => { + const fieldItems = useMemo(() => { return mergeSubModelItems([buildFieldItems, appendItems], { addDividers: true }); }, [buildFieldItems, appendItems]); @@ -126,7 +131,7 @@ export const AddFieldButton: React.FC = ({ model={model} subModelKey={subModelKey} subModelType={subModelType} - items={items} + items={items ?? fieldItems} onModelAdded={onModelAdded} > {children}