Skip to content

Commit 16ad187

Browse files
committed
[PRAC/cont] Add li/element "phone" to dropdown
Organiz adding "phone" option if not immediately selected (if.. delete). Worth noting: - internal logic/realization in addDropPhoneOption() function. core: B-3 / JS-BL
1 parent d81c2f3 commit 16ad187

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@
241241
}
242242

243243
.modal__add-body-add-contact-item:last-child {
244-
padding-bottom: 6px;
244+
padding-bottom: 5px;
245245
}
246246

247247
.modal__add-body-add-contact-item:focus-visible:not(:hover) {

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

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -763,25 +763,53 @@
763763
// замена/обновление содержимого/контента кнопки, так и через TAB/Enter (согласно значений li/вариантов)
764764
addModalContactList.addEventListener('click', (event) => {
765765
if (event.target.tagName === 'LI') {
766-
getContactSelection(event.target); // отработка выбора
766+
getContactDropSelection(event.target); // отработка выбора
767767
}
768768
});
769769

770770
addModalContactList.addEventListener('keydown', (event) => {
771771
if (event.target.tagName === 'LI' && event.key === 'Enter') {
772772
event.preventDefault(); // исключение непредвиденных событий/поведения
773-
getContactSelection(event.target); // отработка выбора
773+
getContactDropSelection(event.target); // отработка выбора
774774
}
775775
});
776776

777-
function getContactSelection(target) {
777+
function getContactDropSelection(target) {
778778
const selectedItemValue = target.getAttribute('data-value');
779779
addModalContactDropBtn.textContent = target.textContent;
780780
addModalContactHiddenInput.value = selectedItemValue; // обновление данных в "скрытом" input (для последующей отправки на сервер)
781+
addDropPhoneOption(); // добавление li/варианта, как "Телефон" в выпадающий список (если сразу не выбрали)
781782
closeBtnDropdown(); // закрытие выпадающего списка
782783
addModalContactInput.focus(); // перевод фокуса на соседний инпут (после выбора в выпадающем списке)
783784
}
784785

786+
function addDropPhoneOption() {
787+
const isPhoneOption = Array.from(addModalContactList.children).some(
788+
(item) => item.getAttribute('data-value') === 'phone'
789+
);
790+
791+
// проверка на наличие "Телефон(а)" в кнопке, среди li/элементов (удаление/добавление в выпадающий список)
792+
if (addModalContactDropBtn.textContent === 'Телефон' && isPhoneOption) {
793+
const phoneOption = addModalContactList.querySelector(
794+
'[data-value="phone"]'
795+
);
796+
if (phoneOption) phoneOption.remove(); // удаление
797+
} else if (
798+
addModalContactDropBtn.textContent !== 'Телефон' &&
799+
!isPhoneOption
800+
) {
801+
const addModalContactItemPhone = document.createElement('li');
802+
addModalContactItemPhone.classList.add(
803+
'modal__add-body-add-contact-item',
804+
'add-modal-phone-item'
805+
);
806+
addModalContactItemPhone.setAttribute('data-value', 'phone');
807+
addModalContactItemPhone.setAttribute('tabindex', '0');
808+
addModalContactItemPhone.textContent = 'Телефон';
809+
addModalContactList.prepend(addModalContactItemPhone); // добавляем в начало списка
810+
}
811+
}
812+
785813
function closeBtnDropdown() {
786814
addModalContactList.classList.add('d-none'); // скрытие выпадающего списка
787815
addModalContactDropBtn.classList.remove('arrow-rotate'); // возврат направления стрелки

0 commit comments

Comments
 (0)