|
403 | 403 | ); |
404 | 404 | clientTdActionsBtnEdit.classList.add( |
405 | 405 | 'crm__output-table-body-cell_actions-btn-edit', |
406 | | - 'table-row-btn' |
| 406 | + 'table-row-btn', |
| 407 | + 'table-row-btn-edit' |
407 | 408 | ); |
408 | 409 | clientTdActionsBtnEditIconPen.classList.add( |
409 | 410 | 'crm__output-table-body-cell_actions-btn-edit-icon-pen', |
|
419 | 420 | ); |
420 | 421 | clientTdActionsBtnDelete.classList.add( |
421 | 422 | 'crm__output-table-body-cell_actions-btn-delete', |
422 | | - 'table-row-btn' |
| 423 | + 'table-row-btn', |
| 424 | + 'table-row-btn-delete' |
423 | 425 | ); |
424 | 426 | clientTdActionsBtnDeleteIconX.classList.add( |
425 | 427 | 'crm__output-table-body-cell_actions-btn-delete-icon-x', |
|
568 | 570 | return contactsList; // возврат списка контактов/ячейки |
569 | 571 | } |
570 | 572 |
|
| 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 | + |
571 | 648 | // ** изменение направления стрелки/svg-icon, согласно прожатия по заглавной ячейке (при сортировке данных) |
572 | 649 | const allHeaderRowCells = document.querySelectorAll( |
573 | 650 | '.crm__output-table-head-cell' |
|
2658 | 2735 | // изменение цвета/выделение строки |
2659 | 2736 | lastNewTableRow.querySelectorAll('td').forEach((td) => { |
2660 | 2737 | 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 |
2664 | 2740 | }); |
2665 | 2741 |
|
2666 | 2742 | // возврат к default цвету, через несколько секунды |
|
0 commit comments