diff --git a/src/simulator/src/data/redo.js b/src/simulator/src/data/redo.js deleted file mode 100644 index bc252a98..00000000 --- a/src/simulator/src/data/redo.js +++ /dev/null @@ -1,47 +0,0 @@ -/* eslint-disable import/no-cycle */ -/** - * Function to restore copy from backup - * @param {Scope=} scope - The circuit on which redo is called - * @category data - */ -import { layoutModeGet } from '../layoutMode' -import Scope, { scopeList } from '../circuit' -import { loadScope } from './load' -import { updateRestrictedElementsInScope } from '../restrictedElementDiv' -import { forceResetNodesSet } from '../engine' -/** - * Function called to generate a prompt to save an image - * @param {Scope=} - the circuit in which we want to call redo - * @category data - * @exports redo - */ -export default function redo(scope = globalScope) { - if (layoutModeGet()) return - if (scope.history.length === 0) return - const backupOx = globalScope.ox - const backupOy = globalScope.oy - const backupScale = globalScope.scale - globalScope.ox = 0 - globalScope.oy = 0 - const tempScope = new Scope(scope.name) - loading = true - const redoData = scope.history.pop() - scope.backups.push(redoData) - loadScope(tempScope, JSON.parse(redoData)) - tempScope.backups = scope.backups - tempScope.history = scope.history - tempScope.id = scope.id - tempScope.name = scope.name - tempScope.testbenchData = scope.testbenchData - scopeList[scope.id] = tempScope - globalScope = tempScope - globalScope.ox = backupOx - globalScope.oy = backupOy - globalScope.scale = backupScale - loading = false - forceResetNodesSet(true) - - // Updated restricted elements - updateRestrictedElementsInScope() -} -// for html file diff --git a/src/simulator/src/data/redo.ts b/src/simulator/src/data/redo.ts new file mode 100644 index 00000000..67753db0 --- /dev/null +++ b/src/simulator/src/data/redo.ts @@ -0,0 +1,76 @@ +/* eslint-disable import/no-cycle */ +import { layoutModeGet } from '../layoutMode'; +import Scope, { scopeList } from '../circuit'; +import { loadScope } from './load'; +import { updateRestrictedElementsInScope } from '../restrictedElementDiv'; +import { forceResetNodesSet } from '../engine'; + +// Extend the Scope type to include missing properties +interface ExtendedScope extends Scope { + testbenchData: any; + ox: number; + oy: number; + scale: number; + history: string[]; + backups: string[]; + name: string; + id: string | number; +} + +// Type declarations for global variables +declare var globalScope: ExtendedScope; +declare var loading: boolean; + +/** + * Function to restore copy from backup + * @param {ExtendedScope=} scope - The circuit on which redo is called + * @category data + */ +export default function redo(scope: ExtendedScope = globalScope): void { + if (layoutModeGet()) return; + if (scope.history.length === 0) return; + + // Store the current view state + const backupOx: number = globalScope.ox; + const backupOy: number = globalScope.oy; + const backupScale: number = globalScope.scale; + + // Reset the view position + globalScope.ox = 0; + globalScope.oy = 0; + + // Create a temporary scope + const tempScope: ExtendedScope = new Scope(scope.name) as ExtendedScope; + loading = true; + + // Get the redo data and update history + const redoData: string = scope.history.pop()!; + scope.backups.push(redoData); + + // Load the scope data + loadScope(tempScope, JSON.parse(redoData)); + + // Transfer persistent properties + tempScope.backups = scope.backups; + tempScope.history = scope.history; + tempScope.id = scope.id; + tempScope.name = scope.name; + tempScope.testbenchData = scope.testbenchData; + + // Update the scope list + scopeList[scope.id] = tempScope; + + // Update global scope + globalScope = tempScope; + + // Restore view state + globalScope.ox = backupOx; + globalScope.oy = backupOy; + globalScope.scale = backupScale; + + loading = false; + forceResetNodesSet(true); + + // Update restricted elements + updateRestrictedElementsInScope(); +} \ No newline at end of file