diff --git a/core/gui/src/app/workspace/component/menu/menu.component.html b/core/gui/src/app/workspace/component/menu/menu.component.html index c7c486ae284..e212169321f 100644 --- a/core/gui/src/app/workspace/component/menu/menu.component.html +++ b/core/gui/src/app/workspace/component/menu/menu.component.html @@ -291,22 +291,22 @@ nzType="database" nzTheme="twotone"> - - + + + + + + + + + + + + + + + + diff --git a/core/gui/src/app/workspace/component/workflow-editor/workflow-editor.component.spec.ts b/core/gui/src/app/workspace/component/workflow-editor/workflow-editor.component.spec.ts index 161d217fd86..40574b0f7ef 100644 --- a/core/gui/src/app/workspace/component/workflow-editor/workflow-editor.component.spec.ts +++ b/core/gui/src/app/workspace/component/workflow-editor/workflow-editor.component.spec.ts @@ -897,54 +897,56 @@ describe("WorkflowEditorComponent", () => { expect(jointGraphWrapper.getCurrentHighlightedOperatorIDs()).toContain(mockResultPredicate.operatorID); }); - //undo - it("should undo action when user presses command + Z or control + Z", () => { - spyOn(workflowVersionService, "getDisplayParticularVersionStream").and.returnValue(of(false)); - spyOn(undoRedoService, "canUndo").and.returnValue(true); - let undoSpy = spyOn(undoRedoService, "undoAction"); - fixture.detectChanges(); - const commandZEvent = new KeyboardEvent("keydown", { key: "Z", metaKey: true, shiftKey: false }); - (document.activeElement as HTMLElement)?.blur(); - document.dispatchEvent(commandZEvent); - fixture.detectChanges(); - expect(undoSpy).toHaveBeenCalledTimes(1); - - const controlZEvent = new KeyboardEvent("keydown", { key: "Z", ctrlKey: true, shiftKey: false }); - (document.activeElement as HTMLElement)?.blur(); - document.dispatchEvent(controlZEvent); - fixture.detectChanges(); - expect(undoSpy).toHaveBeenCalledTimes(2); - }); - - //redo - it("should redo action when user presses command/control + Y or command/control + shift + Z", () => { - spyOn(workflowVersionService, "getDisplayParticularVersionStream").and.returnValue(of(false)); - spyOn(undoRedoService, "canRedo").and.returnValue(true); - let redoSpy = spyOn(undoRedoService, "redoAction"); - fixture.detectChanges(); - const commandYEvent = new KeyboardEvent("keydown", { key: "y", metaKey: true, shiftKey: false }); - (document.activeElement as HTMLElement)?.blur(); - document.dispatchEvent(commandYEvent); - fixture.detectChanges(); - expect(redoSpy).toHaveBeenCalledTimes(1); - - const controlYEvent = new KeyboardEvent("keydown", { key: "y", ctrlKey: true, shiftKey: false }); - (document.activeElement as HTMLElement)?.blur(); - document.dispatchEvent(controlYEvent); - fixture.detectChanges(); - expect(redoSpy).toHaveBeenCalledTimes(2); - - const commandShitZEvent = new KeyboardEvent("keydown", { key: "z", metaKey: true, shiftKey: true }); - (document.activeElement as HTMLElement)?.blur(); - document.dispatchEvent(commandShitZEvent); - fixture.detectChanges(); - expect(redoSpy).toHaveBeenCalledTimes(3); - - const controlShitZEvent = new KeyboardEvent("keydown", { key: "z", ctrlKey: true, shiftKey: true }); - (document.activeElement as HTMLElement)?.blur(); - document.dispatchEvent(controlShitZEvent); - fixture.detectChanges(); - expect(redoSpy).toHaveBeenCalledTimes(4); - }); + // Temporarily disabling undo-redo because of a bug that can cause invalid workflow structures. + // TODO: enable after fixing the bug. + // //undo + // it("should undo action when user presses command + Z or control + Z", () => { + // spyOn(workflowVersionService, "getDisplayParticularVersionStream").and.returnValue(of(false)); + // spyOn(undoRedoService, "canUndo").and.returnValue(true); + // let undoSpy = spyOn(undoRedoService, "undoAction"); + // fixture.detectChanges(); + // const commandZEvent = new KeyboardEvent("keydown", { key: "Z", metaKey: true, shiftKey: false }); + // (document.activeElement as HTMLElement)?.blur(); + // document.dispatchEvent(commandZEvent); + // fixture.detectChanges(); + // expect(undoSpy).toHaveBeenCalledTimes(1); + // + // const controlZEvent = new KeyboardEvent("keydown", { key: "Z", ctrlKey: true, shiftKey: false }); + // (document.activeElement as HTMLElement)?.blur(); + // document.dispatchEvent(controlZEvent); + // fixture.detectChanges(); + // expect(undoSpy).toHaveBeenCalledTimes(2); + // }); + // + // //redo + // it("should redo action when user presses command/control + Y or command/control + shift + Z", () => { + // spyOn(workflowVersionService, "getDisplayParticularVersionStream").and.returnValue(of(false)); + // spyOn(undoRedoService, "canRedo").and.returnValue(true); + // let redoSpy = spyOn(undoRedoService, "redoAction"); + // fixture.detectChanges(); + // const commandYEvent = new KeyboardEvent("keydown", { key: "y", metaKey: true, shiftKey: false }); + // (document.activeElement as HTMLElement)?.blur(); + // document.dispatchEvent(commandYEvent); + // fixture.detectChanges(); + // expect(redoSpy).toHaveBeenCalledTimes(1); + // + // const controlYEvent = new KeyboardEvent("keydown", { key: "y", ctrlKey: true, shiftKey: false }); + // (document.activeElement as HTMLElement)?.blur(); + // document.dispatchEvent(controlYEvent); + // fixture.detectChanges(); + // expect(redoSpy).toHaveBeenCalledTimes(2); + // + // const commandShitZEvent = new KeyboardEvent("keydown", { key: "z", metaKey: true, shiftKey: true }); + // (document.activeElement as HTMLElement)?.blur(); + // document.dispatchEvent(commandShitZEvent); + // fixture.detectChanges(); + // expect(redoSpy).toHaveBeenCalledTimes(3); + // + // const controlShitZEvent = new KeyboardEvent("keydown", { key: "z", ctrlKey: true, shiftKey: true }); + // (document.activeElement as HTMLElement)?.blur(); + // document.dispatchEvent(controlShitZEvent); + // fixture.detectChanges(); + // expect(redoSpy).toHaveBeenCalledTimes(4); + // }); }); }); diff --git a/core/gui/src/app/workspace/component/workflow-editor/workflow-editor.component.ts b/core/gui/src/app/workspace/component/workflow-editor/workflow-editor.component.ts index ac241952167..3275291b4bc 100644 --- a/core/gui/src/app/workspace/component/workflow-editor/workflow-editor.component.ts +++ b/core/gui/src/app/workspace/component/workflow-editor/workflow-editor.component.ts @@ -182,21 +182,23 @@ export class WorkflowEditorComponent implements AfterViewInit, OnDestroy { .pipe(takeUntil(this._onProcessKeyboardActionObservable)) .subscribe(displayParticularWorkflowVersion => { if (!displayParticularWorkflowVersion) { - // cmd/ctrl+z undo ; ctrl+y or cmd/ctrl + shift+z for redo - if ((event.metaKey || event.ctrlKey) && !event.shiftKey && event.key.toLowerCase() === "z") { - // UNDO - if (this.undoRedoService.canUndo()) { - this.undoRedoService.undoAction(); - } - } else if ( - ((event.metaKey || event.ctrlKey) && !event.shiftKey && event.key.toLowerCase() === "y") || - ((event.metaKey || event.ctrlKey) && event.shiftKey && event.key.toLowerCase() === "z") - ) { - // redo - if (this.undoRedoService.canRedo()) { - this.undoRedoService.redoAction(); - } - } + // Temporarily disabling undo-redo because of a bug that can cause invalid workflow structures. + // TODO: enable after fixing the bug. + // // cmd/ctrl+z undo ; ctrl+y or cmd/ctrl + shift+z for redo + // if ((event.metaKey || event.ctrlKey) && !event.shiftKey && event.key.toLowerCase() === "z") { + // // UNDO + // if (this.undoRedoService.canUndo()) { + // this.undoRedoService.undoAction(); + // } + // } else if ( + // ((event.metaKey || event.ctrlKey) && !event.shiftKey && event.key.toLowerCase() === "y") || + // ((event.metaKey || event.ctrlKey) && event.shiftKey && event.key.toLowerCase() === "z") + // ) { + // // redo + // if (this.undoRedoService.canRedo()) { + // this.undoRedoService.redoAction(); + // } + // } // below for future hotkeys } this._onProcessKeyboardActionObservable.complete();