diff --git a/frappe/public/js/workflow_builder/WorkflowBuilder.vue b/frappe/public/js/workflow_builder/WorkflowBuilder.vue
index d656fbcea3..298213eced 100644
--- a/frappe/public/js/workflow_builder/WorkflowBuilder.vue
+++ b/frappe/public/js/workflow_builder/WorkflowBuilder.vue
@@ -7,8 +7,8 @@ import ActionNode from "./components/ActionNode.vue";
import ConnectionLine from "./components/ConnectionLine.vue";
import Sidebar from "./components/Sidebar.vue";
import { useStore } from "./store";
-import { ref, nextTick, onMounted, watch } from "vue";
-import { onClickOutside, useMagicKeys, whenever } from "@vueuse/core";
+import { ref, computed, nextTick, onMounted, watch } from "vue";
+import { onClickOutside, useMagicKeys, whenever, useActiveElement } from "@vueuse/core";
let store = useStore();
@@ -24,6 +24,7 @@ const {
addEdges,
setEdges,
updateEdge,
+ removeNodes,
onPaneReady,
fitView,
zoomIn,
@@ -39,7 +40,7 @@ onClickOutside(main, () => {
});
// cmd/ctrl + s to save the form
-const { meta_s, ctrl_s } = useMagicKeys();
+const { meta_s, ctrl_s, Backspace, meta_backspace, ctrl_backspace } = useMagicKeys();
whenever(
() => meta_s.value || ctrl_s.value,
() => {
@@ -47,6 +48,40 @@ whenever(
}
);
+const activeElement = useActiveElement();
+const notUsingInput = computed(
+ () => activeElement.value?.tagName !== "INPUT" && activeElement.value?.tagName !== "TEXTAREA"
+);
+
+whenever(
+ () => Backspace.value || meta_backspace.value || ctrl_backspace.value,
+ () => {
+ if (meta_backspace.value || ctrl_backspace.value) return;
+ if (store.workflow.selected) {
+ if (
+ notUsingInput.value &&
+ (store.workflow.selected.type === "state" || store.workflow.selected.type === "action")
+ ) {
+ removeNodes([store.workflow.selected.id]);
+ if (store.workflow.selected.data?.state) {
+ let connected_nodes = [];
+ connected_nodes = nodes.value
+ .filter(
+ node =>
+ node.data.from == store.workflow.selected.data.state ||
+ node.data.to == store.workflow.selected.data.state
+ )
+ .map(node => node.id);
+ removeNodes(connected_nodes);
+ }
+ store.workflow.selected = null;
+ nextTick(() => store.ref_history.commit());
+ }
+ }
+ }
+);
+
+
onNodeDragStop(() => {
nextTick(() => store.ref_history.commit());
});
@@ -208,6 +243,7 @@ onMounted(() => store.fetch());
v-model="store.workflow.elements"
connection-mode="loose"
@dragover="onDragOver"
+ :delete-key-code="null"
>