@@ -69,19 +69,32 @@ export const MappingEditor = (props: Props) => {
69
69
onChange ( { type : MappingType . SINGLE , id : data . value . replaceAll ( ',' , '' ) } )
70
70
} , [ ] )
71
71
72
- const handleMultipleMappingValueChange = useCallback ( ( _ , data : TextAreaProps | InputOnChangeData ) => {
73
- const ids =
74
- data . value
75
- ?. toString ( )
76
- . replaceAll ( / [ ^ 0 - 9 , \s ] / g, '' )
77
- . split ( ',' )
78
- . map ( value => value . trim ( ) ) ?? [ ]
72
+ const handleMultipleMappingValueChange = useCallback (
73
+ ( _ , data : TextAreaProps | InputOnChangeData ) => {
74
+ let value = ( data . value ?? '' ) . toString ( )
79
75
80
- onChange ( {
81
- type : MappingType . MULTIPLE ,
82
- ids
83
- } )
84
- } , [ ] )
76
+ // If it's removing a whitespace character, remove the last comma
77
+ if ( mappingValue . slice ( 0 , - 1 ) === data . value && mappingValue . slice ( - 1 ) ) {
78
+ value = value . slice ( 0 , value . length - 1 )
79
+ }
80
+
81
+ const ids =
82
+ value
83
+ . toString ( )
84
+ // Only allow numbers, commas and whitespaces
85
+ . replaceAll ( / [ ^ 0 - 9 , \s ] / g, '' )
86
+ // Remove whitespaces before commas
87
+ . replaceAll ( / \s , / g, '' )
88
+ . split ( ',' )
89
+ . map ( s => s . trim ( ) ) ?? [ ]
90
+
91
+ onChange ( {
92
+ type : MappingType . MULTIPLE ,
93
+ ids
94
+ } )
95
+ } ,
96
+ [ mappingValue ]
97
+ )
85
98
86
99
const handleFromMappingValueChange = useCallback (
87
100
( _ : React . ChangeEvent < HTMLInputElement > , data : InputOnChangeData ) => {
0 commit comments