@@ -10,8 +10,13 @@ import { Button } from '@components/shared/Button';
1010import { Flex } from '@components/shared/Flex' ;
1111import { Text } from '@components/shared/Text' ;
1212
13+ import { useMannerScoreReviewPatchMutation } from '@hooks/mutations/useMannerScoreReviewPatchMutation' ;
14+ import { useGameDetailQuery } from '@hooks/queries/useGameDetailQuery' ;
15+
1316import { theme } from '@styles/theme' ;
1417
18+ import { PATH_NAME } from '@consts/pathName' ;
19+
1520import leftArrowIcon from '@assets/leftArrow.svg' ;
1621import rightArrowIcon from '@assets/rightArrow.svg' ;
1722
@@ -22,35 +27,57 @@ import {
2227 MemberListContainer ,
2328 ReviewPageContainer ,
2429 TextWrapper ,
25- } from './ReviewPage .style' ;
30+ } from './MannerScoreReviewPage .style' ;
2631import { ToggleButton } from './ToggleButton' ;
2732
28- export const ReviewPage = ( ) => {
33+ export const MannerScoreReviewPage = ( ) => {
2934 const navigate = useNavigate ( ) ;
35+ const gameId = Number ( location . pathname . split ( '/' ) [ 2 ] ) ;
36+ const { data } = useGameDetailQuery ( gameId ) ;
37+ const teammateListInfo = data . members ;
3038
3139 const [ currentSelectedMemberIndex , setCurrentSelectedMemberIndex ] =
3240 useState ( 0 ) ;
41+ const [ isOpen , setIsOpen ] = useState ( false ) ;
42+ const [ teammateList , setTeammateList ] = useState <
43+ {
44+ memberId : number ;
45+ mannerScore : - 1 | 0 | 1 ;
46+ } [ ]
47+ > (
48+ data . members . map ( ( { id } ) => {
49+ return {
50+ memberId : id ,
51+ mannerScore : 0 ,
52+ } ;
53+ } )
54+ ) ;
55+
56+ const { mutate } = useMannerScoreReviewPatchMutation ( {
57+ payload : { mannerScoreReviews : teammateList } ,
58+ gameId : gameId ,
59+ } ) ;
3360
34- const [ toggleState , setToggleState ] = useState ( '' ) ;
3561 const handleToggle = ( value : string ) => {
36- setToggleState ( value ) ;
62+ teammateList . splice ( currentSelectedMemberIndex , 1 , {
63+ memberId : teammateList [ currentSelectedMemberIndex ] . memberId ,
64+ mannerScore : value === '좋았어요' ? 1 : - 1 ,
65+ } ) ;
66+ setTeammateList ( [ ...teammateList ] ) ;
3767 } ;
3868
39- const [ isOpen , setIsOpen ] = useState ( false ) ;
40-
4169 const handleLeftArrowIconClick = ( ) => {
4270 if ( currentSelectedMemberIndex > 0 ) {
4371 setCurrentSelectedMemberIndex ( currentSelectedMemberIndex - 1 ) ;
44- handleToggle ( '' ) ;
4572 }
4673 } ;
4774
4875 const handleRightArrowIconClick = ( ) => {
4976 if ( currentSelectedMemberIndex < teammateList . length - 1 ) {
5077 setCurrentSelectedMemberIndex ( currentSelectedMemberIndex + 1 ) ;
51- handleToggle ( '' ) ;
5278 }
5379 } ;
80+
5481 return (
5582 < ReviewPageContainer >
5683 < Header isRightContainer = { false } />
@@ -61,18 +88,17 @@ export const ReviewPage = () => {
6188 </ TextWrapper >
6289 < MemberListContainer transform = { - currentSelectedMemberIndex * 60 } >
6390 < Flex direction = "row" gap = { 10 } >
64- { teammateList . map ( ( { imgUrl , name } , index ) => (
91+ { teammateListInfo . map ( ( { profileImageUrl , nickname } , index ) => (
6592 < Flex
6693 key = { index }
6794 direction = "column"
6895 justify = "center"
6996 onClick = { ( ) => {
7097 setCurrentSelectedMemberIndex ( index ) ;
71- handleToggle ( '' ) ;
7298 } }
7399 >
74100 < Avatar
75- src = { imgUrl }
101+ src = { profileImageUrl }
76102 size = { 50 }
77103 border = {
78104 index === currentSelectedMemberIndex
@@ -82,7 +108,7 @@ export const ReviewPage = () => {
82108 radius = { '5px' }
83109 />
84110 < Text size = { '0.5rem' } weight = { 300 } ellipsis = { 1 } >
85- { name }
111+ { nickname }
86112 </ Text >
87113 </ Flex >
88114 ) ) }
@@ -93,7 +119,6 @@ export const ReviewPage = () => {
93119 < BackwardWrapper >
94120 < BackwardIcon
95121 onClick = { ( ) => {
96- console . log ( currentSelectedMemberIndex ) ;
97122 handleLeftArrowIconClick ( ) ;
98123 } }
99124 >
@@ -102,13 +127,13 @@ export const ReviewPage = () => {
102127 </ BackwardWrapper >
103128 < Flex direction = "column" gap = { 10 } align = "center" >
104129 < Avatar
105- src = { teammateList [ currentSelectedMemberIndex ] . imgUrl }
130+ src = { teammateListInfo [ currentSelectedMemberIndex ] . profileImageUrl }
106131 size = { 100 }
107132 border = { `1px solid ${ theme . PALETTE . GRAY_400 } ` }
108133 radius = { '5px' }
109134 />
110135 < Text size = { '1.5rem' } weight = { 500 } >
111- { teammateList [ currentSelectedMemberIndex ] . name }
136+ { teammateListInfo [ currentSelectedMemberIndex ] . nickname }
112137 </ Text >
113138 < Text
114139 size = { '1rem' }
@@ -122,7 +147,6 @@ export const ReviewPage = () => {
122147 < BackwardWrapper >
123148 < BackwardIcon
124149 onClick = { ( ) => {
125- console . log ( currentSelectedMemberIndex ) ;
126150 handleRightArrowIconClick ( ) ;
127151 } }
128152 >
@@ -142,7 +166,9 @@ export const ReviewPage = () => {
142166 value = "좋았어요"
143167 height = { '3.125rem' }
144168 fontSize = { theme . FONT_SIZE . LG }
145- isActive = { toggleState === '좋았어요' }
169+ isActive = {
170+ teammateList [ currentSelectedMemberIndex ] . mannerScore === 1
171+ }
146172 onToggle = { ( value ) => {
147173 handleToggle ( value ) ;
148174 } }
@@ -151,7 +177,9 @@ export const ReviewPage = () => {
151177 value = "아쉬워요"
152178 height = { '3.125rem' }
153179 fontSize = { theme . FONT_SIZE . LG }
154- isActive = { toggleState === '아쉬워요' }
180+ isActive = {
181+ teammateList [ currentSelectedMemberIndex ] . mannerScore === - 1
182+ }
155183 onToggle = { ( value ) => {
156184 handleToggle ( value ) ;
157185 } }
@@ -162,7 +190,10 @@ export const ReviewPage = () => {
162190 { ...theme . BUTTON_PROPS . LARGE_RED_BUTTON_PROPS }
163191 onClick = { ( ) => {
164192 if ( confirm ( '리뷰를 제출하시겠습니까?' ) ) {
165- navigate ( '/' ) ;
193+ mutate ( ) ;
194+ navigate ( PATH_NAME . GET_GAMES_PATH ( `${ gameId } ` ) , {
195+ replace : true ,
196+ } ) ;
166197 }
167198 } }
168199 >
@@ -177,21 +208,3 @@ export const ReviewPage = () => {
177208 </ ReviewPageContainer >
178209 ) ;
179210} ;
180-
181- const teammateList = [
182- { imgUrl : 'https://picsum.photos/id/10/500' , name : 'pickple user1' } ,
183- { imgUrl : 'https://picsum.photos/id/20/500' , name : 'pickple user2' } ,
184- { imgUrl : 'https://picsum.photos/id/30/500' , name : 'pickple user3' } ,
185- { imgUrl : 'https://picsum.photos/id/40/500' , name : 'pickple user4' } ,
186- { imgUrl : 'https://picsum.photos/id/50/500' , name : 'pickple user5' } ,
187- { imgUrl : 'https://picsum.photos/id/60/500' , name : 'pickple user6' } ,
188- { imgUrl : 'https://picsum.photos/id/70/500' , name : 'pickple user7' } ,
189- { imgUrl : 'https://picsum.photos/id/80/500' , name : 'pickple user8' } ,
190- { imgUrl : 'https://picsum.photos/id/90/500' , name : 'pickple user9' } ,
191- { imgUrl : 'https://picsum.photos/id/100/500' , name : 'pickple user10' } ,
192- { imgUrl : 'https://picsum.photos/id/110/500' , name : 'pickple user11' } ,
193- { imgUrl : 'https://picsum.photos/id/120/500' , name : 'pickple user12' } ,
194- { imgUrl : 'https://picsum.photos/id/130/500' , name : 'pickple user13' } ,
195- { imgUrl : 'https://picsum.photos/id/140/500' , name : 'pickple user14' } ,
196- { imgUrl : 'https://picsum.photos/id/141/500' , name : 'pickple user15' } ,
197- ] ;
0 commit comments