| 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 |