fix selected item sorting

This commit is contained in:
Arthur
2026-01-14 14:43:42 -08:00
parent 05619a9745
commit 5359ae4fc2
3 changed files with 20 additions and 7 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -75,6 +75,9 @@ export class DynamicTomSelect extends TomSelect {
load(value: string) {
const self = this;
// Save current selection before clearing
const currentValue = self.getValue();
// Automatically clear any cached options. (Only options included
// in the API response should be present.)
self.clearOptions();
@@ -102,17 +105,27 @@ export class DynamicTomSelect extends TomSelect {
.then(apiData => {
const results: Dict[] = apiData.results;
// Add options directly (TomSelect automatically sets $order based on insertion order)
for (const result of results) {
// Add options and manually set $order to ensure correct sorting
results.forEach((result, index) => {
const option = self.getOptionFromData(result);
self.addOption(option);
}
// Set $order after addOption() to override any special handling of pre-selected items
const key = option[self.settings.valueField as string] as string;
if (self.options[key]) {
(self.options[key] as any).$order = index;
}
});
self.loading--;
if (self.loading === 0) {
self.wrapper.classList.remove(self.settings.loadingClass as string);
}
// Restore the current selection
if (currentValue && !self.items.includes(currentValue as string)) {
self.items.push(currentValue as string);
}
self.refreshOptions(false);
})
.catch(() => {