-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathKeyboard.tsx
More file actions
105 lines (100 loc) · 2.64 KB
/
Keyboard.tsx
File metadata and controls
105 lines (100 loc) · 2.64 KB
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
100
101
102
103
104
105
import { getStatuses } from '../../lib/statuses'
import { Key } from './Key'
import { useEffect } from 'react'
import { ORTHOGRAPHY } from '../../constants/orthography'
import { ENTER_TEXT, DELETE_TEXT } from '../../constants/strings'
type Props = {
onChar: (value: string) => void
onDelete: () => void
onEnter: () => void
guesses: string[][]
isRevealing?: boolean
}
export const Keyboard = ({
onChar,
onDelete,
onEnter,
guesses,
isRevealing,
}: Props) => {
const charStatuses = getStatuses(guesses)
const onClick = (value: string) => {
if (value === 'ENTER') {
onEnter()
} else if (value === 'DELETE') {
onDelete()
} else {
onChar(value)
}
}
useEffect(() => {
const listener = (e: KeyboardEvent) => {
if (e.code === 'Enter') {
onEnter()
} else if (e.code === 'Backspace') {
onDelete()
} //
// Take away key event listener for now
// else {
// const key = e.key.toUpperCase()
// if (key.length === 1 && key >= 'A' && key <= 'Z') {
// onChar(key)
// }
}
window.addEventListener('keyup', listener)
return () => {
window.removeEventListener('keyup', listener)
}
}, [onEnter, onDelete, onChar])
return (
<div>
<div className="flex justify-center mb-1">
{ORTHOGRAPHY.slice(0, Math.floor(ORTHOGRAPHY.length * 0.4)).map(
(char) => (
<Key
value={char}
key={char}
onClick={onClick}
status={charStatuses[char]}
isRevealing={isRevealing}
/>
)
)}
</div>
<div className="flex justify-center mb-1">
{ORTHOGRAPHY.slice(
Math.floor(ORTHOGRAPHY.length * 0.4),
Math.floor(ORTHOGRAPHY.length * 0.7)
).map((char) => (
<Key
value={char}
key={char}
onClick={onClick}
status={charStatuses[char]}
isRevealing={isRevealing}
/>
))}
</div>
<div className="flex justify-center">
<Key width={65.4} value="ENTER" onClick={onClick} status="input">
{ENTER_TEXT}
</Key>
{ORTHOGRAPHY.slice(
Math.floor(ORTHOGRAPHY.length * 0.7),
ORTHOGRAPHY.length
).map((char) => (
<Key
value={char}
key={char}
onClick={onClick}
status={charStatuses[char]}
isRevealing={isRevealing}
/>
))}
<Key width={65.4} value="DELETE" onClick={onClick} status="input">
{DELETE_TEXT}
</Key>
</div>
</div>
)
}