|
779 | 779 | const addModalContactCustomSelect = document.createElement('div'); |
780 | 780 | const addModalContactDropBtn = document.createElement('button'); |
781 | 781 | const addModalContactList = document.createElement('ul'); |
| 782 | + const addModalContactItemPhone = document.createElement('li'); |
782 | 783 | const addModalContactItemExtraPhone = document.createElement('li'); |
783 | 784 | const addModalContactItemEmail = document.createElement('li'); |
784 | 785 | const addModalContactItemVk = document.createElement('li'); |
|
806 | 807 | 'modal__add-body-add-contact-list', |
807 | 808 | 'd-none' |
808 | 809 | ); |
| 810 | + addModalContactItemPhone.classList.add( |
| 811 | + 'modal__add-body-add-contact-item', |
| 812 | + 'add-modal-phone-item' |
| 813 | + ); |
809 | 814 | addModalContactItemExtraPhone.classList.add( |
810 | 815 | 'modal__add-body-add-contact-item', |
811 | 816 | 'add-modal-extra-phone-item' |
|
856 | 861 | addModalContactCustomSelect.setAttribute('name', 'contact-options'); |
857 | 862 | addModalContactDropBtn.setAttribute('id', 'add-modal-drop-btn'); |
858 | 863 | addModalContactDropBtn.setAttribute('type', 'button'); |
| 864 | + addModalContactItemPhone.setAttribute('data-value', 'phone'); |
| 865 | + addModalContactItemPhone.setAttribute('tabindex', '0'); |
859 | 866 | addModalContactItemExtraPhone.setAttribute('data-value', 'extra-phone'); |
860 | 867 | addModalContactItemExtraPhone.setAttribute('tabindex', '0'); |
861 | 868 | addModalContactItemEmail.setAttribute('data-value', 'email'); |
|
873 | 880 | addModalContactHiddenInput.setAttribute('name', 'contact-type'); |
874 | 881 | addModalContactInput.setAttribute('type', 'text'); |
875 | 882 | addModalContactInput.setAttribute('name', 'contact-data'); |
876 | | - // addModalContactInput.setAttribute('pattern', '[А-Яа-яЁё\\-]+'); |
877 | 883 | addModalContactInput.setAttribute('placeholder', 'Введите данные контакта'); |
878 | 884 | addModalContactInput.setAttribute('required', ''); |
879 | 885 | addModalContactXBtn.setAttribute('type', 'button'); |
880 | 886 | addModalContactXBtn.setAttribute('tabindex', '0'); |
881 | 887 |
|
882 | 888 | addModalContactDropBtn.textContent = 'Телефон'; |
| 889 | + addModalContactItemPhone.textContent = 'Телефон'; |
883 | 890 | addModalContactItemExtraPhone.textContent = 'Доп. телефон'; |
884 | 891 | addModalContactItemEmail.textContent = 'Email'; |
885 | 892 | addModalContactItemVk.textContent = 'Vk'; |
|
889 | 896 | addModalContactFeedback.textContent = 'НЕ корректный ввод данных контакта!'; |
890 | 897 |
|
891 | 898 | addModalContactList.append( |
| 899 | + addModalContactItemPhone, |
892 | 900 | addModalContactItemExtraPhone, |
893 | 901 | addModalContactItemEmail, |
894 | 902 | addModalContactItemVk, |
|
917 | 925 |
|
918 | 926 | addBodySelectWrap.append(addModalContactElement); // добавление в DOM строки контактов |
919 | 927 |
|
920 | | - // добавление дополнительных отступов (при появлении строки контактов) |
| 928 | + // организация дополнительных отступов для "Добавить контакт" кнопки (при появлении строки контактов) |
921 | 929 | if (addModalContactsArr.length === 0) { |
922 | 930 | addModalBodyAddBtn.classList.add('add-modal-btn-margin'); |
923 | | - addModalContent.classList.add('add-modal-content-padding'); |
924 | 931 | } |
925 | 932 |
|
926 | 933 | // добавление "не большого" эффекта/задержки появления для "новой" строки контактов (элемента) |
|
930 | 937 | addModalContactElement.style.opacity = '1'; |
931 | 938 | }, 10); |
932 | 939 |
|
| 940 | + // скрытие/сразу li/варианта, как "Телефон" (т.к. в drop-btn отображение по умолчанию) |
| 941 | + if (addModalContactDropBtn.textContent === 'Телефон') { |
| 942 | + addModalContactItemPhone.style.display = 'none'; |
| 943 | + } |
| 944 | + |
| 945 | + // обновление/изменение отступов для li/вариантов выпадающего списка (для первого и последнего элементов) |
| 946 | + updateDropItemPaddings(addModalContactList); |
| 947 | + |
933 | 948 | // добавление валидации для вводимых данных контакта (при добавлении строки контактов) |
934 | 949 | addInputsValidation([addModalContactInput], { |
935 | 950 | dynamicContactValidation: true, |
|
1001 | 1016 |
|
1002 | 1017 | function getContactDropSelection(target) { |
1003 | 1018 | const selectedItemValue = target.getAttribute('data-value'); |
| 1019 | + const previousItemValue = addModalContactHiddenInput.value; |
| 1020 | + |
1004 | 1021 | addModalContactDropBtn.textContent = target.textContent; |
1005 | 1022 | addModalContactHiddenInput.value = selectedItemValue; // обновление данных в "скрытом" input (для последующей отправки на сервер) |
1006 | | - addDropPhoneOption(); // добавление li/варианта, как "Телефон" в выпадающий список (если сразу не выбрали) |
| 1023 | + |
| 1024 | + target.style.display = 'none'; // скрытие li/варианта в выпадающем списке (т.е. после выбора, отображения в drop-btn) |
| 1025 | + |
| 1026 | + // отображение/снова li/варианта (т.е. до этого скрытого) |
| 1027 | + if (previousItemValue) { |
| 1028 | + const previousItem = addModalContactList.querySelector( |
| 1029 | + `[data-value="${previousItemValue}"]` |
| 1030 | + ); |
| 1031 | + if (previousItem) { |
| 1032 | + previousItem.style.display = ''; // сброс display: none; |
| 1033 | + } |
| 1034 | + } |
| 1035 | + |
| 1036 | + updateDropItemPaddings(addModalContactList); // обновление/изменение отступов для li/вариантов выпадающего списка (для первого и последнего элементов) |
1007 | 1037 | closeBtnDropdown(); // закрытие выпадающего списка |
1008 | 1038 | addModalContactInput.focus(); // перевод фокуса на соседний инпут (после выбора в выпадающем списке) |
1009 | 1039 | } |
1010 | 1040 |
|
1011 | | - function addDropPhoneOption() { |
1012 | | - const isPhoneOption = Array.from(addModalContactList.children).some( |
1013 | | - (item) => item.getAttribute('data-value') === 'phone' |
| 1041 | + function updateDropItemPaddings(dropList) { |
| 1042 | + Array.from(dropList.children).forEach((item) => { |
| 1043 | + item.classList.remove('first-visible', 'last-visible'); // изначальная очистка от дополнительных классов |
| 1044 | + }); |
| 1045 | + |
| 1046 | + // фиксация li/вариантов находящихся "сейчас" в выпадающем списке |
| 1047 | + const visibleDropItems = Array.from(dropList.children).filter( |
| 1048 | + (item) => item.style.display !== 'none' |
1014 | 1049 | ); |
1015 | 1050 |
|
1016 | | - // проверка на наличие "Телефон(а)" в кнопке, среди li/элементов (удаление/добавление в выпадающий список) |
1017 | | - if (addModalContactDropBtn.textContent === 'Телефон' && isPhoneOption) { |
1018 | | - const phoneOption = addModalContactList.querySelector( |
1019 | | - '[data-value="phone"]' |
1020 | | - ); |
1021 | | - if (phoneOption) phoneOption.remove(); // удаление |
1022 | | - } else if ( |
1023 | | - addModalContactDropBtn.textContent !== 'Телефон' && |
1024 | | - !isPhoneOption |
1025 | | - ) { |
1026 | | - const addModalContactItemPhone = document.createElement('li'); |
1027 | | - addModalContactItemPhone.classList.add( |
1028 | | - 'modal__add-body-add-contact-item', |
1029 | | - 'add-modal-phone-item' |
1030 | | - ); |
1031 | | - addModalContactItemPhone.setAttribute('data-value', 'phone'); |
1032 | | - addModalContactItemPhone.setAttribute('tabindex', '0'); |
1033 | | - addModalContactItemPhone.textContent = 'Телефон'; |
1034 | | - addModalContactList.prepend(addModalContactItemPhone); // добавляем в начало списка |
| 1051 | + // добавление отступов (для первого/последнего элементов списка) |
| 1052 | + if (visibleDropItems.length > 0) { |
| 1053 | + const firstVisibleItem = visibleDropItems[0]; |
| 1054 | + const lastVisibleItem = visibleDropItems[visibleDropItems.length - 1]; |
| 1055 | + firstVisibleItem.classList.add('first-visible'); |
| 1056 | + lastVisibleItem.classList.add('last-visible'); |
1035 | 1057 | } |
1036 | 1058 | } |
1037 | 1059 |
|
|
1110 | 1132 | ); |
1111 | 1133 | addBodySelectWrap.classList.add('d-none'); |
1112 | 1134 | addModalBodyAddBtn.classList.remove('add-modal-btn-margin'); |
1113 | | - addModalContent.classList.remove('add-modal-content-padding'); |
1114 | 1135 | } |
1115 | 1136 | } |
1116 | 1137 | } |
|
0 commit comments