| import React, { useContext } from 'react' | |
| import PropTypes from 'prop-types'; | |
| import { socket } from '../socket'; | |
| import { Box, Flex } from '@mantine/core'; | |
| import { useDroppable } from '@dnd-kit/core' | |
| import Piece from './Piece'; | |
| import { ChessGameContext } from '../context/chess-game-context'; | |
| import { SOCKET_EVENTS } from '../constants'; | |
| const { CHESS_MOVE, GAME_END } = SOCKET_EVENTS | |
| const Cell = ({ cell, callbacks }) => { | |
| let roomID = localStorage.getItem('roomID'); | |
| let { square, type } = cell; | |
| const { getSquareColor, isSquareMarked, handleSquareClick, isLastMoveSquare } = useContext(ChessGameContext) | |
| const { isOver, setNodeRef } = useDroppable({ id: square }); | |
| let squareColor = getSquareColor(square); | |
| let historyCell = isLastMoveSquare(square); | |
| let marked = isSquareMarked(square); | |
| let borderColor = isOver ? '#77777744' : 'transparent'; | |
| let borderWidth = type ? '3px' : '5px' | |
| const handleClick = () => { | |
| handleSquareClick(square, callbacks.pieceClickCallback, () => { | |
| socket.emit(GAME_END, roomID); | |
| }); | |
| } | |
| let content = null; | |
| if (marked && !type) { | |
| content = <Mark /> | |
| } else if (type) { | |
| content = <Piece cell={cell} /> | |
| } | |
| return ( | |
| <Flex ref={setNodeRef} w='10vh' sx={theme => { | |
| let color = theme.colors.lime; | |
| return { backgroundColor: historyCell ? '#c0cc5c' : (squareColor === 'b' ? '#769854' : '#e8edcd'), aspectRatio: '1/1' } | |
| }} onClick={handleClick} bg={squareColor === 'w' ? "white" : "gray"} > | |
| {content} | |
| </Flex> | |
| ) | |
| } | |
| const Mark = () => { | |
| return ( | |
| <Box w="36%" h="36%" sx={{ backgroundColor: '#77777755', borderRadius: '100%' }} m="auto"></Box> | |
| ) | |
| } | |
| Cell.propTypes = { | |
| cell: PropTypes.shape({ | |
| square: PropTypes.string.isRequired, | |
| type: PropTypes.oneOf(['p', 'r', 'n', 'b', 'q', 'k']), | |
| color: PropTypes.oneOf(['w', 'b']) | |
| }) | |
| } | |
| export default Cell |