feat(editor): Add undo/redo enabling/disabling a node in new canvas (no-changelog) (#10143)

This commit is contained in:
Alex Grozav 2024-07-23 09:49:37 +03:00 committed by GitHub
parent dc13ceb416
commit ee676fd934
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 65 additions and 3 deletions

View file

@ -569,6 +569,47 @@ describe('useCanvasOperations', () => {
});
});
describe('toggleNodesDisabled', () => {
it('disables nodes based on provided ids', async () => {
const nodes = [
createTestNode({ id: '1', name: 'A' }),
createTestNode({ id: '2', name: 'B' }),
];
vi.spyOn(workflowsStore, 'getNodesByIds').mockReturnValue(nodes);
const updateNodePropertiesSpy = vi.spyOn(workflowsStore, 'updateNodeProperties');
canvasOperations.toggleNodesDisabled([nodes[0].id, nodes[1].id], {
trackHistory: true,
trackBulk: true,
});
expect(updateNodePropertiesSpy).toHaveBeenCalledWith({
name: nodes[0].name,
properties: {
disabled: true,
},
});
});
});
describe('revertToggleNodeDisabled', () => {
it('re-enables a previously disabled node', () => {
const nodeName = 'testNode';
const node = createTestNode({ name: nodeName });
vi.spyOn(workflowsStore, 'getNodeByName').mockReturnValue(node);
const updateNodePropertiesSpy = vi.spyOn(workflowsStore, 'updateNodeProperties');
canvasOperations.revertToggleNodeDisabled(nodeName);
expect(updateNodePropertiesSpy).toHaveBeenCalledWith({
name: nodeName,
properties: {
disabled: true,
},
});
});
});
describe('addConnections', () => {
it('should create connections between nodes', async () => {
const nodeTypeName = 'type';

View file

@ -348,10 +348,25 @@ export function useCanvasOperations({
function toggleNodesDisabled(
ids: string[],
{ trackHistory = true }: { trackHistory?: boolean } = {},
{ trackHistory = true, trackBulk = true }: { trackHistory?: boolean; trackBulk?: boolean } = {},
) {
if (trackBulk) {
historyStore.startRecordingUndo();
}
const nodes = workflowsStore.getNodesByIds(ids);
nodeHelpers.disableNodes(nodes, trackHistory);
if (trackBulk) {
historyStore.stopRecordingUndo();
}
}
function revertToggleNodeDisabled(nodeName: string) {
const node = workflowsStore.getNodeByName(nodeName);
if (node) {
nodeHelpers.disableNodes([node]);
}
}
function toggleNodesPinned(ids: string[], source: PinDataSource) {
@ -1618,6 +1633,7 @@ export function useCanvasOperations({
setNodeActiveByName,
setNodeSelected,
toggleNodesDisabled,
revertToggleNodeDisabled,
toggleNodesPinned,
setNodeParameters,
renameNode,

View file

@ -139,6 +139,7 @@ const {
setNodeActive,
setNodeSelected,
toggleNodesDisabled,
revertToggleNodeDisabled,
toggleNodesPinned,
setNodeParameters,
deleteNode,
@ -466,6 +467,10 @@ function onToggleNodeDisabled(id: string) {
toggleNodesDisabled([id]);
}
function onRevertToggleNodeDisabled({ nodeName }: { nodeName: string }) {
revertToggleNodeDisabled(nodeName);
}
function onToggleNodesDisabled(ids: string[]) {
if (!checkIfEditingIsAllowed()) {
return;
@ -982,7 +987,7 @@ function addUndoRedoEventBindings() {
historyBus.on('revertAddConnection', onRevertCreateConnection);
historyBus.on('revertRemoveConnection', onRevertDeleteConnection);
historyBus.on('revertRenameNode', onRevertRenameNode);
// historyBus.on('enableNodeToggle', onRevertEnableToggle);
historyBus.on('enableNodeToggle', onRevertToggleNodeDisabled);
}
function removeUndoRedoEventBindings() {
@ -992,7 +997,7 @@ function removeUndoRedoEventBindings() {
historyBus.off('revertAddConnection', onRevertCreateConnection);
historyBus.off('revertRemoveConnection', onRevertDeleteConnection);
historyBus.off('revertRenameNode', onRevertRenameNode);
// historyBus.off('enableNodeToggle', onRevertEnableToggle);
historyBus.off('enableNodeToggle', onRevertToggleNodeDisabled);
}
/**