import G6 from '@antv/g6'; // , { G6GraphEvent, IG6GraphEvent } import Menu from '../../src/menu'; const div = document.createElement('div'); div.id = 'menu'; document.body.appendChild(div); describe('menu', () => { it('menu with default', () => { const menu = new Menu({ handleMenuClick: (target, item) => {}, }); const graph = new G6.Graph({ container: div, width: 500, height: 500, plugins: [menu], modes: { default: ['drag-node', 'zoom-canvas', 'drag-canvas'], }, }); const data = { nodes: [ { id: 'node1', label: 'node1', x: 100, y: 100, }, ], }; graph.data(data); graph.render(); graph.destroy(); }); it('menu with dom', () => { const menu = new Menu({ getContent(e) { const outDiv = document.createElement('div'); outDiv.style.width = '180px'; outDiv.innerHTML = ``; return outDiv; }, className: 'g6-custom-menu', }); const graph = new G6.Graph({ container: div, width: 500, height: 500, plugins: [menu], modes: { default: ['drag-node', 'zoom-canvas', 'drag-canvas'], }, }); const data = { nodes: [ { id: 'node1', label: 'node1', x: 100, y: 100, }, ], }; graph.data(data); graph.render(); graph.destroy(); }); it('menu with string', () => { const menu = new Menu({ getContent(evt) { return ``; }, className: 'menu-string-test', handleMenuClick(target, item) { // console.log(target, item); }, }); const graph = new G6.Graph({ container: div, width: 500, height: 500, plugins: [menu], modes: { default: ['drag-node', 'zoom-canvas', 'drag-canvas'], }, }); const data = { nodes: [ { id: 'node1', label: 'node1', x: 100, y: 100, }, ], }; graph.data(data); graph.render(); // const event = new G6GraphEvent('contextmenu', { // item: graph.getNodes()[0], // canvasX: 100, // canvasY: 100, // bubbles: false, // } as IG6GraphEvent); const event = { type: 'contextmenu', item: graph.getNodes()[0], canvasX: 100, canvasY: 100, bubbles: false, preventDefault: () => {}, stopPropagation: () => {}, }; graph.emit('contextmenu', event); // getElementsByClassName only returns HTMLCollection const menuDOM = (document.getElementsByClassName( 'menu-string-test', ) as HTMLCollectionOf)[0]; expect(menuDOM.style.visibility).toEqual('visible'); graph.destroy(); }); it('menu with false shouldBegin', () => { let menuDOM = (document.getElementsByClassName( 'g6-component-contextmenu', ) as HTMLCollectionOf)[0]; if (menuDOM) menuDOM.remove(); const menu = new Menu({ getContent(evt) { return `
  • 测试02
  • 测试02
  • 测试02
  • 测试02
  • 测试02
`; }, shouldBegin(e) { // console.log('shouldBegin', e.item, e.item.getID() === 'node1') if (e.item.getID() === 'node1') return false; return true; }, className: 'menu-should-begin-false', }); const graph = new G6.Graph({ container: div, width: 500, height: 500, plugins: [menu], modes: { default: ['drag-node', 'zoom-canvas', 'drag-canvas'], }, }); const data = { nodes: [ { id: 'node0', label: 'node0', x: 100, y: 100, }, { id: 'node1', label: 'node1', x: 100, y: 200, }, ], }; graph.data(data); graph.render(); // const event = new G6GraphEvent('contextmenu', { // item: graph.getNodes()[1], // canvasX: 100, // canvasY: 100, // bubbles: false, // } as IG6GraphEvent); const event = { type: 'contextmenu', item: graph.getNodes()[1], canvasX: 100, canvasY: 100, bubbles: false, preventDefault: () => {}, stopPropagation: () => {}, }; graph.emit('contextmenu', event); menuDOM = (document.getElementsByClassName( 'menu-should-begin-false', ) as HTMLCollectionOf)[0]; expect(menuDOM.style.visibility).toEqual('hidden'); // const event2 = new G6GraphEvent('contextmenu', { // item: graph.getNodes()[0], // canvasX: 100, // canvasY: 100, // bubbles: false, // } as IG6GraphEvent); const event2 = { type: 'contextmenu', item: graph.getNodes()[0], canvasX: 100, canvasY: 100, bubbles: false, preventDefault: () => {}, stopPropagation: () => {}, }; graph.emit('contextmenu', event2); menuDOM = (document.getElementsByClassName( 'menu-should-begin-false', ) as HTMLCollectionOf)[0]; expect(menuDOM.style.visibility).toEqual('visible'); graph.destroy(); }); it('click trigger', () => { const menu = new Menu({ handleMenuClick: (target, item) => {}, trigger: 'click', className: 'menu-click', }); const graph = new G6.Graph({ container: div, width: 500, height: 500, plugins: [menu], modes: { default: ['drag-node', 'zoom-canvas', 'drag-canvas'], }, }); const data = { nodes: [ { id: 'node1', label: 'node1', x: 100, y: 100, }, ], }; graph.data(data); graph.render(); const event = { type: 'node:click', item: graph.getNodes()[0], canvasX: 100, canvasY: 100, bubbles: false, preventDefault: () => {}, stopPropagation: () => {}, }; graph.emit('click', event); let menuDOM = (document.getElementsByClassName( 'menu-click', ) as HTMLCollectionOf)[0]; expect(menuDOM.style.visibility).toEqual('visible'); graph.emit('click', { type: 'click', canvasX: 100, canvasY: 100, bubbles: false, preventDefault: () => {}, stopPropagation: () => {}, }); menuDOM = (document.getElementsByClassName( 'menu-click', ) as HTMLCollectionOf)[0]; expect(menuDOM.style.visibility).toEqual('hidden'); graph.destroy(); }); });