import {MazeCell} from "./model/maze.ts"; import Coordinates from "./model/coordinates.ts"; import {actionClickedCell} from "./state/action.ts"; import styles from "./cell.module.css"; import "./cell.css"; function isMarked(x: number, y: number, marked: Coordinates[]): boolean { return !!marked.find(e => e.x === x && e.y === y); } export default function Cell({x, y, state, dispatch}) { const cell: MazeCell = state.maze.grid[y][x]; let classes = " r" + y + " c" + x; if (cell.top) classes += " top"; if (cell.right) classes += " right"; if (cell.bottom) classes += " bottom"; if (cell.left) classes += " left"; if (cell.solution && state.showSolution) classes += " solution"; const marked = isMarked(x, y, state.userPath); if (marked) classes += " user"; return ( <div className={styles.cell + classes} onMouseEnter={(e) => { const leftPressed = e.buttons & 0x1; if (leftPressed) { dispatch(actionClickedCell(x, y)); } }} onClick={(e) => { dispatch(actionClickedCell(x, y)); }}> </div> ); }