mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-22 20:16:50 +00:00
63 lines
1.4 KiB
JavaScript
63 lines
1.4 KiB
JavaScript
import { Controller } from "stimulus";
|
|
|
|
export default class extends Controller {
|
|
static targets = ["source", "select"];
|
|
static values = { options: Array };
|
|
|
|
handleSelectChange() {
|
|
this.populateSelect(parseInt(this.sourceTarget.value));
|
|
}
|
|
|
|
// private
|
|
|
|
populateSelect(sourceId) {
|
|
this.tomselect = this.selectTarget.tomselect;
|
|
this.removeCurrentOptions();
|
|
this.populateNewOptions(sourceId);
|
|
}
|
|
|
|
removeCurrentOptions() {
|
|
this.selectTarget.innerHTML = "";
|
|
|
|
if (!this.tomselect) {
|
|
return;
|
|
}
|
|
|
|
this.tomselect.clear();
|
|
this.tomselect.clearOptions();
|
|
}
|
|
|
|
populateNewOptions(sourceId) {
|
|
const options = this.dependentOptionsFor(sourceId);
|
|
|
|
options.forEach((item) => {
|
|
this.addOption(item[0], item[1]);
|
|
});
|
|
|
|
if (!this.tomselect) {
|
|
return;
|
|
}
|
|
|
|
if (options.length == 0) {
|
|
this.tomselect.disable();
|
|
} else {
|
|
this.tomselect.enable();
|
|
this.tomselect.addItem(options[0]?.[1]);
|
|
this.tomselect.sync();
|
|
this.tomselect.setValue(null);
|
|
}
|
|
}
|
|
|
|
addOption(label, value) {
|
|
const newOption = document.createElement("option");
|
|
newOption.innerHTML = label;
|
|
newOption.value = value;
|
|
this.selectTarget.appendChild(newOption);
|
|
}
|
|
|
|
dependentOptionsFor(sourceId) {
|
|
let options = this.optionsValue.find((option) => option[0] === sourceId);
|
|
return options ? options[1] : [];
|
|
}
|
|
}
|