const letter = existing ? existing.letter : tile_char;
const isBlank = existing ? existing.isBlank : is_blank;
+ if (typeof letter !== "string" || (!/^[A-Z]$/.test(letter) && letter !== "_")) {
+ console.error("Bad tile placement:", JSON.stringify({
+ letter, tile_index, tile_char, isBlank,
+ source_from: source.from, existing,
+ tiles_length: this.state.tiles.length
+ }));
+ }
+
new_grid[grid_key] = { letter, tileIndex: tile_index, isBlank };
this.setState({
onDrop={(e) => this.on_rack_drop(e)}>
{rack.map((tile_index, rack_index) => {
const char = tiles[tile_index];
- const is_blank = char === "_";
+ const is_blank = (char === "_" || char === undefined);
+ if (char !== undefined && char !== "_" && !/^[A-Z]$/.test(char)) {
+ console.error("Unexpected tile character:", JSON.stringify(char),
+ "at index", tile_index, "tiles:", JSON.stringify(tiles));
+ }
return (
<Tile key={tile_index}
- letter={is_blank ? " " : char}
+ letter={is_blank ? "\u00A0" : char}
isBlank={is_blank}
invalid={false}
unconnected={false}