// Emits an acpl object or null on combobox value change
@Output() valueChange: EventEmitter<IdlObject>;
+ // Emits the combobox entry or null on value change
+ @Output() entryChange: EventEmitter<ComboboxEntry>;
@Input() required: boolean;
private pcrud: PcrudService
) {
this.valueChange = new EventEmitter<IdlObject>();
+ this.entryChange = new EventEmitter<ComboboxEntry>();
}
ngOnInit() {
const id = entry ? entry.id : null;
this.propagateChange(id);
this.valueChange.emit(id ? this.cache[id] : null);
+ this.entryChange.emit(entry ? entry : null);
}
writeValue(id: number) {
setFilterOrgs(): Promise<number[]> {
let contextOrgIds: number[] = [];
- if (this.contextOrgIds) {
+ if (this.contextOrgIds.length) {
contextOrgIds = this.contextOrgIds;
} else {
contextOrgIds = [this.contextOrgId || this.auth.user().ws_ou()];
<div>
<div class="row">
- <eg-combobox [idlBaseQuery]="idlBaseQuery" [idlClass]="idlClass"
- [idlIncludeLibraryInLabel]="linkedLibraryLabel" [asyncSupportsEmptyTermClick]="true"
- (onChange)="valueSelected($event)">
- </eg-combobox>
+ <ng-container *ngIf="idlClass === 'acpl'">
+ <eg-item-location-select (entryChange)="valueSelected($event)"
+ [contextOrgId]="acplContextOrgId"
+ domId='location-input'>
+ </eg-item-location-select>
+ <span class="m-1" i18n>Owned by</span>
+ <eg-org-select
+ [applyDefault]="true"
+ (onChange)="acplContextOrgId = $event.id()">
+ </eg-org-select>
+ </ng-container>
+ <ng-container *ngIf="idlClass !== 'acpl'">
+ <eg-combobox [idlBaseQuery]="idlBaseQuery" [idlClass]="idlClass"
+ [idlIncludeLibraryInLabel]="linkedLibraryLabel" [asyncSupportsEmptyTermClick]="true"
+ (onChange)="valueSelected($event)">
+ </eg-combobox>
+ </ng-container>
<button class="btn btn-outline-dark" (click)="addSelectedValue()" [disabled]="!this.selected" i18n>Add</button>
</div>
<div class="row" *ngFor="let entry of entrylist">
import {Observable, of, Subject} from 'rxjs';
import {StoreService} from '@eg/core/store.service';
import {PcrudService} from '@eg/core/pcrud.service';
+import {OrgService} from '@eg/core/org.service';
import {ComboboxComponent, ComboboxEntry} from '@eg/share/combobox/combobox.component';
+import {ItemLocationSelectComponent} from '@eg/share/item-location-select/item-location-select.component';
@Component({
selector: 'eg-multi-select',
@Output() onChange: EventEmitter<string>;
+ acplContextOrgId: number;
+
constructor(
private store: StoreService,
private pcrud: PcrudService,
+ private org: OrgService,
) {
this.entrylist = [];
this.onChange = new EventEmitter<string>();
this.selected = null;
}
}
+
+ getOrgShortname(ou: any) {
+ if (typeof ou === 'object') {
+ return ou.shortname();
+ } else {
+ return this.org.get(ou).shortname();
+ }
+ }
+
addSelectedValue() {
+ // special case to format the label
+ if (this.idlClass === 'acpl' && this.selected.userdata) {
+ this.selected.label =
+ this.selected.userdata.name() + ' (' +
+ this.getOrgShortname(this.selected.userdata.owning_lib()) + ')';
+ }
this.entrylist.push(this.selected);
this.onChange.emit(this.compileCurrentValue());
}
import {BroadcastService} from '@eg/share/util/broadcast.service';
import {CourseService} from './share/course.service';
import {FileExportService} from '@eg/share/util/file-export.service';
+import {ItemLocationSelectModule} from '@eg/share/item-location-select/item-location-select.module';
/**
* Imports the EG common modules and adds modules common to all staff UI's.
EgCommonModule,
CommonWidgetsModule,
GridModule,
- CatalogCommonModule
+ CatalogCommonModule,
+ ItemLocationSelectModule
],
exports: [
EgCommonModule,