-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathautoComplete.js
66 lines (53 loc) · 1.89 KB
/
autoComplete.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const createAutoComplete=(
{
root,
label,
renderOption,
onOptionSelect,
setInputValueOnOptionSelect,
fetchData
})=>{
// const root=document.querySelector('.autocomplete');
root.innerHTML=`
<label ><b>Search For A ${label}</b></label>
<input type="text" class="input" >
<div class="dropdown">
<div class="dropdown-menu">
<div class="dropdown-content results">
</div>
</div>
</div>
`;
const searchInput=root.querySelector('input');
const dropdown=root.querySelector('.dropdown');
const resultsWrapper=root.querySelector('.results');
const onInput= async(e)=>{
const items=await fetchData(e.target.value);
console.log(items);
dropdown.classList.add('is-active');
if(items.length===0){
resultsWrapper.innerHTML=`No ${label} Found` ;
}
else{
resultsWrapper.innerHTML='';
for (const item of items) {
const option=document.createElement('a');
option.classList.add('dropdown-item');
option.innerHTML=renderOption(item);
option.addEventListener('click',(e)=>{
dropdown.classList.remove('is-active');
searchInput.value=setInputValueOnOptionSelect(item);
onOptionSelect(item);
})
resultsWrapper.appendChild(option);
}
}
}
searchInput.addEventListener('input',debounce(onInput,700));
// for closing the dropdown when user clicks some where else
document.addEventListener('click',(e)=>{
if(!root.contains(e.target)){
dropdown.classList.remove('is-active');
}
})
}