nope/resources/ui/graph/defaults/default.context-menu.ts

134 lines
3.9 KiB
TypeScript
Raw Normal View History

2020-10-25 20:14:51 +00:00
/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2020-04-09 08:50:11
2020-10-29 18:20:42 +00:00
* @modify date 2020-10-29 12:07:56
2020-10-25 20:14:51 +00:00
* @desc [description]
*/
2020-10-29 18:20:42 +00:00
import { IRigthClickActions } from '../../layout/layout';
2020-10-25 20:14:51 +00:00
import { clusterSelected } from '../addons/cluster.selected';
2020-10-29 18:20:42 +00:00
import { IContextConfig } from '../editor';
2020-10-25 20:14:51 +00:00
import { IBaseEdgeOptions } from '../interfaces/IBaseEdgeOptions';
2020-10-29 18:20:42 +00:00
import { IBaseNodeOptions } from '../interfaces/IBaseNodeOptions';
import { ICallbackData } from '../interfaces/IGraphTool';
2020-10-25 20:14:51 +00:00
export type rigthClickActions = Array<{
label?: string;
onClick?: (event?: any) => void;
divider?: boolean
}>;
export type mousePosition = {
x: number,
y: number
}
export type rightClickActionGenerator = (component?: any, event?: mousePosition) => rigthClickActions;
export function generateDefaulContextMenu<N extends IBaseNodeOptions, E extends IBaseEdgeOptions, D extends ICallbackData<N,E>>() {
2020-10-29 18:20:42 +00:00
const contextMenuGenerator: IContextConfig<D> = {
background: (network) => {
2020-10-25 20:14:51 +00:00
const ret:IRigthClickActions<ICallbackData<N,E>> = [];
ret.push(
{
label: 'Fit Graph',
2020-10-29 18:20:42 +00:00
onClick: () => network.network.fit()
2020-10-25 20:14:51 +00:00
},
{
label: 'Paste Element',
onClick: async () => {
try{
2020-10-29 18:20:42 +00:00
2020-10-25 20:14:51 +00:00
} catch (e) {
}
}
},
);
return ret;
},
2020-10-29 18:20:42 +00:00
edge: (network, position) => {
2020-10-25 20:14:51 +00:00
return [
{
label: 'Delete Selection',
2020-10-29 18:20:42 +00:00
onClick: () => network.network.deleteSelected()
2020-10-25 20:14:51 +00:00
}
];
},
2020-10-29 18:20:42 +00:00
node: (network, position) => {
2020-10-25 20:14:51 +00:00
const ret: IRigthClickActions<ICallbackData<N,E>> = [];
2020-10-29 18:20:42 +00:00
if (network.network.isCluster(network.network.getSelectedNodes()[0])) {
const id = network.network.getSelectedNodes()[0];
2020-10-25 20:14:51 +00:00
ret.push(
{
label: 'open cluster',
onClick() {
2020-10-29 18:20:42 +00:00
network.network.openCluster(id);
2020-10-25 20:14:51 +00:00
}
},
);
}
ret.push(
{
label: 'compress',
onClick() {
2020-10-29 18:20:42 +00:00
clusterSelected(network)
2020-10-25 20:14:51 +00:00
}
},
{
label: 'copy',
onClick() {
2020-10-29 18:20:42 +00:00
// copySelectionToClipboard();
2020-10-25 20:14:51 +00:00
}
},
{
label: 'delete',
2020-10-29 18:20:42 +00:00
onClick: () => network.network.deleteSelected()
2020-10-25 20:14:51 +00:00
},
{
label: 'edit',
onClick() {
console.log('not implemented');
}
}
);
return ret;
},
2020-10-29 18:20:42 +00:00
default: (network) => {
2020-10-25 20:14:51 +00:00
const menu = [];
2020-10-29 18:20:42 +00:00
if (network.network.getSelectedNodes().length > 0) {
2020-10-25 20:14:51 +00:00
menu.push(
{
label: 'cluster selected',
onClick() {
2020-10-29 18:20:42 +00:00
clusterSelected(network, false);
2020-10-25 20:14:51 +00:00
}
},
{
divider: true,
},
{
label: 'copy selected',
onClick() {
2020-10-29 18:20:42 +00:00
// component.copySelectionToClipboard();
2020-10-25 20:14:51 +00:00
}
}
);
}
menu.push({
label: 'delete selected',
2020-10-29 18:20:42 +00:00
onClick: () => network.network.deleteSelected()
2020-10-25 20:14:51 +00:00
});
return menu;
}
}
return contextMenuGenerator;
}