From 5404a95c15e176d25728bf1a319ddb9828b23625 Mon Sep 17 00:00:00 2001 From: Josh Kingsley Date: Sat, 25 Oct 2025 20:46:35 +0300 Subject: refactor(web): re-organize files --- web/src/renderGrid.ts | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 web/src/renderGrid.ts (limited to 'web/src/renderGrid.ts') diff --git a/web/src/renderGrid.ts b/web/src/renderGrid.ts new file mode 100644 index 0000000..476876b --- /dev/null +++ b/web/src/renderGrid.ts @@ -0,0 +1,64 @@ +import Rect from "./math/Rect"; +import { Cell, CellRef, Grid, Row, RowRef } from "./types"; + +export interface RenderedCell extends Cell { + cellRef: CellRef; + rect: Rect; +} + +export interface RenderedRow { + rowRef: RowRef; + rect: Rect; + renderedCells: RenderedCell[]; +} + +export interface RenderedGrid extends Grid { + rect: Rect; + renderedRows: RenderedRow[]; +} + +function renderCell(grid: Grid, row: Row, cell: Cell): RenderedCell {} + +function renderRow(grid: Grid, row: Row): RenderedRow { + let topLeftX = 0; + + const renderedCells = row.cells.map((cell, cellIndex) => { + const renderedCell = renderCell(grid, row, cell); + topLeftX = renderedCell.rect.bottomRight.y; + return renderedCell; + }); +} + +function renderRows(grid: Grid): RenderedRow[] { + const renderedRows: RenderedRow[] = []; + + let partIndex = 0; + let rowIndex = 0; + let topLeftY = 0; + let renderedRowIndex = 0; + + while (true) { + if (!grid.parts[partIndex]?.rows[rowIndex]) break; + + const row = grid.parts[partIndex].rows[rowIndex]; + const renderedRow = renderRow(grid, row); + + topLeftY = renderedRow.rect.bottomRight.y; + renderedRows.push(renderedRow); + + if (!grid.parts[++partIndex]) { + partIndex = 0; + rowIndex++; + } + + renderedRowIndex++; + } + + return renderedRows; +} + +export default function renderGrid(grid: Grid) { + const renderedRows = renderRows(grid); + const rect = renderedRows[0].rect.extend(renderedRows.at(-1)!.rect); + return { ...grid, rect, renderedRows }; +} -- cgit v1.2.3