|
483 | 483 | crm.append(crmSearch, crmOutput, crmAdd); |
484 | 484 |
|
485 | 485 | // ** организация появления/скрытия поля для ввода данных/фильтрационного инпута (по нажатию на logo, на 320px) |
486 | | - document |
487 | | - .querySelector('.crm__search-logo-img') |
488 | | - .addEventListener('click', () => { |
489 | | - document |
490 | | - .querySelector('.crm__search-data') |
491 | | - .classList.toggle('show-search-input'); |
492 | | - }); |
| 486 | + searchLogoImg.addEventListener('click', () => { |
| 487 | + document |
| 488 | + .querySelector('.crm__search-data') |
| 489 | + .classList.toggle('show-search-input'); |
| 490 | + }); |
493 | 491 |
|
494 | 492 | // ** организация валидации для ввода данных/фильтрационного инпута (для формы без submit) |
495 | 493 | function searchFormInputValidation(input) { |
|
525 | 523 | }); |
526 | 524 | } |
527 | 525 |
|
528 | | - const searchFormMainInput = document.querySelector('.crm__search-form input'); // получение search-инпута |
| 526 | + // получение заглавного search-инпута (последующая валидация) |
| 527 | + const searchFormMainInput = document.querySelector('.crm__search-form input'); |
529 | 528 | searchFormInputValidation(searchFormMainInput); |
530 | 529 |
|
531 | 530 | // ** изменение направления стрелки/svg-icon, согласно прожатия по заглавной ячейке (при сортировке данных) |
|
598 | 597 | ); |
599 | 598 | } |
600 | 599 |
|
| 600 | + // получение всех add-модальных инпутов (последующая валидация) |
601 | 601 | const allAddModalFormInputs = document.querySelectorAll( |
602 | 602 | '.modal__add-body-input' |
603 | | - ); // получение всех модальных-инпутов |
| 603 | + ); |
604 | 604 | addModalFormInputValidation(allAddModalFormInputs); |
| 605 | + |
| 606 | + // ** динамическое добавление строки контактов в add-модальном окне (по нажатию "Добавить контакт" кнопки) |
| 607 | + function createAddModalContactsElement() { |
| 608 | + const addModalContactElement = document.createElement('div'); |
| 609 | + addModalContactElement.classList.add( |
| 610 | + 'modal__add-body-add-contact-element', |
| 611 | + 'input-group' |
| 612 | + ); |
| 613 | + |
| 614 | + const addModalContactSelect = document.createElement('select'); |
| 615 | + addModalContactSelect.classList.add( |
| 616 | + 'modal__add-body-add-contact-select', |
| 617 | + 'form-select' |
| 618 | + ); |
| 619 | + addModalContactSelect.setAttribute('id', 'add-modal-select'); |
| 620 | + addModalContactSelect.setAttribute('name', 'Client contacts'); |
| 621 | + addModalContactSelect.innerHTML = ` |
| 622 | + <option value="phone" selected>Телефон</option> |
| 623 | + <option value="extra-phone">Доп. телефон</option> |
| 624 | + <option value="email">Email</option> |
| 625 | + <option value="vk">Vk</option> |
| 626 | + <option value="facebook">Facebook</option> |
| 627 | + `; |
| 628 | + |
| 629 | + const addModalContactInput = document.createElement('input'); |
| 630 | + addModalContactInput.classList.add( |
| 631 | + 'modal__add-body-add-contact-input', |
| 632 | + 'form-control' |
| 633 | + ); |
| 634 | + // !! нужно добавлять id.. но всем разные |
| 635 | + // addModalContactInput.setAttribute('id', 'add-modal-contact-input'); |
| 636 | + addModalContactInput.setAttribute('type', 'text'); |
| 637 | + addModalContactInput.setAttribute('placeholder', 'Введите данные контакта'); |
| 638 | + |
| 639 | + const addModalContactXBtn = document.createElement('button'); |
| 640 | + addModalContactXBtn.classList.add( |
| 641 | + 'modal__add-body-add-x-btn', |
| 642 | + 'add-modal-delete-btn' |
| 643 | + ); |
| 644 | + addModalContactXBtn.setAttribute('type', 'button'); |
| 645 | + addModalContactXBtn.setAttribute('tabindex', '0'); |
| 646 | + addModalContactXBtn.textContent = '✖'; |
| 647 | + |
| 648 | + addModalContactElement.append( |
| 649 | + addModalContactSelect, |
| 650 | + addModalContactInput, |
| 651 | + addModalContactXBtn |
| 652 | + ); |
| 653 | + |
| 654 | + // отображение изначально скрытой обвёртки/родителя |
| 655 | + const addBodySelectWrap = document.querySelector( |
| 656 | + '.modal__add-body-add-select-wrap' |
| 657 | + ); |
| 658 | + addBodySelectWrap.classList.remove('d-none'); |
| 659 | + |
| 660 | + addBodySelectWrap.append(addModalContactElement); // добавление в DOM строки контактов |
| 661 | + |
| 662 | + // добавление "не большого" эффекта/задержки появления для "новой" строки контактов (элемента) |
| 663 | + addModalContactElement.style.opacity = '0'; |
| 664 | + setTimeout(() => { |
| 665 | + addModalContactElement.style.transition = 'opacity 0.3s ease'; |
| 666 | + addModalContactElement.style.opacity = '1'; |
| 667 | + }, 10); |
| 668 | + |
| 669 | + // организация удаления строки контактов |
| 670 | + addModalContactXBtn.addEventListener('click', (event) => { |
| 671 | + event.stopPropagation(); // исключение не предвиденных событий/поведения |
| 672 | + deleteModalContactsElement(event); // удаление строки контактов (посредствам "X" кнопки) |
| 673 | + }); |
| 674 | + |
| 675 | + // организация удаления строки контактов и через TAB/Enter |
| 676 | + addModalContactXBtn.addEventListener('keydown', (event) => { |
| 677 | + if (event.key === 'Enter') { |
| 678 | + event.stopPropagation(); // исключение не предвиденных событий/поведения |
| 679 | + deleteModalContactsElement(event); // удаление строки контактов (посредствам "X" кнопки) |
| 680 | + } |
| 681 | + }); |
| 682 | + } |
| 683 | + |
| 684 | + // запуск логики добавления/создания строки контактов |
| 685 | + addModalBodyAddBtn.addEventListener('click', () => { |
| 686 | + createAddModalContactsElement(); |
| 687 | + }); |
| 688 | + |
| 689 | + // ** удаление строки контактов в add-модальном окне (через "X" кнопку) |
| 690 | + function deleteModalContactsElement(event) { |
| 691 | + const clickedContactsXBtn = event.target; |
| 692 | + |
| 693 | + // проверка на входящее прожатие/событие |
| 694 | + if (!clickedContactsXBtn) { |
| 695 | + return; |
| 696 | + } |
| 697 | + |
| 698 | + if (clickedContactsXBtn.classList.contains('add-modal-delete-btn')) { |
| 699 | + const modalContactsElement = clickedContactsXBtn.closest('div'); // фиксация родительского элемента |
| 700 | + |
| 701 | + if (modalContactsElement) { |
| 702 | + modalContactsElement.remove(); // удаление строки контактов |
| 703 | + |
| 704 | + // проверка на количество строк контактов (нет, скрытие обвёртки/родителя) |
| 705 | + if ( |
| 706 | + document.querySelectorAll('.modal__add-body-add-contact-element') |
| 707 | + .length === 0 |
| 708 | + ) { |
| 709 | + const addBodySelectWrap = document.querySelector( |
| 710 | + '.modal__add-body-add-select-wrap' |
| 711 | + ); |
| 712 | + addBodySelectWrap.classList.add('d-none'); |
| 713 | + } |
| 714 | + } |
| 715 | + } |
| 716 | + } |
605 | 717 | })(); |
0 commit comments