Skip to content

Commit c0cdbf0

Browse files
committed
[PRAC/cont] Add "new" logic for closing dropdown
Organiz auto hiding dropdown row-list (if "click/focus" not with it). Worth noting: - that, this realization.. excludes the closeRowDropdown() function. core: B-3 / JS-BL
1 parent 7de74c1 commit c0cdbf0

File tree

2 files changed

+40
-21
lines changed

2 files changed

+40
-21
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@
304304
padding-bottom: 5px;
305305
}
306306

307-
.modal__add-body-add-contact-item:focus-visible:not(:hover) {
307+
.modal__add-body-add-contact-item:focus-visible {
308308
color: var(--main-purple);
309309
}
310310

@@ -424,7 +424,7 @@
424424
color: var(--cold-purple);
425425
}
426426

427-
.modal__add-body-add-contact-item:hover:not(:active) {
427+
.modal__add-body-add-contact-item:hover:not(:focus-visible):not(:active) {
428428
background-color: var(--select-gray);
429429
}
430430

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

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,7 @@
11021102
// остановка мониторинга (если более не требуется)
11031103
// observer.disconnect();
11041104

1105-
// ** динамическое добавление строки контактов в add-модальном окне (по нажатию "Добавить контакт" кнопки)
1105+
// ** динамическое добавление строки контактов в add-модальном окне (по нажатию "Добавить контакт" кнопки, объёмная логика.. ряд "внутренних" функций)
11061106
const addModalContactsArr = [];
11071107

11081108
function createAddModalContactsElement() {
@@ -1325,7 +1325,7 @@
13251325
nowClickedDropBtn.classList.toggle('arrow-rotate'); // переключение направления стрелки
13261326
nowShowedDropList.classList.toggle('d-none'); // переключение видимости текущего списка
13271327

1328-
// переключение видимости
1328+
// переключение видимости у/для списков
13291329
if (nowShowedDropList.classList.contains('d-none')) {
13301330
nowClickedDropBtn.classList.remove('drop-open');
13311331
} else {
@@ -1411,6 +1411,42 @@
14111411
addModalContactDropBtn.blur(); // снятие фокуса с кнопки (после выбора)
14121412
}
14131413

1414+
// автоматическое закрытие/скрытие развёрнутого выпадающего drop-списка (при работе НЕ с ним)
1415+
document.addEventListener('click', (event) => {
1416+
const openDropdown = document.querySelector('.drop-open');
1417+
if (openDropdown) {
1418+
const dropdownList = openDropdown.nextElementSibling;
1419+
1420+
// закрытие/скрытие выпадающего списка (если последующий "клик" не по нему, не по drop-кнопке)
1421+
if (
1422+
!openDropdown.contains(event.target) &&
1423+
!dropdownList.contains(event.target)
1424+
) {
1425+
closeBtnDropdown(); // вызов соответствующей функции
1426+
}
1427+
}
1428+
});
1429+
1430+
addModalWrap.addEventListener('focusout', (event) => {
1431+
const openDropdown = document.querySelector('.drop-open');
1432+
if (openDropdown) {
1433+
const dropdownList = openDropdown.nextElementSibling;
1434+
1435+
// закрытие/скрытие выпадающего списка (если "фокус" перешёл на другой элемент, в другое место)
1436+
if (
1437+
!openDropdown.contains(event.relatedTarget) &&
1438+
!dropdownList.contains(event.relatedTarget)
1439+
) {
1440+
closeBtnDropdown(); // вызов соответствующей функции
1441+
}
1442+
}
1443+
});
1444+
1445+
// исключение закрытия выпадающего списка (при работе с ним)
1446+
addModalContactList.addEventListener('click', (event) => {
1447+
event.stopPropagation();
1448+
});
1449+
14141450
// вызов/инициализация tooltips для "X" кнопки (для кнопки удаления строки контактов)
14151451
initTippy('.modal__add-body-add-x-btn', 'удалить контакт', 'top');
14161452

@@ -1461,23 +1497,6 @@
14611497

14621498
addModalWrap.addEventListener('hide.bs.modal', checkEmptyRowContacts); // запуск проверки на "пустые" контакты (перед закрытием add-модального окна)
14631499

1464-
// ** организация закрытия развёрнутого/раскрытого выпадающего списка row-контактов (при закрытии модального окна)
1465-
function closeRowDropdown() {
1466-
const openRowDropdownBtn = document.querySelector('.drop-open');
1467-
if (openRowDropdownBtn) {
1468-
const dropdownList = openRowDropdownBtn.nextElementSibling; // определение следом идущего списка
1469-
if (
1470-
dropdownList &&
1471-
dropdownList.classList.contains('modal-contact-list')
1472-
) {
1473-
dropdownList.classList.add('d-none'); // закрытие списка
1474-
openRowDropdownBtn.classList.remove('arrow-rotate', 'drop-open'); // корректировка кнопки
1475-
}
1476-
}
1477-
}
1478-
1479-
addModalWrap.addEventListener('hidden.bs.modal', closeRowDropdown); // закрытие "возможно" раскрытого выпадающего списка контактов (при закрытие add-модального окна)
1480-
14811500
// ** удаление/очистка от невалидных row-контактов (при закрытии модального окна)
14821501
function removeInvalidRowContacts() {
14831502
const invalidContactRows = document.querySelectorAll(

0 commit comments

Comments
 (0)