Skip to content

Commit b71b8da

Browse files
fix(site): Add helper text and prevent undefined when deleting empty value (#6757)
1 parent 2383f64 commit b71b8da

File tree

1 file changed

+47
-38
lines changed

1 file changed

+47
-38
lines changed

site/src/components/MultiTextField/MultiTextField.tsx

Lines changed: 47 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Chip from "@material-ui/core/Chip"
2+
import FormHelperText from "@material-ui/core/FormHelperText"
23
import { makeStyles } from "@material-ui/core/styles"
34
import { FC } from "react"
45

@@ -16,54 +17,62 @@ export const MultiTextField: FC<MultiTextFieldProps> = ({
1617
const styles = useStyles()
1718

1819
return (
19-
<label className={styles.root}>
20-
{values.map((value, index) => (
21-
<Chip
22-
key={index}
23-
label={value}
24-
size="small"
25-
onDelete={() => {
26-
onChange(values.filter((oldValue) => oldValue !== value))
20+
<div>
21+
<label className={styles.root}>
22+
{values.map((value, index) => (
23+
<Chip
24+
key={index}
25+
label={value}
26+
size="small"
27+
onDelete={() => {
28+
onChange(values.filter((oldValue) => oldValue !== value))
29+
}}
30+
/>
31+
))}
32+
<input
33+
aria-label={label}
34+
className={styles.input}
35+
onKeyDown={(event) => {
36+
if (event.key === ",") {
37+
event.preventDefault()
38+
const newValue = event.currentTarget.value
39+
onChange([...values, newValue])
40+
event.currentTarget.value = ""
41+
return
42+
}
43+
44+
if (event.key === "Backspace" && event.currentTarget.value === "") {
45+
event.preventDefault()
46+
47+
if (values.length === 0) {
48+
return
49+
}
50+
51+
const lastValue = values[values.length - 1]
52+
onChange(values.slice(0, -1))
53+
event.currentTarget.value = lastValue
54+
}
55+
}}
56+
onBlur={(event) => {
57+
if (event.currentTarget.value !== "") {
58+
const newValue = event.currentTarget.value
59+
onChange([...values, newValue])
60+
event.currentTarget.value = ""
61+
}
2762
}}
2863
/>
29-
))}
30-
<input
31-
aria-label={label}
32-
className={styles.input}
33-
onKeyDown={(event) => {
34-
if (event.key === ",") {
35-
event.preventDefault()
36-
const newValue = event.currentTarget.value
37-
onChange([...values, newValue])
38-
event.currentTarget.value = ""
39-
return
40-
}
64+
</label>
4165

42-
if (event.key === "Backspace" && event.currentTarget.value === "") {
43-
event.preventDefault()
44-
const lastValue = values[values.length - 1]
45-
onChange(values.slice(0, -1))
46-
event.currentTarget.value = lastValue
47-
return
48-
}
49-
}}
50-
onBlur={(event) => {
51-
if (event.currentTarget.value !== "") {
52-
const newValue = event.currentTarget.value
53-
onChange([...values, newValue])
54-
event.currentTarget.value = ""
55-
}
56-
}}
57-
/>
58-
</label>
66+
<FormHelperText>{'Type "," to separate the values'}</FormHelperText>
67+
</div>
5968
)
6069
}
6170

6271
const useStyles = makeStyles((theme) => ({
6372
root: {
6473
border: `1px solid ${theme.palette.divider}`,
6574
borderRadius: theme.shape.borderRadius,
66-
minHeight: theme.spacing(5),
75+
minHeight: theme.spacing(6), // Chip height + paddings
6776
padding: theme.spacing(1.25, 1.75),
6877
fontSize: theme.spacing(2),
6978
display: "flex",

0 commit comments

Comments
 (0)