diff --git a/src/app/submission/edit/submission-edit.component.ts b/src/app/submission/edit/submission-edit.component.ts index 99758b9e75..bb20828906 100644 --- a/src/app/submission/edit/submission-edit.component.ts +++ b/src/app/submission/edit/submission-edit.component.ts @@ -11,6 +11,7 @@ import { NotificationsService } from '../../shared/notifications/notifications.s import { TranslateService } from '@ngx-translate/core'; import { SubmissionObject } from '../../core/submission/models/submission-object.model'; import { Collection } from '../../core/shared/collection.model'; +import { flatMap, tap } from 'rxjs/operators'; @Component({ selector: 'ds-submission-edit', @@ -40,28 +41,24 @@ export class SubmissionEditComponent implements OnDestroy, OnInit { } ngOnInit() { - this.subs.push(this.route.paramMap - .subscribe((params: ParamMap) => { - this.submissionId = params.get('id'); - this.subs.push( - this.submissionService.retrieveSubmission(this.submissionId) - .subscribe((submissionObject: SubmissionObject) => { - // NOTE new submission is retrieved on the browser side only - if (isNotNull(submissionObject)) { - if (isEmpty(submissionObject)) { - this.notificationsService.info(null, this.translate.get('submission.general.cannot_submit')); - this.router.navigate(['/mydspace']); - } else { - this.collectionId = (submissionObject.collection as Collection).id; - this.selfUrl = submissionObject.self; - this.sections = submissionObject.sections; - this.submissionDefinition = (submissionObject.submissionDefinition as SubmissionDefinitionsModel); - this.changeDetectorRef.detectChanges(); - } - } - }) - ) - })); + this.subs.push(this.route.paramMap.pipe( + tap((params: ParamMap) => this.submissionId = params.get('id')), + flatMap((params: ParamMap) => this.submissionService.retrieveSubmission(params.get('id'))) + ).subscribe((submissionObject: SubmissionObject) => { + // NOTE new submission is retrieved on the browser side only + if (isNotNull(submissionObject)) { + if (isEmpty(submissionObject)) { + this.notificationsService.info(null, this.translate.get('submission.general.cannot_submit')); + this.router.navigate(['/mydspace']); + } else { + this.collectionId = (submissionObject.collection as Collection).id; + this.selfUrl = submissionObject.self; + this.sections = submissionObject.sections; + this.submissionDefinition = (submissionObject.submissionDefinition as SubmissionDefinitionsModel); + this.changeDetectorRef.detectChanges(); + } + } + })); } /** diff --git a/src/app/submission/form/footer/submission-form-footer.component.ts b/src/app/submission/form/footer/submission-form-footer.component.ts index 593f4a3e10..5f2f36cc22 100644 --- a/src/app/submission/form/footer/submission-form-footer.component.ts +++ b/src/app/submission/form/footer/submission-form-footer.component.ts @@ -1,11 +1,13 @@ import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'; import { Observable, of as observableOf } from 'rxjs'; +import { map } from 'rxjs/operators'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { SubmissionRestService } from '../../submission-rest.service'; import { SubmissionService } from '../../submission.service'; import { SubmissionScopeType } from '../../../core/submission/submission-scope-type'; +import { isNotEmpty } from '../../../shared/empty.util'; @Component({ selector: 'ds-submission-form-footer', @@ -19,7 +21,7 @@ export class SubmissionFormFooterComponent implements OnChanges { public processingDepositStatus: Observable; public processingSaveStatus: Observable; public showDepositAndDiscard: Observable; - private submissionIsInvalid = true; + private submissionIsInvalid: Observable = observableOf(true); constructor(private modalService: NgbModal, private restService: SubmissionRestService, @@ -27,11 +29,10 @@ export class SubmissionFormFooterComponent implements OnChanges { } ngOnChanges(changes: SimpleChanges) { - if (!!this.submissionId) { - this.submissionService.getSubmissionStatus(this.submissionId) - .subscribe((isValid) => { - this.submissionIsInvalid = isValid === false; - }); + if (isNotEmpty(this.submissionId)) { + this.submissionIsInvalid = this.submissionService.getSubmissionStatus(this.submissionId).pipe( + map((isValid: boolean) => isValid === false) + ); this.processingSaveStatus = this.submissionService.getSubmissionSaveProcessingStatus(this.submissionId); this.processingDepositStatus = this.submissionService.getSubmissionDepositProcessingStatus(this.submissionId);