Skip to content

Commit e8a0516

Browse files
authored
Merge branch 'dev' into feature/페이지별-meta-데이터-작업
2 parents 05840fd + a51ffbb commit e8a0516

File tree

5 files changed

+131
-109
lines changed

5 files changed

+131
-109
lines changed

src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ const App = () => {
131131
<Route path="/kakao-login" element={<KaKaoLogin />} />
132132
<Route path="/mbti-test" element={<MbtiTestIntro />} />
133133
<Route path="/mbti-test-progress" element={<MbtiTestQuestions />} />
134-
<Route path="/mbti-test-result" element={<MbtiTestResult />} />
134+
<Route path="/mbti-test-result/:mbti" element={<MbtiTestResult />} />
135135
<Route path="*" element={<Error statusCode="500" />} />
136136
</Routes>
137137
</CenteredLayout>

src/components/header/MainHeader.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const MainHeader = ({ isLoggedIn }: { isLoggedIn: boolean }) => {
1111
};
1212

1313
return (
14-
<header className="flex h-[56px] w-full items-center justify-between bg-white px-5">
14+
<header className="flex h-[56px] w-full items-center justify-between bg-white pl-5">
1515
<Link to="/" className="flex items-center">
1616
<img
1717
src="/public/icon/mbtipslogo.svg"

src/pages/Chat.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ const Chat = () => {
144144
</Helmet>
145145

146146
<div className="flex h-screen w-[360px] flex-col bg-white md:w-[375px] lg:w-[500px]">
147-
<Header title={chatTitle} />
147+
<Header title={chatTitle} showShareIcon={false}/>
148148

149149
<div className="flex-1 space-y-4 overflow-y-auto px-[20px] pt-6">
150150
<IntroGuide />

src/pages/MbtiTestResult.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import RestartButton from "@/components/button/RestartButton";
66
import ChatStartButton from "@/components/button/ChatStartButton";
77
import useLayoutSize from "@/hooks/useLayoutSize";
88
import Header from "@/components/header/Header";
9+
import { useParams } from "react-router-dom";
910

1011
const MbtiTestResult = () => {
1112
const { mbti } = useParams();

src/store/useMbtiTestState.ts

Lines changed: 127 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -3,121 +3,142 @@ import { create } from "zustand";
33
type PageNumber = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
44

55
interface MbtiTestState {
6-
currentPage: PageNumber;
7-
currentMbti: string;
8-
mbtiLog: Record<string, number>;
9-
setNextStep: () => void;
10-
setPreviousStep: () => void;
11-
setMbtiLog: (mbti: string) => void;
12-
getMbtiByLog: () => void;
13-
validatePrevStepisComplete: (order: PageNumber) => boolean;
14-
setPageComplete: (step: PageNumber) => void;
15-
retry: () => void;
6+
currentPage: PageNumber;
7+
currentMbti: string;
8+
pageIsCompleted: Record<PageNumber, boolean>;
9+
mbtiLog: Record<string, number>;
10+
setNextStep: () => void;
11+
setPreviousStep: () => void;
12+
setMbtiLog: (mbti: string) => void;
13+
getMbtiByLog: () => void;
14+
validatePrevStepisComplete: (order: PageNumber) => boolean;
15+
setPageComplete: (step: PageNumber) => void;
16+
retry: () => void;
1617
}
1718

1819
const useMbtiTestState = create<MbtiTestState>((set, get) => ({
19-
currentPage: 1,
20-
currentMbti : "",
21-
mbtiLog: {
20+
currentPage: 1,
21+
currentMbti: "",
22+
pageIsCompleted: {
23+
1: false,
24+
2: false,
25+
3: false,
26+
4: false,
27+
5: false,
28+
6: false,
29+
7: false,
30+
8: false,
31+
9: false,
32+
10: false,
33+
11: false,
34+
12: false
35+
},
36+
mbtiLog: {
37+
E: 0,
38+
I: 0,
39+
N: 0,
40+
S: 0,
41+
F: 0,
42+
T: 0,
43+
J: 0,
44+
P: 0
45+
},
46+
setNextStep: () => {
47+
const currentPage = get().currentPage;
48+
const currentMbti = get().currentMbti;
49+
const setPageComplete = get().setPageComplete;
50+
51+
setPageComplete(currentPage); // 현재 페이지를 완료로 설정
52+
53+
// 마지막 페이지라면 결과 페이지로 이동
54+
if (currentPage === 12) {
55+
get().getMbtiByLog();
56+
if (currentMbti !== "")
57+
window.location.href = `/mbti-test-result/${currentMbti}`;
58+
else console.error("mbti가 비어있습니다.");
59+
} else {
60+
// 그렇지 않다면 페이지를 증가시킴
61+
set((state) => ({
62+
currentPage: (state.currentPage + 1) as PageNumber
63+
}));
64+
}
65+
},
66+
setPreviousStep: () => {
67+
const currentPage = get().currentPage;
68+
if (currentPage > 1) {
69+
// 페이지가 1보다 클 때만 감소
70+
set((state) => ({
71+
currentPage: (state.currentPage - 1) as PageNumber
72+
}));
73+
}
74+
},
75+
setMbtiLog: (mbti: string) => {
76+
set((state) => ({
77+
mbtiLog: {
78+
...state.mbtiLog,
79+
[mbti]: state.mbtiLog[mbti] + 1
80+
}
81+
}));
82+
},
83+
getMbtiByLog: () => {
84+
let mbti = "";
85+
const mbtiLog = get().mbtiLog;
86+
if (mbtiLog.E > mbtiLog.I) mbti += "E";
87+
else mbti += "I";
88+
if (mbtiLog.N > mbtiLog.S) mbti += "N";
89+
else mbti += "S";
90+
if (mbtiLog.F > mbtiLog.T) mbti += "F";
91+
else mbti += "T";
92+
if (mbtiLog.J > mbtiLog.P) mbti += "J";
93+
else mbti += "P";
94+
set(() => ({
95+
currentMbti: mbti
96+
}));
97+
localStorage.setItem("mbti-test-mbti", mbti);
98+
},
99+
validatePrevStepisComplete: (order: PageNumber) => {
100+
if (order <= 1) {
101+
return false;
102+
}
103+
return !!get().pageIsCompleted[(order - 1) as PageNumber];
104+
},
105+
setPageComplete: (step: PageNumber) => {
106+
set((state) => ({
107+
pageIsCompleted: {
108+
...state.pageIsCompleted,
109+
[step]: true
110+
}
111+
}));
112+
},
113+
retry: () => {
114+
set(() => ({
115+
currentPage: 1,
116+
pageIsCompleted: {
117+
1: false,
118+
2: false,
119+
3: false,
120+
4: false,
121+
5: false,
122+
6: false,
123+
7: false,
124+
8: false,
125+
9: false,
126+
10: false,
127+
11: false,
128+
12: false
129+
},
130+
log: {
22131
E: 0,
23132
I: 0,
24133
N: 0,
25134
S: 0,
26135
F: 0,
27136
T: 0,
28137
J: 0,
29-
P: 0,
30-
},
31-
setNextStep: () => {
32-
const currentPage = get().currentPage;
33-
const setPageComplete = get().setPageComplete;
34-
35-
setPageComplete(currentPage); // 현재 페이지를 완료로 설정
36-
37-
// 마지막 페이지라면 결과 페이지로 이동
38-
if (currentPage === 12) {
39-
get().getMbtiByLog();
40-
if (get().currentMbti !== "") window.location.href="/mbti-test-result";
41-
else console.error("mbti가 비어있습니다.");
42-
} else {
43-
// 그렇지 않다면 페이지를 증가시킴
44-
set((state) => ({
45-
currentPage: (state.currentPage + 1) as PageNumber,
46-
}));
47-
}
48-
49-
},
50-
setPreviousStep: () => {
51-
const currentPage = get().currentPage;
52-
if (currentPage > 1) { // 페이지가 1보다 클 때만 감소
53-
set((state) => ({
54-
currentPage: (state.currentPage - 1) as PageNumber,
55-
}));
56-
}
57-
},
58-
setMbtiLog : (mbti : string) => {
59-
set((state) => ({
60-
mbtiLog: {
61-
...state.mbtiLog,
62-
[mbti]: state.mbtiLog[mbti] + 1,
63-
},
64-
}));
65-
},
66-
getMbtiByLog:()=>{
67-
let mbti ="";
68-
const mbtiLog = get().mbtiLog;
69-
if(mbtiLog.E>mbtiLog.I) mbti += "E"; else mbti += "I";
70-
if(mbtiLog.N>mbtiLog.S) mbti += "N"; else mbti += "S";
71-
if(mbtiLog.F>mbtiLog.T) mbti += "F"; else mbti += "T";
72-
if(mbtiLog.J>mbtiLog.P) mbti += "J"; else mbti += "P";
73-
set(() => ({
74-
currentMbti: mbti,
75-
}));
76-
localStorage.setItem("mbti-test-mbti", mbti);
77-
},
78-
validatePrevStepisComplete: (order: PageNumber) => {
79-
if (order <= 1) {
80-
return false;
81-
}
82-
return !!get().pageIsCompleted[order - 1 as PageNumber];
83-
},
84-
setPageComplete: (step: PageNumber) => {
85-
set((state) => ({
86-
pageIsCompleted: {
87-
...state.pageIsCompleted,
88-
[step]: true,
89-
},
90-
}));
91-
},
92-
retry: ()=> {
93-
set(() => ({
94-
currentPage: 1,
95-
pageIsCompleted: {
96-
1: false,
97-
2: false,
98-
3: false,
99-
4: false,
100-
5: false,
101-
6: false,
102-
7: false,
103-
8: false,
104-
9: false,
105-
10: false,
106-
11: false,
107-
12: false,
108-
},
109-
log: {
110-
E: 0,
111-
I: 0,
112-
N: 0,
113-
S: 0,
114-
F: 0,
115-
T: 0,
116-
J: 0,
117-
P: 0,
118-
},
119-
}));
120-
},
138+
P: 0
139+
}
140+
}));
141+
}
121142
}));
122143

123-
export default useMbtiTestState;
144+
export default useMbtiTestState;

0 commit comments

Comments
 (0)