1 import {Component, OnInit, ViewChild} from '@angular/core';
2 import {IdlObject} from '@eg/core/idl.service';
3 import {StaffCatalogService} from './catalog.service';
4 import {ServerStoreService} from '@eg/core/server-store.service';
5 import {ToastService} from '@eg/share/toast/toast.service';
6 import {StringComponent} from '@eg/share/string/string.component';
7 import {ComboboxEntry} from '@eg/share/combobox/combobox.component';
9 /* Component for managing catalog preferences */
11 const CATALOG_PREFS = [
12 'eg.search.search_lib',
15 'eg.catalog.results.count',
16 'eg.staffcat.exclude_electronic',
17 'eg.staffcat.course_materials_selector',
18 'circ.course_materials_opt_in'
22 templateUrl: 'prefs.component.html'
24 export class PreferencesComponent implements OnInit {
26 settings: Object = {};
28 @ViewChild('successMsg', {static: false}) successMsg: StringComponent;
29 @ViewChild('failMsg', {static: false}) failMsg: StringComponent;
32 private store: ServerStoreService,
33 private toast: ToastService,
34 private staffCat: StaffCatalogService,
38 this.staffCat.createContext();
40 // Pre-fetched by the resolver.
41 return this.store.getItemBatch(CATALOG_PREFS)
42 .then(settings => this.settings = settings);
45 showCoursePreferences() {
46 return this.settings['circ.course_materials_opt_in'];
49 orgChanged(org: IdlObject, setting: string) {
50 const localVar = setting === 'eg.search.search_lib' ?
51 'defaultSearchOrg' : 'prefOrg';
54 this.updateValue(setting, org ? org.id() : null)
55 .then(val => this.staffCat[localVar] = val);
59 paneChanged(entry: ComboboxEntry) {
60 this.updateValue('eg.search.adv_pane', entry ? entry.id : null)
61 .then(value => this.staffCat.defaultTab = value);
65 this.updateValue('eg.catalog.results.count',
66 this.settings['eg.catalog.results.count'] || null)
68 // eslint-disable-next-line no-magic-numbers
69 this.staffCat.searchContext.pager.limit = value || 20;
73 checkboxChanged(setting: string) {
74 const value = this.settings[setting];
75 this.updateValue(setting, value || null);
77 if (setting === 'eg.staffcat.exclude_electronic') {
78 this.staffCat.showExcludeElectronic = value;
82 updateValue(setting: string, value: any): Promise<any> {
83 const promise = (value === null) ?
84 this.store.removeItem(setting) :
85 this.store.setItem(setting, value);
88 .then(_ => this.toast.success(this.successMsg.text))
92 hasNoHistory(): boolean {
93 return history.length === 0;