Autocomplete
Autocomplete komponent sa nenaväzuje priamo na input, ale na prázdny div, do ktorého je potom pomocou scriptu dynamicky vložený. Komponent vieme inicializovať dvomi spôsobmi, záleží na tom, aký source mu poskytujeme.
Použitie
Aby tento komponent fungoval správne, prázdnemu divu nastavíme tieto atribúty :
data-autocomplete- Na tento atribút sa pripína script, ktorý dynamicky vloží input do prázdneho divudata-autocomplete-source="["item 1", "item 2"]"- Poskytneme source, teda zoznam, v ktorom bude autocomplete vyhľadávať. Toto je príklad statického zoznamu.data-autocomplete-id- Identifikátor autocompletu, je potrebný na inicializáciudata-autocomplete-name- Meno autocompletu, je potrebné na inicializáciu
Automatická inicializácia - Statický source
Inicializácia prebehne v súbore main.js
<script>
document.querySelectorAll('[data-autocomplete]').forEach((el) => {
autocomplete(el).init();
});
</script>
<label class="govuk-label" for="ukazka1">Ukážka autocomplete</label>
<div data-autocomplete data-autocomplete-source="["item 1", "item 2"]" data-autocomplete-id="ukazka1" data-autocomplete-name="ukazka1" class="govuk-!-margin-bottom-3"></div>
Teda source bude data-autocomplete-source="["item 1", "item 2"]"
Manuálna inicializácia - Dynamický source
Inicializácia prebehne pre konkrétny autocomplete. Tento prístup použijeme, keď potrebujeme napríklad, získať source z API odpovede (response).
<script>
const profesiaAutocompleteSource = (query, populateResults) => {
const results = ['Profesia 1', 'Profesia 2', 'Profesia 3'];
const filteredResults = results.filter(
(result) => result.indexOf(query) !== -1
);
populateResults(filteredResults);
};
document
.querySelectorAll('[data-autocomplete-id="ukazka2"]')
.forEach((el) => {
//Toto je globálny objekt vytvorený v main.js, kde je dostupná inicializačná funkcia autocomplete
window._components
.autocomplete(el, { source: profesiaAutocompleteSource })
.init();
});
</script>
V tomto prípade však musíme z prázdneho divu atribút data-autocomplete-source vymazať!
<label class="govuk-label" for="ukazka2">Ukážka autocomplete</label>
<div data-autocomplete data-autocomplete-id="ukazka2" data-autocomplete-name="ukazka2" class="govuk-!-margin-bottom-3"></div>