Skip to content

Commit 8f2a327

Browse files
committed
[PRAC/cont] Add logic to handle "submit" events
Organiz "submit" event/proc for modal forms (when add/chg client data). Worth noting: - upcoming corrections: connecting validations, checking for a match by FIO.. something else. core: B-3 / JS-BL
1 parent 00b670a commit 8f2a327

File tree

1 file changed

+125
-9
lines changed
  • core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/js

1 file changed

+125
-9
lines changed

core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/js/index.js

Lines changed: 125 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,15 +1098,15 @@
10981098
modalBodyPatronymicInput.setAttribute('type', 'text');
10991099
modalBodyPatronymicInput.setAttribute('pattern', '[А-Яа-яЁё\\-]+');
11001100
modalBodyPatronymicInput.setAttribute('placeholder', 'Отчество');
1101-
modalBodyPatronymicInput.setAttribute('required', '');
1101+
// modalBodyPatronymicInput.setAttribute('required', ''); // !!!
11021102
modalBodyPatronymicInputLabel.setAttribute(
11031103
'for',
11041104
'modal-patronymic-floating-input'
11051105
);
11061106
modalBodyAddBtn.setAttribute('id', 'modal-body-add-btn');
11071107
modalBodyAddBtn.setAttribute('type', 'button');
11081108
modalBodySaveBtn.setAttribute('id', 'modal-body-save-btn');
1109-
modalBodySaveBtn.setAttribute('type', 'button');
1109+
modalBodySaveBtn.setAttribute('type', 'submit');
11101110
modalFooterCancelBtn.setAttribute('id', 'modal-footer-cancel-btn');
11111111
modalFooterCancelBtn.setAttribute('type', 'button');
11121112
modalFooterCancelBtn.setAttribute('data-bs-dismiss', 'modal');
@@ -1115,15 +1115,12 @@
11151115
modalHeaderClientId.textContent = `ID: ${clientData.id || ''}`; // "вытягивается" из входящего объекта
11161116
modalBodySurnameInputLabel.textContent = 'Фамилия';
11171117
modalBodySurnameLabelSpan.textContent = '*';
1118-
modalBodySurnameFeedback.textContent =
1119-
'Введены не корректные данные.. исключите: английские буквы, цифры!';
1118+
modalBodySurnameFeedback.textContent = 'Заполните поле "Фамилия"!';
11201119
modalBodyNameInputLabel.textContent = 'Имя';
11211120
modalBodyNameInputLabelSpan.textContent = '*';
1122-
modalBodyNameFeedback.textContent =
1123-
'Введены не корректные данные.. исключите: английские буквы, цифры!';
1121+
modalBodyNameFeedback.textContent = 'Заполните поле "Имя"!';
11241122
modalBodyPatronymicInputLabel.textContent = 'Отчество';
1125-
modalBodyPatronymicFeedback.textContent =
1126-
'Введены не корректные данные.. исключите: английские буквы, цифры!';
1123+
// modalBodyPatronymicFeedback.textContent = 'Заполните поле "Отчество"!'; // !!!
11271124
modalBodyAddBtn.textContent = 'Добавить контакт';
11281125
modalBodySaveBtn.textContent = 'Сохранить';
11291126
modalFooterCancelBtn.textContent = modalCancelBtn; // определяется в переменной
@@ -1210,6 +1207,9 @@
12101207
modalContactsArr = [];
12111208
});
12121209

1210+
// обработка "submit" события для формы (общая валидация, ряд действий)
1211+
handleModalFormSubmit({ modalBodyForm, type, clientData });
1212+
12131213
return modalWrap; // возврат модального окна (т.е. здесь/без добавления в DOM.. позже, при клике)
12141214
}
12151215

@@ -1403,7 +1403,7 @@
14031403
modalContactItemFacebook.textContent = 'Facebook';
14041404
modalContactItemTwitter.textContent = 'Twitter';
14051405
modalContactItemExtraContact.textContent = 'Доп. контакт';
1406-
modalContactFeedback.textContent = 'НЕ корректный ввод данных контакта!';
1406+
modalContactFeedback.textContent = 'Заполните поле контакта или удалите!';
14071407

