diff --git a/src/components/StampProgressBar.jsx b/src/components/StampProgressBar.jsx index 8d52645..0312f67 100644 --- a/src/components/StampProgressBar.jsx +++ b/src/components/StampProgressBar.jsx @@ -1,8 +1,9 @@ import React, { useState, useEffect } from "react"; import dummyStores from "../data/dummyStores"; -const StampProgressBar = ({ selectedStoreIdx }) => { +const StampProgressBar = ({ selectedStoreIdx, isSuccess }) => { const [lastStampedDiffText, setLastStampedDiffText] = useState(""); + useEffect(() => { if (selectedStoreIdx === null) { setLastStampedDiffText(""); @@ -26,6 +27,14 @@ const StampProgressBar = ({ selectedStoreIdx }) => { else setLastStampedDiffText(`${diffDays}일 전 완료`); }, [selectedStoreIdx]); + // 기존 도장 개수 + const baseCount = + selectedStoreIdx !== null + ? dummyStores[selectedStoreIdx].stampCount ?? 0 + : 0; + // 성공이면 UI상으로만 +1 + const displayCount = isSuccess ? baseCount + 1 : baseCount; + return (
@@ -34,7 +43,7 @@ const StampProgressBar = ({ selectedStoreIdx }) => { 완식 스템프 - {dummyStores[selectedStoreIdx].stampCount}개 + {displayCount}개
@@ -47,7 +56,7 @@ const StampProgressBar = ({ selectedStoreIdx }) => {
diff --git a/src/components/StepUploadImage.jsx b/src/components/StepUploadImage.jsx index fbe7a4a..68a1aac 100644 --- a/src/components/StepUploadImage.jsx +++ b/src/components/StepUploadImage.jsx @@ -68,14 +68,14 @@ export default function StepUploadImage({
preview
확인됐습니다!
{circle - ? <>식사 맛있게 하세요! 완식 확인 잊지마세요!
바로 분석한다면, ‘다음’ 버튼을 눌러주세요. + ? <>식사 맛있게 하세요! 완식 확인 잊지마세요!
바로 분석한다면, '다음' 버튼을 눌러주세요. : <>접시 상태가 업로드됐어요.
바로 분석하려면 '다음' 버튼을 눌러주세요. }
@@ -84,14 +84,15 @@ export default function StepUploadImage({ {/* 하단 버튼 */}
); -} +} \ No newline at end of file diff --git a/src/pages/FoodProcess.jsx b/src/pages/FoodProcess.jsx index 98fb8d8..c7c2957 100644 --- a/src/pages/FoodProcess.jsx +++ b/src/pages/FoodProcess.jsx @@ -77,7 +77,8 @@ export default function FoodProcess() { )} {step === 6 && ( { setStep(1); setQrResult(null); diff --git a/src/pages/steps/Step1_QR.jsx b/src/pages/steps/Step1_QR.jsx index da0d129..5365cd9 100644 --- a/src/pages/steps/Step1_QR.jsx +++ b/src/pages/steps/Step1_QR.jsx @@ -39,7 +39,7 @@ export default function Step1_QR({ onNext }) { processedRef.current = true; // 즉시 alert 표시하고 다음 단계로 진행 - alert("QR 인식 성공! 결과: " + result); + // alert("QR 인식 성공! 결과: " + result); // 약간의 딜레이 후 다음 단계로 진행 setTimeout(() => { @@ -140,7 +140,7 @@ export default function Step1_QR({ onNext }) { {/* 하단: 버튼+네비바 */}
- + */}
diff --git a/src/pages/steps/Step2_Map.jsx b/src/pages/steps/Step2_Map.jsx index 45cae93..79be04f 100644 --- a/src/pages/steps/Step2_Map.jsx +++ b/src/pages/steps/Step2_Map.jsx @@ -12,12 +12,21 @@ export default function Step2_Map({ qrResult, onNext, onPrev, onExit }) { // qrResult로 매장/도장 데이터 찾기 useEffect(() => { if (qrResult) { + // 디버깅용 콘솔 로그 + console.log("=== Step2_Map 디버깅 ==="); + console.log("qrResult:", qrResult); + console.log("dummyPlaces:", dummyPlaces); + console.log("dummyStores:", dummyStores); + // 1. 매장 정보 const found = dummyPlaces.find((place) => place.id === qrResult); + console.log("found place:", found); setSelectedLocation(found || null); // 2. 내가 방문한 매장(도장) 인덱스 const idx = dummyStores.findIndex((s) => s.id === qrResult); + console.log("store index:", idx); + console.log("matching store:", idx !== -1 ? dummyStores[idx] : null); setSelectedSearchStoreIdx(idx !== -1 ? idx : null); } }, [qrResult]); @@ -30,8 +39,15 @@ export default function Step2_Map({ qrResult, onNext, onPrev, onExit }) { return (
+ {/* 디버깅 정보 표시 */} + {/*
+
QR: {qrResult}
+
Store Index: {selectedSearchStoreIdx}
+
Location: {selectedLocation?.place_name || "없음"}
+
*/} + {/* 상단 뒤로가기 버튼 */} -
@@ -70,6 +88,10 @@ export default function Step2_Map({ qrResult, onNext, onPrev, onExit }) {
매장을 방문한 적이 없어요! +
+ QR: {qrResult} +
+ Store 개수: {dummyStores.length}
)} @@ -77,6 +99,8 @@ export default function Step2_Map({ qrResult, onNext, onPrev, onExit }) { ) : (
매장 정보를 찾을 수 없습니다. +
+ QR 결과: {qrResult}
)}
@@ -87,15 +111,21 @@ export default function Step2_Map({ qrResult, onNext, onPrev, onExit }) {
diff --git a/src/pages/steps/Step5_Analyze.jsx b/src/pages/steps/Step5_Analyze.jsx index 2b19569..14bae6f 100644 --- a/src/pages/steps/Step5_Analyze.jsx +++ b/src/pages/steps/Step5_Analyze.jsx @@ -54,7 +54,7 @@ export default function Step5_Analyze({ bowl, food, onFinish }) { 완식 여부를 확인중입니다.
잠시만 기다려주세요.
-
+
plate {scanning && (
@@ -93,4 +93,4 @@ function ScanEffect() { }} /> ); -} +} \ No newline at end of file diff --git a/src/pages/steps/Step6_Result.jsx b/src/pages/steps/Step6_Result.jsx index 99d175b..dbb3bf5 100644 --- a/src/pages/steps/Step6_Result.jsx +++ b/src/pages/steps/Step6_Result.jsx @@ -1,181 +1,157 @@ -import React, { useState } from "react"; - -// 실제 SVG 파일 import +import React, { useMemo } from "react"; +import { useNavigate } from "react-router-dom"; +import BackBtn from "../../assets/icons/BackBtn.svg"; import SuccessChar from "../../assets/icons/Result_icon/SuccessChar.svg"; import FailChar from "../../assets/icons/Result_icon/FailChar.svg"; import PointIconStar from "../../assets/icons/Result_icon/PointIcon-star.svg"; import PointIconLine from "../../assets/icons/Result_icon/PointIcon-line.svg"; import StampIcon from "../../assets/icons/Result_icon/StampIcon.svg"; +import StampProgressBar from "../../components/StampProgressBar"; +import dummyStores from "../../data/dummyStores"; -export default function Step6_Result() { - const [percent, setPercent] = useState(80); - const [demoMode, setDemoMode] = useState('success'); // 'success' or 'fail' - - // 성공/실패 판정 - const isSuccess = percent >= 80; +export default function Step6_Result({ storeId, analyze, onRestart }) { + const isSuccess = analyze?.isSuccess; + const percent = analyze?.percent; + const navigate = useNavigate(); - const handleToggleDemo = () => { - if (demoMode === 'success') { - setDemoMode('fail'); - setPercent(60); - } else { - setDemoMode('success'); - setPercent(80); - } - }; + // 도장 데이터: 해당 매장 인덱스 + const selectedStoreIdx = useMemo(() => { + const idx = dummyStores.findIndex((s) => s.id === storeId); + return idx !== -1 ? idx : null; + }, [storeId]); return (
- {/* 상단 바 */} -
- + {/* 상단바 */} +
+ 식사 인증 - -
- - {/* 진행바 */} -
- {[1, 2, 3, 4].map(i => ( -
- - {i < 4 &&
} -
- ))} + 재시작 + */}
- {/* 캐릭터와 말풍선 영역 */} -
- {/* 캐릭터 - 왼쪽에 위치 */} -
+ {/* 캐릭터+말풍선 */} +
+
{isSuccess ? ( -
- {/* 성공 시 배경 효과 */} -
- {/* SuccessChar 캐릭터 */} - 성공 -
+ <> +
+ 성공 + ) : ( -
- {/* 실패 시 배경 효과 */} -
- {/* FailChar 캐릭터 */} - 실패 -
+ <> +
+ 실패 + )}
- - {/* 말풍선 - 캐릭터 오른쪽에 위치 */} -
-
+
+
{isSuccess ? "덕분에 지구가\n오늘도 웃고있어요!" : "완식률이 부족해요.\n다음에 더 노력해볼까요?"}
- {/* 말풍선 꼬리 - 왼쪽으로 향함 */} -
+
- {/* 원형 게이지 영역 */} -
- - {/* 원형 게이지와 아이콘들 */} -
- {/* 성공 시 별 아이콘 - 원형 게이지 위쪽에 위치 */} - {isSuccess && ( - 별 - )} - - {/* 실패 시 라인 아이콘 - 원형 게이지 위쪽에 위치 */} - {!isSuccess && ( - 라인 - )} - - - - +
+ {isSuccess ? ( + 별 - - - {/* 퍼센트 텍스트 */} -
- {percent}% -
- - {/* 스탬프 아이콘 - 원형 게이지 오른쪽에 걸쳐져 있도록 배치 */} - {isSuccess && ( - 스탬프 )}
+ {/* 원형 게이지 */} + + + + +
+ {percent}% +
+ {isSuccess && ( + 스탬프 + )}
- {/* 아래 도장/포인트 현황 */} -
-
- 현재 1회 방문 중 4회 더 방문하면 쿠폰 지급! -
-
-
+
도장
+ {selectedStoreIdx !== null ? ( + -
+ ) : ( +
+
+ 매장을 방문한 적이 없어요! +
+
+ )}
{/* 하단 버튼 */} -
+
); -} \ No newline at end of file +}