|
1098 | 1098 | modalBodyPatronymicInput.setAttribute('type', 'text'); |
1099 | 1099 | modalBodyPatronymicInput.setAttribute('pattern', '[А-Яа-яЁё\\-]+'); |
1100 | 1100 | modalBodyPatronymicInput.setAttribute('placeholder', 'Отчество'); |
1101 | | - modalBodyPatronymicInput.setAttribute('required', ''); |
| 1101 | + // modalBodyPatronymicInput.setAttribute('required', ''); // !!! |
1102 | 1102 | modalBodyPatronymicInputLabel.setAttribute( |
1103 | 1103 | 'for', |
1104 | 1104 | 'modal-patronymic-floating-input' |
1105 | 1105 | ); |
1106 | 1106 | modalBodyAddBtn.setAttribute('id', 'modal-body-add-btn'); |
1107 | 1107 | modalBodyAddBtn.setAttribute('type', 'button'); |
1108 | 1108 | modalBodySaveBtn.setAttribute('id', 'modal-body-save-btn'); |
1109 | | - modalBodySaveBtn.setAttribute('type', 'button'); |
| 1109 | + modalBodySaveBtn.setAttribute('type', 'submit'); |
1110 | 1110 | modalFooterCancelBtn.setAttribute('id', 'modal-footer-cancel-btn'); |
1111 | 1111 | modalFooterCancelBtn.setAttribute('type', 'button'); |
1112 | 1112 | modalFooterCancelBtn.setAttribute('data-bs-dismiss', 'modal'); |
|
1115 | 1115 | modalHeaderClientId.textContent = `ID: ${clientData.id || ''}`; // "вытягивается" из входящего объекта |
1116 | 1116 | modalBodySurnameInputLabel.textContent = 'Фамилия'; |
1117 | 1117 | modalBodySurnameLabelSpan.textContent = '*'; |
1118 | | - modalBodySurnameFeedback.textContent = |
1119 | | - 'Введены не корректные данные.. исключите: английские буквы, цифры!'; |
| 1118 | + modalBodySurnameFeedback.textContent = 'Заполните поле "Фамилия"!'; |
1120 | 1119 | modalBodyNameInputLabel.textContent = 'Имя'; |
1121 | 1120 | modalBodyNameInputLabelSpan.textContent = '*'; |
1122 | | - modalBodyNameFeedback.textContent = |
1123 | | - 'Введены не корректные данные.. исключите: английские буквы, цифры!'; |
| 1121 | + modalBodyNameFeedback.textContent = 'Заполните поле "Имя"!'; |
1124 | 1122 | modalBodyPatronymicInputLabel.textContent = 'Отчество'; |
1125 | | - modalBodyPatronymicFeedback.textContent = |
1126 | | - 'Введены не корректные данные.. исключите: английские буквы, цифры!'; |
| 1123 | + // modalBodyPatronymicFeedback.textContent = 'Заполните поле "Отчество"!'; // !!! |
1127 | 1124 | modalBodyAddBtn.textContent = 'Добавить контакт'; |
1128 | 1125 | modalBodySaveBtn.textContent = 'Сохранить'; |
1129 | 1126 | modalFooterCancelBtn.textContent = modalCancelBtn; // определяется в переменной |
|
1210 | 1207 | modalContactsArr = []; |
1211 | 1208 | }); |
1212 | 1209 |
|
| 1210 | + // обработка "submit" события для формы (общая валидация, ряд действий) |
| 1211 | + handleModalFormSubmit({ modalBodyForm, type, clientData }); |
| 1212 | + |
1213 | 1213 | return modalWrap; // возврат модального окна (т.е. здесь/без добавления в DOM.. позже, при клике) |
1214 | 1214 | } |
1215 | 1215 |
|
|
1403 | 1403 | modalContactItemFacebook.textContent = 'Facebook'; |
1404 | 1404 | modalContactItemTwitter.textContent = 'Twitter'; |
1405 | 1405 | modalContactItemExtraContact.textContent = 'Доп. контакт'; |
1406 | | - modalContactFeedback.textContent = 'НЕ корректный ввод данных контакта!'; |
| 1406 | + modalContactFeedback.textContent = 'Заполните поле контакта или удалите!'; |
1407 | 1407 |
|
1408 | 1408 | modalContactList.append( |
1409 | 1409 | modalContactItemPhone, |
|
1860 | 1860 | console.error('Tippy.js is not loaded!'); |
1861 | 1861 | } |
1862 | 1862 | } |
| 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 | + } |
1863 | 1979 | })(); |
0 commit comments