Widget:SelectSearch: mudanças entre as edições

Ir para navegação Ir para pesquisar
sem sumário de edição
Sem resumo de edição
Sem resumo de edição
 
(10 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
<div class="selectwithSearch__container">
<div class="selectwithSearch__container <!--{$id|default:'x'|escape:'html'}-->">
     <div class="selectwithSearch__selectBtn">
     <div class="selectwithSearch__selectBtn <!--{$id|default:''|escape:'html'}-->">
         <span>Selecione a frase desejada</span>
         <span> <!--{$title|default:'Selecione a frase desejada'|escape:'html'}--> </span>
         <svg width="24" height="24" fill="#000" viewBox="0 0 16 16">
         <svg width="24" height="24" fill="#000" viewBox="0 0 16 16">
             <path fill-rule="evenodd"
             <path fill-rule="evenodd"
Linha 8: Linha 8:
     </div>
     </div>


     <div class="selectwithSearch__content">
     <div class="selectwithSearch__content <!--{$classes|default:''|escape:'html'}--> <!--{$id|default:''|escape:'html'}-->">
         <div class="selectwithSearch__search">
         <div class="selectwithSearch__search <!--{$id|default:''|escape:'html'}-->">
             <svg width="18" height="18" viewBox="0 0 16 16">
             <svg width="18" height="18" viewBox="0 0 16 16">
                 <path
                 <path
Linha 18: Linha 18:
         </div>
         </div>


         <ul class="selectwithSearch__options"></ul>
         <ul class="selectwithSearch__options <!--{$id|default:''|escape:'html'}-->"></ul>
     </div>
     </div>
</div>
</div>
Linha 24: Linha 24:
<div class="mt-2">
<div class="mt-2">
     <img src="" class="margin-center d-none" style="border-radius: 6px" alt="Imagem do resultado da pesquisa"
     <img src="" class="margin-center d-none" style="border-radius: 6px" alt="Imagem do resultado da pesquisa"
         id="img-select-search" />
         id="img-select-search-<!--{$id|default:''|escape:'html'}-->" />
     <p class="text-center" id="obs-select-search"></p>
     <p class="text-center" id="obs-select-search-<!--{$id|default:''|escape:'html'}-->"></p>
</div>
</div>


<script defer>
<script defer>
     const wrapper = document.querySelector(".selectwithSearch__container"),
    document.addEventListener("click", function() {
         selectBtn = wrapper.querySelector(".selectwithSearch__selectBtn"),
if (
         searchInp = wrapper.querySelector("input"),
      !event.target.closest(".selectwithSearch__container")
         options = wrapper.querySelector(".selectwithSearch__options");         
    ) {
      const element = document.querySelector(".selectwithSearch__container.active");
      if(element)  document.querySelector(".selectwithSearch__container.active").classList.remove('active');
    }
    }, false);
 
     const wrapper<!--{$id|default:''|escape:'html'}--> = document.querySelector(".selectwithSearch__container.<!--{$id|default:'x'|escape:'html'}-->"),
         selectBtn<!--{$id|default:''|escape:'html'}--> = wrapper<!--{$id|default:''|escape:'html'}-->.querySelector(".selectwithSearch__selectBtn"),
         searchInp<!--{$id|default:''|escape:'html'}--> = wrapper<!--{$id|default:''|escape:'html'}-->.querySelector("input"),
         options<!--{$id|default:''|escape:'html'}--> = wrapper<!--{$id|default:''|escape:'html'}-->.querySelector(".selectwithSearch__options");         


     function addOptions(selectedOpt) {
     function addOptions<!--{$id|default:''|escape:'html'}-->(selectedOpt) {
         options.innerHTML = "";
         options<!--{$id|default:''|escape:'html'}-->.innerHTML = "";


         optionsImage.forEach(option => {
         optionsImage<!--{$id|default:''|escape:'html'}-->.forEach(option => {
             let isSelected = option.label === selectedOpt ? "selected" : "";
             let isSelected = option.label === selectedOpt ? "selected" : "";


             let liItem = `<li onclick="updateName('${option.label}', '${option.image}', '${option.obs}')" class="${isSelected}"> ${option.label} </li>`;
             let liItem = `<li onclick="updateName<!--{$id|default:''|escape:'html'}-->
             options.insertAdjacentHTML("beforeend", liItem);
('${option.label}', '${option.image}', '${option.obs}')" class="${isSelected}"> ${option.label} </li>`;
             options<!--{$id|default:''|escape:'html'}-->.insertAdjacentHTML("beforeend", liItem);
         });
         });
     }
     }


     addOptions();
     addOptions<!--{$id|default:''|escape:'html'}-->();


     function updateName(selectedValue, img, obs) {
     function updateName<!--{$id|default:''|escape:'html'}-->(selectedValue, img, obs) {
         searchInp.value = "";
         searchInp<!--{$id|default:''|escape:'html'}-->.value = "";
         addOptions(selectedValue);
         addOptions<!--{$id|default:''|escape:'html'}-->(selectedValue);
         wrapper.classList.remove("active");
         wrapper<!--{$id|default:''|escape:'html'}-->.classList.remove("active");
         document.querySelector('#img-select-search').src = img;
         document.querySelector('#img-select-search-<!--{$id|default:''|escape:'html'}-->').src = img;
         document.querySelector('#img-select-search').classList.remove('d-none');
         document.querySelector('#img-select-search-<!--{$id|default:''|escape:'html'}-->').classList.remove('d-none');
         document.querySelector('#img-select-search').classList.add('d-block');
         document.querySelector('#img-select-search-<!--{$id|default:''|escape:'html'}-->').classList.add('d-block');
         document.querySelector('#obs-select-search').innerHTML = obs;
         document.querySelector('#obs-select-search-<!--{$id|default:''|escape:'html'}-->').innerHTML = obs;
         selectBtn.firstElementChild.innerText = selectedValue;
         selectBtn<!--{$id|default:''|escape:'html'}-->.firstElementChild.innerText = selectedValue;
     }
     }


     searchInp.addEventListener("keyup", () => {
     searchInp<!--{$id|default:''|escape:'html'}-->.addEventListener("keyup", () => {
         let arr = [];
         let arr = [];
         let searchWord = searchInp.value.toLowerCase();
         let searchWord = searchInp<!--{$id|default:''|escape:'html'}-->.value.toLowerCase();


         arr = optionsImage.filter(data => {
         arr = optionsImage<!--{$id|default:''|escape:'html'}-->.filter(data => {
             return data.label.toLowerCase().indexOf(searchWord) > -1;
             return data.label.toLowerCase().indexOf(searchWord) > -1;
         }).map(option => {
         }).map(option => {
             let isSelected = option.label === selectBtn.firstElementChild.innerText ? "selected" : "";
             let isSelected = option.label === selectBtn<!--{$id|default:''|escape:'html'}-->.firstElementChild.innerText ? "selected" : "";
             let html = "";
             let html = "";


             html += `<li onclick="updateName('${option.label}', '${option.image}', '${option.obs}')" class="${isSelected}"> ${option.label} </li>`;
             html += `<li onclick="updateName<!--{$id|default:''|escape:'html'}-->('${option.label}', '${option.image}', '${option.obs}')" class="${isSelected}"> ${option.label} </li>`;


             return html;
             return html;
         }).join("");
         }).join("");


         options.innerHTML = arr ? arr : `<p style="margin-top: 10px;">Nenhuma frase foi encontrada!</p>`;
         options<!--{$id|default:''|escape:'html'}-->.innerHTML = arr ? arr : `<p style="margin-top: 10px;">Nenhuma frase foi encontrada!</p>`;
     });
     });


     selectBtn.addEventListener("click", () => wrapper.classList.toggle("active"));
     selectBtn<!--{$id|default:''|escape:'html'}-->.addEventListener("click", () => wrapper<!--{$id|default:''|escape:'html'}-->.classList.toggle("active"));
</script>
</script>

Menu de navegação