diff --git a/jobdri/src/app/mockApply/[mockApplyId]/result/resume-analysis-loading/ResumeAnalysisLoadingPageClient.tsx b/jobdri/src/app/mockApply/[mockApplyId]/result/resume-analysis-loading/ResumeAnalysisLoadingPageClient.tsx index 8099462..3440c05 100644 --- a/jobdri/src/app/mockApply/[mockApplyId]/result/resume-analysis-loading/ResumeAnalysisLoadingPageClient.tsx +++ b/jobdri/src/app/mockApply/[mockApplyId]/result/resume-analysis-loading/ResumeAnalysisLoadingPageClient.tsx @@ -10,6 +10,7 @@ import { fetchAnalysisTaskStatus, subscribeAnalysisTaskStream, } from "@/lib/api/result"; +import { fetchMockApplyJobPosting } from "@/lib/api/mockApplies"; const RESUME_ANALYSIS_LOADING_DURATION_MS = 316_000; const ANALYSIS_POLL_INTERVAL_MS = 2_500; @@ -60,6 +61,10 @@ export default function ResumeAnalysisLoadingPageClient({ const mockApplyId = Number(params.mockApplyId); const isValidMockApplyId = Number.isInteger(mockApplyId) && mockApplyId > 0; const [pollingRetryKey, setPollingRetryKey] = useState(0); + const [jobPostingHeader, setJobPostingHeader] = useState({ + companyName: "", + jobTitle: "", + }); const [errorMessage, setErrorMessage] = useState( isError ? `응답 대기 시간이 길어져 작업을 멈췄어요.\n소모된 크레딧이 복구됐어요.` @@ -100,6 +105,38 @@ export default function ResumeAnalysisLoadingPageClient({ router.replace(`/mockApply/${mockApplyId}${jobPostingQuery}`); }, [jobPostingId, mockApplyId, router]); + useEffect(() => { + if (!isValidMockApplyId) { + return; + } + + let ignore = false; + + const loadJobPostingHeader = async () => { + try { + const jobPosting = await fetchMockApplyJobPosting(mockApplyId); + + if (!ignore) { + setJobPostingHeader({ + companyName: jobPosting.companyName, + jobTitle: + jobPosting.jobTitle || jobPosting.detailClassificationName || "", + }); + } + } catch (error) { + if (!ignore) { + console.error("채용 공고 정보를 불러오지 못했습니다.", error); + } + } + }; + + void loadJobPostingHeader(); + + return () => { + ignore = true; + }; + }, [isValidMockApplyId, mockApplyId]); + useEffect(() => { if (isError || !isValidMockApplyId) { return; @@ -282,6 +319,8 @@ export default function ResumeAnalysisLoadingPageClient({ durationMs={RESUME_ANALYSIS_LOADING_DURATION_MS} onBack={moveBackToResume} applicationLabel={applicationLabel} + companyName={jobPostingHeader.companyName} + jobTitle={jobPostingHeader.jobTitle} /> {errorMessage && ( diff --git a/jobdri/src/components/mockApply/ResumeAnalysisLoading.tsx b/jobdri/src/components/mockApply/ResumeAnalysisLoading.tsx index ecfa710..8aace9b 100644 --- a/jobdri/src/components/mockApply/ResumeAnalysisLoading.tsx +++ b/jobdri/src/components/mockApply/ResumeAnalysisLoading.tsx @@ -14,6 +14,8 @@ interface ResumeAnalysisLoadingProps { onBack?: () => void; onComplete?: () => void; applicationLabel?: string; + companyName?: string; + jobTitle?: string; isFailed?: boolean; onErrorConfirm?: () => void; } @@ -34,6 +36,8 @@ export default function ResumeAnalysisLoading({ onBack, onComplete, applicationLabel, + companyName = "", + jobTitle = "", isFailed = false, }: ResumeAnalysisLoadingProps) { const initialRemainingSeconds = Math.max(1, Math.ceil(durationMs / 1000)); @@ -102,7 +106,12 @@ export default function ResumeAnalysisLoading({ return (
-
+