From 2e0d92d8f5d189d466f05135a7f65da0563e8b0e Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 7 Nov 2026 12:20:31 -0800 Subject: [PATCH] Fix: two dropdown-related UI fixes (#14717) --- .../input/document-link/document-link.component.html | 2 +- .../common/input/select/select.component.spec.ts | 3 +++ .../components/common/input/select/select.component.ts | 8 +++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.html b/src-ui/src/app/components/common/input/document-link/document-link.component.html index 39a84ac5c3..2b5e3be90e 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.html +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.html @@ -36,7 +36,7 @@ [appendTo]="appendTo" [loading]="loading()" [typeahead]="documentsInput$" - (mousedown)="$event.stopImmediatePropagation()" + (mousedown)="appendTo && $event.stopImmediatePropagation()" (change)="onChange(selectedDocumentIDs)">
diff --git a/src-ui/src/app/components/common/input/select/select.component.spec.ts b/src-ui/src/app/components/common/input/select/select.component.spec.ts index a71f37afb7..23a32f85f8 100644 --- a/src-ui/src/app/components/common/input/select/select.component.spec.ts +++ b/src-ui/src/app/components/common/input/select/select.component.spec.ts @@ -97,6 +97,7 @@ describe('SelectComponent', () => { let createNewVal component.createNew.subscribe((v) => (createNewVal = v)) expect(component.allowCreateNew).toBeTruthy() + const closeSpy = jest.spyOn(component.ngSelectComponent, 'close') component.onSearch({ term: 'foo' }) component.addItem(undefined) expect(createNewVal).toEqual('foo') @@ -105,6 +106,8 @@ describe('SelectComponent', () => { component.onSearch({ term: 'baz' }) component.clickNew() expect(createNewVal).toEqual('baz') + // dropdown should close when creating a new item so it isn't left open behind the modal + expect(closeSpy).toHaveBeenCalled() }) it('should search items by independent normalized terms', () => { diff --git a/src-ui/src/app/components/common/input/select/select.component.ts b/src-ui/src/app/components/common/input/select/select.component.ts index 1fd2db3b7b..f3d8b39fdd 100644 --- a/src-ui/src/app/components/common/input/select/select.component.ts +++ b/src-ui/src/app/components/common/input/select/select.component.ts @@ -4,6 +4,7 @@ import { forwardRef, Input, Output, + ViewChild, } from '@angular/core' import { FormsModule, @@ -11,7 +12,7 @@ import { ReactiveFormsModule, } from '@angular/forms' import { RouterModule } from '@angular/router' -import { NgSelectModule } from '@ng-select/ng-select' +import { NgSelectComponent, NgSelectModule } from '@ng-select/ng-select' import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { matchesSearchText } from 'src/app/utils/text-search' import { AbstractInputComponent } from '../abstract-input' @@ -124,6 +125,9 @@ export class SelectComponent extends AbstractInputComponent { @Output() filterDocuments = new EventEmitter() + @ViewChild(NgSelectComponent) + ngSelectComponent: NgSelectComponent + public addItemRef: (name) => void private _lastSearchTerm: string @@ -150,11 +154,13 @@ export class SelectComponent extends AbstractInputComponent { if (name) this.createNew.next(name) else this.createNew.next(this._lastSearchTerm) this.clearLastSearchTerm() + this.ngSelectComponent?.close() } clickNew() { this.createNew.next(this._lastSearchTerm) this.clearLastSearchTerm() + this.ngSelectComponent?.close() } clearLastSearchTerm() {