function makeResettableDropdown({ key, label, options, resetTriggers, obs_state }) {
const dropdown = Inputs.select(options, {
label,
value: obs_state[key].get()
});
dropdown.addEventListener("input", () => {
console.log(`user input: ${key}:`, dropdown.value);
obs_state[key].set(dropdown.value);
console.log("");
});
obs_state[key].subscribe(val => {
if (dropdown.value !== val) {
dropdown.value = val;
console.log(`obs input: ${key}:`, val);
}
});
const resetIfNeeded = () => {
if (obs_state.suppressReset.get()) {
console.log(`suppressed: ${key}`);
return;
}
if (obs_state[key].get() !== obs_state[key].getDefault()) {
obs_state.suppressReset.set(true);
console.log(`suppressReset: ${key}: on`);
obs_state[key].set(obs_state[key].getDefault());
obs_state.suppressReset.set(false);
console.log(`suppressReset: ${key}: off`);
} else {
console.log(`already default: ${key}`);
}
};
for (const triggerKey of resetTriggers) {
obs_state[triggerKey].subscribe(resetIfNeeded);
}
return dropdown;
}