import { throttle } from '@ibizstudio/runtime'; import { IPSDETBUIActionItem } from '@ibizstudio/runtime'; import { ContextMenuBase } from '../../../widgets/contextmenu-base'; /** * 上下文菜单部件基类 * * @export * @class AppContextMenuBase * @extends {ContextMenuBase} */ export class AppContextMenuBase extends ContextMenuBase { /** * 菜单项点击 * * @memberof AppContextMenuBase */ itemClick({ tag }: any) { this.ctrlEvent({ controlname: this.controlInstance.name, action: 'contextMenuItemClick', data: tag }); } /** * 判断类型 * * @param {*} item * @memberof AppContextMenuBase */ renderToolbarItems(item: any) { if (item.itemType === 'DEUIACTION') { return this.renderUIAction(item); } else if (item.itemType === 'SEPERATOR') { return ; } else if (item.itemType === 'ITEMS') { return this.renderItem(item); } else if (item.itemType === 'RAWITEM') { return {item.rawContent}; } } /** * 绘制菜单项 * * @param {*} item * @memberof AppContextMenuBase */ renderItem(item: any) { return ( {this.renderItemIcon(item)} {item.showCaption ? item.caption : ''} {item.getPSDEToolbarItems && item.getPSDEToolbarItems.length > 0 ? item.getPSDEToolbarItems.map((toolbarItem: any) => { return this.renderToolbarItems(toolbarItem); }) : null} ); } /** * 绘制界面行为项 * * @param {*} item * @memberof AppContextMenuBase */ renderUIAction(item: any) { let visible = this.contextMenuActionModel[item.name] ? this.contextMenuActionModel[item.name]?.visabled : true; let disabled = this.contextMenuActionModel[item.name] ? this.contextMenuActionModel[item.name]?.disabled : false; return ( {this.renderItemIcon(item)} {item.showCaption ? item.caption : ''} ); } /** * 绘制图标 * * @param item * @memberof AppContextMenuBase */ renderItemIcon(item: IPSDETBUIActionItem) { if (item.showIcon && item.getPSSysImage()) { let img = item.getPSSysImage(); if (img && img.cssClass) { return ; } } } /** * 绘制 * * @memberof AppContextMenuBase */ render() { if (!this.controlIsLoaded) { return null; } const { controlClassNames } = this.renderOptions; const getPSDEToolbarItems = this.controlInstance.getPSDEToolbarItems() || []; return ( throttle(this.itemClick, [{ tag: $event }], this)}> {getPSDEToolbarItems?.map((item: any) => { return this.renderToolbarItems(item); })} ); } }