]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/share/buckets/record-bucket-dialog.component.ts
1f127b42c21ba9e733c61d7263fff934bd46512f
[working/Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / share / buckets / record-bucket-dialog.component.ts
1 import {Component, OnInit, Input, Renderer2} from '@angular/core';
2 import {NetService} from '@eg/core/net.service';
3 import {IdlService} from '@eg/core/idl.service';
4 import {EventService} from '@eg/core/event.service';
5 import {ToastService} from '@eg/share/toast/toast.service';
6 import {AuthService} from '@eg/core/auth.service';
7 import {DialogComponent} from '@eg/share/dialog/dialog.component';
8 import {NgbModal} from '@ng-bootstrap/ng-bootstrap';
9
10 /**
11  * Dialog for adding bib records to new and existing record buckets.
12  */
13
14 @Component({
15   selector: 'eg-record-bucket-dialog',
16   templateUrl: 'record-bucket-dialog.component.html'
17 })
18
19 export class RecordBucketDialogComponent
20     extends DialogComponent implements OnInit {
21
22     selectedBucket: number;
23     newBucketName: string;
24     newBucketDesc: string;
25     buckets: any[];
26
27     recId: number;
28     @Input() set recordId(id: number) {
29         this.recId = id;
30     }
31
32     constructor(
33         private modal: NgbModal, // required for passing to parent
34         private renderer: Renderer2,
35         private toast: ToastService,
36         private idl: IdlService,
37         private net: NetService,
38         private evt: EventService,
39         private auth: AuthService) {
40         super(modal); // required for subclassing
41     }
42
43     ngOnInit() {
44
45         this.onOpen$.subscribe(ok => {
46             // Reset data on dialog open
47
48             this.selectedBucket = null;
49             this.newBucketName = '';
50             this.newBucketDesc = '';
51
52             this.net.request(
53                 'open-ils.actor',
54                 'open-ils.actor.container.retrieve_by_class.authoritative',
55                 this.auth.token(), this.auth.user().id(),
56                 'biblio', 'staff_client'
57             ).subscribe(buckets => this.buckets = buckets);
58         });
59     }
60
61     addToSelected() {
62         this.addToBucket(this.selectedBucket);
63     }
64
65     // Create a new bucket then add the record
66     addToNew() {
67         const bucket = this.idl.create('cbreb');
68
69         bucket.owner(this.auth.user().id());
70         bucket.name(this.newBucketName);
71         bucket.description(this.newBucketDesc);
72         bucket.btype('staff_client');
73
74         this.net.request(
75             'open-ils.actor',
76             'open-ils.actor.container.create',
77             this.auth.token(), 'biblio', bucket
78         ).subscribe(bktId => {
79             const evt = this.evt.parse(bktId);
80             if (evt) {
81                 this.toast.danger(evt.desc);
82             } else {
83                 this.addToBucket(bktId);
84             }
85         });
86     }
87
88     // Add the record to the selected existing bucket
89     addToBucket(id: number) {
90         const item = this.idl.create('cbrebi');
91         item.bucket(id);
92         item.target_biblio_record_entry(this.recId);
93         this.net.request(
94             'open-ils.actor',
95             'open-ils.actor.container.item.create',
96             this.auth.token(), 'biblio', item
97         ).subscribe(resp => {
98             const evt = this.evt.parse(resp);
99             if (evt) {
100                 this.toast.danger(evt.toString());
101             } else {
102                 this.close();
103             }
104         });
105     }
106 }
107
108
109