|
2695 | 2695 | bootstrapModal.hide(); |
2696 | 2696 | } |
2697 | 2697 |
|
| 2698 | + // выделение/показ только что добавленного/от редактируемого клиента/строки (исходя из типа) |
2698 | 2699 | if (type === 'add') { |
2699 | | - // и напоследок.. выделение/показ только что добавленного клиента/строки |
2700 | 2700 | setTimeout(() => { |
2701 | | - movingToLastNewTableRow(); // перемещение фокуса |
| 2701 | + moveToAndHighlightClientRow('add'); // перемещение фокуса на только, что добавленного клиента |
| 2702 | + }, 300); // временная задержка, больше.. чтобы модальное окно успело закрыться |
| 2703 | + } else if (type === 'edit' && clientData.id) { |
| 2704 | + setTimeout(() => { |
| 2705 | + moveToAndHighlightClientRow('edit', clientData.id); // перемещение фокуса на только, что от редактируемого клиента |
2702 | 2706 | }, 300); // временная задержка, больше.. чтобы модальное окно успело закрыться |
2703 | 2707 | } |
2704 | 2708 | }, 200); |
|
2879 | 2883 | saveButton.style.cursor = saveButton.disabled ? 'help' : 'pointer'; |
2880 | 2884 | } |
2881 | 2885 |
|
2882 | | - // ** перемещение/фиксация области просмотра на только что добавленном клиенте/на последней строке (выделение цветом) |
2883 | | - function movingToLastNewTableRow() { |
| 2886 | + // ** перемещение/фиксация области просмотра на только что добавленном/от редактируемом клиенте, соответствующей строке (выделение цветом) |
| 2887 | + function moveToAndHighlightClientRow(type, clientId = null) { |
2884 | 2888 | if (!outputTable) { |
2885 | 2889 | console.error('Таблица НЕ обнаружена!'); |
2886 | 2890 | return; |
2887 | 2891 | } |
2888 | 2892 |
|
2889 | | - const lastNewTableRow = outTableBody.lastElementChild; // фиксация последней строки |
2890 | | - if (!lastNewTableRow) return; // нет строки.. возврат |
| 2893 | + let clientRow; |
| 2894 | + |
| 2895 | + if (type === 'add') { |
| 2896 | + clientRow = outTableBody.lastElementChild; // фиксация последней строки |
| 2897 | + } else if (type === 'edit' && clientId) { |
| 2898 | + clientRow = outTableBody.querySelector(`[data-server-id="${clientId}"]`); // фиксация строки по ID |
| 2899 | + } |
| 2900 | + |
| 2901 | + if (!clientRow) { |
| 2902 | + console.warn( |
| 2903 | + `Не удалось найти строку клиента (${ |
| 2904 | + type === 'add' ? 'последнюю' : `ID: ${clientId}` |
| 2905 | + })` |
| 2906 | + ); |
| 2907 | + return; // нет строк.. возврат |
| 2908 | + } |
2891 | 2909 |
|
2892 | | - // кого предстоит перекрасить/выделить |
| 2910 | + // кого предстоит перекрасить/выделить (какие ячейки?) |
2893 | 2911 | const highlightClasses = [ |
2894 | 2912 | 'crm__output-table-body-cell_fio', |
2895 | 2913 | 'crm__output-table-body-cell_crt-d-time', |
|
2898 | 2916 |
|
2899 | 2917 | const defaultColorsMap = new Map(); // хранение исходных цветов/красок |
2900 | 2918 |
|
2901 | | - // перемещение к "новому" клиенту/к последней строке таблицы |
2902 | | - lastNewTableRow.scrollIntoView({ |
| 2919 | + // перемещение к соответствующей строке таблицы |
| 2920 | + clientRow.scrollIntoView({ |
2903 | 2921 | behavior: 'smooth', |
2904 | 2922 | block: 'center', |
2905 | 2923 | }); |
2906 | 2924 |
|
2907 | 2925 | // изменение цвета/выделение строки |
2908 | | - lastNewTableRow.querySelectorAll('td').forEach((td) => { |
| 2926 | + clientRow.querySelectorAll('td').forEach((td) => { |
2909 | 2927 | if (highlightClasses.some((cls) => td.classList.contains(cls))) { |
2910 | 2928 | defaultColorsMap.set(td, td.style.color); // сохранение default цвета |
2911 | 2929 | td.style.fontWeight = 'bold'; |
|
0 commit comments