-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBank.tsx
99 lines (95 loc) · 2.37 KB
/
Bank.tsx
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import classNames from "classnames";
import { TileUI } from "./TileUI";
import {
BANK_EXTRAS_ROW,
EXIT_TILE_ID,
HINT_TILE_ID,
GRID_HEIGHT,
GRID_WIDTH,
SIDE_PADDING,
} from "../constants";
import { Tile } from "../reducers";
import * as styles from "./Bank.module.scss";
export const Bank = ({
hints,
onExitClick,
onHintClick,
onTileClick,
selectedTileId,
solved,
tiles,
}: {
hints: number;
onExitClick: () => void;
onHintClick: () => void;
onTileClick: (tile: Tile) => void;
selectedTileId: number;
solved: boolean;
tiles: Tile[];
}) => {
// Construct cell grid using tiles' x and y coordinates
const paddedWidth = GRID_WIDTH + SIDE_PADDING * 2;
const grid = Array(GRID_HEIGHT)
.fill(0)
.map(() => Array(paddedWidth));
let x, y;
tiles &&
tiles.forEach((tile, i) => {
x = (i % GRID_WIDTH) + SIDE_PADDING;
y = Math.floor(i / GRID_WIDTH);
grid[y][x] = (
<td key={y * paddedWidth + x}>
<TileUI
onTileClick={onTileClick}
selectedTileId={selectedTileId}
tile={tile}
/>
</td>
);
});
// Add special tiles (exit, hint)
let start, end;
for (let i = 0; i < GRID_HEIGHT; ++i) {
for (let j = 0; j < SIDE_PADDING; ++j) {
start = null;
if (i === BANK_EXTRAS_ROW && j === 0) {
start = (
<TileUI
hoverText="Quit"
onTileClick={onExitClick}
selectedTileId={selectedTileId}
tile={{ char: "\u00d7", id: EXIT_TILE_ID, used: false }}
/>
);
}
grid[i][j] = <td key={i * paddedWidth + j}>{start}</td>;
}
for (let j = GRID_WIDTH + SIDE_PADDING; j < paddedWidth; ++j) {
end = null;
if (i === BANK_EXTRAS_ROW && j === paddedWidth - 1) {
end = (
<TileUI
hoverText="Use a hint"
onTileClick={onHintClick}
selectedTileId={selectedTileId}
tile={{
char: "?",
id: HINT_TILE_ID,
used: !(hints && Math.floor(hints)),
}}
/>
);
}
grid[i][j] = <td key={i * paddedWidth + j}>{end}</td>;
}
}
return (
<table className={classNames(styles.table, { [styles.solved]: solved })}>
<tbody>
{grid.map((row, i) => (
<tr key={i}>{row}</tr>
))}
</tbody>
</table>
);
};