Skip to content

Commit 72a42ba

Browse files
committed
[PRAC/cont] Add logic/correct data/clients on serv
Organiz data/client corrections on serv, separate by "type" at "submit". Worth noting: - a number of corrections related to modal window "type" division (by "Edit", "Save" buttons). core: B-3 / JS-BL
1 parent 3bc6f2c commit 72a42ba

File tree

1 file changed

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

1 file changed

+75
-21
lines changed

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

Lines changed: 75 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,6 @@
580580

581581
function editClientByBtn(event) {
582582
const row = event.target.closest('tr'); // фиксация всей строки
583-
584583
if (!row || !event.target.classList.contains('table-row-btn-edit')) return; // не нашли, возврат
585584

586585
const clientServerId = row.getAttribute('data-server-id'); // фиксация серверного id (из атрибута)
@@ -594,18 +593,12 @@
594593
return;
595594
}
596595

597-
// ?
598-
const originalClientData = JSON.parse(JSON.stringify(clientData)); // создание копии данных клиента (приходящих с сервера)
599-
const modalWrap = createModalWindowByType('edit', clientData);
596+
const modalWrap = createModalWindowByType('edit', clientData); // создание "универсального" модального окна (согласно передаваемого типа)
600597

601598
// фиксация элементов формы
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-
);
599+
const inputSurname = modalWrap.querySelector('.modal-surname-input');
600+
const inputName = modalWrap.querySelector('.modal-name-input');
601+
const inputPatronymic = modalWrap.querySelector('.modal-patronymic-input');
609602
const addContactBtn = modalWrap.querySelector('.modal__body-add-btn');
610603

611604
if (!addContactBtn) {
@@ -657,6 +650,15 @@
657650
const bootstrapModal = new bootstrap.Modal(modalWrap);
658651
bootstrapModal.show();
659652

653+
// добавление валидации для вводимых/корректируемых данных/в модальном окне (для "основных" инпутов, ФИО)
654+
const allModalBodyFormInputs =
655+
modalWrap.querySelectorAll('.modal__body-input');
656+
mainInputsValidation(allModalBodyFormInputs, {
657+
allowOnlyRussian: true,
658+
singleHyphen: true,
659+
noExtraSpaces: true,
660+
});
661+
660662
// принудительное удаление атрибута aria-hidden="true" с модального окна (исключение ошибки с ARIA)
661663
deleteAriaHiddenTrue(modalWrap);
662664
}
@@ -2498,6 +2500,40 @@
24982500
}
24992501
}
25002502

2503+
// ** [СЕРВЕР] корректировка данных/клиентов на сервере, получение обратно (проверка статуса)
2504+
async function editClientOnServer(clientId, clientData) {
2505+
try {
2506+
const response = await fetch(
2507+
`http://localhost:3000/api/clients/${clientId}`,
2508+
{
2509+
method: 'PATCH',
2510+
headers: {
2511+
'Content-Type': 'application/json',
2512+
},
2513+
body: JSON.stringify(clientData),
2514+
}
2515+
);
2516+
2517+
if (!response.ok) {
2518+
if (response.status === 422) {
2519+
const errorData = await response.json();
2520+
throw new Error(
2521+
`Ошибка валидации: ${errorData.errors
2522+
.map((e) => e.message)
2523+
.join(', ')}`
2524+
);
2525+
} else {
2526+
throw new Error(`Ошибка: ${response.status}`);
2527+
}
2528+
}
2529+
2530+
await getClientsServerListData(); // Обновляем список клиентов (перерисовка таблицы)
2531+
} catch (error) {
2532+
console.error('Ошибка при обновлении клиента..', error);
2533+
alert('Ошибка при обновлении клиента на сервере!');
2534+
}
2535+
}
2536+
25012537
// ** универсальная обработка модальных форм их "submit" событий, т.е. при добавление/изменении данных клиента (после валидаций, после проверки по ФИО)
25022538
// корректировка регистра, для полей ФИО
25032539
function toUpFirstLetter(value) {
@@ -2604,8 +2640,9 @@
26042640
})
26052641
.filter((contact) => contact !== null); // исключение некорректных/null контактов
26062642

2607-
// проверка на совпадение по ФИО
2643+
// проверка на совпадение по ФИО в таблице (только/если, это добавление "нового" клиента)
26082644
if (
2645+
type === 'add' &&
26092646
checkClientFIO(
26102647
formInSurname,
26112648
formInName,
@@ -2630,11 +2667,19 @@
26302667
};
26312668

26322669
try {
2633-
await addClientToServer(client); // отправка клиента на сервер
2670+
if (type === 'add') {
2671+
await addClientToServer(client); // отправка клиента на сервер
2672+
alert('Клиент успешно добавлен!');
2673+
} else if (type === 'edit' && clientData.id) {
2674+
await editClientOnServer(clientData.id, client); // изменение данных клиента на сервере
2675+
alert('Клиент успешно обновлён!');
2676+
} else {
2677+
throw new Error(
2678+
'Неизвестный тип модального окна или отсутствует ID клиента!'
2679+
);
2680+
}
26342681

26352682
setTimeout(() => {
2636-
alert('Клиент успешно добавлен!'); // вывод сообщения об успешном добавлении клиента
2637-
26382683
// очистка всех полей формы (удаление классов/сообщений ошибок)
26392684
allModalInputs.forEach((input) => {
26402685
input.value = '';
@@ -2650,15 +2695,24 @@
26502695
bootstrapModal.hide();
26512696
}
26522697

2653-
// и напоследок.. выделение/показ только что добавленного клиента/строки
2654-
setTimeout(() => {
2655-
movingToLastNewTableRow(); // перемещение фокуса
2656-
}, 300); // временная задержка, больше.. чтобы модальное окно успело закрыться
2698+
if (type === 'add') {
2699+
// и напоследок.. выделение/показ только что добавленного клиента/строки
2700+
setTimeout(() => {
2701+
movingToLastNewTableRow(); // перемещение фокуса
2702+
}, 300); // временная задержка, больше.. чтобы модальное окно успело закрыться
2703+
}
26572704
}, 200);
26582705
} catch (error) {
2659-
console.error('Ошибка при добавлении клиента:', error);
2706+
console.error(
2707+
`Ошибка при ${
2708+
type === 'add' ? 'добавлении' : 'обновлении'
2709+
} клиента:`,
2710+
error
2711+
);
26602712
alert(
2661-
'Не удалось добавить клиента! Проверьте данные и попробуйте снова!?'
2713+
`Не удалось ${
2714+
type === 'add' ? 'добавить' : 'обновить'
2715+
} клиента! Проверьте данные и попробуйте снова!?`
26622716
);
26632717
}
26642718
},

0 commit comments

Comments
 (0)