Skip to content

Commit 1afa38d

Browse files
committed
[PRAC/cont] Add clients/tbl "filtering" logic
Organiz "filter" clients/tbl, accord search input (immediate apply). Worth noting: - correcting the "sort" reset logic, by #-hashtag.. adding reset and "filtering". core: B-3 / JS-BL
1 parent 70e90a1 commit 1afa38d

File tree

3 files changed

+40
-4
lines changed

3 files changed

+40
-4
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
margin-bottom: 0;
4242
border-collapse: collapse;
4343
width: 100%;
44-
height: 322px;
44+
height: 363px;
4545
font-family: var(--open-sans), sans-serif;
4646
font-weight: var(--regular);
4747
background-color: var(--white);
@@ -247,10 +247,13 @@
247247
justify-content: flex-start;
248248
flex-wrap: wrap;
249249
align-items: center;
250+
flex-shrink: 0;
250251
gap: 1px 2px;
251252
position: relative;
252253
margin: 0;
253254
padding: 0;
255+
min-width: 110px;
256+
max-width: 110px;
254257
list-style: none;
255258
}
256259

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141

4242
// инициализация Tippy для/всех "остальных" элементов (без учёта ширины экрана)
4343
function initTippyForOther() {
44-
initTippy('#hash-tag-title', 'сбросить сортировку', 'bottom', {
44+
initTippy('#hash-tag-title', 'к исходному виду', 'bottom', {
4545
offset: [0, 2],
4646
});
4747
initTippy('#table-th-id', 'сортировать ⇵', 'bottom', {

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

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
searchInput.setAttribute('id', 'search-form-input');
4141
searchInput.setAttribute('type', 'text');
4242
searchInput.setAttribute('pattern', '[А-Яа-яЁё\\-]+');
43-
searchInput.setAttribute('placeholder', 'Введите запрос');
43+
searchInput.setAttribute('placeholder', 'Введите запрос.. ФИО');
4444
searchInput.setAttribute('required', '');
4545

4646
searchLogo.append(searchLogoImg);
@@ -3085,13 +3085,46 @@
30853085
});
30863086
});
30873087

3088-
// ** организация сброса сортировки таблицы клиентов (через/посредствам прожатия #-хэштега)
3088+
// ** организация сброса сортировки/фильтрации таблицы клиентов (через/посредствам прожатия #-хэштега, как было..)
30893089
const hashTagReset = document.getElementById('hash-tag-title'); // фиксация #-хэштега (перед заголовком "Клиенты")
3090+
const formFilterInput = document.getElementById('search-form-input'); // фиксация поля поиска
30903091

30913092
function resetTableSorting() {
30923093
getClientsServerListData(); // обновление/перерисовка таблицы, как было.. (согласно серверных данных)
30933094
sortDirectionUpDown = true; // корректировка "флага" направления сортировки (который инициализируется выше)
3095+
3096+
setTimeout(() => {
3097+
formFilterInput.value = ''; // очистка фильтрационного поля/инпута, по сути.. возврат как было
3098+
formFilterInput.classList.remove('is-invalid'); // исключение "невалидных" выделений/сообщений (после очистки)
3099+
}, 0); // пока.. "нулевая" задержка (будет большой объём данных в таблице, можно будет подкорректировать)
30943100
}
30953101

30963102
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+
});
30973130
})();

0 commit comments

Comments
 (0)