Skip to content

Commit 8d86682

Browse files
committed
[PRAC/cont] Correct log show/hide "dropdown-list"
Organiz exclusion of show multiple "drop-list", only one (at same time). Worth noting: - these changes, here.. adding setTimeout(), and working off the "nextElementSibling" property, and introducing an additional class, and a number of if/checks. core: B-3 / JS-BL
1 parent 0a50279 commit 8d86682

File tree

1 file changed

+37
-5
lines changed
  • core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/js

1 file changed

+37
-5
lines changed

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

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -746,13 +746,45 @@
746746
addModalBodyAddBtn.disabled = true;
747747
}
748748

749-
// показ/скрытие выпадающего списка вариантов/контактов
749+
let isDropdownToggleAllowed = true; // возможность/разрешение на показ выпадающего списка
750+
751+
// показ/скрытие выпадающего списка вариантов/контактов (открытым может быть только один, переключение)
750752
addModalContactDropBtn.addEventListener('click', (event) => {
751-
event.currentTarget.classList.toggle('arrow-rotate'); // переключение направления стрелки
752-
addModalContactList.classList.toggle('d-none');
753+
if (!isDropdownToggleAllowed) return; // проверка возможности/разрешения на показ списка
754+
755+
// попытка исключения хаотичных действий/наложений (задержка)
756+
isDropdownToggleAllowed = false;
757+
setTimeout(() => (isDropdownToggleAllowed = true), 200);
758+
759+
const nowClickedDropBtn = event.currentTarget; // фиксация нажатой drop-кнопки
760+
const nowShowedDropList = nowClickedDropBtn.nextElementSibling; // фиксация выпадающего списка (следующего за drop-кнопкой)
761+
762+
// проверка на уже открытый выпадающий список (закрытие)
763+
const alreadyOpenDropBtn = document.querySelector('.drop-open');
764+
765+
if (alreadyOpenDropBtn && alreadyOpenDropBtn !== nowClickedDropBtn) {
766+
const alreadyOpenDropList = alreadyOpenDropBtn.nextElementSibling;
767+
alreadyOpenDropBtn.classList.remove('arrow-rotate', 'drop-open');
768+
769+
if (
770+
alreadyOpenDropList &&
771+
alreadyOpenDropList.classList.contains(
772+
'modal__add-body-add-contact-list'
773+
)
774+
) {
775+
alreadyOpenDropList.classList.add('d-none'); // закрытие ранее открытого списка
776+
}
777+
}
778+
779+
nowClickedDropBtn.classList.toggle('arrow-rotate'); // переключение направления стрелки
780+
nowShowedDropList.classList.toggle('d-none'); // переключение видимости текущего списка
753781

754-
if (!addModalContactList.classList.contains('d-none')) {
755-
event.currentTarget.focus(); // добавление фокуса кнопке (до момента выбора)
782+
// переключение видимости
783+
if (nowShowedDropList.classList.contains('d-none')) {
784+
nowClickedDropBtn.classList.remove('drop-open');
785+
} else {
786+
nowClickedDropBtn.classList.add('drop-open');
787+
nowClickedDropBtn.focus(); // добавление фокуса кнопке (до момента выбора)
756788
}
757789
});
758790

0 commit comments

Comments
 (0)