<div style="display: flex;">
<div onclick="dropdown.updateResults(secondSetOfResults)" style="background-color: rgb(241, 241, 241); font-size: 12px; font-weight:bold; width: 250px; padding: 10px; width: 135px; margin-bottom: 50px; margin-right: 10px; border-radius: 6px">
DEMO
Update Results
</div>
<div onclick="dropdown.showNextResultsLoadingIndicator(true)" style="background-color: rgb(241, 241, 241); font-size: 12px; font-weight:bold; width: 250px; padding: 10px; width: 135px; margin-bottom: 50px; margin-right: 10px; border-radius: 6px">
DEMO
Show Next Results Loading Indicator
</div>
<div onclick="dropdown.showNextResultsLoadingIndicator(false)" style="background-color: rgb(241, 241, 241); font-size: 12px; font-weight:bold; width: 250px; padding: 10px; width: 135px; margin-bottom: 50px; margin-right: 10px; border-radius: 6px">
DEMO
Hide Next Results Loading Indicator
</div>
<div onclick="dropdown.showPreviousResultsLoadingIndicator(true)" style="background-color: rgb(241, 241, 241); font-size: 12px; font-weight:bold; width: 250px; padding: 10px; width: 135px; margin-bottom: 50px; margin-right: 10px; border-radius: 6px">
DEMO
Show Previous Results Loading Indicator
</div>
<div onclick="dropdown.showPreviousResultsLoadingIndicator(false)" style="background-color: rgb(241, 241, 241); font-size: 12px; font-weight:bold; width: 250px; padding: 10px; width: 135px; margin-bottom: 50px; margin-right: 10px; border-radius: 6px">
DEMO
Hide Previous Results Loading Indicator
</div>
</div>
<div class="acl-dropdown-demo-example" style="width: 420px">
<div class="acl-dropdown acl-select-dropdown acl-dropdown-demo" id="single-select-dropdown-example-id" data-dropdown-type="multi-select" data-dropdown-label="Choose an item" data-active-selection="Account Promotions">
<div class="acl-select-dropdown__clear">
<div class="acl-select-dropdown__clear-link">
Clear
</div>
</div>
<div class="acl-dropdown__cta acl-select-dropdown__field">
<div class="acl-dropdown__cta-link acl-select-dropdown__cta-link"></div>
<i class="aforza-icons acl-select-dropdown__cheveron">acl_down_arrow</i>
</div>
<div class="acl-dropdown__results acl-select-dropdown__results" data-dropdown-select="true" data-multi-select-dropdown-select="true">
<div class="acl-dropdown__items acl-select-dropdown__multi-items" style="max-height: 250px;" data-dropdown-close="false">
<div class="acl-simple-searchbox acl-simple-searchbox--margin">
<div class="acl-simple-searchbox__search-icon">
<i class="aforza-icons">acl_search</i>
</div>
<input class="acl-simple-searchbox__input" id="acl-demo-simple-search" type="text" name="routeBuilderSearch" placeholder="Search">
<div class="acl-simple-searchbox__clear">
<i class="aforza-icons acl-demo__icon-catalog-icon-preview">acl_close_small</i>
</div>
<div class="acl-simple-searchbox__loading-spinner">
<svg class="acl-loader__circular" width="20px" height="20px" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">
<circle class="acl-loader__circular-path" fill="none" stroke-width="6" cx="33" cy="33" r="30">
</circle>
</svg>
</div>
</div>
<div class="acl-select-dropdown__selected-items">
<div class="acl-select-dropdown__group-header acl-select-dropdown__group-header--no-vertical-padding">
<div class="acl-select-dropdown__title">Selected</div>
<div class="acl-select-dropdown__clear-link">Clear</div>
</div>
<div class="acl-select-dropdown__selected-results"></div>
</div>
<div class="acl-select-dropdown__title acl-select-dropdown__group-header--no-vertical-padding">Products
</div>
<div class="acl-select-dropdown__results--load-previous">
<div class="acl-loading-dots__container">
<div class="acl-loading-dots">
<div class="bounce1"></div>
<div class="bounce2"></div>
<div class="bounce3"></div>
</div>
</div>
</div>
<div class="acl-select-dropdown__grouped-items"></div>
</div>
<div class="acl-select-dropdown__results--load-next">
<div class="acl-loading-dots__container">
<div class="acl-loading-dots">
<div class="bounce1"></div>
<div class="bounce2"></div>
<div class="bounce3"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
const results = [{
id: '002csgr',
value: 'Duke’s Premium Blend',
selected: true
},
{
id: '01sscx',
value: 'Duke’s Standard Blend',
selected: false
},
{
id: 'fsx00',
value: 'Duke’s Traditional Blend',
selected: false
},
{
id: '002csgdr',
value: 'Crabbie Beer',
selected: true
},
{
id: '01dsscx2',
value: 'Kings Cherry Beverage',
selected: false
},
{
id: 'fs0x020',
value: 'Kings Diet Cola Beverage',
selected: false
},
{
id: 'f4sx020',
value: 'Kings Vanilla Cola Beverage',
selected: false
},
{
id: 'fsix020',
value: 'Kings Lemonade Beverage',
selected: false
},
{
id: 'fswx020',
value: 'Kings Orange Beverage',
selected: false
},
];
const secondSetOfResults = [{
id: '002csgr',
value: 'Duke’s Premium Blend',
selected: true
},
{
id: '01sscx',
value: 'Duke’s Standard Blend',
selected: false
},
{
id: 'fsx00',
value: 'Duke’s Traditional Blend',
selected: false
},
{
id: '002csgdr',
value: 'Crabbie Beer',
selected: true
},
{
id: '01dsscx2',
value: 'Kings Cherry Beverage',
selected: false
},
{
id: 'fs0x020',
value: 'Kings Diet Cola Beverage',
selected: false
},
{
id: 'f4sx020',
value: 'Kings Vanilla Cola Beverage',
selected: false
},
{
id: 'fsix020',
value: 'Kings Lemonade Beverage',
selected: false
},
{
id: 'fswx020',
value: 'Kings Orange Beverage',
selected: false
},
{
id: '002csddgr',
value: 'Craft Premium Blend',
selected: true
},
{
id: '01sdscx',
value: 'Craft Standard Blend',
selected: false
},
{
id: 'fsxd00',
value: 'Craft Traditional Blend',
selected: false
},
{
id: '002fcsgdr',
value: 'Bones Beer',
selected: true
},
{
id: '01dsscdx2',
value: 'Willow Beverage',
selected: false
},
{
id: 'fs0fx020',
value: 'Willow Diet Cola Beverage',
selected: false
},
{
id: 'f4sxd020',
value: 'Willow Vanilla Cola Beverage',
selected: false
},
{
id: 'fsidx020',
value: 'Willow Lemonade Beverage',
selected: false
},
{
id: 'fswfx020',
value: 'Willow Orange Beverage',
selected: false
},
];
const dropdownEl = document.querySelector(".acl-dropdown-demo");
const searchboxEl = document.querySelector(".acl-simple-searchbox");
const dropdown = new acl.ACLDropdownMultiSelect(dropdownEl, results, {
showClearOnSelect: true,
scrollEventPercentageOffset: 80,
scrollEventDebounceValue: 2000,
});
const searchbox = new acl.ACLSearchbox(searchboxEl, 300);
dropdownEl.addEventListener('scrolledtotop',
function(e) {
console.log('Custom Event: scrolledtotop');
}, false);
dropdownEl.addEventListener('scrolledtobottom',
function(e) {
console.log('Custom Event: scrolledtobottom');
}, false);
dropdownEl.addEventListener('selecteditems',
function(e) {
console.log('Selected items:');
console.log(e.detail.items)
}, false);
searchboxEl.addEventListener('searchquery', function(e) {
console.log('searchquery');
console.log(e.detail);
});
</script>
<div style="display: flex;">
<div onclick="dropdown.updateResults(secondSetOfResults)"
style="background-color: rgb(241, 241, 241); font-size: 12px; font-weight:bold; width: 250px; padding: 10px; width: 135px; margin-bottom: 50px; margin-right: 10px; border-radius: 6px">
DEMO
Update Results
</div>
<div onclick="dropdown.showNextResultsLoadingIndicator(true)"
style="background-color: rgb(241, 241, 241); font-size: 12px; font-weight:bold; width: 250px; padding: 10px; width: 135px; margin-bottom: 50px; margin-right: 10px; border-radius: 6px">
DEMO
Show Next Results Loading Indicator
</div>
<div onclick="dropdown.showNextResultsLoadingIndicator(false)"
style="background-color: rgb(241, 241, 241); font-size: 12px; font-weight:bold; width: 250px; padding: 10px; width: 135px; margin-bottom: 50px; margin-right: 10px; border-radius: 6px">
DEMO
Hide Next Results Loading Indicator
</div>
<div onclick="dropdown.showPreviousResultsLoadingIndicator(true)"
style="background-color: rgb(241, 241, 241); font-size: 12px; font-weight:bold; width: 250px; padding: 10px; width: 135px; margin-bottom: 50px; margin-right: 10px; border-radius: 6px">
DEMO
Show Previous Results Loading Indicator
</div>
<div onclick="dropdown.showPreviousResultsLoadingIndicator(false)"
style="background-color: rgb(241, 241, 241); font-size: 12px; font-weight:bold; width: 250px; padding: 10px; width: 135px; margin-bottom: 50px; margin-right: 10px; border-radius: 6px">
DEMO
Hide Previous Results Loading Indicator
</div>
</div>
<div class="acl-dropdown-demo-example" style="width: 420px">
<div class="acl-dropdown acl-select-dropdown acl-dropdown-demo" id="single-select-dropdown-example-id"
data-dropdown-type="multi-select" data-dropdown-label="Choose an item"
data-active-selection="Account Promotions">
<div class="acl-select-dropdown__clear">
<div class="acl-select-dropdown__clear-link">
Clear
</div>
</div>
<div class="acl-dropdown__cta acl-select-dropdown__field">
<div class="acl-dropdown__cta-link acl-select-dropdown__cta-link"></div>
<i class="aforza-icons acl-select-dropdown__cheveron">acl_down_arrow</i>
</div>
<div class="acl-dropdown__results acl-select-dropdown__results" data-dropdown-select="true"
data-multi-select-dropdown-select="true">
<div class="acl-dropdown__items acl-select-dropdown__multi-items" style="max-height: 250px;"
data-dropdown-close="false">
<div class="acl-simple-searchbox acl-simple-searchbox--margin">
<div class="acl-simple-searchbox__search-icon">
<i class="aforza-icons">acl_search</i>
</div>
<input class="acl-simple-searchbox__input" id="acl-demo-simple-search" type="text" name="routeBuilderSearch"
placeholder="Search">
<div class="acl-simple-searchbox__clear">
<i class="aforza-icons acl-demo__icon-catalog-icon-preview">acl_close_small</i>
</div>
<div class="acl-simple-searchbox__loading-spinner">
<svg class="acl-loader__circular" width="20px" height="20px" viewBox="0 0 66 66"
xmlns="http://www.w3.org/2000/svg">
<circle class="acl-loader__circular-path" fill="none" stroke-width="6" cx="33" cy="33" r="30">
</circle>
</svg>
</div>
</div>
<div class="acl-select-dropdown__selected-items">
<div
class="acl-select-dropdown__group-header acl-select-dropdown__group-header--no-vertical-padding">
<div class="acl-select-dropdown__title">Selected</div>
<div class="acl-select-dropdown__clear-link">Clear</div>
</div>
<div class="acl-select-dropdown__selected-results"></div>
</div>
<div class="acl-select-dropdown__title acl-select-dropdown__group-header--no-vertical-padding">Products
</div>
<div class="acl-select-dropdown__results--load-previous">
<div class="acl-loading-dots__container">
<div class="acl-loading-dots">
<div class="bounce1"></div>
<div class="bounce2"></div>
<div class="bounce3"></div>
</div>
</div>
</div>
<div class="acl-select-dropdown__grouped-items"></div>
</div>
<div class="acl-select-dropdown__results--load-next">
<div class="acl-loading-dots__container">
<div class="acl-loading-dots">
<div class="bounce1"></div>
<div class="bounce2"></div>
<div class="bounce3"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
const results = [{
id: '002csgr',
value: 'Duke’s Premium Blend',
selected: true
},
{
id: '01sscx',
value: 'Duke’s Standard Blend',
selected: false
},
{
id: 'fsx00',
value: 'Duke’s Traditional Blend',
selected: false
},
{
id: '002csgdr',
value: 'Crabbie Beer',
selected: true
},
{
id: '01dsscx2',
value: 'Kings Cherry Beverage',
selected: false
},
{
id: 'fs0x020',
value: 'Kings Diet Cola Beverage',
selected: false
},
{
id: 'f4sx020',
value: 'Kings Vanilla Cola Beverage',
selected: false
},
{
id: 'fsix020',
value: 'Kings Lemonade Beverage',
selected: false
},
{
id: 'fswx020',
value: 'Kings Orange Beverage',
selected: false
},
];
const secondSetOfResults = [{
id: '002csgr',
value: 'Duke’s Premium Blend',
selected: true
},
{
id: '01sscx',
value: 'Duke’s Standard Blend',
selected: false
},
{
id: 'fsx00',
value: 'Duke’s Traditional Blend',
selected: false
},
{
id: '002csgdr',
value: 'Crabbie Beer',
selected: true
},
{
id: '01dsscx2',
value: 'Kings Cherry Beverage',
selected: false
},
{
id: 'fs0x020',
value: 'Kings Diet Cola Beverage',
selected: false
},
{
id: 'f4sx020',
value: 'Kings Vanilla Cola Beverage',
selected: false
},
{
id: 'fsix020',
value: 'Kings Lemonade Beverage',
selected: false
},
{
id: 'fswx020',
value: 'Kings Orange Beverage',
selected: false
},
{
id: '002csddgr',
value: 'Craft Premium Blend',
selected: true
},
{
id: '01sdscx',
value: 'Craft Standard Blend',
selected: false
},
{
id: 'fsxd00',
value: 'Craft Traditional Blend',
selected: false
},
{
id: '002fcsgdr',
value: 'Bones Beer',
selected: true
},
{
id: '01dsscdx2',
value: 'Willow Beverage',
selected: false
},
{
id: 'fs0fx020',
value: 'Willow Diet Cola Beverage',
selected: false
},
{
id: 'f4sxd020',
value: 'Willow Vanilla Cola Beverage',
selected: false
},
{
id: 'fsidx020',
value: 'Willow Lemonade Beverage',
selected: false
},
{
id: 'fswfx020',
value: 'Willow Orange Beverage',
selected: false
},
];
const dropdownEl = document.querySelector(".acl-dropdown-demo");
const searchboxEl = document.querySelector(".acl-simple-searchbox");
const dropdown = new acl.ACLDropdownMultiSelect(dropdownEl, results, {
showClearOnSelect: true,
scrollEventPercentageOffset: 80,
scrollEventDebounceValue: 2000,
});
const searchbox = new acl.ACLSearchbox(searchboxEl, 300);
dropdownEl.addEventListener('scrolledtotop',
function (e) {
console.log('Custom Event: scrolledtotop');
}, false);
dropdownEl.addEventListener('scrolledtobottom',
function (e) {
console.log('Custom Event: scrolledtobottom');
}, false);
dropdownEl.addEventListener('selecteditems',
function (e) {
console.log('Selected items:');
console.log(e.detail.items)
}, false);
searchboxEl.addEventListener('searchquery', function (e) {
console.log('searchquery');
console.log(e.detail);
});
</script>
/* No context defined. */
import { ACLDropdown } from '../index.js';
import { dispatchCustomEvent, modifier } from '../../../utilities';
class ACLDropdownMultiSelect extends ACLDropdown {
constructor(
dropdownEl,
results,
options = {
showClearOnSelect: false,
scrollEventPercentageOffset: 80,
scrollEventDebounceValue: 2000,
initiallyPopulateResults: false,
readonly: false,
dropUp: false,
dropUpOffset: 12,
lazyLoading: true,
}
) {
super(dropdownEl, results, options);
this.eventName = Object.freeze({
...this.eventName,
CLEAR_DROPDOWN: 'cleardropdown',
CLICK: 'click',
SELECTED_ITEMS: 'selecteditems',
});
this.selectors = {
...this.selectors,
resultMultiItem: 'acl-select-dropdown__multi-item',
selectDropdownGroupHeader: 'acl-select-dropdown__group-header',
selectDropdownGroupItems: 'acl-select-dropdown__grouped-items',
selectDropdownSelectedResults: 'acl-select-dropdown__selected-results',
selectDropdownPreview: 'acl-select-dropdown__selected-preview',
selectedOverflowCount: 'acl-select-dropdown__selected-overflow-count',
selectedPreviewItem: 'acl-select-dropdown__selected-preview-item',
selectSelectedIndicator: 'acl-select-dropdown__selected-indicator',
};
this.groupedResultItems = this.dropdownEl.querySelector(`.${this.selectors.selectDropdownGroupItems}`);
this.selectedResultItems = this.dropdownEl.querySelector(`.${this.selectors.selectDropdownSelectedResults}`);
this.multiSelectArray = [];
if (this.resultItems) this.populateResults();
if (this.resultItems && this.options.initiallyPopulateResults) this.populateResults();
this.setPlaceholder();
this.updateSelectedPreview();
this.setScrollPositionCustomEvents(
this.options.scrollEventPercentageOffset,
this.options.scrollEventDebounceValue
);
}
createMultiSelectResultItem(result) {
const template = `<div class="acl-select-dropdown__select">
<div class="${this.selectors.selectSelectedIndicator}"></div>
<div class="acl-select-dropdown__select-label">${result.value}</div></div>`;
const resultItemEl = document.createElement('div');
resultItemEl.innerHTML = template;
resultItemEl.classList.add(this.selectors.resultItem, this.selectors.resultMultiItem);
resultItemEl.dataset.resultId = result.id;
resultItemEl.dataset.resultValue = result.value;
if (result.selected) {
this.addToMultiSelectedArray(result);
const selectedResultItem = resultItemEl.cloneNode(true);
selectedResultItem.dataset.resultId = result.id;
selectedResultItem.dataset.resultValue = result.value;
selectedResultItem.addEventListener(this.eventName.CLICK, this.multipleResultItemClick.bind(this));
this.appendSelectedCheckboxItem(selectedResultItem);
resultItemEl.classList.add(`${this.selectors.resultItem}${modifier.HIDDEN}`);
this.showClearButton(true);
}
resultItemEl.addEventListener(this.eventName.CLICK, this.multipleResultItemClick.bind(this));
this.groupedResultItems.appendChild(resultItemEl);
}
generatePreviewItemMarkup() {
const previewArray = this.multiSelectArray.slice(0, 1);
let percentageWidth = this.getPreviewItemPercentageMaxWidth(previewArray);
previewItemContainer.innerHTML = '';
previewArray.forEach(item => {
this.createPreviewItem(item, percentageWidth);
});
this.createPreviewOverflowCount(previewArray.length);
}
updateMultiSelectResults() {
this.selectedResultItems.innerHTML = '';
this.multiSelectArray = [];
this.populateResults();
}
populateResults() {
if (this.results) {
this.clearGroupedItems();
this.results.forEach(result => this.createMultiSelectResultItem(result));
}
}
updateResults(results) {
this.results = results;
this.clearGroupedItems();
this.updateMultiSelectResults();
this.updateSelectedPreview();
}
updateSelectedPreview() {
const selectedHeader = this.dropdownEl.querySelector(`.${this.selectors.selectDropdownGroupHeader}`);
const previewContainer = this.dropdownEl.querySelector(`.${this.selectors.ctaLinkLabel}`);
const containerWidth = previewContainer.clientWidth;
if (this.multiSelectArray.length > 0) {
let previewItemContainer = this.ctaLinkLabel.querySelector(`.${this.selectors.selectDropdownPreview}`);
if (!previewItemContainer) {
const previewContainer = document.createElement('div');
previewContainer.classList.add(`${this.selectors.selectDropdownPreview}`);
this.ctaLinkLabel.appendChild(previewContainer);
previewItemContainer = previewContainer;
}
if (containerWidth <= 250) {
const previewArray = this.multiSelectArray.slice(0, 1);
let percentageWidth = this.getPreviewItemPercentageMaxWidth(previewArray);
previewItemContainer.innerHTML = '';
previewArray.forEach(item => {
this.createPreviewItem(item, percentageWidth);
});
this.createPreviewOverflowCount(previewArray.length);
}
if (containerWidth > 250) {
const previewArray = this.multiSelectArray.slice(0, 3);
let percentageWidth = this.getPreviewItemPercentageMaxWidth(previewArray);
previewItemContainer.innerHTML = '';
previewArray.forEach(item => {
this.createPreviewItem(item, percentageWidth);
});
this.createPreviewOverflowCount(previewArray.length);
}
selectedHeader.classList.remove(`${this.selectors.selectDropdownGroupHeader}${modifier.HIDDEN}`);
} else {
selectedHeader.classList.add(`${this.selectors.selectDropdownGroupHeader}${modifier.HIDDEN}`);
this.setPlaceholder();
}
}
createPreviewItem(result, maxWidth) {
let previewItemContainer = this.ctaLinkLabel.querySelector(`.${this.selectors.selectDropdownPreview}`);
if (!previewItemContainer) {
const previewContainer = document.createElement('div');
previewContainer.classList.add(`${this.selectors.selectDropdownPreview}`);
this.ctaLinkLabel.appendChild(previewContainer);
previewItemContainer = previewContainer;
}
const previewItem = document.createElement('div');
const template = `<div class="acl-select-dropdown__selected-preview-label">${result.value}</div> <i class="aforza-icons">acl_close_small</i>`;
previewItem.classList.add(this.selectors.selectedPreviewItem);
previewItem.style.maxWidth = maxWidth;
previewItem.dataset.resultId = result.id;
previewItem.innerHTML = template;
this.removePlaceholder();
previewItem.addEventListener(this.eventName.CLICK, event => {
event.stopPropagation();
this.shouldCloseDropdown = false;
const result = event.currentTarget;
this.multipleResultItemClick(event);
const resultItems = Array.from(this.resultItems.querySelectorAll(`.${this.selectors.resultItem}`));
const matchedResultItem = resultItems.find(
resultItem => resultItem.dataset.resultId === result.dataset.resultId
);
if (matchedResultItem) matchedResultItem.remove();
});
previewItemContainer.appendChild(previewItem);
}
clearSelection(dispatchClearEvent) {
this.showClearButton(false);
this.setPlaceholder();
this.ctaLinkLabel.style.borderLeft = '';
if (this.ctaLinkLabel.classList.contains(this.selectors.selectAssociatedColour))
this.ctaLinkLabel.classList.remove(this.selectors.selectAssociatedColour);
if (dispatchClearEvent)
dispatchCustomEvent(this.dropdownEl, this.eventName.CLEAR_DROPDOWN, {
items: this.multiSelectArray,
});
this.multiSelectArray = [];
this.setAllResultsToUnselected();
this.updateMultiSelectResults();
this.updateSelectedPreview();
}
createPreviewOverflowCount(amountVisible) {
let previewItemContainer = this.ctaLinkLabel.querySelector(`.${this.selectors.selectDropdownPreview}`);
const previewCount = this.multiSelectArray.length - amountVisible;
const overflowCountTemplate = `<div class="acl-select-dropdown__selected-preview-ellipsis ">...</div>
<div class="acl-select-dropdown__selected-preview-count">
${this.multiSelectArray.length - amountVisible}</div>`;
const overflowCountElement = document.createElement('div');
overflowCountElement.classList.add(this.selectors.selectedOverflowCount);
overflowCountElement.innerHTML = overflowCountTemplate;
if (previewCount > 0) previewItemContainer.appendChild(overflowCountElement);
}
addToMultiSelectedArray(result) {
if (result.hasOwnProperty('id')) {
this.multiSelectArray.push(result);
} else {
const selectedItem = this.createNewResultObject(result, true);
this.multiSelectArray.push(selectedItem);
}
}
getPreviewItemPercentageMaxWidth(array) {
let percentageWidth;
if (array.length == 1) {
percentageWidth = '65%';
} else if (array.length == 2) {
percentageWidth = '45%';
} else {
percentageWidth = '25%';
}
return percentageWidth;
}
setAllResultsToUnselected() {
this.results.forEach(result => (result.selected = false));
}
multipleResultItemClick(event) {
this.shouldCloseDropdown = false;
const result = event.currentTarget;
const isResultCurrentlySelected = this.multiSelectArray.findIndex(obj => obj.id === result.dataset.resultId);
if (isResultCurrentlySelected > -1) {
this.removeFromMultiSelectedArray(result);
result.remove();
} else {
const selectedResult = result.cloneNode(true);
selectedResult.dataset.resultId = result.dataset.resultId;
selectedResult.dataset.resultValue = result.dataset.resultValue;
selectedResult.addEventListener(this.eventName.CLICK, this.multipleResultItemClick.bind(this));
this.addToMultiSelectedArray(selectedResult);
this.appendSelectedCheckboxItem(selectedResult);
result.classList.add(`${this.selectors.resultItem}${modifier.HIDDEN}`);
}
this.updateSelectedPreview();
dispatchCustomEvent(this.dropdownEl, this.eventName.SELECTED_ITEMS, {
items: this.multiSelectArray,
});
this.showClearButton(this.multiSelectArray.length > 0);
}
appendSelectedCheckboxItem(result) {
const resultIndicator = result.querySelector(`.${this.selectors.selectSelectedIndicator}`);
resultIndicator.classList.add(`${this.selectors.selectSelectedIndicator}${modifier.ACTIVE}`);
this.selectedResultItems.appendChild(result);
}
deselectItem(result) {
const resultItemIndex = this.results.findIndex(element => element.id == result.dataset.resultId);
this.results[resultItemIndex].selected = false;
const resultItems = Array.from(
this.resultItems.querySelectorAll(`.${this.selectors.resultItem}${modifier.HIDDEN}`)
);
const matchedResultItem = resultItems.find(
resultItem => resultItem.dataset.resultId === result.dataset.resultId
);
if (matchedResultItem) matchedResultItem.classList.remove(`${this.selectors.resultItem}${modifier.HIDDEN}`);
}
removeFromMultiSelectedArray(result) {
const selectedItem = this.createNewResultObject(result, true);
const resultItemIndex = this.multiSelectArray.findIndex(element => element.id == result.dataset.resultId);
this.multiSelectArray.splice(resultItemIndex, 1);
this.deselectItem(result);
}
clearGroupedItems() {
if (this.groupedResultItems) this.groupedResultItems.innerHTML = '';
}
}
export { ACLDropdownMultiSelect };
No notes defined.