summaryrefslogtreecommitdiff
path: root/web/src/renderGrid.ts
blob: 476876b3fc339efb73dda2b245d7a411b03e6261 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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 };
}