Skip to content

Commit 7df6b30

Browse files
committed
[PRAC/cont] Correct logic closing modal windows
Organiz fix/understand was chg client's data in "edit" window (confirm). Worth noting: - excluding unnecessary clarification (confirm) when data is NOT changed. core: B-3 / JS-BL
1 parent 85a4d47 commit 7df6b30

File tree

1 file changed

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

1 file changed

+62
-5
lines changed

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

Lines changed: 62 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1733,13 +1733,15 @@
17331733
modalWrap,
17341734
modalBodyAddContactsRowWrap,
17351735
modalBodyAddBtn,
1736+
modalType: type, // передача типа модального окна (или "add" / или "edit")
1737+
initialData: clientData, // передача копии исходных данных клиента (с сервера)
17361738
};
17371739

1738-
// проверка на наличие валидных данных в инпутах: основных, контактных (хотя бы в одном.. отработка confirm)
1739-
const hasAnyData = checkModalInputsBeforeClose(event, context);
1740+
// проверка на наличие "валидных" данных в инпутах: основных, контактных / проверка на изменение клиентских данных при "edit" (хотя бы в одном.. отработка confirm)
1741+
const hasAnyChangeData = checkModalInputsBeforeClose(event, context);
17401742

17411743
// если/там "cancel" в confirm, перевод focus на кнопку "Сохранить"
1742-
if (!hasAnyData) {
1744+
if (!hasAnyChangeData) {
17431745
return; // т.е. без/вообще удалений инпутов (и "пустые" и не валидные остаются.. пока)
17441746
}
17451747

@@ -1781,11 +1783,66 @@
17811783
// return observer; // можно вернуть observe (если более не требуется)
17821784
}
17831785

1784-
// ** организация проверки на наличие валидных данных в модальных инпутах: основных, контактных (отработка "уточняющего" confirm, возврат true/false)
1786+
// ** организация проверки на наличие валидных данных в модальных инпутах: основных, контактных / проверка на изменение клиентских данных при/в "edit" модальном окне (отработка "уточняющего" confirm или нет)
17851787
function checkModalInputsBeforeClose(event, context = {}) {
1786-
const { modalWrap } = context; // получение необходимого элемента (через деструктуризациию входящего/передаваемого объекта)
1788+
const { modalWrap, modalType, initialData } = context; // получение необходимого элемента (через деструктуризациию входящего/передаваемого объекта)
17871789
const modalInputs = Array.from(modalWrap.querySelectorAll('.modal-input')); // фиксация всех модальных инпутов
17881790

1791+
// фиксация ФИО из "edit" окна (далее для сравнения)
1792+
const formInSurname = toUpFirstLetter(
1793+
modalWrap.querySelector('.modal-surname-input').value.trim()
1794+
);
1795+
const formInName = toUpFirstLetter(
1796+
modalWrap.querySelector('.modal-name-input').value.trim()
1797+
);
1798+
const formInPatronymicInput = modalWrap.querySelector(
1799+
'.modal-patronymic-input'
1800+
);
1801+
const formInPatronymic = formInPatronymicInput
1802+
? toUpFirstLetter(formInPatronymicInput.value.trim())
1803+
: '';
1804+
1805+
// фиксация контактов из "edit" окна (далее для сравнения)
1806+
const formInContacts = Array.from(
1807+
modalWrap.querySelectorAll('.modal__body-add-contact-element')
1808+
)
1809+
.map((contact) => {
1810+
const contactType = contact
1811+
.querySelector('input[name="contact-type"]')
1812+
?.value.trim(); // фиксация типа контакта из "скрытого" инпута
1813+
const contactValue = contact
1814+
.querySelector('input[name="contact-data"]')
1815+
?.value.trim(); // фиксация введённых данных из "основного" инпута
1816+
1817+
// проверка на наличие значений
1818+
if (contactType && contactValue) {
1819+
return { type: contactType, value: contactValue };
1820+
}
1821+
1822+
return null; // если данные некорректны, пропуск/далее
1823+
})
1824+
.filter((contact) => contact !== null); // исключение некорректных/null контактов
1825+
1826+
// проверка изменений в ФИО/контактах, если это "edit" модальное окно (т.е. надо будет выводить confirm или нет)
1827+
if (modalType === 'edit' && initialData) {
1828+
const isNameChanged = initialData.name !== formInName;
1829+
const isSurnameChanged = initialData.surname !== formInSurname;
1830+
const isPatronymicChanged = initialData.patronymic !== formInPatronymic;
1831+
const isContactsLengthChanged =
1832+
initialData.contacts.length !== formInContacts.length;
1833+
1834+
const hasDataChanged =
1835+
isNameChanged ||
1836+
isSurnameChanged ||
1837+
isPatronymicChanged ||
1838+
isContactsLengthChanged;
1839+
1840+
// если ничего не поменялось при "edit", уточняющее сообщение "Есть не сохранённые данные! Закрыть окно?".. НЕ выводим
1841+
if (!hasDataChanged) {
1842+
return true;
1843+
}
1844+
}
1845+
17891846
// определение заполненных/валидных инпутов (хотя бы одного)
17901847
const hasValidInputs = modalInputs.some((input) => {
17911848
return (

0 commit comments

Comments
 (0)