]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/catalog/basket-actions.component.ts
LP1959048: manual ng lint fixes
[Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / catalog / basket-actions.component.ts
1 import {Component, ViewChild} from '@angular/core';
2 import {BasketService} from '@eg/share/catalog/basket.service';
3 import {Router} from '@angular/router';
4 import {NetService} from '@eg/core/net.service';
5 import {AuthService} from '@eg/core/auth.service';
6 import {PrintService} from '@eg/share/print/print.service';
7 import {CatalogService} from '@eg/share/catalog/catalog.service';
8 import {StaffCatalogService} from './catalog.service';
9 import {BucketDialogComponent
10     } from '@eg/staff/share/buckets/bucket-dialog.component';
11 import {ProgressDialogComponent} from '@eg/share/dialog/progress.component';
12
13 const MAX_FROM_SEARCH_RESULTS = 1000;
14
15 @Component({
16   selector: 'eg-catalog-basket-actions',
17   templateUrl: 'basket-actions.component.html'
18 })
19 export class BasketActionsComponent {
20
21     basketAction: string;
22
23     @ViewChild('addBasketToBucketDialog', { static: true })
24         addToBucketDialog: BucketDialogComponent;
25
26     @ViewChild('addAllProgress', {static: true})
27         addAllProgress: ProgressDialogComponent;
28
29     constructor(
30         private router: Router,
31         private net: NetService,
32         private auth: AuthService,
33         private printer: PrintService,
34         private basket: BasketService,
35         private cat: CatalogService,
36         private staffCat: StaffCatalogService
37     ) {
38         this.basketAction = '';
39     }
40
41     basketCount(): number {
42         return this.basket.recordCount();
43     }
44
45     isMetarecordSearch(): boolean {
46         return this.staffCat.searchContext &&
47             this.staffCat.searchContext.termSearch.isMetarecordSearch();
48     }
49
50     // TODO: confirmation dialogs?
51
52     applyAction(action: string) {
53         this.basketAction = action;
54
55         switch (this.basketAction) {
56
57             case 'add_all':
58                 // Add all search results to basket.
59
60                 this.addAllProgress.open();
61
62                 const ctx = this.staffCat.cloneContext(this.staffCat.searchContext);
63                 ctx.pager.offset = 0;
64                 ctx.pager.limit = MAX_FROM_SEARCH_RESULTS;
65
66                 this.cat.search(ctx)
67                 .then(_ => this.basket.addRecordIds(ctx.currentResultIds()))
68                 .then(_ => this.addAllProgress.close());
69
70                 break;
71
72             case 'view':
73                 // This does not propagate search params -- unclear if needed.
74                 this.router.navigate(['/staff/catalog/search'],
75                     {queryParams: {showBasket: true}});
76                 break;
77
78             case 'clear':
79                 this.basket.removeAllRecordIds();
80                 break;
81
82             case 'hold':
83                 this.basket.getRecordIds().then(ids => {
84                     this.router.navigate(['/staff/catalog/hold/T'],
85                         {queryParams: {target: ids}});
86                 });
87                 break;
88
89             case 'print':
90                 this.basket.getRecordIds().then(ids => {
91                     this.net.request(
92                         'open-ils.search',
93                         'open-ils.search.biblio.record.print', ids
94                     ).subscribe(
95                         at_event => {
96                             // check for event..
97                             const html = at_event.template_output().data();
98                             this.printer.print({
99                                 text: html,
100                                 printContext: 'default'
101                             });
102                         }
103                     );
104                 });
105                 break;
106
107             case 'email':
108                 this.basket.getRecordIds().then(ids => {
109                     this.net.request(
110                         'open-ils.search',
111                         'open-ils.search.biblio.record.email',
112                         this.auth.token(), ids
113                     ).toPromise(); // fire-and-forget
114                 });
115                 break;
116
117             case 'export_marc':
118                 this.router.navigate(
119                     ['/staff/cat/vandelay/export/basket'],
120                     {queryParamsHandling: 'merge'}
121                 );
122                 break;
123
124             case 'bucket':
125                 this.basket.getRecordIds().then(ids => {
126                     this.addToBucketDialog.bucketClass = 'biblio';
127                     this.addToBucketDialog.itemIds = ids;
128                     this.addToBucketDialog.open({size: 'lg'});
129                 });
130                 break;
131
132         }
133
134         // Resetting basketAction inside its onchange handler
135         // prevents the new value from propagating to Angular
136         // Reset after the current thread.
137         setTimeout(() => this.basketAction = ''); // reset
138     }
139 }
140
141