(menus: (IPublicTypeContextMenuAction | Omit<IPublicTypeContextMenuAction, 'items'>)[], options: IOptions & {
event?: MouseEvent;
}, level = 1)
| 122 | } |
| 123 | |
| 124 | export function parseContextMenuProperties(menus: (IPublicTypeContextMenuAction | Omit<IPublicTypeContextMenuAction, 'items'>)[], options: IOptions & { |
| 125 | event?: MouseEvent; |
| 126 | }, level = 1): IPublicTypeContextMenuItem[] { |
| 127 | destroyFn?.(); |
| 128 | |
| 129 | const { nodes, destroy } = options; |
| 130 | if (level > MAX_LEVEL) { |
| 131 | logger.warn('context menu level is too deep, please check your context menu config'); |
| 132 | return []; |
| 133 | } |
| 134 | |
| 135 | return menus |
| 136 | .filter(menu => !menu.condition || (menu.condition && menu.condition(nodes || []))) |
| 137 | .map((menu) => { |
| 138 | const { |
| 139 | name, |
| 140 | title, |
| 141 | type = IPublicEnumContextMenuType.MENU_ITEM, |
| 142 | help, |
| 143 | } = menu; |
| 144 | |
| 145 | const result: IPublicTypeContextMenuItem = { |
| 146 | name, |
| 147 | title, |
| 148 | type, |
| 149 | help, |
| 150 | action: () => { |
| 151 | destroy?.(); |
| 152 | menu.action?.(nodes || [], options.event); |
| 153 | }, |
| 154 | disabled: menu.disabled && menu.disabled(nodes || []) || false, |
| 155 | }; |
| 156 | |
| 157 | if ('items' in menu && menu.items) { |
| 158 | result.items = parseContextMenuProperties( |
| 159 | typeof menu.items === 'function' ? menu.items(nodes || []) : menu.items, |
| 160 | options, |
| 161 | level + 1, |
| 162 | ); |
| 163 | } |
| 164 | |
| 165 | return result; |
| 166 | }) |
| 167 | .reduce((menus: IPublicTypeContextMenuItem[], currentMenu: IPublicTypeContextMenuItem) => { |
| 168 | if (!currentMenu.name) { |
| 169 | return menus.concat([currentMenu]); |
| 170 | } |
| 171 | |
| 172 | const index = menus.find(item => item.name === currentMenu.name); |
| 173 | if (!index) { |
| 174 | return menus.concat([currentMenu]); |
| 175 | } else { |
| 176 | return menus; |
| 177 | } |
| 178 | }, []); |
| 179 | } |
| 180 | |
| 181 | let cachedMenuItemHeight: string | undefined; |
no test coverage detected
searching dependent graphs…