Browse Source

feat: reset copyStatus on export dialog settings change (#8443)

David Luzar 11 months ago
parent
commit
16cae4fc07

+ 15 - 1
packages/excalidraw/components/ImageExportDialog.tsx

@@ -90,7 +90,20 @@ const ImageExportModal = ({
   const previewRef = useRef<HTMLDivElement>(null);
   const previewRef = useRef<HTMLDivElement>(null);
   const [renderError, setRenderError] = useState<Error | null>(null);
   const [renderError, setRenderError] = useState<Error | null>(null);
 
 
-  const { onCopy, copyStatus } = useCopyStatus();
+  const { onCopy, copyStatus, resetCopyStatus } = useCopyStatus();
+
+  useEffect(() => {
+    // if user changes setting right after export to clipboard, reset the status
+    // so they don't have to wait for the timeout to click the button again
+    resetCopyStatus();
+  }, [
+    projectName,
+    exportWithBackground,
+    exportDarkMode,
+    exportScale,
+    embedScene,
+    resetCopyStatus,
+  ]);
 
 
   const { exportedElements, exportingFrame } = prepareElementsForExport(
   const { exportedElements, exportingFrame } = prepareElementsForExport(
     elementsSnapshot,
     elementsSnapshot,
@@ -108,6 +121,7 @@ const ImageExportModal = ({
     if (!maxWidth) {
     if (!maxWidth) {
       return;
       return;
     }
     }
+
     exportToCanvas({
     exportToCanvas({
       elements: exportedElements,
       elements: exportedElements,
       appState: {
       appState: {

+ 6 - 1
packages/excalidraw/hooks/useCopiedIndicator.ts

@@ -1,4 +1,4 @@
-import { useRef, useState } from "react";
+import { useCallback, useRef, useState } from "react";
 
 
 const TIMEOUT = 2000;
 const TIMEOUT = 2000;
 
 
@@ -15,8 +15,13 @@ export const useCopyStatus = () => {
     }, TIMEOUT);
     }, TIMEOUT);
   };
   };
 
 
+  const resetCopyStatus = useCallback(() => {
+    setCopyStatus(null);
+  }, []);
+
   return {
   return {
     copyStatus,
     copyStatus,
+    resetCopyStatus,
     onCopy,
     onCopy,
   };
   };
 };
 };