Skip to content

Commit 3bc6f2c

Browse files
committed
[PRAC/cont] Correct logic of "edit" clients data
Organiz data upload/recovery, for display in modal window ("Chg" btn). Worth noting: - the needs for future corrections in this logic. core: B-3 / JS-BL
1 parent 4d0774f commit 3bc6f2c

File tree

1 file changed

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

1 file changed

+72
-2
lines changed

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

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -594,9 +594,64 @@
594594
return;
595595
}
596596

597-
// открытие модального окна
597+
// ?
598+
const originalClientData = JSON.parse(JSON.stringify(clientData)); // создание копии данных клиента (приходящих с сервера)
598599
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); // добавление модального окна
600655

601656
// инициализация модального окна, через Bootstrap API
602657
const bootstrapModal = new bootstrap.Modal(modalWrap);
@@ -609,6 +664,21 @@
609664
// добавление обработчика события на таблицу (редактирование данных)
610665
getOutputTable.addEventListener('click', editClientByBtn);
611666

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+
612682
// ** удаление элементов/строк таблицы данных о клиентах (через "Удалить" кнопку)
613683
function deleteBodyRowsByBtn(event) {
614684
const row = event.target.closest('tr'); // фиксация всей строки

0 commit comments

Comments
 (0)