Duplicate
Kedy použiť tento komponent
Komponent použite, ak potrebujete používateľovi umožniť zadať viacero informácií k jednej konkrétnej veci alebo otázke.
Napríklad, umožniť používateľovi uviesť viac ako jeden vodičský preukaz, alebo viac ako jednu kontaktnú osobu.
Kedy nepoužiť tento komponent
Komponent nepoužite, ak potrebujete od používateľov aby poskytli informácie, ktoré spolu nesúvisia alebo niesú si blízke.
Použitie
Aby tento komponent fungoval správne, musí mať nasledovné atribúty.
data-module="duplicate"- Na tento atribút sa pripína script, ktorý pracuje s komponentomdata-duplicate-wrapper- Nastavíme elementu, ktorý slúži ako wrapper všetkým elementov, ktoré budú duplikovanédata-duplicate-item- Nastavíme elementu, ktorý bude duplikovaný
Ďalšie atribúty
Každý duplikovaný element musí mať vlastné pomocné atribúty, ktoré slúžia na správne generovanie atribútov.
data-duplicate-item-for="id-%index%"- Tento atribút nastavíme všetkým duplikovaným elementom, ktoré majú atribútfordata-duplicate-item-id="id-%index%"- Tento atribút nastavíme všetkým duplikovaným elementom, ktoré majú atribútiddata-duplicate-item-name="id-%index%"- Tento atribút nastavíme všetkým duplikovaným elementom, ktoré majú atribútname
Automatická inicializácia
Je možná iba vtedy, ak sú všetky informácie potrebné na inicializáciu elementov v DOMe.
<div class="govuk-grid-row" data-module="duplicate">
<div class="govuk-grid-column-two-thirds" data-duplicate-wrapper>
<div data-duplicate-item>
<fieldset class="govuk-fieldset">
<div class="govuk-grid-column-three-thirds">
<label class="govuk-label" data-duplicate-item-for="vseobecne-sposobilosti-%index%" for="vseobecne-sposobilosti">
Všeobecné spôsobilosti (nepovinné)
</label>
</div>
<div class="govuk-grid-row">
<div class="govuk-grid-column-three-quarters">
<div class="govuk-form-group govuk-!-margin-bottom-3">
<select class="govuk-select govuk-!-width-full" id="vseobecne-sposobilosti" name="vseobecne-sposobilosti" data-duplicate-item-id="vseobecne-sposobilosti-%index%" data-duplicate-item-name="vseobecne-sposobilosti-%index%">
<option value="vyberte-zo-zoznamu" selected hidden="hidden">Vyberte zo zoznamu</option>
<option value="komunikacia-s-ludmi">Komunikácia s ľudmi</option>
<option value="samostatnost">Samostatnosť</option>
<option value="manualna-zrucnost">Manuálna zručnosť</option>
<option value="analyzovanie-a-riesenie-problemov">Analyzovanie a riešenie problémov</option>
</select>
</div>
</div>
<div class="govuk-grid-column-one-quarter">
<button type="submit" class="govuk-button govuk-button--secondary govuk-checkboxes__conditional--hidden" data-module="govuk-button" data-duplicate-item="remove" id="0" data-duplicate-item-id="%index%">
Odstrániť
</button>
</div>
</div>
</fieldset>
</div>
<button type="submit" class="govuk-button govuk-button--secondary" data-module="govuk-button" data-duplicate-item="add">
Pridať ďalšie spôsobilosti
</button>
</div>
</div>
Manuálna inicializácia
V prípade, že nie sú všetky informácie v DOMe, napríklad, ak treba napojiť autocomplete na API pomocou source funkcie, tak treba duplicate manuálne inicializovať.
<div class="govuk-grid-row" data-module="duplicate" data-duplicate-no-init id="profesia-section">
<div class="govuk-grid-column-two-thirds" data-duplicate-wrapper>
<div data-duplicate-item>
<fieldset class="govuk-fieldset">
<div class="govuk-grid-column-three-thirds">
<label class="govuk-label" for="profesia" data-duplicate-item-for="profesia-%index%">Profesia (kvalifikácia podľa <a href="#" class="govuk-link">SK ISCO-08</a>)</label>
</div>
<div class="govuk-grid-row">
<div class="govuk-grid-column-three-quarters">
<div data-autocomplete data-autocomplete-id="profesia" data-autocomplete-name="profesia" data-duplicate-item-id="profesia-%index%" data-duplicate-item-name="profesia-%index%" class="govuk-!-margin-bottom-3"></div>
</div>
<div class="govuk-grid-column-one-quarter">
<button type="submit" class="govuk-button govuk-button--secondary govuk-checkboxes__conditional--hidden" data-module="govuk-button" data-duplicate-item="remove" id="0" data-duplicate-item-id="%index%">
Odstrániť
</button>
</div>
</div>
</fieldset>
</div>
<button type="submit" class="govuk-button govuk-button--secondary" data-module="govuk-button" data-duplicate-item="add">
Pridať ďalšie vzdelanie
</button>
</div>
</div>
Inicializácia prebehne na konkrétny duplikát.
<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="profesia"]')
.forEach((el) => {
window._components
.autocomplete(el, { source: profesiaAutocompleteSource })
.init();
});
window._components
.duplicate(document.getElementById('profesia-section'), {
shouldAutoRebindInstances: false,
onItemChange: (item) => {
item
.querySelectorAll('[data-autocomplete-id="profesia"]')
.forEach((autocompleteEl) => {
console.log(autocompleteEl);
window._components.handleDuplicateAutocomplete(autocompleteEl, {
source: profesiaAutocompleteSource
});
});
}
})
.init();
</script>