-import * as Moment from 'moment-timezone';
import {ActivatedRoute} from '@angular/router';
-import {AuthService} from '@eg/core/auth.service';
-import {ComboboxEntry} from '@eg/share/combobox/combobox.component';
-import {Component, OnInit, ViewChild, Input, TemplateRef} from '@angular/core';
-import {ConfirmDialogComponent} from '@eg/share/dialog/confirm.component';
-import {DateSelectComponent} from '@eg/share/date-select/date-select.component';
-import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component';
-import {FormGroup, FormControl} from '@angular/forms';
-import {FormatService} from '@eg/core/format.service';
+import {Component, OnInit, ViewChild} from '@angular/core';
import {GridComponent} from '@eg/share/grid/grid.component';
-import {GridDataSource, GridColumn, GridRowFlairEntry, GridCellTextGenerator} from '@eg/share/grid/grid';
+import {GridDataSource} from '@eg/share/grid/grid';
import {GridFlatDataService} from '@eg/share/grid/grid-flat-data.service';
-import {HtmlToTxtService} from '@eg/share/util/htmltotxt.service';
-import {IdlService, IdlObject} from '@eg/core/idl.service';
-import {NgbDate} from '@ng-bootstrap/ng-bootstrap';
-import {OrgFamily} from '@eg/share/org-family-select/org-family-select.component';
-import {OrgService} from '@eg/core/org.service';
+import {IdlService} from '@eg/core/idl.service';
import {Pager} from '@eg/share/util/pager';
import {PcrudService} from '@eg/core/pcrud.service';
-import {PermService} from '@eg/core/perm.service';
-import {PrintService} from '@eg/share/print/print.service';
-import {ProgressDialogComponent} from '@eg/share/dialog/progress.component';
-import {SampleDataService} from '@eg/share/util/sample-data.service';
-import {StringComponent} from '@eg/share/string/string.component';
-import {StringService} from '@eg/share/string/string.service';
-import {ToastService} from '@eg/share/toast/toast.service';
-import {map, take} from 'rxjs/operators';
-import {timer as observableTimer, Observable, of} from 'rxjs';
@Component({
templateUrl: 'attempts.component.html'
oneSelectedRow: boolean;
constructor(
- private auth: AuthService,
private flatData: GridFlatDataService,
- private format: FormatService,
private idl: IdlService,
- private org: OrgService,
private pcrud: PcrudService,
- private perm: PermService,
private route: ActivatedRoute,
) {}
}
var batchSearch = {};
batchSearch[ this.batchesSessionField ] = JSON.parse( params.sessions );
- this.pcrud.search(this.batchesIdlClass,batchSearch).subscribe(
- (batch) => {
+ this.pcrud.search(this.batchesIdlClass,batchSearch).subscribe({
+ next: (batch) => {
if (this.batches.length === 1 && this.batches[0] === -1) {
this.batches = []; // undo our kludge, otherwise -1 would be in the dialog title
}
this.batches.push( batch.id() );
},
- (err) => {
+ error: (err) => {
console.log('pcrud.search.uvs err', err);
},
- () => {
+ complete: () => {
this.batches = Array.from( new Set( this.batches ) );
this.grid.reload();
}
- );
+ });
}
});
gridSelectionChange(keys: string[]) {
this.noSelectedRows = (keys.length === 0);
this.oneSelectedRow = (keys.length === 1);
- var rows = this.grid.context.getSelectedRows();
+ //var rows = this.grid.context.getSelectedRows();
}
initDataSource() {
-import * as Moment from 'moment-timezone';
import {Router, ActivatedRoute} from '@angular/router';
import {AuthService} from '@eg/core/auth.service';
-import {ComboboxEntry} from '@eg/share/combobox/combobox.component';
-import {Component, OnInit, ViewChild, Input, TemplateRef} from '@angular/core';
+import {Component, OnInit, ViewChild} from '@angular/core';
import {ConfirmDialogComponent} from '@eg/share/dialog/confirm.component';
-import {DateSelectComponent} from '@eg/share/date-select/date-select.component';
-import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component';
import {NewSessionDialogComponent} from './new-session-dialog.component';
-import {FormGroup, FormControl} from '@angular/forms';
-import {FormatService} from '@eg/core/format.service';
import {GridComponent} from '@eg/share/grid/grid.component';
-import {GridDataSource, GridColumn, GridRowFlairEntry, GridCellTextGenerator} from '@eg/share/grid/grid';
+import {GridDataSource} from '@eg/share/grid/grid';
import {GridFlatDataService} from '@eg/share/grid/grid-flat-data.service';
-import {HtmlToTxtService} from '@eg/share/util/htmltotxt.service';
import {IdlService, IdlObject} from '@eg/core/idl.service';
import {NetService} from '@eg/core/net.service';
-import {NgbDate} from '@ng-bootstrap/ng-bootstrap';
import {OrgFamily} from '@eg/share/org-family-select/org-family-select.component';
import {OrgService} from '@eg/core/org.service';
import {Pager} from '@eg/share/util/pager';
-import {PcrudService} from '@eg/core/pcrud.service';
import {PermService} from '@eg/core/perm.service';
-import {PrintService} from '@eg/share/print/print.service';
-import {ProgressDialogComponent} from '@eg/share/dialog/progress.component';
-import {SampleDataService} from '@eg/share/util/sample-data.service';
import {StringComponent} from '@eg/share/string/string.component';
-import {StringService} from '@eg/share/string/string.service';
-import {ToastService} from '@eg/share/toast/toast.service';
-import {map, take} from 'rxjs/operators';
-import {timer as observableTimer, Observable, of} from 'rxjs';
@Component({
templateUrl: 'linkchecker.component.html'
constructor(
private auth: AuthService,
private flatData: GridFlatDataService,
- private format: FormatService,
private idl: IdlService,
private net: NetService,
private org: OrgService,
- private pcrud: PcrudService,
private perm: PermService,
private route: ActivatedRoute,
private router: Router,
- private toast: ToastService,
) {}
ngOnInit() {
gridSelectionChange(keys: string[]) {
var rows = this.grid.context.getSelectedRows();
+ console.log('keys.length = ' + keys.length + ', rows.length = ' + rows.length);
this.noSelectedRows = (rows.length === 0);
this.oneSelectedRow = (rows.length === 1);
});
}
- newSessionWrapper(optionalSessionToClone?) {
+ newSessionWrapper(optionalSessionToClone?: any) {
this.newSessionDialog.sessionToClone = optionalSessionToClone;
this.newSessionDialog.open({size: 'lg'}).subscribe( (res) => {
console.log('dialog res', res);
var session_ids = rows.map(r => r.session_id );
var that = this;
- function delete_next(ids) {
+ function delete_next(ids: number[]) {
var id = ids.pop();
if (id) {
that.net.request(
'open-ils.url_verify.session.delete',
that.auth.token(),
id,
- ).subscribe(
- (res) => {
+ ).subscribe({
+ next: (res) => {
console.log('session.delete res', res);
// toast
},
- (err) => {
+ error: (err) => {
console.log('session.delete err', err);
// toast
},
- () => {
+ complete: () => {
console.log('session.delete finis');
delete_next(ids);
}
- );
+ });
} else {
setTimeout( () => { that.grid.reload(); } );
}
import {AlertDialogComponent} from '@eg/share/dialog/alert.component';
import {AuthService} from '@eg/core/auth.service';
import {ComboboxEntry, ComboboxComponent} from '@eg/share/combobox/combobox.component';
-import {Component, Input, OnInit, ViewChild, Renderer2} from '@angular/core';
+import {Component, Input, OnInit, ViewChild, Renderer2, OnDestroy} from '@angular/core';
import {DialogComponent} from '@eg/share/dialog/dialog.component';
+import {NgbModal} from '@ng-bootstrap/ng-bootstrap';
import {EventService} from '@eg/core/event.service';
-import {FormControl} from '@angular/forms';
import {IdlService, IdlObject} from '@eg/core/idl.service';
import {NetService} from '@eg/core/net.service';
import {NgForm} from '@angular/forms';
-import {NgbModal} from '@ng-bootstrap/ng-bootstrap';
import {PcrudService} from '@eg/core/pcrud.service';
import {ProgressDialogComponent} from '@eg/share/dialog/progress.component';
-import {StringComponent} from '@eg/share/string/string.component';
-import {Subject, Subscription, Observable, from, EMPTY, throwError} from 'rxjs';
-import {ToastService} from '@eg/share/toast/toast.service';
-import {debounceTime, distinctUntilChanged, switchMap, takeLast, finalize} from 'rxjs/operators';
+import {Subject, Subscription, Observable} from 'rxjs';
+import {debounceTime, distinctUntilChanged} from 'rxjs/operators';
@Component({
selector: 'eg-new-session-dialog',
templateUrl: './new-session-dialog.component.html'
})
-export class NewSessionDialogComponent extends DialogComponent implements OnInit {
+export class NewSessionDialogComponent extends DialogComponent implements OnInit, OnDestroy {
@Input() sessionToClone: IdlObject; // not really a "session", but a combined session/batch view
private auth: AuthService,
private evt: EventService,
private net: NetService,
- private toast: ToastService,
private idl: IdlService,
private pcrud: PcrudService,
private renderer: Renderer2,
this.pcrud.search('uvus', {'session':this.sessionToClone.session_id()},{},{'atomic':true}).subscribe(
(list) => {
console.log('list',list);
- list.forEach( (s,idx) => {
+ list.forEach( (s: any,idx: number) => {
let xpath = s.xpath();
this.selectorModels.tag[idx] = xpath.match(/tag='(\d+)'/)[1];
this.selectorModels.subfields[idx] = '';
this.pcrud.search('uvs',{
owning_lib: this.sessionOwningLibrary,
name: this.sessionName},{})
- .subscribe(
- result => { this.nameCollision = true; }
- )
+ .subscribe( () => { this.nameCollision = true; })
);
})
);
// [applyOrgId]="sessionOwningLibrary" is working fine
}
+ applySessionSearch(p: any) {
+ }
+
applySearchScope(p: any) {
// [applyOrgId]="sessionSearchScope" was not working fine.
// This also preserves null's, which is important since we'll
if (! this.sessionSearch.match(/site\(.+?\)/)) {
this.sessionSearch += ' site(' + p.shortname() + ')'
}
- this.applySessionSearch( this.sessionSearch );
}
}
}
}
- applySessionSearch(p: any) {
- }
-
// https://stackoverflow.com/questions/42322968/angular2-dynamic-input-field-lose-focus-when-input-changes
trackByIdx(index: any, item: any) {
return index;
this.progress.open();
}
- createNewSession(options) {
+ createNewSession(options: any) {
///////////////////////////////////////////////
this.startProgressMeter($localize`Creating session...`);
this.subscriptions.push(this.net.request(
this.sessionName,
this.sessionSearch,
this.sessionOwningLibrary
- ).subscribe(
- (res) => {
+ ).subscribe({
+ next: (res) => {
if (this.evt.parse(res)) {
console.error('session.create ils_event',res);
this.fail.open();
/////////////////////////////////////////////////////
this.resetProgressMeter($localize`Creating URL selectors...`);
this.subscriptions.push(
- this.createUrlSelectors().subscribe(
- (res2) => {
+ this.createUrlSelectors().subscribe({
+ next: (res2) => {
if (this.evt.parse(res2)) {
console.error('url_selector.create error',res2);
this.fail.open();
console.log('url_selector',res2);
}
},
- (err2) => {
+ error: (err2) => {
console.error('url_selector.create error',err2);
this.fail.open();
this.stopProgressMeter();
this.close(false);
},
- () => {
+ complete: () => {
////////////////////////////////////////////////////////////
this.resetProgressMeter($localize`Searching and extracting URLs...`);
this.subscriptions.push(this.net.request(
'open-ils.url_verify.session.search_and_extract',
this.auth.token(),
this.sessionId
- ).subscribe(
- (res3) => {
+ ).subscribe({
+ next: (res3) => {
console.log('res3',res3);
if (!this.progress.hasMax()) {
// first response returned by the API is the number of search results
this.progress.increment();
}
},
- (err3) => {
+ error: (err3) => {
console.log('err3',err3);
this.stopProgressMeter();
this.close(false);
},
- () => {
+ complete: () => {
if (options['fullAuto']) {
options['viewURLs'] = false;
options['viewAttempts'] = true;
'open-ils.url_verify.session.verify',
this.auth.token(),
this.sessionId
- ).subscribe(
- (res4) => {
+ ).subscribe({
+ next: (res4) => {
console.log('res4',res4);
this.progress.update({max: res4['url_count'], value: res4['total_processed']});
},
- (err4) => {
+ error: (err4) => {
this.stopProgressMeter();
console.log('err4',err4);
this.close(false);
},
- () => {
+ complete: () => {
this.nameCollision = true;
this.stopProgressMeter();
this.close(options);
}
- ));
+ }));
} else {
this.nameCollision = true;
this.stopProgressMeter();
this.close(options);
}
}
- ));
+ }));
}
- )
+ })
);
}
},
- (err) => {
+ error: (err) => {
console.error('session.create error',err);
this.fail.open();
this.stopProgressMeter();
this.close(false);
- }
- ));
+ },
+ complete: () => {}
+ }));
}
createUrlSelectors(): Observable<any> {
for (var i = 0; i < this.selectorModels['tag'].length; i++) {
let tag = this.selectorModels['tag'][i];
let subfields = this.selectorModels['subfields'][i];
- let xpath = "//*[@tag='" + tag + "']/*[" + subfields.split('').map( e => "@code='" + e + "'" ).join(' or ') + ']';
+ let xpath = "//*[@tag='" + tag + "']/*[" + subfields.split('').map( (e: string) => "@code='" + e + "'" ).join(' or ') + ']';
xpaths.push(xpath);
}
xpaths = Array.from( new Set( xpaths ) ); // dedupe
<!-- how should we do i18n with eg-staff-banner? -->
<div class="lead alert alert-primary text-center pt-1 pb-1">
<span class="align-middle">
- {sessions, plural, =0 {URLs for All Sessions} =1 {URLs for Session ID {{sessions}}} other {URLs for Session IDs {{sessions}}}}
+ {session_names, plural, =0 {URLs for All Sessions} =1 {URLs for Session: {{session_names.join(', ')}}} other {URLs for Sessions: {{session_names.join(', ')}}}}
</span>
</div>
-import * as Moment from 'moment-timezone';
import {Router, ActivatedRoute} from '@angular/router';
import {AuthService} from '@eg/core/auth.service';
-import {ComboboxEntry} from '@eg/share/combobox/combobox.component';
-import {Component, OnInit, ViewChild, Input, TemplateRef} from '@angular/core';
-import {ConfirmDialogComponent} from '@eg/share/dialog/confirm.component';
-import {DateSelectComponent} from '@eg/share/date-select/date-select.component';
-import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component';
-import {FormGroup, FormControl} from '@angular/forms';
-import {FormatService} from '@eg/core/format.service';
+import {Component, ChangeDetectorRef, OnInit, ViewChild} from '@angular/core';
import {GridComponent} from '@eg/share/grid/grid.component';
-import {GridDataSource, GridColumn, GridRowFlairEntry, GridCellTextGenerator} from '@eg/share/grid/grid';
+import {GridDataSource} from '@eg/share/grid/grid';
import {GridFlatDataService} from '@eg/share/grid/grid-flat-data.service';
-import {HtmlToTxtService} from '@eg/share/util/htmltotxt.service';
-import {IdlService, IdlObject} from '@eg/core/idl.service';
+import {IdlService} from '@eg/core/idl.service';
import {NetService} from '@eg/core/net.service';
-import {NgbDate} from '@ng-bootstrap/ng-bootstrap';
-import {OrgFamily} from '@eg/share/org-family-select/org-family-select.component';
-import {OrgService} from '@eg/core/org.service';
import {Pager} from '@eg/share/util/pager';
import {PcrudService} from '@eg/core/pcrud.service';
-import {PermService} from '@eg/core/perm.service';
-import {PrintService} from '@eg/share/print/print.service';
import {ProgressDialogComponent} from '@eg/share/dialog/progress.component';
-import {SampleDataService} from '@eg/share/util/sample-data.service';
-import {StringComponent} from '@eg/share/string/string.component';
-import {StringService} from '@eg/share/string/string.service';
-import {ToastService} from '@eg/share/toast/toast.service';
-import {map, take} from 'rxjs/operators';
-import {timer as observableTimer, Observable, of} from 'rxjs';
@Component({
templateUrl: 'urls.component.html'
export class LinkCheckerUrlsComponent implements OnInit {
sessions: number[];
+ session_names: string[] = [];
+ sessionIdlClass = 'uvs';
newBatches: number[] = [];
urlsIdlClass = 'uvu';
urlsSortField = 'name';
constructor(
private auth: AuthService,
private flatData: GridFlatDataService,
- private format: FormatService,
private idl: IdlService,
private net: NetService,
- private org: OrgService,
private pcrud: PcrudService,
- private perm: PermService,
private route: ActivatedRoute,
private router: Router,
+ private cdr: ChangeDetectorRef,
) {}
ngOnInit() {
if (params.sessions) {
this.sessions = JSON.parse( params.sessions );
this.grid.reload();
+ this.pcrud.search(this.sessionIdlClass, { id: this.sessions }).subscribe((n) => {
+ this.session_names.push(n.name());
+ this.cdr.detectChanges();
+ });
}
});
this.initDataSource();
this.gridSelectionChange( [] );
+ //console.log('phasefx',this);
}
gridSelectionChange(keys: string[]) {
this.noSelectedRows = (keys.length === 0);
this.oneSelectedRow = (keys.length === 1);
- var rows = this.grid.context.getSelectedRows();
+ //var rows = this.grid.context.getSelectedRows();
}
initDataSource() {
this.progress.open();
}
- verifyUrlsFilteredForSession(rows,ses_ids) {
+ verifyUrlsFilteredForSession(rows: any[], ses_ids: any[]) {
var ses_id = ses_ids.pop();
if (ses_id) {
this.resetProgressMeter($localize`Verifying selected URLs for Session ${ses_id}...`);
this.auth.token(),
ses_id,
rows.filter( url => url.session === ses_id ).map( url => url.id )
- ).subscribe(
- (res) => {
+ ).subscribe({
+ next: (res) => {
console.log('res',res);
this.progress.update({max: res['url_count'], value: res['total_processed']});
if (res['attempt']) { // last response
this.newBatches.push(res.attempt.id());
}
},
- (err) => {
+ error: (err) => {
this.stopProgressMeter();
console.log('err',err);
},
- () => {
+ complete: () => {
this.verifyUrlsFilteredForSession(rows,ses_ids);
}
- );
+ });
} else {
console.log('go to attempts page');
this.stopProgressMeter();