Show hide context menu in Vue Diagram component
17 Mar 20238 minutes to read
In the diagram, you can create the customized context menu. Refer to the contextmenu
for further references.
Step1
To add the [customized context menu
] (./context-menu#), define the customized context menu as shown as follows.
<template>
<div id="app">
<ejs-diagram id="diagram">
</ejs-diagram>
</div>
</template>
//Defining customized context menu
contextMenuSettings: {
show: true,
items: [{
text: 'Apple',
id: 'apple',
},
{
text: 'Carrot',
id: 'carrot'
}
],
// Hides the default context menu items and shows only the custom menu
showCustomMenuOnly: true,
};
Step2
To load separate customized menu for each nodes, define the hidden ID of the context menu as shown as follows.
// ...
// ...
// Defining the hidden Id for hiding the unwanted context menu item and displays the needed one
let hiddenId = [];
hiddenId = ['apple', 'carrot'];
// ...
// ...
let diagram = this.$refs.diagram.ej2Instances
if (diagram.selectedItems.nodes.length) {
//From the hiddenId getting the needed context menu items
if (diagram.selectedItems.nodes[0].id === "Fruit") {
hiddenId.splice(hiddenId.indexOf('apple'),1);
// ...
// ...
}
// ...
// ...
}
args.hiddenItems = hiddenId;
Refer to the following code sample for creating customized context menu with hiding the context menu item option.
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes' :contextMenuSettings='contextMenuSettings' :contextMenuOpen="contextMenuOpen"></ejs-diagram>
</div>
</template>
<script>
import Vue from 'vue';
import { DiagramPlugin,DiagramContextMenu,Diagram,DiagramBeforeMenuOpenEventArgs } from '@syncfusion/ej2-vue-diagrams';
Diagram.Inject(DiagramContextMenu);
Vue.use(DiagramPlugin);
let nodes = [{
id: 'Fruit', width: 100, height: 100, offsetX: 300, offsetY: 300, shape: {type: 'Basic', shape: 'Ellipse'}, style: {fill: '#6BA5D7', strokeColor: 'white'},
annotations: [{ id: 'label1', content: 'Fruits' }]
},
{
id: 'Vegetable', width: 100, height: 100, offsetX: 200, offsetY: 200, shape: {type: 'Basic', shape: 'Ellipse'}, style: {fill: '#6BA5D7', strokeColor: 'white'},
annotations: [{ id: 'label2', content: 'Vegetables' }]
}
];
function contextMenuOpen(args) {
let hiddenId = [];
let obj = document.getElementById("diagram");
let diagram = obj.ej2_instances[0];
if (args.element.className !== 'e-menu-parent e-ul ') {
hiddenId = ['apple', 'carrot', 'orange', 'radish', 'mango', 'cabbage'];
}
if (diagram.selectedItems.nodes.length) {
if (diagram.selectedItems.nodes[0].id === "Fruit") {
hiddenId.splice(hiddenId.indexOf('apple'),1);
hiddenId.splice(hiddenId.indexOf('orange'),1);
hiddenId.splice(hiddenId.indexOf('mango'),1);
}
if (diagram.selectedItems.nodes[0].id === "Vegetable") {
hiddenId.splice(hiddenId.indexOf('carrot'),1);
hiddenId.splice(hiddenId.indexOf('radish'),1);
hiddenId.splice(hiddenId.indexOf('cabbage'),1);
}
}
args.hiddenItems = hiddenId;
}
export default {
name: 'app',
data() {
return {
width: "100%",
height: "350px",
nodes: nodes,
contextMenuOpen: contextMenuOpen,
contextMenuSettings: {
//Enables the context menu
show: true,
// Defines the custom context menu items
items: [{
text: 'Apple',
id: 'apple',
},
{
text: 'Carrot',
id: 'carrot'
},
{
text: 'Orange',
id: 'orange'
},
{
text: 'Radish',
id: 'radish'
},
{
text: 'Mango',
id: 'mango'
},
{
text: 'Cabbage',
id: 'cabbage'
}
],
// Hides the default context menu items
showCustomMenuOnly: true,
}
}
}
}
</script>
<style>
@import "../../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>