Remove CanvasState delegating methods from Canvas

Removed delegating methods to CanvasState from Canvas.js and updated all references to use canvas.canvasState directly for state operations (undo, redo, saveStateToDB). Updated CanvasInteractions.js, CanvasIO.js, CanvasLayers.js, and CanvasView.js accordingly. Updated REFACTORING_GUIDE.md to reflect the completion of this refactor.
This commit is contained in:
Dariusz L
2025-06-29 14:11:34 +02:00
parent fd611c5777
commit 1bb4909438
6 changed files with 24 additions and 17 deletions

View File

@@ -469,11 +469,11 @@ export class Canvas {
* - this.canvasInteractions dla obsługi interakcji
* - this.canvasIO dla operacji I/O
* - this.canvasState dla zarządzania stanem
*
* UWAGA: Metody delegujące do CanvasState zostały usunięte.
* Używaj: canvas.canvasState.saveStateToDB(), canvas.canvasState.undo(), etc.
*/
// Delegacje do CanvasState
async saveStateToDB(immediate = false) { return this.canvasState.saveStateToDB(immediate); }
// Delegacje do CanvasLayers
async copySelectedLayers() { return this.canvasLayers.copySelectedLayers(); }
async handlePaste(addMode) { return this.canvasLayers.handlePaste(addMode); }

View File

@@ -46,7 +46,7 @@ export class CanvasIO {
log.warn(`Node ${this.canvas.node.id} has no layers, creating empty canvas`);
return Promise.resolve(true);
}
await this.canvas.saveStateToDB(true);
await this.canvas.canvasState.saveStateToDB(true);
const nodeId = this.canvas.node.id;
const delay = (nodeId % 10) * 50;
if (delay > 0) {

View File

@@ -176,7 +176,7 @@ export class CanvasInteractions {
if (interactionEnded) {
this.canvas.saveState();
this.canvas.saveStateToDB(true);
this.canvas.canvasState.saveStateToDB(true);
}
}
@@ -297,16 +297,16 @@ export class CanvasInteractions {
e.preventDefault();
e.stopPropagation();
if (e.shiftKey) {
this.canvas.redo();
this.canvas.canvasState.redo();
} else {
this.canvas.undo();
this.canvas.canvasState.undo();
}
return;
}
if (e.key.toLowerCase() === 'y') {
e.preventDefault();
e.stopPropagation();
this.canvas.redo();
this.canvas.canvasState.redo();
return;
}
}
@@ -324,30 +324,30 @@ export class CanvasInteractions {
e.preventDefault();
e.stopPropagation();
if (e.shiftKey) {
this.canvas.redo();
this.canvas.canvasState.redo();
} else {
this.canvas.undo();
this.canvas.canvasState.undo();
}
return;
}
if (e.key.toLowerCase() === 'y') {
e.preventDefault();
e.stopPropagation();
this.canvas.redo();
this.canvas.canvasState.redo();
return;
}
if (e.key.toLowerCase() === 'c') {
if (this.canvas.selectedLayers.length > 0) {
e.preventDefault();
e.stopPropagation();
this.canvas.copySelectedLayers();
this.canvas.canvasLayers.copySelectedLayers();
}
return;
}
if (e.key.toLowerCase() === 'v') {
e.preventDefault();
e.stopPropagation();
this.canvas.handlePaste('mouse');
this.canvas.canvasLayers.handlePaste('mouse');
return;
}
}

View File

@@ -359,7 +359,7 @@ export class CanvasLayers {
this.canvas.render();
if (saveHistory) {
this.canvas.saveStateToDB();
this.canvas.canvasState.saveStateToDB();
}
}

View File

@@ -749,14 +749,14 @@ async function createCanvasWidget(node, widget, app) {
textContent: "Undo",
title: "Undo last action",
disabled: true,
onclick: () => canvas.undo()
onclick: () => canvas.canvasState.undo()
}),
$el("button.painter-button", {
id: `redo-button-${node.id}`,
textContent: "Redo",
title: "Redo last undone action",
disabled: true,
onclick: () => canvas.redo()
onclick: () => canvas.canvasState.redo()
}),
]),
$el("div.painter-separator"),

View File

@@ -146,7 +146,7 @@ canvas.imageReferenceManager.manualGarbageCollection()
### 🎯 Kolejne kroki
1. **Monitorowanie działania** - sprawdzenie czy wszystkie funkcje działają poprawnie ✅
2. **Usunięcie metod delegujących** - w przyszłych wersjach (po okresie przejściowym)
2. **Usunięcie metod delegujących do CanvasState** - zakończone ✅
3. **Rozszerzenie dokumentacji** - dla poszczególnych modułów ✅
4. **Dodanie testów jednostkowych** - dla modułów
@@ -168,6 +168,13 @@ canvas.imageReferenceManager.manualGarbageCollection()
- Poprawiono wywołania w CanvasView.js - `canvas.rotateLayer()``canvas.canvasLayers.rotateLayer()`
- Wszystkie moduły używają teraz spójnej konwencji nazewnictwa
4. **Usunięcie metod delegujących do CanvasState**
- Usunięto metodę delegującą `saveStateToDB()` z Canvas.js
- Zaktualizowano wszystkie wywołania w CanvasView.js: `canvas.undo()``canvas.canvasState.undo()`
- Zaktualizowano wszystkie wywołania w CanvasInteractions.js dla operacji undo/redo i copy/paste
- Zaktualizowano wywołania w CanvasLayers.js i CanvasIO.js
- Wszystkie operacje na stanie używają teraz bezpośrednio modułu `canvasState`
## Uwagi dla deweloperów
-**Refaktoryzacja zakończona** - wszystkie pliki zostały zaktualizowane