fix: 크롭 이미지 URL을 API 서버 기준으로 해석 + 복습 시 사용자 등록 문제 이미지 표시
- import-pdf: resolveUploadUrl로 이미지 src를 API 서버 도메인으로 변환 - review: currentProblem이 null이어도 StudyLog.imageUrl이 있으면 이미지 표시 - getOne API: correctAnswer, imageUrl 필드 응답에 추가 - api.ts: StudyLogDetail에 imageUrl 필드 추가 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -554,6 +554,8 @@ export class StudyLogsService {
|
||||
studiedAt: log.studiedAt,
|
||||
result: log.result,
|
||||
chosenAnswer: log.chosenAnswer,
|
||||
correctAnswer: log.correctAnswer,
|
||||
imageUrl: log.imageUrl,
|
||||
memo: log.memo,
|
||||
timeSpent: log.timeSpent,
|
||||
difficulty: log.difficulty,
|
||||
|
||||
@@ -169,7 +169,7 @@ export default function ReviewPage() {
|
||||
const currentProblem = currentDetail?.problem ?? null;
|
||||
const currentPassage = currentProblem?.passage ?? null;
|
||||
const currentProblemImageUrl = resolveUploadUrl(
|
||||
currentProblem?.imageUrl ?? currentProblem?.pageImageUrl,
|
||||
currentProblem?.imageUrl ?? currentProblem?.pageImageUrl ?? currentDetail?.imageUrl,
|
||||
);
|
||||
const currentPassageImageUrl = resolveUploadUrl(currentPassage?.imageUrl);
|
||||
const ghostItems = queue?.slice(1, 3) ?? [];
|
||||
@@ -616,7 +616,7 @@ export default function ReviewPage() {
|
||||
</CardTitle>
|
||||
|
||||
<CardBody>
|
||||
{currentProblem && (
|
||||
{(currentProblem || currentProblemImageUrl) && (
|
||||
<PromptBlock>
|
||||
{currentPassage && (
|
||||
<PromptPassageSection
|
||||
@@ -631,20 +631,22 @@ export default function ReviewPage() {
|
||||
}
|
||||
/>
|
||||
)}
|
||||
<PromptImageButton
|
||||
type="button"
|
||||
onClick={() => setLightboxOpenFor(currentItem.id)}
|
||||
aria-label={`${currentProblem.problemSet.subjectName} ${currentProblem.number}번 이미지 크게 보기`}
|
||||
>
|
||||
<PromptImageStage
|
||||
imageUrl={currentProblemImageUrl}
|
||||
alt={`${currentProblem.problemSet.subjectName} ${currentProblem.number}번`}
|
||||
/>
|
||||
<PromptImageHint>
|
||||
<Icon name="export" size={14} />
|
||||
눌러서 확대
|
||||
</PromptImageHint>
|
||||
</PromptImageButton>
|
||||
{currentProblemImageUrl && (
|
||||
<PromptImageButton
|
||||
type="button"
|
||||
onClick={() => setLightboxOpenFor(currentItem.id)}
|
||||
aria-label={`${currentProblem?.problemSet?.subjectName ?? '수학'} ${currentProblem?.number ?? ''} 이미지 크게 보기`}
|
||||
>
|
||||
<PromptImageStage
|
||||
imageUrl={currentProblemImageUrl}
|
||||
alt={`${currentProblem?.problemSet?.subjectName ?? '수학'} ${currentProblem?.number ?? ''}`}
|
||||
/>
|
||||
<PromptImageHint>
|
||||
<Icon name="export" size={14} />
|
||||
눌러서 확대
|
||||
</PromptImageHint>
|
||||
</PromptImageButton>
|
||||
)}
|
||||
</PromptBlock>
|
||||
)}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
Select,
|
||||
Stack,
|
||||
} from '@/components/ui/primitives';
|
||||
import { api, type StudyResult, type Subject, type Tag } from '@/lib/api';
|
||||
import { api, resolveUploadUrl, type StudyResult, type Subject, type Tag } from '@/lib/api';
|
||||
import { theme } from '@/styles/theme';
|
||||
|
||||
interface ParsedProblem {
|
||||
@@ -397,7 +397,7 @@ function ImportPdfBody() {
|
||||
<ProblemNumber>{problem.number}번</ProblemNumber>
|
||||
<ProblemImageWrap>
|
||||
<ProblemImage
|
||||
src={problem.imageUrl}
|
||||
src={resolveUploadUrl(problem.imageUrl) ?? problem.imageUrl}
|
||||
alt={`${problem.number}번 문제`}
|
||||
loading="lazy"
|
||||
/>
|
||||
|
||||
@@ -317,6 +317,7 @@ export interface StudyLogDetail {
|
||||
result: StudyResult;
|
||||
chosenAnswer: number | null;
|
||||
correctAnswer: number | null;
|
||||
imageUrl: string | null;
|
||||
memo: string | null;
|
||||
timeSpent: number | null;
|
||||
difficulty: number;
|
||||
|
||||
Reference in New Issue
Block a user