@@ -10,7 +10,13 @@ import { BLANK_CARD, SelectableCard } from "../../model/Cards"
10
10
11
11
import GameService from "../../services/GameService"
12
12
import { RoundStatus } from "../../model/Round"
13
- import { getGameId , getIsMyGo , getRound } from "../../caches/GameSlice"
13
+ import {
14
+ getGameId ,
15
+ getIamGoer ,
16
+ getIsMyGo ,
17
+ getIsRoundCalled ,
18
+ getRound ,
19
+ } from "../../caches/GameSlice"
14
20
import { useAppDispatch , useAppSelector } from "../../caches/hooks"
15
21
import { useSnackbar } from "notistack"
16
22
import {
@@ -37,8 +43,10 @@ const MyCards: React.FC = () => {
37
43
const dispatch = useAppDispatch ( )
38
44
const gameId = useAppSelector ( getGameId )
39
45
const round = useAppSelector ( getRound )
46
+ const isRoundCalled = useAppSelector ( getIsRoundCalled )
40
47
const myCards = useAppSelector ( getMyCards )
41
48
const autoPlayCard = useAppSelector ( getAutoPlayCard )
49
+ const iamGoer = useAppSelector ( getIamGoer )
42
50
const isMyGo = useAppSelector ( getIsMyGo )
43
51
44
52
const { enqueueSnackbar } = useSnackbar ( )
@@ -71,6 +79,11 @@ const MyCards: React.FC = () => {
71
79
[ round ] ,
72
80
)
73
81
82
+ const showDummy = useMemo (
83
+ ( ) => isRoundCalled && iamGoer ,
84
+ [ isRoundCalled , iamGoer ] ,
85
+ )
86
+
74
87
const handleSelectCard = useCallback (
75
88
( card : SelectableCard ) => {
76
89
if ( ! cardsSelectable || card . name === BLANK_CARD . name ) {
@@ -117,6 +130,24 @@ const MyCards: React.FC = () => {
117
130
[ myCards ] ,
118
131
)
119
132
133
+ const handleOnDragEndDummy = useCallback (
134
+ ( result : DropResult ) => {
135
+ if ( ! result . destination ) return
136
+
137
+ const updatedCards = myCards . map ( c => {
138
+ return { ...c }
139
+ } )
140
+ const [ reorderedItem ] = updatedCards . splice (
141
+ result . source . index + 5 ,
142
+ 1 ,
143
+ )
144
+ updatedCards . splice ( result . destination . index + 5 , 0 , reorderedItem )
145
+
146
+ dispatch ( replaceMyCards ( updatedCards ) )
147
+ } ,
148
+ [ myCards ] ,
149
+ )
150
+
120
151
const getStyleForCard = useCallback (
121
152
( card : SelectableCard ) => {
122
153
let classes = "thumbnail_size"
@@ -148,14 +179,14 @@ const MyCards: React.FC = () => {
148
179
< div >
149
180
< CardBody className = "cardArea" >
150
181
< DragDropContext onDragEnd = { handleOnDragEnd } >
151
- < Droppable droppableId = "characters " direction = "horizontal" >
182
+ < Droppable droppableId = "myCards " direction = "horizontal" >
152
183
{ provided => (
153
184
< div
154
185
className = "characters myCards"
155
186
style = { { display : "inline-flex" } }
156
187
{ ...provided . droppableProps }
157
188
ref = { provided . innerRef } >
158
- { myCards . map ( ( card , index ) => {
189
+ { myCards . slice ( 0 , 5 ) . map ( ( card , index ) => {
159
190
const draggableId = `${ card . name } ${
160
191
card . name === BLANK_CARD . name
161
192
? index
@@ -198,6 +229,61 @@ const MyCards: React.FC = () => {
198
229
</ DragDropContext >
199
230
</ CardBody >
200
231
232
+ { showDummy && (
233
+ < CardBody className = "cardArea" >
234
+ < DragDropContext onDragEnd = { handleOnDragEndDummy } >
235
+ < Droppable droppableId = "dummy" direction = "horizontal" >
236
+ { provided => (
237
+ < div
238
+ className = "characters myCards"
239
+ style = { { display : "inline-flex" } }
240
+ { ...provided . droppableProps }
241
+ ref = { provided . innerRef } >
242
+ { myCards . slice ( 5 , 10 ) . map ( ( card , index ) => {
243
+ const draggableId = `${ card . name } ${
244
+ card . name === BLANK_CARD . name
245
+ ? index
246
+ : ""
247
+ } `
248
+ return (
249
+ < Draggable
250
+ key = { draggableId }
251
+ draggableId = { draggableId }
252
+ index = { index }
253
+ isDragDisabled = {
254
+ card . name ===
255
+ BLANK_CARD . name
256
+ } >
257
+ { provided => (
258
+ < div
259
+ ref = { provided . innerRef }
260
+ { ...provided . draggableProps }
261
+ { ...provided . dragHandleProps } >
262
+ < CardImg
263
+ alt = { card . name }
264
+ onClick = { ( ) =>
265
+ handleSelectCard (
266
+ card ,
267
+ )
268
+ }
269
+ src = { `/cards/thumbnails/${ card . name } .png` }
270
+ className = { getStyleForCard (
271
+ card ,
272
+ ) }
273
+ />
274
+ </ div >
275
+ ) }
276
+ </ Draggable >
277
+ )
278
+ } ) }
279
+ { provided . placeholder }
280
+ </ div >
281
+ ) }
282
+ </ Droppable >
283
+ </ DragDropContext >
284
+ </ CardBody >
285
+ ) }
286
+
201
287
{ round ?. status === RoundStatus . PLAYING ? (
202
288
< CardBody className = "buttonArea" >
203
289
< ButtonGroup size = "lg" >
0 commit comments