diff --git a/src/Pages/game/playPage.tsx b/src/Pages/game/playPage.tsx
index d9cfe40..9b99b2c 100644
--- a/src/Pages/game/playPage.tsx
+++ b/src/Pages/game/playPage.tsx
@@ -1,4 +1,4 @@
-import { useNavigate, useParams } from "react-router-dom";
+import { useNavigate, useParams, useLocation } from "react-router-dom";
import { useEffect } from "react";
import GameButtons from "../../Component/Game/GameButtons";
import GameHeader from "../../Component/Game/GameHeader";
@@ -18,151 +18,189 @@ import { usePortfolioStore } from "../../store/usePortfolioStore";
import RollModal from "../../Game/Tutorial/roll";
const Container = styled.div`
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- text-align: center;
- position: relative;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ position: relative;
`;
const PlayPage = () => {
- const { year } = useParams<{ year: string }>();
- const { stockData, setStockData } = useStock();
- const nav = useNavigate();
- const yearValue = year || "2014";
- const [isTradeModalVisible, setIsTradeModalVisible] = useState(false);
- const [isPassModalVisible, setIsPassModalVisible] = useState(false);
- const [isHappyNewYearModal, setIsHappyNewYearModal] = useState(false);
- const [budget, setBudget] = useState(0);
- const [loading, setLoading] = useState(false);
-
- const check = usePortfolioStore((state) => state.check);
- const setCheck = usePortfolioStore((state) => state.setCheck);
-
- // 튜토리얼을 볼지 결정하는 상태 (첫 번째 튜토리얼 단계 관리)
- const [fir, setFir] = useState(true); // 처음엔 true로 설정하여 튜토리얼 표시
- const [sec, setSec] = useState(false); // 두 번째 튜토리얼 단계를 위한 상태
- const [step, setStep] = useState(1); // 현재 튜토리얼 단계
-
- // 첫번째 튜토리얼을 닫는 함수
- const closeFirstTutorial = () => {
- setFir(false); // 첫 번째 튜토리얼을 닫음
- setSec(true); // 두 번째 튜토리얼도 닫음
+ const { year } = useParams<{ year: string }>();
+ const { stockData, setStockData } = useStock();
+ const nav = useNavigate();
+ const yearValue = year || "2014";
+ const [isTradeModalVisible, setIsTradeModalVisible] = useState(false);
+ const [isPassModalVisible, setIsPassModalVisible] = useState(false);
+ const [isHappyNewYearModal, setIsHappyNewYearModal] = useState(false);
+ const [budget, setBudget] = useState(0);
+
+ const check = usePortfolioStore((state) => state.check);
+ const setCheck = usePortfolioStore((state) => state.setCheck);
+
+ // 튜토리얼을 볼지 결정하는 상태 (첫 번째 튜토리얼 단계 관리)
+ const [fir, setFir] = useState(true); // 처음엔 true로 설정하여 튜토리얼 표시
+ const [sec, setSec] = useState(false); // 두 번째 튜토리얼 단계를 위한 상태
+ const [step, setStep] = useState(1); // 현재 튜토리얼 단계
+
+ // 컴포넌트가 마운트될 때 튜토리얼 상태를 로컬 스토리지에서 확인
+ useEffect(() => {
+ const hasSeenTutorial = localStorage.getItem("hasSeenTutorial");
+ if (hasSeenTutorial === "true") {
+ setFir(false); // 이미 튜토리얼을 본 경우 튜토리얼을 표시하지 않음
+ setSec(false);
+ }
+ }, []);
+
+ // 첫번째 튜토리얼을 닫는 함수
+ const closeFirstTutorial = () => {
+ setFir(false); // 첫 번째 튜토리얼을 닫음
+ setSec(true); // 두 번째 튜토리얼도 닫음
+ };
+
+ // 두번째 튜토리얼을 닫는 함수
+ const closeSecTutorial = () => {
+ setSec(false);
+ };
+
+ // 페이지가 마운트되거나 경로가 변경될 때마다 스크롤 상태를 초기화
+ useEffect(() => {
+ const resetScroll = () => {
+ if (!fir && !sec) {
+ document.body.style.overflow = "auto"; // 스크롤 허용
+ } else {
+ document.body.style.overflow = "hidden"; // 튜토리얼 진행 중일 때 스크롤 차단
+ }
};
- // 두번째 튜토리얼을 닫는 함수
- const closeSecTutorial = () => {
- setSec(false);
- };
-
- // 튜토리얼이 완료되었는지 확인하고 스크롤을 허용
- useEffect(() => {
- if (!fir && !sec) {
- document.body.style.overflow = "auto";
- }
- }, [fir, sec]);
-
- // 거래하기 모달 핸들러
- const openTradeModal = () => {
- setIsTradeModalVisible(true);
- };
-
- const closeTradeModal = () => {
- setIsTradeModalVisible(false);
- };
+ resetScroll(); // 처음 페이지가 마운트될 때 스크롤 설정
- // 넘어가기 모달 핸들러
- const openPassModal = () => {
- setIsPassModalVisible(true);
+ // 페이지가 떠날 때 스크롤을 auto로 리셋
+ return () => {
+ document.body.style.overflow = "auto"; // 컴포넌트 언마운트 시 스크롤 허용
};
-
- const closePassModal = () => {
- setIsPassModalVisible(false);
- };
-
- // 넘어가기 버튼 누르면 중간결과 호출
- const handleConfirmPass = async () => {
- try {
- setLoading(true);
- setIsHappyNewYearModal(true);
- setIsPassModalVisible(false);
-
- if (year === "2023") {
- console.log("게임 끝");
- nav("/game/result/total");
- } else {
- const response = await axios.get(
- `${process.env.REACT_APP_API_URL}/v1/game/interim`,
- {
- withCredentials: true,
- headers: {
- "Content-Type": "application/json",
- },
- }
- );
- if (response.status === 200) {
- if (
- (parseInt(yearValue, 10) + 1).toString() ===
- response.data.year.toString()
- ) {
- const updatedStockList = response.data.stockList;
- setStockData(updatedStockList);
- }
-
- // API 완료 후 모달 닫고 페이지 이동
- setIsHappyNewYearModal(false);
- const nextYear = (parseInt(yearValue, 10) + 1).toString();
- nav(`/game/play/${nextYear}`);
- setCheck(!check);
- }
- }
- } catch (error) {
- console.error(error);
- } finally {
- setLoading(false);
- closePassModal();
+ }, [fir, sec]); // fir, sec 상태가 변경될 때마다 실행
+
+ const location = useLocation();
+
+ // 페이지 이동 시 스크롤 상태 초기화
+ useEffect(() => {
+ document.body.style.overflow = "auto"; // 경로 변경 시 스크롤 초기화
+ }, [location.pathname]);
+
+ // 페이지 경로 변경 시 스크롤 상태를 확인하고 초기화
+ useEffect(() => {
+ // 페이지 경로가 바뀌었을 때 튜토리얼 상태에 따른 스크롤 초기화
+ if (!fir && !sec) {
+ document.body.style.overflow = "auto"; // 튜토리얼이 완료되었으면 스크롤 허용
+ } else {
+ document.body.style.overflow = "hidden"; // 튜토리얼 중이면 스크롤 차단
+ }
+ }, [location.pathname, fir, sec]); // location.pathname, fir, sec이 변경될 때마다 실행
+
+ // 거래하기 모달 핸들러
+ const openTradeModal = () => {
+ setIsTradeModalVisible(true);
+ };
+
+ const closeTradeModal = () => {
+ setIsTradeModalVisible(false);
+ };
+
+ // 넘어가기 모달 핸들러
+ const openPassModal = () => {
+ setIsPassModalVisible(true);
+ };
+
+ const closePassModal = () => {
+ setIsPassModalVisible(false);
+ };
+
+ // 넘어가기 버튼 누르면 중간결과 호출
+ const handleConfirmPass = async () => {
+ try {
+ if (year === "2023") {
+ console.log("게임 끝");
+ nav("/game/result/total");
+ } else {
+ const response = await axios.get(
+ `${process.env.REACT_APP_API_URL}/v1/game/interim`,
+ {
+ withCredentials: true,
+ headers: {
+ "Content-Type": "application/json",
+ },
+ }
+ );
+ if (response.status === 200) {
+ // 새해 모달을 먼저 보여줌(7초동안 띄워야함)
+
+ setIsHappyNewYearModal(true);
+ if (
+ (parseInt(yearValue, 10) + 1).toString() ===
+ response.data.year.toString()
+ ) {
+ const updatedStockList = response.data.stockList;
+ setStockData(updatedStockList);
+ }
+ // 4초 후 페이지를 이동
+ setTimeout(() => {
+ const nextYear = (parseInt(yearValue, 10) + 1).toString();
+
+ nav(`/game/play/${nextYear}`);
+ setIsHappyNewYearModal(false);
+ setCheck(!check);
+ // window.location.reload();
+ }, 500); // 4초 동안 모달을 보여줌
}
- };
-
- return (
-
-
-
-
-
-
-
-
-
- {/* 튜토리얼을 표시 */}
- {(fir || sec) && (
-
- )}
-
- );
+ }
+ } catch (error) {
+ console.error(error);
+ } finally {
+ closePassModal();
+ }
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+ {/* 튜토리얼을 표시 */}
+ {(fir || sec) && (
+
+ )}
+
+ );
};
export default PlayPage;
+