Skip to content

Commit 8b7ebe9

Browse files
committed
Add support for value validation in editable pairs
1 parent 6aa88ff commit 8b7ebe9

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

src/components/common/editable-pairs.tsx

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)