-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathApp.tsx
More file actions
95 lines (89 loc) · 2.75 KB
/
App.tsx
File metadata and controls
95 lines (89 loc) · 2.75 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
import ContentEditable from "../lib/ContentEditable"
import "./App.css"
import { useEffect, useState } from "react"
const App = () => {
const [emptyContent, setEmptyContent] = useState<string | undefined>(
undefined
)
const [content, setContent] = useState("")
const [isFocused, setIsFocused] = useState(false)
const [isBlurred, setIsBlurred] = useState(false)
const [keyDown, setKeyDown] = useState("")
const [keyUp, setKeyUp] = useState("")
const [messageHistory, setMessageHistory] = useState<string[]>([
"Type something and press on 'Send' to send another message...",
])
const truncateString = (str: string, limit: number) => {
return str.length > limit ? str.slice(0, limit) + "..." : str
}
useEffect(() => {
setEmptyContent(undefined)
}, [emptyContent])
const saveMessageInHistory = (message: string) => {
setMessageHistory([...messageHistory, message])
setContent("")
setEmptyContent("")
}
return (
<div className="full-width main-container">
<div className="full-width message-history-container">
{messageHistory.map((message, index) => (
<div key={index} className="message-item">
{message}
</div>
))}
</div>
<ContentEditable
placeholder="Type here"
containerClassName="full-width input-container"
contentEditableClassName="full-width input-element"
placeholderClassName="input-placeholder"
updatedContent={emptyContent}
onChange={(content) => setContent(content)}
maxLength={100}
onFocus={() => {
setIsFocused(true)
setIsBlurred(false)
}}
onBlur={() => {
setIsFocused(false)
setIsBlurred(true)
}}
onKeyDown={(e) => setKeyDown(e.key)}
onKeyUp={(e) => setKeyUp(e.key)}
/>
<div className="full-width metrics-section">
<div className="metrics-section__left-box">
<div>
Content:{" "}
<b className="current-message-text">
{truncateString(content, 200)}
</b>
</div>
<div>
Is focused:{" "}
<b className={isFocused ? "truthy" : "falsy"}>
{isFocused ? "true" : "false"}
</b>
</div>
<div>
Is blurred:{" "}
<b className={isBlurred ? "truthy" : "falsy"}>
{isBlurred ? "true" : "false"}
</b>
</div>
<div>
Key down: <b>{keyDown}</b>
</div>
<div>
Key up: <b>{keyUp}</b>
</div>
</div>
<div>
<button onClick={() => saveMessageInHistory(content)}>Send</button>
</div>
</div>
</div>
)
}
export default App