From 89ebf1f71d8d828854ac657f98e34f9361a9b064 Mon Sep 17 00:00:00 2001 From: hansoojeongsj Date: Wed, 29 Oct 2025 04:51:31 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20solve=20=EC=84=9C=EB=B2=84=EC=B1=97?= =?UTF-8?q?=20=EC=9D=91=EB=8B=B5=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EC=B1=84=ED=8C=85=20=EB=84=88=EB=B9=84=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#62)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/solve/Solve.tsx | 21 +++++++++++---------- src/pages/solve/solve.css.ts | 9 +++++++-- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/pages/solve/Solve.tsx b/src/pages/solve/Solve.tsx index c2e0b08..be2dc4c 100644 --- a/src/pages/solve/Solve.tsx +++ b/src/pages/solve/Solve.tsx @@ -231,17 +231,20 @@ const Solve = () => { setIsOpen(false); const files = e.target.files; - if (!files || files.length < expectedCount) { + + // 2. 파일 개수 검증 로직 수정 + // 필요한 개수와 다르다면 에러 메시지 표시 + if (!files || files.length !== expectedCount) { addServerMessage( expectedCount === 1 - ? '문제 이미지 1장을 선택해주세요.' - : '문제 이미지 1장, 풀이 이미지 1장을 선택해주세요.', + ? '정확한 풀이를 위해 문제 이미지 1장을 선택해주세요.' + : '정확한 풀이를 위해 문제 이미지 1장, 풀이 이미지 1장을 선택해주세요.', ); e.target.value = ''; return; } - // 2. 'me' 로딩 UI 시작 및 초기화 + // 3. 'me' 로딩 UI 시작 및 초기화 setUploadingSlots(Array.from({ length: expectedCount }, (_, i) => i)); setIsUploading(true); const uploadedUrls: string[] = []; @@ -253,7 +256,6 @@ const Solve = () => { s3Key: presignedKey, } = await getPresignedUrl(expectedCount); - // lastModified 정렬 로직 제거 const filesArray = Array.from(files); // S3 업로드 루프: filesArray의 순서를 그대로 사용 @@ -269,14 +271,13 @@ const Solve = () => { uploadedUrls.push(presignedUrls[i]); } - // 3. S3 업로드 완료 후, 로딩을 끄지 않고 프리로딩 시작 + // 4. S3 업로드 완료 후, 로딩을 끄지 않고 프리로딩 시작 await preloadImages(uploadedUrls); - // 4. 프리로딩 완료 후, 로딩 제거하고 동시에 이미지 추가 + // 5. 프리로딩 완료 후, 로딩 제거하고 동시에 이미지 추가 setUploadingSlots([]); setIsUploading(false); - // uploadedUrls는 사용자가 선택한 순서대로 uploadedUrls.forEach((url) => { handleImageSelect(url); }); @@ -285,7 +286,7 @@ const Solve = () => { setDownloadUrls(presignedUrls); setImageUploaded(true); } catch { - // 5. 실패 시 + // 6. 실패 시 addServerMessage( '이미지 업로드 중 오류가 발생했습니다. 다시 시도해 주세요.', ); @@ -293,7 +294,7 @@ const Solve = () => { setUploadingSlots([]); setIsUploading(false); } finally { - // 6. 모든 작업이 끝나면 input 초기화 + // 7. 모든 작업이 끝나면 input 초기화 e.target.value = ''; } }; diff --git a/src/pages/solve/solve.css.ts b/src/pages/solve/solve.css.ts index 942e880..9e166f0 100644 --- a/src/pages/solve/solve.css.ts +++ b/src/pages/solve/solve.css.ts @@ -24,7 +24,10 @@ const chatContainer = style({ const chatBubbleLeft = style({ alignSelf: 'flex-start', - maxWidth: '32rem', + width: 'fit-content', + + maxWidth: 'min(80vw, 45rem)', + padding: '1rem', borderRadius: '1.2rem', backgroundColor: themeVars.color.white000, @@ -33,7 +36,9 @@ const chatBubbleLeft = style({ const chatBubbleRight = style({ alignSelf: 'flex-end', - maxWidth: '32rem', + width: 'fit-content', + + maxWidth: 'min(80vw, 45rem)', padding: '1rem', borderRadius: '12px', background: themeVars.color.point, From 0400f4e685cb04463d94ea1bde786e19f3fc2a6e Mon Sep 17 00:00:00 2001 From: hansoojeongsj Date: Wed, 29 Oct 2025 05:01:23 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20solve=20=EB=A9=98=ED=8A=B8=20?= =?UTF-8?q?=EC=A1=B0=EA=B8=88=EB=8D=94=20=EC=B9=9C=EC=A0=88=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20(#62)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/solve/Solve.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/solve/Solve.tsx b/src/pages/solve/Solve.tsx index be2dc4c..84379bc 100644 --- a/src/pages/solve/Solve.tsx +++ b/src/pages/solve/Solve.tsx @@ -81,7 +81,7 @@ const Solve = () => { return setTimeout(() => { addChat({ from: 'server', - text: '문제 이미지를 먼저 업로드 해주세요!', + text: '질문을 시작하려면 카메라 버튼을 눌러 이미지를 업로드해 주세요!', }); }, 300); }