This commit is contained in:
2025-11-29 01:36:07 +01:00
parent d932b832c1
commit 4fa9c97189
5 changed files with 427 additions and 59 deletions

View File

@@ -46,12 +46,25 @@ XX. **Nome Problema (FIX/IMPLEMENTATO DATA):** - **Problema:** Descrizione breve
## Quick Start - Session Recovery
**Ultima sessione:** 28 Novembre 2025 (notte)
**Ultima sessione:** 29 Novembre 2025
**Stato progetto:** Migrazione Oracle APEX → .NET + React TypeScript in corso
**Lavoro completato nell'ultima sessione:**
- **NUOVA FEATURE: Selezione Multipla nel Report Editor** - COMPLETATO
- Implementato sistema di selezione multipla personalizzato (senza usare ActiveSelection di Fabric.js che causava riposizionamento oggetti)
- **Selezione con rettangolo di trascinamento**: trascinando sul canvas vuoto appare rettangolo blu tratteggiato, al rilascio seleziona tutti gli oggetti che intersecano
- **Shift+click**: aggiunge/rimuove oggetti dalla selezione
- **Spostamento multiplo**: quando più oggetti sono selezionati, trascinandone uno si spostano tutti insieme
- **Feedback visivo**: oggetti selezionati mostrano bordo blu (#1976d2) e ombra
- **Gestione corretta degli eventi**: i ref (`selectedElementIdsRef`, `onSelectElementRef`, etc.) evitano stale closures negli event handler
- **File modificati:**
- `EditorCanvas.tsx` - Nuovi handler `handleMouseDown`, `handleMouseUp`, logica selezione multipla, refs per valori correnti
- `ReportEditorPage.tsx` - Cambiato `selectedElementId: string | null``selectedElementIds: string[]`, aggiornati tutti i riferimenti
**Lavoro completato nelle sessioni precedenti (28 Novembre 2025 notte):**
- **NUOVA FEATURE: Sincronizzazione Real-Time Efficiente** - COMPLETATO
- **Prima:** Al salvataggio veniva inviata solo una notifica `DataSaved`, l'altra sessione ricaricava il template dal server (lento)
- **Dopo:** Al salvataggio viene inviato l'intero template via SignalR (`BroadcastTemplateSync`), l'altra sessione lo applica direttamente (istantaneo)
@@ -1141,6 +1154,26 @@ frontend/src/
- Check `isPending` spostato dentro il callback del setTimeout
- **File:** `ReportEditorPage.tsx`
26. **Selezione Multipla Fabric.js - Riposizionamento Oggetti (FIX 29/11/2025):**
- **Problema:** Usando `ActiveSelection` di Fabric.js per la selezione multipla, gli oggetti venivano riposizionati/spostati quando selezionati
- **Causa:** `ActiveSelection` raggruppa gli oggetti e le loro coordinate diventano relative al centro del gruppo. Inoltre, ricreando l'`ActiveSelection` nell'effect quando cambiava `selectedElementIds`, gli oggetti venivano spostati
- **Soluzione:** Sistema di selezione multipla completamente personalizzato:
- Disabilitata selezione nativa di Fabric.js (`selection: false` nel canvas)
- Implementato `handleMouseDown` per:
- Click su oggetto → selezione singola
- Shift+click → aggiunge/rimuove dalla selezione
- Click su canvas vuoto → inizio rettangolo di selezione
- Click su oggetto già selezionato (multi) → inizio drag multiplo
- Implementato `handleMouseMove` per:
- Disegno rettangolo di selezione (Rect blu tratteggiato)
- Spostamento multiplo oggetti (aggiorna `left`/`top` di ogni oggetto)
- Implementato `handleMouseUp` per:
- Fine rettangolo → calcola intersezione e seleziona oggetti
- Fine drag multiplo → aggiorna template con nuove posizioni
- Feedback visivo: bordo blu e ombra sugli oggetti selezionati (invece di ActiveSelection)
- Usati refs (`selectedElementIdsRef`, `onSelectElementRef`, etc.) per evitare stale closures negli event handler registrati una sola volta
- **File:** `EditorCanvas.tsx`, `ReportEditorPage.tsx`
### Schema Database Report System
Le tabelle sono già nel DbContext (`AppollinareDbContext.cs`):