1- import Head from 'next/head'
2- import type { DrawShape } from 'chessground/draw'
3- import { useCallback , useContext , useMemo , useState } from 'react'
4-
5- import { AuthContext , ThemeContext , WindowSizeContext } from 'src/contexts'
61import {
72 GameInfo ,
3+ GameBoard ,
84 GameClock ,
95 ExportGame ,
106 StatsDisplay ,
7+ PromotionOverlay ,
118 MovesContainer ,
129 BoardController ,
13- PromotionOverlay ,
14- GameBoard ,
1510} from 'src/components'
11+ import Head from 'next/head'
1612import { useUnload } from 'src/hooks/useUnload'
13+ import type { DrawShape } from 'chessground/draw'
14+ import { useCallback , useContext , useMemo , useState } from 'react'
15+ import { AuthContext , ThemeContext , WindowSizeContext } from 'src/contexts'
1716import { PlayControllerContext } from 'src/contexts/PlayControllerContext/PlayControllerContext'
1817
1918interface Props {
@@ -28,64 +27,61 @@ export const GameplayInterface: React.FC<React.PropsWithChildren<Props>> = (
2827) => {
2928 const {
3029 game,
31- playType,
32- maiaVersion,
33- availableMoves,
34- makeMove,
35- player,
36- timeControl,
3730 stats,
31+ player,
32+ playType,
3833 gameTree,
34+ goToNode,
35+ plyCount,
3936 orientation,
40- setOrientation ,
37+ timeControl ,
4138 currentNode,
42- setCurrentNode ,
43- goToNode ,
39+ maiaVersion ,
40+ goToRootNode ,
4441 goToNextNode,
42+ availableMoves,
43+ makePlayerMove,
44+ setOrientation,
4545 goToPreviousNode,
46- goToRootNode,
47- plyCount,
4846 } = useContext ( PlayControllerContext )
4947 const { theme } = useContext ( ThemeContext )
50- const { isMobile } = useContext ( WindowSizeContext )
51-
5248 const { user } = useContext ( AuthContext )
49+ const { isMobile } = useContext ( WindowSizeContext )
5350
5451 const [ promotionFromTo , setPromotionFromTo ] = useState <
5552 [ string , string ] | null
5653 > ( null )
5754
58- const setCurrentMove = useCallback (
55+ const onPlayerMakeMove = useCallback (
5956 ( move : [ string , string ] | null ) => {
6057 if ( move ) {
61- const matching = availableMoves . filter ( ( m : any ) => {
58+ const matching = availableMoves . filter ( ( m ) => {
6259 return m . from == move [ 0 ] && m . to == move [ 1 ]
6360 } )
6461
6562 if ( matching . length > 1 ) {
6663 // Multiple matching moves (i.e. promotion)
67- // Show promotion UI
6864 setPromotionFromTo ( move )
6965 } else {
7066 const moveUci =
7167 matching [ 0 ] . from + matching [ 0 ] . to + ( matching [ 0 ] . promotion ?? '' )
72- makeMove ( moveUci )
68+ makePlayerMove ( moveUci )
7369 }
7470 }
7571 } ,
76- [ availableMoves , makeMove , setPromotionFromTo ] ,
72+ [ availableMoves , makePlayerMove , setPromotionFromTo ] ,
7773 )
7874
79- const selectPromotion = useCallback (
75+ const onPlayerSelectPromotion = useCallback (
8076 ( piece : string ) => {
8177 if ( ! promotionFromTo ) {
8278 return
8379 }
8480 setPromotionFromTo ( null )
8581 const moveUci = promotionFromTo [ 0 ] + promotionFromTo [ 1 ] + piece
86- makeMove ( moveUci )
82+ makePlayerMove ( moveUci )
8783 } ,
88- [ promotionFromTo , setPromotionFromTo , makeMove ] ,
84+ [ promotionFromTo , setPromotionFromTo , makePlayerMove ] ,
8985 )
9086
9187 useUnload ( ( e ) => {
@@ -95,7 +91,7 @@ export const GameplayInterface: React.FC<React.PropsWithChildren<Props>> = (
9591 }
9692 } )
9793
98- const moveMap = useMemo ( ( ) => {
94+ const availableMovesMapped = useMemo ( ( ) => {
9995 const result = new Map ( )
10096
10197 for ( const move of availableMoves ) {
@@ -181,6 +177,7 @@ export const GameplayInterface: React.FC<React.PropsWithChildren<Props>> = (
181177 < ExportGame
182178 game = { game }
183179 gameTree = { gameTree }
180+ currentNode = { currentNode }
184181 whitePlayer = { whitePlayer ?? 'Unknown' }
185182 blackPlayer = { blackPlayer ?? 'Unknown' }
186183 event = { `Play vs. ${ maiaTitle } ` }
@@ -192,17 +189,17 @@ export const GameplayInterface: React.FC<React.PropsWithChildren<Props>> = (
192189 < div className = "relative flex aspect-square w-full max-w-[75vh]" >
193190 < GameBoard
194191 game = { game }
195- moves = { moveMap }
196- setCurrentMove = { setCurrentMove }
192+ availableMoves = { availableMovesMapped }
193+ onPlayerMakeMove = { onPlayerMakeMove }
197194 shapes = { props . boardShapes }
198- currentNode = { currentNode ! }
195+ currentNode = { currentNode }
199196 orientation = { orientation }
200197 />
201198 { promotionFromTo ? (
202199 < PromotionOverlay
203200 player = { player }
204201 file = { promotionFromTo [ 1 ] . slice ( 0 ) }
205- selectPromotion = { selectPromotion }
202+ onPlayerSelectPromotion = { onPlayerSelectPromotion }
206203 />
207204 ) : null }
208205 </ div >
@@ -263,17 +260,17 @@ export const GameplayInterface: React.FC<React.PropsWithChildren<Props>> = (
263260 < div className = "relative flex aspect-square h-[100vw] w-screen" >
264261 < GameBoard
265262 game = { game }
266- moves = { moveMap }
267- setCurrentMove = { setCurrentMove }
263+ availableMoves = { availableMovesMapped }
264+ onPlayerMakeMove = { onPlayerMakeMove }
268265 shapes = { props . boardShapes }
269- currentNode = { currentNode ! }
266+ currentNode = { currentNode }
270267 orientation = { orientation }
271268 />
272269 { promotionFromTo ? (
273270 < PromotionOverlay
274271 player = { player }
275272 file = { promotionFromTo [ 1 ] . slice ( 0 ) }
276- selectPromotion = { selectPromotion }
273+ onPlayerSelectPromotion = { onPlayerSelectPromotion }
277274 />
278275 ) : null }
279276 </ div >
@@ -309,6 +306,7 @@ export const GameplayInterface: React.FC<React.PropsWithChildren<Props>> = (
309306 < ExportGame
310307 game = { game }
311308 gameTree = { gameTree }
309+ currentNode = { currentNode }
312310 whitePlayer = { whitePlayer ?? 'Unknown' }
313311 blackPlayer = { blackPlayer ?? 'Unknown' }
314312 event = { `Play vs. ${ maiaTitle } ` }
0 commit comments