|
594 | 594 | return; |
595 | 595 | } |
596 | 596 |
|
597 | | - // открытие модального окна |
| 597 | + // ? |
| 598 | + const originalClientData = JSON.parse(JSON.stringify(clientData)); // создание копии данных клиента (приходящих с сервера) |
598 | 599 | const modalWrap = createModalWindowByType('edit', clientData); |
599 | | - crmAddContainer.append(modalWrap); |
| 600 | + |
| 601 | + // фиксация элементов формы |
| 602 | + const inputSurname = modalWrap.querySelector( |
| 603 | + '#modal-surname-floating-input' |
| 604 | + ); |
| 605 | + const inputName = modalWrap.querySelector('#modal-name-floating-input'); |
| 606 | + const inputPatronymic = modalWrap.querySelector( |
| 607 | + '#modal-patronymic-floating-input' |
| 608 | + ); |
| 609 | + const addContactBtn = modalWrap.querySelector('.modal__body-add-btn'); |
| 610 | + |
| 611 | + if (!addContactBtn) { |
| 612 | + console.error('Ошибка: Кнопка "Добавить контакт" не найдена!'); |
| 613 | + return; |
| 614 | + } |
| 615 | + |
| 616 | + // восстановление ФИО |
| 617 | + if (inputSurname) inputSurname.value = clientData.surname || ''; |
| 618 | + if (inputName) inputName.value = clientData.name || ''; |
| 619 | + if (inputPatronymic) inputPatronymic.value = clientData.patronymic || ''; |
| 620 | + |
| 621 | + // восстановление списка контактов (как бы через прожатие "Добавить контакт") |
| 622 | + if (clientData.contacts && clientData.contacts.length > 0) { |
| 623 | + clientData.contacts.forEach((contact) => { |
| 624 | + addContactBtn.click(); |
| 625 | + |
| 626 | + const lastContact = modalContactsArr[modalContactsArr.length - 1]; // фиксация "крайнего" контакта |
| 627 | + |
| 628 | + if (!lastContact) { |
| 629 | + console.error('Ошибка: Не удалось создать строку контакта!'); |
| 630 | + return; |
| 631 | + } |
| 632 | + |
| 633 | + // обновление контактных данных |
| 634 | + const dropBtn = lastContact.querySelector( |
| 635 | + '.modal__body-add-contact-drop-btn' |
| 636 | + ); |
| 637 | + const hiddenInput = lastContact.querySelector( |
| 638 | + '.modal__body-add-hidden-input' |
| 639 | + ); |
| 640 | + const contactInput = lastContact.querySelector( |
| 641 | + '.modal__body-add-contact-input' |
| 642 | + ); |
| 643 | + |
| 644 | + if (dropBtn && hiddenInput && contactInput) { |
| 645 | + dropBtn.textContent = convertContactTypeToText(contact.type); // определение типа контакта (для/в drop-down) |
| 646 | + hiddenInput.value = contact.type; |
| 647 | + contactInput.value = contact.value || ''; |
| 648 | + } else { |
| 649 | + console.error('Ошибка: Ожидаемые элементы контакта не найдены!'); |
| 650 | + } |
| 651 | + }); |
| 652 | + } |
| 653 | + |
| 654 | + crmAddContainer.append(modalWrap); // добавление модального окна |
600 | 655 |
|
601 | 656 | // инициализация модального окна, через Bootstrap API |
602 | 657 | const bootstrapModal = new bootstrap.Modal(modalWrap); |
|
609 | 664 | // добавление обработчика события на таблицу (редактирование данных) |
610 | 665 | getOutputTable.addEventListener('click', editClientByBtn); |
611 | 666 |
|
| 667 | + // определение типа контакта, для отображения в drop-down кнопке контакта (при восстановлении данных) |
| 668 | + function convertContactTypeToText(type) { |
| 669 | + const typeMap = { |
| 670 | + phone: 'Телефон', |
| 671 | + 'extra-phone': 'Доп. телефон', |
| 672 | + email: 'Email', |
| 673 | + vk: 'Vk', |
| 674 | + facebook: 'Facebook', |
| 675 | + twitter: 'Twitter', |
| 676 | + 'extra-contact': 'Доп. контакт', |
| 677 | + }; |
| 678 | + |
| 679 | + return typeMap[type] || 'Телефон'; |
| 680 | + } |
| 681 | + |
612 | 682 | // ** удаление элементов/строк таблицы данных о клиентах (через "Удалить" кнопку) |
613 | 683 | function deleteBodyRowsByBtn(event) { |
614 | 684 | const row = event.target.closest('tr'); // фиксация всей строки |
|
0 commit comments