|
40 | 40 | searchInput.setAttribute('id', 'search-form-input'); |
41 | 41 | searchInput.setAttribute('type', 'text'); |
42 | 42 | searchInput.setAttribute('pattern', '[А-Яа-яЁё\\-]+'); |
43 | | - searchInput.setAttribute('placeholder', 'Введите запрос'); |
| 43 | + searchInput.setAttribute('placeholder', 'Введите запрос.. ФИО'); |
44 | 44 | searchInput.setAttribute('required', ''); |
45 | 45 |
|
46 | 46 | searchLogo.append(searchLogoImg); |
|
3085 | 3085 | }); |
3086 | 3086 | }); |
3087 | 3087 |
|
3088 | | - // ** организация сброса сортировки таблицы клиентов (через/посредствам прожатия #-хэштега) |
| 3088 | + // ** организация сброса сортировки/фильтрации таблицы клиентов (через/посредствам прожатия #-хэштега, как было..) |
3089 | 3089 | const hashTagReset = document.getElementById('hash-tag-title'); // фиксация #-хэштега (перед заголовком "Клиенты") |
| 3090 | + const formFilterInput = document.getElementById('search-form-input'); // фиксация поля поиска |
3090 | 3091 |
|
3091 | 3092 | function resetTableSorting() { |
3092 | 3093 | getClientsServerListData(); // обновление/перерисовка таблицы, как было.. (согласно серверных данных) |
3093 | 3094 | sortDirectionUpDown = true; // корректировка "флага" направления сортировки (который инициализируется выше) |
| 3095 | + |
| 3096 | + setTimeout(() => { |
| 3097 | + formFilterInput.value = ''; // очистка фильтрационного поля/инпута, по сути.. возврат как было |
| 3098 | + formFilterInput.classList.remove('is-invalid'); // исключение "невалидных" выделений/сообщений (после очистки) |
| 3099 | + }, 0); // пока.. "нулевая" задержка (будет большой объём данных в таблице, можно будет подкорректировать) |
3094 | 3100 | } |
3095 | 3101 |
|
3096 | 3102 | hashTagReset.addEventListener('click', resetTableSorting); // прослушка/применение |
| 3103 | + |
| 3104 | + // ** фильтрация клиентов/таблицы, согласно фильтрационного поля ввода (сразу применение) |
| 3105 | + searchForm.addEventListener('submit', (event) => { |
| 3106 | + event.preventDefault(); // исключение отправки |
| 3107 | + }); |
| 3108 | + |
| 3109 | + function filterClientsBySearchForm() { |
| 3110 | + const searchValue = formFilterInput.value.trim().toLowerCase(); // определение "пустой" строки |
| 3111 | + updateClientsDataArr = correctInitArr(clientsDataArrWithIds); // обновление исходного массива, перед фильтрацией |
| 3112 | + |
| 3113 | + // отработка поиска/фильтрации, только/если строка не "пустая" |
| 3114 | + if (searchValue) { |
| 3115 | + updateClientsDataArr = updateClientsDataArr.filter((clients) => |
| 3116 | + clients.fullName.toLowerCase().includes(searchValue) |
| 3117 | + ); // стрелочная функция без {}, таким образом автоматический return true\false, согласно условия |
| 3118 | + } |
| 3119 | + |
| 3120 | + addClientsToTable(updateClientsDataArr); // пере-рисовка (пере-компоновка) таблицы клиентов согласно фильтрации |
| 3121 | + } |
| 3122 | + |
| 3123 | + // отработка "дебаунс" задержки (если много данных, что бы снизить нагрузку) |
| 3124 | + let debounceTimer; |
| 3125 | + |
| 3126 | + formFilterInput.addEventListener('input', () => { |
| 3127 | + clearTimeout(debounceTimer); // очистка предыдущей задержки |
| 3128 | + debounceTimer = setTimeout(filterClientsBySearchForm, 600); // применение фильтрации не сразу |
| 3129 | + }); |
3097 | 3130 | })(); |
0 commit comments