@@ -32,6 +32,7 @@ interface EditablePairsProps<R = PairsArray> {
32
32
keyTitle ?: string ;
33
33
// Either a pattern string, or a validation function
34
34
keyValidation ?: string | ( ( key : string ) => true | string ) ;
35
+ valueValidation ?: string | ( ( value : string ) => true | string ) ;
35
36
36
37
keyPlaceholder : string ;
37
38
valuePlaceholder : string ;
@@ -116,23 +117,30 @@ export class EditablePairs<R> extends React.Component<EditablePairsProps<R>> {
116
117
) ) ;
117
118
118
119
disposeOnUnmount ( this , autorun ( ( ) => {
119
- const { keyValidation } = this . props ;
120
- if ( ! _ . isFunction ( keyValidation ) ) return ;
120
+ let { keyValidation, valueValidation } = this . props ;
121
+ if ( ! _ . isFunction ( keyValidation ) && ! _ . isFunction ( valueValidation ) ) return ;
121
122
122
123
const inputs = this . containerRef ?. current ?. querySelectorAll ( 'input' ) ;
123
124
if ( ! inputs ) return ;
124
125
125
126
this . values . forEach ( ( pair , i ) => {
126
127
const keyInput = inputs ?. [ i * 2 ] ;
127
- const validationResult = keyValidation ( pair . key ) ;
128
-
129
- if ( validationResult === true ) {
130
- keyInput . setCustomValidity ( '' ) ;
131
- keyInput . reportValidity ( ) ;
132
- } else {
133
- keyInput . setCustomValidity ( validationResult ) ;
134
- keyInput . reportValidity ( ) ;
135
- }
128
+ const valueInput = inputs ?. [ i * 2 + 1 ] ;
129
+
130
+ ( [
131
+ [ keyInput , pair . key , keyValidation ] ,
132
+ [ valueInput , pair . value , valueValidation ]
133
+ ] as const ) . forEach ( ( [ input , value , validation ] ) => {
134
+ if ( ! input || ! _ . isFunction ( validation ) ) return ;
135
+ const result = validation ( value ) ;
136
+ if ( result === true ) {
137
+ input . setCustomValidity ( '' ) ;
138
+ } else {
139
+ input . setCustomValidity ( result ) ;
140
+ }
141
+
142
+ input . reportValidity ( ) ;
143
+ } ) ;
136
144
} ) ;
137
145
} ) ) ;
138
146
}
0 commit comments