Skip to content

Commit 37ecbea

Browse files
Merge pull request #344 from kubeshop/mm/fix/formlistduplicates
fix: form list duplicated values
2 parents 3127319 + 607d6b6 commit 37ecbea

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

src/components/FormComponents/FormList/FormList.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import {NamePath} from 'antd/lib/form/interface';
33

44
import {DeleteOutlined} from '@ant-design/icons';
55

6+
import _ from 'lodash';
7+
68
import * as S from './styled';
79

810
interface IProps {
@@ -19,18 +21,36 @@ const FormList: React.FC<IProps> = props => {
1921

2022
return (
2123
<Form.Item label={label} required={Boolean(requiredMessage)}>
22-
<Form.List name={name} initialValue={initialValue}>
23-
{(fields, {add, remove}) => (
24+
<Form.List
25+
name={name}
26+
initialValue={initialValue}
27+
rules={[
28+
{
29+
validator(arg, value: string[]) {
30+
if (_.uniq(value).length === value.length) {
31+
return Promise.resolve();
32+
}
33+
return Promise.reject(Error('Duplicated items'));
34+
},
35+
},
36+
]}
37+
>
38+
{(fields, {add, remove}, {errors}) => (
2439
<>
2540
{fields.map(field => (
2641
<S.Space key={field.key} align="baseline">
27-
<Form.Item {...field} rules={[{required: true, whitespace: true, message: requiredMessage}]}>
42+
<Form.Item
43+
{...field}
44+
validateTrigger={['onChange', 'onBlur']}
45+
rules={[{required: true, whitespace: true, message: requiredMessage}]}
46+
>
2847
<S.Input placeholder={placeholder} />
2948
</Form.Item>
3049

3150
<DeleteOutlined onClick={() => remove(field.name)} />
3251
</S.Space>
3352
))}
53+
<Form.ErrorList errors={errors} />
3454
<S.ButtonContainer>
3555
<Form.Item>
3656
<Button type="default" onClick={() => add('', 0)}>

0 commit comments

Comments
 (0)