Skip to content

Commit e02eae1

Browse files
committed
[PRAC/cont] Add logic for "delete" table el/rows
Organiz deleting el/rows on clients data table (on the server). Worth noting: - realization of 3 functions at once (for this logic). core: B-3 / JS-BL
1 parent 0fc29b7 commit e02eae1

File tree

1 file changed

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

1 file changed

+81
-5
lines changed

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

Lines changed: 81 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,8 @@
403403
);
404404
clientTdActionsBtnEdit.classList.add(
405405
'crm__output-table-body-cell_actions-btn-edit',
406-
'table-row-btn'
406+
'table-row-btn',
407+
'table-row-btn-edit'
407408
);
408409
clientTdActionsBtnEditIconPen.classList.add(
409410
'crm__output-table-body-cell_actions-btn-edit-icon-pen',
@@ -419,7 +420,8 @@
419420
);
420421
clientTdActionsBtnDelete.classList.add(
421422
'crm__output-table-body-cell_actions-btn-delete',
422-
'table-row-btn'
423+
'table-row-btn',
424+
'table-row-btn-delete'
423425
);
424426
clientTdActionsBtnDeleteIconX.classList.add(
425427
'crm__output-table-body-cell_actions-btn-delete-icon-x',
@@ -568,6 +570,81 @@
568570
return contactsList; // возврат списка контактов/ячейки
569571
}
570572

573+
// ** удаление элементов/строк таблицы данных о клиентах (через "Удалить" кнопку)
574+
const getOutputTable = document.querySelector('.crm__output-table');
575+
576+
function deleteBodyRowsByBtn(event) {
577+
const row = event.target.closest('tr'); // фиксация всей строки
578+
if (!row || !event.target.classList.contains('table-row-btn-delete'))
579+
return;
580+
581+
const clientServerId = row.getAttribute('data-server-id'); // фиксация серверного id (из атрибута)
582+
583+
// вызов "общей" функции, для удаления клиента/строки (передача соответствующих аргументов)
584+
deleteBodyRowsClients(
585+
[clientServerId],
586+
`Вы уверены, что хотите удалить клиента?`,
587+
event.target
588+
);
589+
}
590+
591+
// добавление обработчика события на таблицу (делегирование)
592+
getOutputTable.addEventListener('click', deleteBodyRowsByBtn);
593+
594+
// ** удаление элементов/строк таблицы данных о клиентах (ОБЩАЯ ЛОГИКА)
595+
function deleteBodyRowsClients(
596+
clientsServerIdsToDelete,
597+
confirmMessage = null,
598+
currentBtn = null
599+
) {
600+
if (confirmMessage) {
601+
const confirmed = confirm(confirmMessage);
602+
603+
if (!confirmed) {
604+
if (currentBtn) {
605+
currentBtn.blur(); // снятие фокуса с кнопки, при отмене действия
606+
}
607+
return;
608+
}
609+
}
610+
611+
clientsServerIdsToDelete.forEach(async (serverId) => {
612+
await deleteClientsFromServer(serverId); // удаление клиентов с сервера по серверным ID
613+
});
614+
615+
updateClientsDataArr = updateClientsDataArr.filter(
616+
(client) => !clientsServerIdsToDelete.includes(client.id)
617+
); // обновление массива
618+
619+
// изменение/корректировка локальных ID оставшихся клиентов (для корректной сортировки после добавления "новых" клиентов)
620+
updateClientsDataArr.forEach((client, index) => {
621+
client.localId = index + 1;
622+
});
623+
624+
addClientsToTable(updateClientsDataArr); // обновление таблицы клиентов (пере-компоновка) после удаления
625+
}
626+
627+
// ** [СЕРВЕР] организация удаления клиентов с сервера (согласно серверных id)
628+
async function deleteClientsFromServer(serverId) {
629+
try {
630+
const response = await fetch(
631+
`http://localhost:3000/api/clients/${serverId}`,
632+
{
633+
method: 'DELETE',
634+
}
635+
);
636+
637+
if (!response.ok) {
638+
throw new Error(`Ошибка при удалении клиента: ${response.status}`);
639+
}
640+
641+
// await getClientsServerListData(); // обновление списка клиентов после удаления
642+
} catch (error) {
643+
console.error('Ошибка при удалении клиента с сервера..', error);
644+
alert('Не удалось удалить клиента с сервера!');
645+
}
646+
}
647+
571648
// ** изменение направления стрелки/svg-icon, согласно прожатия по заглавной ячейке (при сортировке данных)
572649
const allHeaderRowCells = document.querySelectorAll(
573650
'.crm__output-table-head-cell'
@@ -2658,9 +2735,8 @@
26582735
// изменение цвета/выделение строки
26592736
lastNewTableRow.querySelectorAll('td').forEach((td) => {
26602737
defaultRowCellColors.push(td.style.color);
2661-
td.style.fontWeight = 'bold';
2662-
// td.style.color = '#e10c22'; // красный
2663-
td.style.color = '#198754'; // или.. зелёный
2738+
td.style.fontWeight = '500';
2739+
td.style.color = '#7458c2'; // --cold-purple
26642740
});
26652741

26662742
// возврат к default цвету, через несколько секунды

0 commit comments

Comments
 (0)