Skip to content

Commit 961eaf3

Browse files
committed
feat: 支持节点菜单函数类型 & 支持节点菜单样式
1 parent 4246939 commit 961eaf3

File tree

8 files changed

+34
-14
lines changed

8 files changed

+34
-14
lines changed

README.en-US.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ npm install react-monitor-dag
3535
| width | component width | <font color="c41d7f">number &#124; string</font> | - |
3636
| height | component height | <font color="c41d7f">number &#124; string </font> | - |
3737
| className | component className | <font color="c41d7f">string</font> | - |
38-
| nodeMenu | Node Right-click Menu Configuration | <font color="c41d7f">Array&#60; [menu](#menu-type)&#62; </font> | [ ] |
38+
| nodeMenu | Node Right-click Menu Configuration | <font color="c41d7f">Array&#60; [menu](#menu-type)&#62; &#124; (node) => Array&#60; [menu](#menu-type)&#62; </font> | - |
39+
| nodeMenuClassName | Node Right-click Menu classname | <font color="c41d7f">string</font> | - |
3940
| edgeMenu | Edge Right-click Menu Configuration | <font color="c41d7f">Array&#60; [menu]
4041
| groupMenu | Group Right-click Menu Configuration | <font color="c41d7f">Array&#60; [menu]
4142
(#menu-type)&#62; </font> | [ ] |

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ npm install react-monitor-dag
3535
| width | 组件宽度 | <font color="c41d7f">number &#124; string</font> | - |
3636
| height | 组件高度 | <font color="c41d7f">number &#124; string </font> | - |
3737
| className | 组件类名 | <font color="c41d7f">string</font> | - |
38-
| nodeMenu | 节点右键菜单配置 | <font color="c41d7f">Array&#60; [menu](#menu-type)&#62; </font> | [ ] |
38+
| nodeMenu | 节点右键菜单配置 | <font color="c41d7f">Array&#60; [menu](#menu-type)&#62; &#124; (node) => Array&#60; [menu](#menu-type)&#62;</font> | - |
39+
| nodeMenuClassName | 节点右键菜单样式 | string | - |
3940
| edgeMenu | 线段右键菜单配置 | <font color="c41d7f">Array&#60; [menu](#menu-type)&#62; </font> | [ ] |
4041
| config | 组件的画布配置,见[config Prop](#config) | <font color="c41d7f">any </font> | - |
4142
| polling | 组件的轮训属性配置,见[polling Prop](#polling) | <font color="c41d7f">object</font> | { } |

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-monitor-dag",
3-
"version": "1.0.15",
3+
"version": "1.0.16",
44
"description": "一个基于React的运维/监控DAG图",
55
"main": "dist/index.js",
66
"pack": "pack/index.js",

src/adaptor.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,18 @@ import * as _ from 'lodash';
2525

2626

2727
export let transformInitData = (info) => {
28-
let {data, config, nodeMenu, edgeMenu,groupMenu, registerStatus} = info;
28+
let {
29+
data, config, nodeMenu,
30+
edgeMenu,groupMenu, registerStatus,
31+
nodeMenuClassName
32+
} = info;
2933

3034
let nodes = (data.nodes || []).map((item) => {
3135
return _.assign(item, {
3236
_config: config,
3337
_menu: nodeMenu,
3438
_registerStatus: registerStatus,
39+
_nodeMenuClassName: nodeMenuClassName,
3540
Class: ScheduleNode
3641
});
3742
});

src/canvas/node.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as _ from 'lodash';
77
import * as ReactDOM from 'react-dom';
88
import RightMenuGen from './right-menu';
99
import { Tips } from 'butterfly-dag';
10-
10+
import getType from './../utils/getType';
1111
export default class ScheduleNode extends Node {
1212
constructor(opts) {
1313
super(opts);
@@ -164,12 +164,13 @@ export default class ScheduleNode extends Node {
164164
}
165165
// 生成右键菜单
166166
_createRightMenu() {
167-
let menus = _.get(this, 'options._menu', []);
168-
if (menus.length > 0) {
167+
let menus = _.get(this, 'options._menu');
168+
let nodeMenuClassName = _.get(this, 'options._nodeMenuClassName', '');
169+
if(['function', 'array'].includes(getType(menus))) {
169170
$(this.dom).contextmenu((e) => {
170171
e.preventDefault();
171172
e.stopPropagation();
172-
RightMenuGen(this.dom, 'node', [e.clientX, e.clientY], menus, this.options);
173+
RightMenuGen(this.dom, 'node', [e.clientX, e.clientY], menus, this.options, nodeMenuClassName);
173174
this.emit('custom.node.rightClick', {
174175
node: this
175176
});

src/canvas/right-menu.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
'use strict';
22
import $ from 'jquery';
33
import * as ReactDOM from 'react-dom';
4+
import getType from '../utils/getType';
45

56
const Tips = require('butterfly-dag').Tips;
67

7-
let _genTipDom = (menuData, data) => {
8+
let _genTipDom = (menu, data) => {
89
let dom = $('<div class="menu-container"></div>');
10+
let menuType = getType(menu);
11+
let menuData = menuType === 'function' ? menu(data) : menu;
912
menuData.forEach((item) => {
1013
let menuItem = $('<div class="menu-item"></div>');
1114
if (item.onClick) {
@@ -26,15 +29,15 @@ let _genTipDom = (menuData, data) => {
2629
return dom[0]
2730
}
2831

29-
export default (container, type, pos, menuData, data) => {
32+
export default (container, type, pos, menu, data, classname = '') => {
3033
Tips.createMenu({
31-
className: `butterfly-${type}-monitor-menu`,
34+
className: `butterfly-${type}-monitor-menu ${classname}`,
3235
targetDom: container,
33-
genTipDom: () => { return _genTipDom(menuData, data) },
36+
genTipDom: () => { return _genTipDom(menu, data) },
3437
placement: 'right',
3538
action: null,
3639
x: pos[0],
3740
y: pos[1],
3841
closable: true
3942
});
40-
}
43+
}

src/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ interface ComProps {
5959
width?: number | string, // 组件宽
6060
height?: number | string, // 组件高
6161
className?: string, // 组件classname
62-
nodeMenu: Array<menu>, // 节点右键菜单配置
62+
nodeMenu: Array<menu> | ((node) => Array<menu>), // 节点右键菜单配置
63+
nodeMenuClassName?: string, // 节点菜单样式
6364
edgeMenu: Array<menu>, // 线段右键菜单配置
6465
groupMenu: Array<menu>, // group右键配置
6566
config?: config, // 画布配置
@@ -139,6 +140,7 @@ export default class MonitorDag extends React.Component<ComProps, any> {
139140
nodeMenu: this.props.nodeMenu,
140141
edgeMenu: this.props.edgeMenu,
141142
groupMenu: this.props.groupMenu,
143+
nodeMenuClassName: this.props.nodeMenuClassName,
142144
data: _.cloneDeep(this.props.data || {nodes: [], edges: [], groups: []}),
143145
registerStatus: _.cloneDeep(this.props.registerStatus)
144146
});

src/utils/getType.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const originToString = Object.prototype.toString;
2+
const getType = (data) => {
3+
let type = originToString.call(data);
4+
return type.match(/\[object (.*?)\]/)[1].toLowerCase();
5+
};
6+
7+
export default getType;

0 commit comments

Comments
 (0)