@@ -3,121 +3,142 @@ import { create } from "zustand";
33type PageNumber = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 ;
44
55interface 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
1819const 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