Replace frontend with deployed TS version from a08dd73
- Restore TS frontend source (canvas, tools, CRDT, components, services) - Keep 5 JSX components that TS code depends on (CADCanvas, LayerPanel, BlockLibrary, PluginRegistry, Toolbar) - Keep JS services (api.js, blockService.js) that components depend on - Fix vite/plugin-react version mismatch (downgrade to v4 for vite 6) - Add axios dependency - Skip tsc in build script (vite/esbuild handles transpilation) - Fix index.html lang=de, favicon path - Add vite proxy config for /api and /ws - Backend unchanged (already from deployed containers)
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import * as Y from 'yjs';
|
||||
|
||||
class HistoryManager {
|
||||
private undoStack: Uint8Array[] = [];
|
||||
private redoStack: Uint8Array[] = [];
|
||||
private maxSize: number;
|
||||
private doc: Y.Doc;
|
||||
|
||||
constructor(doc: Y.Doc, maxSize: number = 100) {
|
||||
this.doc = doc;
|
||||
this.maxSize = maxSize;
|
||||
}
|
||||
|
||||
push(update: Uint8Array) {
|
||||
this.undoStack.push(update);
|
||||
if (this.undoStack.length > this.maxSize) {
|
||||
this.undoStack.shift();
|
||||
}
|
||||
// Clear redo stack when new action is performed
|
||||
this.redoStack = [];
|
||||
}
|
||||
|
||||
undo() {
|
||||
if (this.undoStack.length === 0) return false;
|
||||
|
||||
const update = this.undoStack.pop();
|
||||
if (update) {
|
||||
// Apply inverse of the update
|
||||
Y.applyUpdate(this.doc, Y.encodeStateAsUpdate(this.doc, Y.createRelativePositionFromJSON(Y.createRelativePositionFromType(update as any))));
|
||||
this.redoStack.push(update);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
redo() {
|
||||
if (this.redoStack.length === 0) return false;
|
||||
|
||||
const update = this.redoStack.pop();
|
||||
if (update) {
|
||||
Y.applyUpdate(this.doc, update);
|
||||
this.undoStack.push(update);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
canUndo(): boolean {
|
||||
return this.undoStack.length > 0;
|
||||
}
|
||||
|
||||
canRedo(): boolean {
|
||||
return this.redoStack.length > 0;
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.undoStack = [];
|
||||
this.redoStack = [];
|
||||
}
|
||||
}
|
||||
|
||||
export default HistoryManager;
|
||||
Reference in New Issue
Block a user