From 3e429c47823435dad366b9845a95212cf9e6802c Mon Sep 17 00:00:00 2001 From: ashklianko Date: Mon, 16 Oct 2023 10:24:13 +0200 Subject: [PATCH] Selected options in Content Selector get deselected on dropdown scroll #3305 - BaseRichComboBox: comboBox.addOption doesn't select item that is supposed to be selected - DropdownList: navigating to the first selected row only if dropdown was not open yet --- .../common/js/ui/selector/DropdownList.ts | 7 ++++++- .../ui/selector/combobox/BaseRichComboBox.ts | 20 +++---------------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/main/resources/assets/admin/common/js/ui/selector/DropdownList.ts b/src/main/resources/assets/admin/common/js/ui/selector/DropdownList.ts index 57dd9ffda..ef53de15e 100644 --- a/src/main/resources/assets/admin/common/js/ui/selector/DropdownList.ts +++ b/src/main/resources/assets/admin/common/js/ui/selector/DropdownList.ts @@ -117,16 +117,21 @@ export class DropdownList { } showDropdown(selectedOptions?: Option[], noOptionsText?: string) { + const isShown: boolean = this.isDropdownShown(); if (this.hasOptions()) { this.emptyDropdown.hide(); this.dropdownGrid.show(); this.dropdownGrid.adjustGridHeight(); + if (selectedOptions) { this.dropdownGrid.markSelections(selectedOptions); if (selectedOptions.length > 0) { this.dropdownGrid.markReadOnly(selectedOptions); - this.navigateToRowIfNotActive(selectedOptions[0]); + + if (!isShown) { + this.navigateToRowIfNotActive(selectedOptions[0]); + } } } } else { diff --git a/src/main/resources/assets/admin/common/js/ui/selector/combobox/BaseRichComboBox.ts b/src/main/resources/assets/admin/common/js/ui/selector/combobox/BaseRichComboBox.ts index 7068eecaa..fd9b097ae 100644 --- a/src/main/resources/assets/admin/common/js/ui/selector/combobox/BaseRichComboBox.ts +++ b/src/main/resources/assets/admin/common/js/ui/selector/combobox/BaseRichComboBox.ts @@ -418,26 +418,12 @@ export class BaseRichComboBox } } - private handleLoadedData(event: LoadedDataEvent) { + private handleLoadedData(event: LoadedDataEvent): Q.Promise { this.errorContainer.hide(); - const optionCount: number = this.getOptionCount(); + return this.createOptions(event.getData().map(this.loadedItemToDisplayValue.bind(this))).then( (options: Option[]) => { - let appendOptions: boolean = false; - - if (event.isPostLoad() && optionCount > 0) { - const lastOption: Option = this.getOptionByRow(optionCount - 1); - appendOptions = options.length > optionCount && options[optionCount - 1].getValue() === lastOption.getValue(); - } - - if (appendOptions) { - for (let i: number = optionCount; i < options.length; i++) { - this.comboBox.addOption(options[i]); - } - } else { - this.comboBox.setOptions(options, event.isPostLoad()); - } - + this.comboBox.setOptions(options, event.isPostLoad()); this.notifyLoaded(options.map((option) => option.getDisplayValue()), event.isPostLoad()); return; });