14081408
modalContactList.append(
14091409
modalContactItemPhone,
@@ -1860,4 +1860,120 @@
18601860
console.error('Tippy.js is not loaded!');
18611861
}
18621862
}
1863+
1864+
// ** универсальная обработка модальных форм их "submit" событий, т.е. при добавление/изменении данных клиента (после валидаций, после проверки по ФИО)
1865+
// ! за основу берётся students-db..
1866+
1867+
// const allFormInInputs = document.querySelectorAll(
1868+
// '.dboard__input-form input'
1869+
// );
1870+
//
1871+
// // корректировка регистра, для полей Ф.И.О.
1872+
// function toUpFirstLetter(value) {
1873+
// if (!value) return ''; // если вдруг "пусто"
1874+
// return value[0].toUpperCase() + value.slice(1).toLowerCase();
1875+
// }
1876+
//
1877+
// // проверка на совпадение по ФИО, в исходном/формирующемся массиве
1878+
// function checkStudentFIO(
1879+
// formInSurname,
1880+
// formInName,
1881+
// formInPatronymic,
1882+
// updateStudentsDataArr
1883+
// ) {
1884+
// return updateStudentsDataArr.some(
1885+
// (student) =>
1886+
// student.surname === formInSurname &&
1887+
// student.name === formInName &&
1888+
// student.patronymic === formInPatronymic
1889+
// );
1890+
// }
1891+
//
1892+
// allFormInInputs.forEach((input) => {
1893+
// additionalFormInputsValidation(input); // дополнительная валидация (на корректный ввод)
1894+
// });
1895+
1896+
function handleModalFormSubmit(context = {}) {
1897+
const { modalBodyForm, type, clientData } = context; // получение необходимых элементов (через деструктуризациию входящего/передаваемого объекта)
1898+
1899+
// проверка наличия входящих аргументов/параметров (нет.. возврат)
1900+
if (!modalBodyForm || !type || !clientData) {
1901+
console.error(
1902+
'Событие "submit" невозможно.. недостаточно входящих параметров!?'
1903+
);
1904+
return;
1905+
}
1906+
1907+
// [СЕРВЕР]
1908+
modalBodyForm.addEventListener(
1909+
'submit',
1910+
async (event) => {
1911+
event.preventDefault();
1912+
1913+
if (!modalBodyForm.checkValidity()) {
1914+
event.stopPropagation();
1915+
modalBodyForm.classList.add('was-validated');
1916+
} else {
1917+
// const formInSurname = toUpFirstLetter(
1918+
// formInSurnameInput.value.trim()
1919+
// );
1920+
// const formInName = toUpFirstLetter(formInNameInput.value.trim());
1921+
// const formInPatronymic = toUpFirstLetter(
1922+
// formInPatronymicInput.value.trim()
1923+
// );
1924+
// const formInBirthDate = formInBirthDateInput.value;
1925+
// const formInStartYear = formInStartYearInput.value;
1926+
// const formInFaculty = formInFacultyInput.value.toLowerCase().trim();
1927+
//
1928+
// if (
1929+
// checkStudentFIO(
1930+
// formInSurname,
1931+
// formInName,
1932+
// formInPatronymic,
1933+
// updateStudentsDataArr
1934+
// )
1935+
// ) {
1936+
// const formInNotification = confirm(
1937+
// 'Совпадение по Ф.И.О! Такой студент уже существует! Всё равно добавить?'
1938+
// );
1939+
// if (!formInNotification) {
1940+
// return; // т.е. не добавление студента (без очистки полей ввода, возможность что-то исправить)
1941+
// }
1942+
// }
1943+
1944+
// ! условие согласно ДЗ
1945+
/*
1946+
Каждый контакт представляет из себя следующий набор данных:
1947+
- Имя
1948+
- Фамилия
1949+
- Отчество
1950+
- Массив объектов с контактными данными, где каждый объект содержит:
1951+
- Тип контакта (телефон, email, VK и т.п.)
1952+
- Значение контакта (номер телефона, адрес email, ссылка на страницу в VK и т.п.)
1953+
*/
1954+
1955+
// const newStudent = {
1956+
// surname: formInSurname,
1957+
// name: formInName,
1958+
// patronymic: formInPatronymic,
1959+
// birthDate: formInBirthDate,
1960+
// startYear: formInStartYear,
1961+
// faculty: formInFaculty,
1962+
// };
1963+
1964+
// await addStudentsToServer(newStudent); // добавление студента на сервер
1965+
1966+
// allFormInInputs.forEach((input) => (input.value = '')); // очистка полей формы (после добавления)
1967+
modalForm.classList.remove('was-validated'); // отмена красной обводки у "чистых" полей формы (после добавления)
1968+
1969+
// вывод сообщения об успешном добавлении студента (после перерисовки таблицы)
1970+
setTimeout(() => {
1971+
alert('Клиент успешно добавлен!');
1972+
// movingToLastNewTableRow(); // выделение/показ только что добавленного студента/строки
1973+
}, 200);
1974+
}
1975+
},
1976+
false
1977+
);
1978+
}
18631979
})();

0 commit comments

Comments
 (0)