993
edições
Sem resumo de edição |
Sem resumo de edição |
||
Linha 1: | Linha 1: | ||
<div class="selectwithSearch__container"> | |||
<div class="selectwithSearch__selectBtn"> | |||
<span>Selecione a frase desejada</span> | |||
<svg width="24" height="24" fill="#000" viewBox="0 0 16 16"> | |||
<path fill-rule="evenodd" | |||
d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z" /> | |||
</svg> | |||
</div> | |||
<div class="selectwithSearch__content"> | |||
<div class="selectwithSearch__search"> | |||
<svg width="18" height="18" viewBox="0 0 16 16"> | |||
<path | |||
d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z" /> | |||
</svg> | |||
<input spellcheck="false" type="text" placeholder="Pesquisa"> | |||
</div> | |||
<ul class="selectwithSearch__options"></ul> | |||
</div> | |||
</div> | |||
<script> | |||
const wrapper = document.querySelector(".selectwithSearch__container"), | |||
selectBtn = wrapper.querySelector(".selectwithSearch__selectBtn"), | |||
searchInp = wrapper.querySelector("input"), | |||
options = wrapper.querySelector(".selectwithSearch__options"); | |||
let optionsValues = [ | |||
{ | |||
group: "Wood", | |||
phrases: [ | |||
"Termite Food", | |||
"Plank", | |||
"Plant armor" | |||
], | |||
img: "teste.png", | |||
obs: "" | |||
}, | |||
{ | |||
group: "Water Pipe", | |||
phrases: [ | |||
"Take a Water Pipe", | |||
], | |||
img: "teste.png", | |||
obs: "" | |||
}, | |||
]; | |||
function addOptions(selectedOpt) { | |||
options.innerHTML = ""; | |||
optionsValues.forEach(option => { | |||
let isSelected = option.group === selectedOpt ? "selected" : ""; | |||
let liGroup = `<li class="groupTitle ${isSelected}"> ${option.group} </li>`; | |||
options.insertAdjacentHTML("beforeend", liGroup); | |||
< | option.phrases.map(phrase => { | ||
let li = `<li onclick="updateName('${option.group}')"> ${phrase} </li>`; | |||
options.insertAdjacentHTML("beforeend", li); | |||
}); | |||
}); | |||
} | |||
addOptions(); | |||
function updateName(selectedValue) { | |||
searchInp.value = ""; | |||
addOptions(selectedValue); | |||
wrapper.classList.remove("active"); | |||
selectBtn.firstElementChild.innerText = selectedValue; | |||
console.log(optionsValues.filter(curr => curr.group === selectedValue)) | |||
} | |||
searchInp.addEventListener("keyup", () => { | |||
let arr = []; | |||
let searchWord = searchInp.value.toLowerCase(); | |||
arr = optionsValues.filter(data => { | |||
return data.phrases.filter(curr => curr.toLowerCase().startsWith(searchWord)).length > 0; | |||
}).map(option => { | |||
let isSelected = option.group === selectBtn.firstElementChild.innerText ? "selected" : ""; | |||
let html = ""; | |||
html += `<li class="groupTitle ${isSelected}"> ${option.group} </li>`; | |||
option.phrases.filter(curr => curr.toLowerCase().startsWith(searchWord)).map(phrase => { | |||
html += `<li onclick="updateName('${option.group}')"> ${phrase} </li>`; | |||
}); | |||
}); | |||
return html; | |||
}).join(""); | |||
options.innerHTML = arr ? arr : `<p style="margin-top: 10px;">Nenhuma frase foi encontrada!</p>`; | |||
}); | }); | ||
selectBtn.addEventListener("click", () => wrapper.classList.toggle("active")); | |||
</script> | </script> |