Skip to content

Commit 110633c

Browse files
Merge branch 'feature-process_polling-7.6' into feature-process_polling
2 parents 359d452 + ecb20bb commit 110633c

4 files changed

Lines changed: 26 additions & 14 deletions

File tree

src/app/core/data/processes/process-data.service.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,14 @@ export class ProcessDataService extends IdentifiableDataService<Process> impleme
175175
)
176176
).subscribe((processRD: RemoteData<Process>) => {
177177
this.clearCurrentTimeout(processId);
178-
const nextTimeout = this.timer(() => {
179-
this.activelyBeingPolled.delete(processId);
180-
this.invalidateByHref(processRD.payload._links.self.href);
181-
}, pollingIntervalInMs);
182-
183-
this.activelyBeingPolled.set(processId, nextTimeout);
178+
if (processRD.hasSucceeded) {
179+
const nextTimeout = this.timer(() => {
180+
this.activelyBeingPolled.delete(processId);
181+
this.invalidateByHref(processRD.payload._links.self.href);
182+
}, pollingIntervalInMs);
183+
184+
this.activelyBeingPolled.set(processId, nextTimeout);
185+
}
184186
});
185187

186188
// When the process completes create a one off subscription (the `find` completes the

src/app/process-page/detail/process-detail.component.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { HttpClient } from '@angular/common/http';
22
import { Component, Inject, NgZone, OnInit, PLATFORM_ID } from '@angular/core';
33
import { ActivatedRoute, Router } from '@angular/router';
44
import { BehaviorSubject, Observable } from 'rxjs';
5-
import { finalize, map, switchMap, take, tap, find, startWith } from 'rxjs/operators';
5+
import { finalize, map, switchMap, take, tap, find, startWith, filter } from 'rxjs/operators';
66
import { AuthService } from '../../core/auth/auth.service';
77
import { DSONameService } from '../../core/breadcrumbs/dso-name.service';
88
import { BitstreamDataService } from '../../core/data/bitstream-data.service';
@@ -80,6 +80,8 @@ export class ProcessDetailComponent implements OnInit {
8080

8181
isRefreshing$: Observable<boolean>;
8282

83+
isDeleting: boolean;
84+
8385
/**
8486
* Reference to NgbModal
8587
*/
@@ -113,6 +115,7 @@ export class ProcessDetailComponent implements OnInit {
113115
return [data.process as RemoteData<Process>];
114116
}
115117
}),
118+
filter(() => !this.isDeleting),
116119
redirectOn4xx(this.router, this.authService),
117120
);
118121

@@ -203,15 +206,17 @@ export class ProcessDetailComponent implements OnInit {
203206
* @param process
204207
*/
205208
deleteProcess(process: Process) {
209+
this.isDeleting = true;
206210
this.processService.delete(process.processId).pipe(
207211
getFirstCompletedRemoteData()
208212
).subscribe((rd) => {
209213
if (rd.hasSucceeded) {
210214
this.notificationsService.success(this.translateService.get('process.detail.delete.success'));
211215
this.closeModal();
212-
this.router.navigateByUrl(getProcessListRoute());
216+
void this.router.navigateByUrl(getProcessListRoute());
213217
} else {
214218
this.notificationsService.error(this.translateService.get('process.detail.delete.error'));
219+
this.isDeleting = false;
215220
}
216221
});
217222
}

src/app/process-page/process-breadcrumb.resolver.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import { Process } from './processes/process.model';
66
import { followLink } from '../shared/utils/follow-link-config.model';
77
import { ProcessDataService } from '../core/data/processes/process-data.service';
88
import { BreadcrumbConfig } from '../breadcrumbs/breadcrumb/breadcrumb-config.model';
9-
import { getRemoteDataPayload, getFirstSucceededRemoteData } from '../core/shared/operators';
9+
import { getFirstCompletedRemoteData } from '../core/shared/operators';
1010
import { ProcessBreadcrumbsService } from './process-breadcrumbs.service';
11+
import { RemoteData } from '../core/data/remote-data';
1112

1213
/**
1314
* This class represents a resolver that requests a specific process before the route is activated
@@ -28,12 +29,11 @@ export class ProcessBreadcrumbResolver implements Resolve<BreadcrumbConfig<Proce
2829
const id = route.params.id;
2930

3031
return this.processService.findById(route.params.id, true, false, followLink('script')).pipe(
31-
getFirstSucceededRemoteData(),
32-
getRemoteDataPayload(),
33-
map((object: Process) => {
32+
getFirstCompletedRemoteData(),
33+
map((object: RemoteData<Process>) => {
3434
const fullPath = state.url;
3535
const url = fullPath.substr(0, fullPath.indexOf(id)) + id;
36-
return { provider: this.breadcrumbService, key: object, url: url };
36+
return { provider: this.breadcrumbService, key: object.payload, url: url };
3737
})
3838
);
3939
}

src/app/process-page/process-breadcrumbs.service.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Injectable } from '@angular/core';
33
import { BreadcrumbsProviderService } from '../core/breadcrumbs/breadcrumbsProviderService';
44
import { Breadcrumb } from '../breadcrumbs/breadcrumb/breadcrumb.model';
55
import { Process } from './processes/process.model';
6+
import { hasValue } from '../shared/empty.util';
67

78
/**
89
* Service to calculate process breadcrumbs for a single part of the route
@@ -16,6 +17,10 @@ export class ProcessBreadcrumbsService implements BreadcrumbsProviderService<Pro
1617
* @param url The url to use as a link for this breadcrumb
1718
*/
1819
getBreadcrumbs(key: Process, url: string): Observable<Breadcrumb[]> {
19-
return observableOf([new Breadcrumb(key.processId + ' - ' + key.scriptName, url)]);
20+
if (hasValue(key)) {
21+
return observableOf([new Breadcrumb(key.processId + ' - ' + key.scriptName, url)]);
22+
} else {
23+
return observableOf([]);
24+
}
2025
}
2126
}

0 commit comments

Comments
 (0)