|
1733 | 1733 | modalWrap, |
1734 | 1734 | modalBodyAddContactsRowWrap, |
1735 | 1735 | modalBodyAddBtn, |
| 1736 | + modalType: type, // передача типа модального окна (или "add" / или "edit") |
| 1737 | + initialData: clientData, // передача копии исходных данных клиента (с сервера) |
1736 | 1738 | }; |
1737 | 1739 |
|
1738 | | - // проверка на наличие валидных данных в инпутах: основных, контактных (хотя бы в одном.. отработка confirm) |
1739 | | - const hasAnyData = checkModalInputsBeforeClose(event, context); |
| 1740 | + // проверка на наличие "валидных" данных в инпутах: основных, контактных / проверка на изменение клиентских данных при "edit" (хотя бы в одном.. отработка confirm) |
| 1741 | + const hasAnyChangeData = checkModalInputsBeforeClose(event, context); |
1740 | 1742 |
|
1741 | 1743 | // если/там "cancel" в confirm, перевод focus на кнопку "Сохранить" |
1742 | | - if (!hasAnyData) { |
| 1744 | + if (!hasAnyChangeData) { |
1743 | 1745 | return; // т.е. без/вообще удалений инпутов (и "пустые" и не валидные остаются.. пока) |
1744 | 1746 | } |
1745 | 1747 |
|
|
1781 | 1783 | // return observer; // можно вернуть observe (если более не требуется) |
1782 | 1784 | } |
1783 | 1785 |
|
1784 | | - // ** организация проверки на наличие валидных данных в модальных инпутах: основных, контактных (отработка "уточняющего" confirm, возврат true/false) |
| 1786 | + // ** организация проверки на наличие валидных данных в модальных инпутах: основных, контактных / проверка на изменение клиентских данных при/в "edit" модальном окне (отработка "уточняющего" confirm или нет) |
1785 | 1787 | function checkModalInputsBeforeClose(event, context = {}) { |
1786 | | - const { modalWrap } = context; // получение необходимого элемента (через деструктуризациию входящего/передаваемого объекта) |
| 1788 | + const { modalWrap, modalType, initialData } = context; // получение необходимого элемента (через деструктуризациию входящего/передаваемого объекта) |
1787 | 1789 | const modalInputs = Array.from(modalWrap.querySelectorAll('.modal-input')); // фиксация всех модальных инпутов |
1788 | 1790 |
|
| 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 | + |
1789 | 1846 | // определение заполненных/валидных инпутов (хотя бы одного) |
1790 | 1847 | const hasValidInputs = modalInputs.some((input) => { |
1791 | 1848 | return ( |
|
0 commit comments