diff --git a/client/src/pages/ConfigPage.tsx b/client/src/pages/ConfigPage.tsx index 4d78d07..56c6d57 100644 --- a/client/src/pages/ConfigPage.tsx +++ b/client/src/pages/ConfigPage.tsx @@ -1,3 +1,4 @@ +import { useEffect } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { DatabaseConfigForm } from "@/components/DatabaseConfigForm"; import api from "@/lib/api"; @@ -8,6 +9,19 @@ export function ConfigPage() { const { dbType } = useParams<{ dbType: string }>(); const navigate = useNavigate(); + // Clear draft data when navigating away from the config page + useEffect(() => { + return () => { + if (dbType) { + try { + sessionStorage.removeItem(`db_mover_draft_${dbType}`); + } catch { + // Ignore storage access errors (e.g. when storage is blocked) + } + } + }; + }, [dbType]); + const handleStartCopy = async (config: { sourceUri: string; targetUri: string; @@ -23,7 +37,7 @@ export function ConfigPage() { const { jobId } = res.data; // Store migration config for retry functionality - localStorage.setItem( + sessionStorage.setItem( `migration_${jobId}`, JSON.stringify({ type: "copy", diff --git a/client/src/pages/MigrationPage.tsx b/client/src/pages/MigrationPage.tsx index 6c0c2ee..9493750 100644 --- a/client/src/pages/MigrationPage.tsx +++ b/client/src/pages/MigrationPage.tsx @@ -24,7 +24,7 @@ export function MigrationPage() { try { // Get stored migration config - const storedConfig = localStorage.getItem(`migration_${jobId}`); + const storedConfig = sessionStorage.getItem(`migration_${jobId}`); if (!storedConfig) { toast.error("Retry failed", { description: @@ -38,9 +38,12 @@ export function MigrationPage() { // Start new migration with same config const res = await api.post("/migrate/start", config); const newJobId = res.data.jobId; - - // Store config for new job - localStorage.setItem(`migration_${newJobId}`, JSON.stringify(config)); + try { + // Store config for new job + sessionStorage.setItem(`migration_${newJobId}`, JSON.stringify(config)); + } catch (error) { + // Ignore storage access errors (e.g. when storage is blocked) + } // Navigate to new migration page navigate(`/migration/${newJobId}`); @@ -84,6 +87,26 @@ export function MigrationPage() { return () => { es.close(); + + // Clean up session storage when navigating away + if (jobId) { + try { + const storedConfig = sessionStorage.getItem(`migration_${jobId}`); + if (storedConfig) { + const parsedConfig = JSON.parse(storedConfig); + const storedDbType = + typeof parsedConfig?.dbType === "string" + ? parsedConfig.dbType.trim() + : ""; + if (storedDbType) { + sessionStorage.removeItem(`db_mover_draft_${storedDbType}`); + } + } + sessionStorage.removeItem(`migration_${jobId}`); + } catch (storageError) { + console.error("Error cleaning up migration storage", storageError); + } + } }; }, [jobId]);