@@ -32,6 +32,7 @@ interface EditablePairsProps<R = PairsArray> {
3232 keyTitle ?: string ;
3333 // Either a pattern string, or a validation function
3434 keyValidation ?: string | ( ( key : string ) => true | string ) ;
35+ valueValidation ?: string | ( ( value : string ) => true | string ) ;
3536
3637 keyPlaceholder : string ;
3738 valuePlaceholder : string ;
@@ -116,23 +117,30 @@ export class EditablePairs<R> extends React.Component<EditablePairsProps<R>> {
116117 ) ) ;
117118
118119 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 ;
121122
122123 const inputs = this . containerRef ?. current ?. querySelectorAll ( 'input' ) ;
123124 if ( ! inputs ) return ;
124125
125126 this . values . forEach ( ( pair , i ) => {
126127 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+ } ) ;
136144 } ) ;
137145 } ) ) ;
138146 }
0 commit comments