Added a displayLabelWithValue option
Setting displayLabelWithValue to true will display the value after the label in the dropdown. Also added a couple of missing semicolons.
This commit is contained in:
parent
32bcb0326a
commit
024880c524
@ -4,7 +4,8 @@ const DEFAULTS = {
|
||||
highlightTyped: true,
|
||||
highlightClass: 'text-primary',
|
||||
label: 'label',
|
||||
value: 'value'
|
||||
value: 'value',
|
||||
displayLabelWithValue: false,
|
||||
};
|
||||
|
||||
class Autocomplete {
|
||||
@ -23,7 +24,7 @@ class Autocomplete {
|
||||
|
||||
insertAfter(dropdown, field);
|
||||
|
||||
this.dropdown = new bootstrap.Dropdown(field, this.options.dropdownOptions)
|
||||
this.dropdown = new bootstrap.Dropdown(field, this.options.dropdownOptions);
|
||||
|
||||
field.addEventListener('click', (e) => {
|
||||
if (this.createItems() === 0) {
|
||||
@ -67,13 +68,19 @@ class Autocomplete {
|
||||
if (this.options.highlightTyped) {
|
||||
const idx = item.label.toLowerCase().indexOf(lookup.toLowerCase());
|
||||
const className = Array.isArray(this.options.highlightClass) ? this.options.highlightClass.join(' ')
|
||||
: (typeof this.options.highlightClass == 'string' ? this.options.highlightClass : '')
|
||||
: (typeof this.options.highlightClass == 'string' ? this.options.highlightClass : '');
|
||||
label = item.label.substring(0, idx)
|
||||
+ `<span class="${className}">${item.label.substring(idx, idx + lookup.length)}</span>`
|
||||
+ item.label.substring(idx + lookup.length, item.label.length);
|
||||
} else
|
||||
} else {
|
||||
label = item.label;
|
||||
return ce(`<button type="button" class="dropdown-item" data-value="${item.value}">${label}</button>`);
|
||||
}
|
||||
|
||||
if (this.options.displayLabelWithValue) {
|
||||
label += ` ${item.value}`;
|
||||
}
|
||||
|
||||
return ce(`<button type="button" class="dropdown-item" data-label="${item.label}" data-value="${item.value}">${label}</button>`);
|
||||
}
|
||||
|
||||
createItems() {
|
||||
@ -106,13 +113,18 @@ class Autocomplete {
|
||||
|
||||
this.field.nextSibling.querySelectorAll('.dropdown-item').forEach((item) => {
|
||||
item.addEventListener('click', (e) => {
|
||||
let dataLabel = e.target.getAttribute('data-label');
|
||||
let dataValue = e.target.getAttribute('data-value');
|
||||
this.field.value = e.target.innerText;
|
||||
if (this.options.onSelectItem)
|
||||
|
||||
this.field.value = dataLabel;
|
||||
|
||||
if (this.options.onSelectItem) {
|
||||
this.options.onSelectItem({
|
||||
value: e.target.dataset.value,
|
||||
label: e.target.innerText,
|
||||
value: dataValue,
|
||||
label: dataLabel
|
||||
});
|
||||
}
|
||||
|
||||
this.dropdown.hide();
|
||||
})
|
||||
});
|
||||
@ -137,5 +149,5 @@ function ce(html) {
|
||||
* @returns {*}
|
||||
*/
|
||||
function insertAfter(elem, refElem) {
|
||||
return refElem.parentNode.insertBefore(elem, refElem.nextSibling)
|
||||
return refElem.parentNode.insertBefore(elem, refElem.nextSibling);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user