Skip to content

Commit 97a9e44

Browse files
committed
input validation
1 parent 689a4fb commit 97a9e44

File tree

3 files changed

+34
-52
lines changed

3 files changed

+34
-52
lines changed

src/js/main.js

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,17 @@ const view = createView();
66

77
view.bindInputChange((value) => {
88
model.updateInputValue(value);
9-
const errors = model.getErrors();
10-
view.renderErrors(errors);
9+
view.renderErrors(null);
1110
});
1211

13-
view.bindAddFeed((value) => {
14-
model.addRssFeed(value);
12+
view.bindAddFeed(() => {
13+
model.validateInput()
14+
.then((value) => {
15+
model.addRssFeed(value);
16+
view.renderErrors(null);
17+
model.updateInputValue("");
18+
})
19+
.catch(() => {
20+
view.renderErrors(model.getErrors());
21+
});
1522
});
16-
17-
18-
19-
20-
21-
22-
23-
24-
25-
26-

src/js/model.js

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,52 +16,43 @@ const schema = yup
1616
.url("Ссылка должна быть валидным URL")
1717
.required("Обязательное поле")
1818
.test(
19+
"no-duplicate",
1920
"Эта лента уже добавлена",
2021
(value) => !state.rssFeed.includes(value)
2122
);
2223

23-
const validateInput = (value) => {
24-
try {
25-
schema.validateSync(value, { abortEarly: false });
26-
return true;
27-
} catch (error) {
28-
if (error instanceof yup.ValidationError) {
29-
state.errors = error.errors;
30-
return false;
31-
}
32-
throw error;
33-
}
34-
};
35-
3624

3725
export const createModel = () => {
26+
const validateInput = (value) => {
27+
return schema
28+
.validate(value)
29+
.then((validatedValue) => {
30+
state.errors = null;
31+
return validatedValue;
32+
})
33+
.catch((error) => {
34+
if (error instanceof yup.ValidationError) {
35+
state.errors = error.errors;
36+
}
37+
throw error;
38+
});
39+
};
40+
3841
const updateInputValue = (value) => {
3942
state.inputValue = value;
4043
state.errors = null;
4144
};
4245

4346
const addRssFeed = () => {
44-
if (validateInput(state.inputValue)) {
45-
state.rssFeed = [...state.rssFeed, state.inputValue];
46-
console.log("обновлён список rss", state.rssFeed);
47-
state.errors = null;
48-
} else {
49-
console.log("не прошёл валидацию:", state.errors);
50-
}
47+
state.rssFeed = [...state.rssFeed, state.inputValue];
48+
state.errors = null;
5149
};
5250

5351
const getErrors = () => {
5452
return state.errors;
5553
};
5654

5755
return {
58-
updateInputValue, addRssFeed, getErrors
59-
}
60-
}
61-
62-
63-
64-
65-
66-
67-
56+
updateInputValue, validateInput, addRssFeed, getErrors
57+
};
58+
};

src/js/view.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ export const createView = () => {
66
const bindInputChange = (handler) => {
77
input.addEventListener('input', (e) => {
88
handler(e.target.value);
9+
console.log('input changes');
910
})
1011
};
1112

1213
const bindAddFeed = (handler) => {
1314
form.addEventListener('submit', (e) => {
1415
e.preventDefault();
15-
handler()
16+
handler();
1617
})
1718
};
1819

@@ -39,9 +40,3 @@ export const createView = () => {
3940
renderErrors
4041
}
4142
};
42-
43-
44-
45-
46-
47-

0 commit comments

Comments
 (0)