1
1
import Chip from "@material-ui/core/Chip"
2
+ import FormHelperText from "@material-ui/core/FormHelperText"
2
3
import { makeStyles } from "@material-ui/core/styles"
3
4
import { FC } from "react"
4
5
@@ -16,54 +17,62 @@ export const MultiTextField: FC<MultiTextFieldProps> = ({
16
17
const styles = useStyles ( )
17
18
18
19
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
+ }
27
62
} }
28
63
/>
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 >
41
65
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 >
59
68
)
60
69
}
61
70
62
71
const useStyles = makeStyles ( ( theme ) => ( {
63
72
root : {
64
73
border : `1px solid ${ theme . palette . divider } ` ,
65
74
borderRadius : theme . shape . borderRadius ,
66
- minHeight : theme . spacing ( 5 ) ,
75
+ minHeight : theme . spacing ( 6 ) , // Chip height + paddings
67
76
padding : theme . spacing ( 1.25 , 1.75 ) ,
68
77
fontSize : theme . spacing ( 2 ) ,
69
78
display : "flex" ,
0 commit comments