Unverified 提交 adff788d 作者: Netfan 提交者: GitHub

perf(tree): improve the beforeRightClick callback to support more configuration of the menu (#608)

上级 d34467d3
...@@ -23,11 +23,12 @@ ...@@ -23,11 +23,12 @@
import { filter } from '/@/utils/helper/treeHelper'; import { filter } from '/@/utils/helper/treeHelper';
import { useTree } from './useTree'; import { useTree } from './useTree';
import { useContextMenu, ContextMenuItem } from '/@/hooks/web/useContextMenu'; import { useContextMenu } from '/@/hooks/web/useContextMenu';
import { useExpose } from '/@/hooks/core/useExpose'; import { useExpose } from '/@/hooks/core/useExpose';
import { useDesign } from '/@/hooks/web/useDesign'; import { useDesign } from '/@/hooks/web/useDesign';
import { basicProps } from './props'; import { basicProps } from './props';
import { CreateContextOptions } from '/@/components/ContextMenu';
interface State { interface State {
expandedKeys: Keys; expandedKeys: Keys;
...@@ -128,18 +129,20 @@ ...@@ -128,18 +129,20 @@
async function handleRightClick({ event, node }: Recordable) { async function handleRightClick({ event, node }: Recordable) {
const { rightMenuList: menuList = [], beforeRightClick } = props; const { rightMenuList: menuList = [], beforeRightClick } = props;
let rightMenuList: ContextMenuItem[] = []; let contextMenuOptions: CreateContextOptions = { event, items: [] };
if (beforeRightClick && isFunction(beforeRightClick)) { if (beforeRightClick && isFunction(beforeRightClick)) {
rightMenuList = await beforeRightClick(node); let result = await beforeRightClick(node, event);
if (Array.isArray(result)) {
contextMenuOptions.items = result;
} else {
Object.assign(contextMenuOptions, result);
}
} else { } else {
rightMenuList = menuList; contextMenuOptions.items = menuList;
} }
if (!rightMenuList.length) return; if (!contextMenuOptions.items?.length) return;
createContextMenu({ createContextMenu(contextMenuOptions);
event,
items: rightMenuList,
});
} }
function setExpandedKeys(keys: Keys) { function setExpandedKeys(keys: Keys) {
......
import type { PropType } from 'vue'; import type { PropType } from 'vue';
import type { ReplaceFields, ActionItem, Keys, CheckKeys } from './types'; import type { ReplaceFields, ActionItem, Keys, CheckKeys, ContextMenuOptions } from './types';
import type { ContextMenuItem } from '/@/hooks/web/useContextMenu'; import type { ContextMenuItem } from '/@/hooks/web/useContextMenu';
import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
import { propTypes } from '/@/utils/propTypes'; import { propTypes } from '/@/utils/propTypes';
...@@ -53,7 +53,7 @@ export const basicProps = { ...@@ -53,7 +53,7 @@ export const basicProps = {
}, },
beforeRightClick: { beforeRightClick: {
type: Function as PropType<(...arg: any) => ContextMenuItem[]>, type: Function as PropType<(...arg: any) => ContextMenuItem[] | ContextMenuOptions>,
default: null, default: null,
}, },
......
import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
import { ContextMenuItem } from '/@/hooks/web/useContextMenu';
export interface ActionItem { export interface ActionItem {
render: (record: Recordable) => any; render: (record: Recordable) => any;
show?: boolean | ((record: Recordable) => boolean); show?: boolean | ((record: Recordable) => boolean);
...@@ -40,3 +41,9 @@ export interface InsertNodeParams { ...@@ -40,3 +41,9 @@ export interface InsertNodeParams {
list?: TreeDataItem[]; list?: TreeDataItem[];
push?: 'push' | 'unshift'; push?: 'push' | 'unshift';
} }
export interface ContextMenuOptions {
icon?: string;
styles?: any;
items?: ContextMenuItem[];
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论