@@ -2369,7 +2369,8 @@ function Canvas({
23692369 setUndoAvailable ,
23702370 setRedoAvailable ,
23712371 auth ,
2372- roomType
2372+ roomType ,
2373+ showLocalSnack
23732374 ) ;
23742375
23752376 // Draw a preview of a shape (for shape mode)
@@ -2545,6 +2546,7 @@ function Canvas({
25452546 setRedoStack ( [ ] ) ;
25462547
25472548 const pasteRecordId = generateId ( ) ;
2549+ showLocalSnack ( `Pasting ${ newDrawings . length } item(s)... Please wait.` ) ;
25482550 console . log ( "[handlePaste] Starting paste operation:" , {
25492551 pasteRecordId,
25502552 drawingCount : newDrawings . length ,
@@ -2561,10 +2563,11 @@ function Canvas({
25612563 console . log ( "[handlePaste] Attached parentPasteId to all drawings:" , pasteRecordId ) ;
25622564
25632565 // Submit all pasted drawings as replacement/child strokes but DO NOT add each to the undo stack
2566+ let submittedCount = 0 ;
25642567 for ( const newDrawing of newDrawings ) {
25652568 try {
25662569 userData . addDrawing ( newDrawing ) ;
2567- // skipUndoStack=true so these individual strokes don't create separate undo entries
2570+
25682571 await submitToDatabase (
25692572 newDrawing ,
25702573 auth ,
@@ -2573,6 +2576,9 @@ function Canvas({
25732576 setRedoAvailable
25742577 ) ;
25752578 pastedDrawings . push ( newDrawing ) ;
2579+ submittedCount ++ ;
2580+
2581+ showLocalSnack ( `Pasting... ${ submittedCount } /${ newDrawings . length } items saved.` ) ;
25762582 } catch ( error ) {
25772583 console . error ( "Failed to save drawing:" , newDrawing , error ) ;
25782584 handleAuthError ( error ) ;
@@ -2629,8 +2635,9 @@ function Canvas({
26292635 drawAllDrawings ( ) ;
26302636 setCutImageData ( [ ] ) ;
26312637 setDrawMode ( "freehand" ) ;
2638+ showLocalSnack ( `Paste completed! ${ pastedDrawings . length } item(s) pasted successfully.` ) ;
26322639 } else {
2633- showLocalSnack ( "Some strokes may not have been saved. Please try again." ) ;
2640+ showLocalSnack ( `Paste partially completed. ${ pastedDrawings . length } / ${ newDrawings . length } items pasted.` ) ;
26342641 }
26352642 } ;
26362643
@@ -3949,17 +3956,26 @@ function Canvas({
39493956 showLocalSnack ( "Cut is disabled in view-only mode." ) ;
39503957 return ;
39513958 }
3952- const result = await handleCutSelection ( ) ;
3953- if ( result && result . compositeCutAction ) {
3954- setUndoStack ( ( prev ) => [ ...prev , result . compositeCutAction ] ) ;
3955- }
3956- setIsRefreshing ( true ) ;
3959+ showLocalSnack ( "Cutting selection... This may take a moment." ) ;
39573960 try {
3958- await mergedRefreshCanvas ( ) ;
3961+ const result = await handleCutSelection ( ) ;
3962+ if ( result && result . compositeCutAction ) {
3963+ setUndoStack ( ( prev ) => [ ...prev , result . compositeCutAction ] ) ;
3964+ }
3965+ setIsRefreshing ( true ) ;
3966+ showLocalSnack ( "Syncing cut operation..." ) ;
3967+ try {
3968+ await mergedRefreshCanvas ( ) ;
3969+ showLocalSnack ( "Cut completed successfully!" ) ;
3970+ } catch ( e ) {
3971+ console . error ( "Error syncing cut with server:" , e ) ;
3972+ showLocalSnack ( "Cut completed, but sync failed. Try refreshing." ) ;
3973+ } finally {
3974+ setIsRefreshing ( false ) ;
3975+ }
39593976 } catch ( e ) {
3960- console . error ( "Error syncing cut with server:" , e ) ;
3961- } finally {
3962- setIsRefreshing ( false ) ;
3977+ console . error ( "Error during cut:" , e ) ;
3978+ showLocalSnack ( "Cut operation failed. Please try again." ) ;
39633979 }
39643980 } }
39653981 cutImageData = { cutImageData }
0 commit comments