UNPKG

nes-tetris-components

Version:

A set of components and front-end functionality of NES Tetris

36 lines (35 loc) 2.36 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TetrisGrid = void 0; const react_1 = __importDefault(require("react")); require("./representation.css"); const block_1 = __importDefault(require("./block")); const lodash_1 = __importDefault(require("lodash")); function getRow(row, blocks, beforeBlocks, blockSizeInRem, getBlockProps, transparentEmptyBlocks) { const width = blocks.length ? `${100 / blocks.length}%` : 'auto'; return (react_1.default.createElement("div", { className: "tetris-row", key: row, style: { height: `${blockSizeInRem}rem` } }, blocks.map((block, blockIndex) => react_1.default.createElement(block_1.default, Object.assign({ key: row * 20 + blockIndex, row: row, column: blockIndex, value: block, width: width, transparent: transparentEmptyBlocks, showDiff: !!beforeBlocks && !!block && !beforeBlocks[blockIndex] }, (getBlockProps === undefined ? undefined : getBlockProps(row, blockIndex, block))))))); } function TetrisGrid({ grid, beforeGrid = null, possiblePiece, blockSizeInRem = 2, onClick, onMouseLeave, getBlockProps, hideTopTwoRows = true, transparentEmptyBlocks = false, className, }) { let adjustedBeforeGrid = beforeGrid; let adjustedGrid = grid; if (possiblePiece) { adjustedBeforeGrid = grid; adjustedGrid = lodash_1.default.cloneDeep(grid); possiblePiece.blocks.forEach(block => { adjustedGrid[block.row][block.column] = block.value; }); } const numberOfRows = grid.length - (hideTopTwoRows ? 2 : 0); const numberOfColumns = Math.max(...grid.map(row => row.length)); const width = blockSizeInRem * numberOfColumns; const height = blockSizeInRem * numberOfRows; return (react_1.default.createElement("div", { style: { height: `${height}rem`, width: `${width}rem` }, onClick: onClick, onMouseLeave: onMouseLeave, className: className }, adjustedGrid.map((row, rowKey) => { return hideTopTwoRows && rowKey < 2 ? null : getRow(rowKey, row, adjustedBeforeGrid ? adjustedBeforeGrid[rowKey] : null, blockSizeInRem, getBlockProps, transparentEmptyBlocks); }))); } exports.TetrisGrid = TetrisGrid;