Choices/src/scripts/components/wrapped-select.js
Konstantin Vyatkin 7de0887e7d use templates from instance, fixes #461 (#660)
* use template from instance

* adjust test

* fix lint

* try to move `this` out of loop

* fixes late init bound
2019-10-21 10:48:49 +01:00

41 lines
1 KiB
JavaScript

import WrappedElement from './wrapped-element';
export default class WrappedSelect extends WrappedElement {
constructor({ element, classNames, template }) {
super({ element, classNames });
this.template = template;
}
get placeholderOption() {
return this.element.querySelector('option[placeholder]');
}
get optionGroups() {
return Array.from(this.element.getElementsByTagName('OPTGROUP'));
}
get options() {
return Array.from(this.element.options);
}
set options(options) {
const fragment = document.createDocumentFragment();
const addOptionToFragment = data => {
// Create a standard select option
const option = this.template(data);
// Append it to fragment
fragment.appendChild(option);
};
// Add each list item to list
options.forEach(optionData => addOptionToFragment(optionData));
this.appendDocFragment(fragment);
}
appendDocFragment(fragment) {
this.element.innerHTML = '';
this.element.appendChild(fragment);
}
}