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 = } else if (type) { content = } return ( { let color = theme.colors.lime; return { backgroundColor: historyCell ? '#c0cc5c' : (squareColor === 'b' ? '#769854' : '#e8edcd'), aspectRatio: '1/1' } }} onClick={handleClick} bg={squareColor === 'w' ? "white" : "gray"} > {content} ) } const Mark = () => { return ( ) } 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