feat(editor): Add duplicate and copy/paste to canvas v2 (no-changelog) (#10112)

This commit is contained in:
Elias Meire
2024-07-19 14:49:52 +02:00
committed by GitHub
parent fc4184773a
commit 2e5c548452
9 changed files with 400 additions and 42 deletions

View File

@@ -15,6 +15,7 @@ import { useKeybindings } from '@/composables/useKeybindings';
import ContextMenu from '@/components/ContextMenu/ContextMenu.vue';
import type { NodeCreatorOpenSource } from '@/Interface';
import type { PinDataSource } from '@/composables/usePinnedData';
import { isPresent } from '@/utils/typesUtils';
const $style = useCssModule();
@@ -75,6 +76,7 @@ const {
project,
nodes: graphNodes,
onPaneReady,
findNode,
} = useVueFlow({ id: props.id, deleteKeyCode: null });
useKeybindings({
@@ -131,11 +133,20 @@ function onSetNodeActive(id: string) {
emit('update:node:active', id);
}
function clearSelectedNodes() {
removeSelectedNodes(selectedNodes.value);
}
function onSelectNode() {
if (!lastSelectedNode.value) return;
emit('update:node:selected', lastSelectedNode.value.id);
}
function onSelectNodes(ids: string[]) {
clearSelectedNodes();
addSelectedNodes(ids.map(findNode).filter(isPresent));
}
function onToggleNodeEnabled(id: string) {
emit('update:node:enabled', id);
}
@@ -288,7 +299,7 @@ function onContextMenuAction(action: ContextMenuAction, nodeIds: string[]) {
case 'select_all':
return addSelectedNodes(graphNodes.value);
case 'deselect_all':
return removeSelectedNodes(selectedNodes.value);
return clearSelectedNodes();
case 'duplicate':
return emit('duplicate:nodes', nodeIds);
case 'toggle_pin':
@@ -310,10 +321,12 @@ function onContextMenuAction(action: ContextMenuAction, nodeIds: string[]) {
onMounted(() => {
props.eventBus.on('fitView', onFitView);
props.eventBus.on('selectNodes', onSelectNodes);
});
onUnmounted(() => {
props.eventBus.off('fitView', onFitView);
props.eventBus.off('selectNodes', onSelectNodes);
});
onPaneReady(async () => {