| import React, { useContext, useEffect } from 'react'; | |
| import { Flex, createStyles } from '@mantine/core'; | |
| import { DndContext } from '@dnd-kit/core' | |
| import Cell from '../../components/Cell'; | |
| import { ChessGameContext } from '../../context/chess-game-context'; | |
| import { socket } from '../../socket'; | |
| import { SOCKET_EVENTS } from '../../constants'; | |
| const { GAME_END } = SOCKET_EVENTS | |
| const useStyles = createStyles((theme) => ({ | |
| chessboard: { | |
| [theme.fn.largerThan('md')]: { | |
| width: '600px' | |
| }, | |
| [theme.fn.smallerThan('md')]: { | |
| width: '560px' | |
| }, | |
| [theme.fn.smallerThan('sm')]: { | |
| width: '360px', | |
| }, | |
| }, | |
| boardrow: { | |
| [theme.fn.largerThan('md')]: { | |
| height: '75px' | |
| }, | |
| [theme.fn.smallerThan('md')]: { | |
| height: '70px' | |
| }, | |
| [theme.fn.smallerThan('sm')]: { | |
| height: '45px' | |
| }, | |
| } | |
| })) | |
| const ChessBoard = ({ callbacks }) => { | |
| const { classes } = useStyles(); | |
| const { getChessBoard, handleDrop,selected,selectPiece,getPieceColor } = useContext(ChessGameContext) | |
| const chessBoard = getChessBoard(); | |
| const myColor = localStorage.getItem('myColor'); | |
| const roomID = localStorage.getItem('roomID'); | |
| const dragEndCallback =evt => { | |
| let from = evt.active.id; | |
| let to = evt.over.id; | |
| if(from !== to) { | |
| handleDrop({from,to}, callbacks.pieceDropCallback, () => { | |
| socket.emit(GAME_END, roomID); | |
| }); | |
| return; | |
| } | |
| if(from === to) { | |
| console.log("handleDrop",from,to); | |
| let moveData = from === to ? {from:selected,to} : {from,to}; | |
| handleDrop(moveData, callbacks.pieceDropCallback, () => { | |
| socket.emit(GAME_END, roomID); | |
| }); | |
| } else { | |
| console.log("handleDrop",from,to,"2"); | |
| let pieceColor = getPieceColor(to); | |
| pieceColor && selectPiece({square:to,color:pieceColor}); | |
| } | |
| } | |
| if (myColor === 'w') { | |
| return ( | |
| <DndContext onDragEnd={dragEndCallback}> | |
| <Flex h='80vh' sx={{ userSelect: 'none' }}> | |
| <div> | |
| {chessBoard.map((row, rowIndex) => { | |
| return ( | |
| <Flex key={rowIndex * 2}> | |
| {row.map(cell => <Cell callbacks={{ pieceClickCallback: callbacks.pieceClickCallback }} key={cell.square} cell={cell} />)} | |
| </Flex> | |
| ) | |
| })} | |
| </div> | |
| </Flex> | |
| </DndContext> | |
| ) | |
| } else { | |
| return ( | |
| <DndContext onDragEnd={dragEndCallback}> | |
| <Flex h='80vh' sx={{userSelect:'none'}}> | |
| <div> | |
| {chessBoard.map((row, rowIndex) => { | |
| return ( | |
| <Flex key={rowIndex * 2}> | |
| {row.map(cell => <Cell callbacks={{ pieceClickCallback: callbacks.pieceClickCallback }} key={cell.square} cell={cell} />).reverse()} | |
| </Flex> | |
| ) | |
| }).reverse()} | |
| </div> | |
| </Flex> | |
| </DndContext> | |
| ) | |
| } | |
| } | |
| export default ChessBoard |