diff --git a/src/features/mypage/ui/section/ProjectListSection.tsx b/src/features/mypage/ui/section/ProjectListSection.tsx index 60d1e5a..13f6077 100644 --- a/src/features/mypage/ui/section/ProjectListSection.tsx +++ b/src/features/mypage/ui/section/ProjectListSection.tsx @@ -70,9 +70,17 @@ export const ProjectListSection = () => { - navigate(DYNAMIC_ROUTE_PATHS.PROJECT_DETAIL(project.projectId)) - } + onClick={() => { + if (project.status === "IN_PROGRESS") { + navigate( + `${ROUTE_PATHS.UPLOAD_STEP_BASE}/${project.projectId}/1`, + ); + } else { + navigate( + DYNAMIC_ROUTE_PATHS.PROJECT_DETAIL(project.projectId), + ); + } + }} updatedAt={project.createdAt} status={project.status} roadmapType={project.roadmapType} diff --git a/src/pages/upload/_step/UploadStepPage.tsx b/src/pages/upload/_step/UploadStepPage.tsx index 50e3166..f6d66d0 100644 --- a/src/pages/upload/_step/UploadStepPage.tsx +++ b/src/pages/upload/_step/UploadStepPage.tsx @@ -165,6 +165,7 @@ function UploadStepContent({ const [stepData, setStepData] = useState(null); const [isStepLoading, setIsStepLoading] = useState(false); + const [isStepResolved, setIsStepResolved] = useState(false); const [isSaving, setIsSaving] = useState(false); const [isCompleting, setIsCompleting] = useState(false); @@ -175,7 +176,31 @@ function UploadStepContent({ const isLastStep = stepNum >= steps.length; useEffect(() => { - if (!projectId || !stepCode) return; + if (!project) return; + + const stepResponses = project.stepResponses ?? []; + + if (stepNum === 1 && stepResponses.length > 0) { + const nextStepIndex = stepResponses.findIndex( + (step) => !step.userSubmittedResult, + ); + + const targetStep = + nextStepIndex === -1 ? stepResponses.length : nextStepIndex + 1; + + if (targetStep !== stepNum) { + navigate(`${ROUTE_PATHS.UPLOAD_STEP_BASE}/${projectId}/${targetStep}`, { + replace: true, + }); + return; + } + } + + setIsStepResolved(true); + }, [project, stepNum, projectId, navigate]); + + useEffect(() => { + if (!isStepResolved || !projectId || !stepCode) return; const fetchStep = async () => { setIsStepLoading(true); @@ -193,7 +218,7 @@ function UploadStepContent({ }; fetchStep(); - }, [projectId, stepCode]); + }, [isStepResolved, projectId, stepCode]); const copyToClipboard = (text: string, setter: (v: boolean) => void) => { if (!navigator?.clipboard?.writeText) {