/** * This file is part of the SplendidBear Websites' projects. * * Copyright (c) 2026 @ www.splendidbear.org * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ import React, { memo, useMemo } from 'react'; import { IMAGES } from '@mine-utils'; const bombSrc = area => { if (null === area) return null; const vert = ['left', 'center', 'right'][area[0]] ?? null; const hor = ['top', 'middle', 'bottom'][area[1]] ?? null; if (null === vert || null === hor) return IMAGES.bombEmpty; return IMAGES.bombPos(hor, vert); }; const GridField = memo(function GridField({ cell, onClick, onMouseEnter }) { const { currentImage, currentObj, active, lastClickedRed, lastClickedBlue, bombTargetArea } = cell; const fieldClass = 'field' + (active ? ' active' : '') + (active && 'm' === currentObj ? ' mine' : '') + ' color-' + currentObj; const bombSourceString = useMemo(() => bombSrc(bombTargetArea), [bombTargetArea]); return (
Field of target {bombSourceString && ( Field of bomb target )} {(lastClickedRed || lastClickedBlue) && ( Last clicked area )}
{isNaN(currentImage) && (
)} {!isNaN(currentImage) && 0 !== currentImage && (
{currentImage}
)}
); }); export default GridField;