From: Bill Erickson Date: Wed, 3 Mar 2021 15:52:36 +0000 (-0500) Subject: LP1888723 Support disabling select entries in combobox X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=837bc5d6f9571b388e8c02736170c5a31c8695db;p=working%2FEvergreen.git LP1888723 Support disabling select entries in combobox Adds a new @Input() disableEntries: any[] for tracking identifier values in the combobox that should be marked as disabled / unselectable. Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/eg2/src/app/share/combobox/combobox.component.html b/Open-ILS/src/eg2/src/app/share/combobox/combobox.component.html index a26b6fd09b..38b2507b1c 100644 --- a/Open-ILS/src/eg2/src/app/share/combobox/combobox.component.html +++ b/Open-ILS/src/eg2/src/app/share/combobox/combobox.component.html @@ -1,14 +1,15 @@ - -{{r.label || r.id}} + {{r.label}} - {{r.fm.code()}} ({{r.fm.year()}}) + {{r.fm.code()}} ({{r.fm.year()}}) - {{r.fm.name()}} ({{getOrgShortname(r.fm.owning_lib())}}) + + {{r.fm.name()}} ({{getOrgShortname(r.fm.owning_lib())}}) +
diff --git a/Open-ILS/src/eg2/src/app/share/combobox/combobox.component.ts b/Open-ILS/src/eg2/src/app/share/combobox/combobox.component.ts index e6acfeefd3..d4f4c3f3ff 100644 --- a/Open-ILS/src/eg2/src/app/share/combobox/combobox.component.ts +++ b/Open-ILS/src/eg2/src/app/share/combobox/combobox.component.ts @@ -23,6 +23,7 @@ export interface ComboboxEntry { freetext?: boolean; userdata?: any; // opaque external value; ignored by this component. fm?: IdlObject; + disabled?: boolean; } @Directive({ @@ -81,6 +82,9 @@ export class ComboboxComponent implements ControlValueAccessor, OnInit, AfterVie this.isRequired = r; } + // Array of entry identifiers to disable in the selector + @Input() disableEntries: any[] = []; + // Disable the input isDisabled: boolean; @Input() set disabled(d: boolean) { @@ -116,7 +120,8 @@ export class ComboboxComponent implements ControlValueAccessor, OnInit, AfterVie this.entrylist = [{ id: id, label: this.getFmRecordLabel(rec), - fm: rec + fm: rec, + disabled : this.disableEntries.includes(id) }]; this.selected = this.entrylist.filter(e => e.id === id)[0]; }); @@ -476,6 +481,18 @@ export class ComboboxComponent implements ControlValueAccessor, OnInit, AfterVie }); } + // NgbTypeahead doesn't offer a way to style the dropdown + // button directly, so we have to reach up and style it ourselves. + applyDisableStyle() { + this.disableEntries.forEach(id => { + const node = document.getElementById(`${this.domId}-${id}`); + if (node) { + const button = node.parentNode as HTMLElement; + button.classList.add('disabled'); + } + }); + } + filter = (text$: Observable): Observable => { return text$.pipe( debounceTime(200), @@ -499,6 +516,10 @@ export class ComboboxComponent implements ControlValueAccessor, OnInit, AfterVie // click action occurred. if (term === '') { return []; } + // Give the typeahead a chance to open before applying + // the disabled entry styling. + setTimeout(() => this.applyDisableStyle()); + // In sync-data mode, a click displays the full list. if (term === '_CLICK_' && !this.asyncDataSource) { return this.entrylist;