|
278 | 278 | let updateClientsDataArr = []; |
279 | 279 |
|
280 | 280 | function addClientsToTable(clientsServerData = []) { |
281 | | - // ?? |
282 | | - // const selectedBodyRows = getSelectedBodyRows(); // сохранение выделенных body-строк (если такие есть) |
283 | | - |
284 | 281 | outTableBody.innerHTML = ''; // предварительная очистка таблицы |
285 | 282 | updateClientsDataArr = correctInitArr(clientsServerData); |
286 | 283 |
|
|
293 | 290 | outTableBody.append(clientTableTrRow); |
294 | 291 | } |
295 | 292 | } |
296 | | - |
297 | | - // ?? |
298 | | - // addClickListenersToBodyRows(); // добавление прослушки для всех строк (кроме заглавной), при компоновке, после пере-компоновки (новой отрисовки), для возможности выделения по клику |
299 | | - // restoreSelectedBodyRows(selectedBodyRows); // восстановление выделенных body-строк (если такие были) |
300 | 293 | } |
301 | 294 |
|
302 | 295 | // ** корректировка исходного/серверного массива клиентов (обработка ID, добавление свойства fullName и временных свойств) |
|
3121 | 3114 | } |
3122 | 3115 |
|
3123 | 3116 | addClientsToTable(updateClientsDataArr); // пере-рисовка (пере-компоновка) таблицы клиентов согласно фильтрации |
| 3117 | + highlightSearchMatches(searchValue); // выделение/подсветка совпадений в строке ФИО (согласно вводимых данных в search-инпут) |
3124 | 3118 | } |
3125 | 3119 |
|
3126 | 3120 | // отработка "дебаунс" задержки (если много данных, что бы снизить нагрузку) |
|
3130 | 3124 | clearTimeout(debounceTimer); // очистка предыдущей задержки |
3131 | 3125 | debounceTimer = setTimeout(filterClientsBySearchForm, 600); // применение фильтрации не сразу |
3132 | 3126 | }); |
| 3127 | + |
| 3128 | + // ** организация выделения/подсветки совпадений в ФИО ячейках/таблице (согласно вводимых данных в search-инпут) |
| 3129 | + function highlightSearchMatches(searchValue) { |
| 3130 | + const allFioCells = document.querySelectorAll( |
| 3131 | + '.crm__output-table-body-cell_fio' |
| 3132 | + ); // фиксация ФИО строк |
| 3133 | + |
| 3134 | + allFioCells.forEach((cell) => { |
| 3135 | + cell.innerHTML = cell.textContent; // очистка предыдущих выделений (если были) |
| 3136 | + |
| 3137 | + if (searchValue) { |
| 3138 | + const regex = new RegExp(`(${searchValue})`, 'gi'); // логика выделения/подсветки.. добавления background(a) |
| 3139 | + cell.innerHTML = cell.textContent.replace( |
| 3140 | + regex, |
| 3141 | + `<span style="background: #9873FF; color: #fff; padding: 1px 2px;">$1</span>` |
| 3142 | + ); |
| 3143 | + } |
| 3144 | + }); |
| 3145 | + } |
3133 | 3146 | })(); |
0 commit comments