Files
dspace-angular/src/app/submission/form/footer/submission-form-footer.component.ts
2020-12-21 17:27:59 +01:00

119 lines
3.5 KiB
TypeScript

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 '../../../core/submission/submission-rest.service';
import { SubmissionService } from '../../submission.service';
import { SubmissionScopeType } from '../../../core/submission/submission-scope-type';
import { isNotEmpty } from '../../../shared/empty.util';
/**
* This component represents submission form footer bar.
*/
@Component({
selector: 'ds-submission-form-footer',
styleUrls: ['./submission-form-footer.component.scss'],
templateUrl: './submission-form-footer.component.html'
})
export class SubmissionFormFooterComponent implements OnChanges {
/**
* The submission id
* @type {string}
*/
@Input() submissionId: string;
/**
* A boolean representing if a submission deposit operation is pending
* @type {Observable<boolean>}
*/
public processingDepositStatus: Observable<boolean>;
/**
* A boolean representing if a submission save operation is pending
* @type {Observable<boolean>}
*/
public processingSaveStatus: Observable<boolean>;
/**
* A boolean representing if showing deposit and discard buttons
* @type {Observable<boolean>}
*/
public showDepositAndDiscard: Observable<boolean>;
/**
* A boolean representing if submission form is valid or not
* @type {Observable<boolean>}
*/
public submissionIsInvalid: Observable<boolean> = observableOf(true);
/**
* A boolean representing if submission form has unsaved modifications
*/
public hasUnsavedModification: Observable<boolean>;
/**
* Initialize instance variables
*
* @param {NgbModal} modalService
* @param {SubmissionRestService} restService
* @param {SubmissionService} submissionService
*/
constructor(private modalService: NgbModal,
private restService: SubmissionRestService,
private submissionService: SubmissionService) {
}
/**
* Initialize all instance variables
*/
ngOnChanges(changes: SimpleChanges) {
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);
this.showDepositAndDiscard = observableOf(this.submissionService.getSubmissionScope() === SubmissionScopeType.WorkspaceItem);
this.hasUnsavedModification = this.submissionService.hasUnsavedModification();
}
}
/**
* Dispatch a submission save action
*/
save(event) {
this.submissionService.dispatchSave(this.submissionId, true);
}
/**
* Dispatch a submission save for later action
*/
saveLater(event) {
this.submissionService.dispatchSaveForLater(this.submissionId);
}
/**
* Dispatch a submission deposit action
*/
public deposit(event) {
this.submissionService.dispatchDeposit(this.submissionId);
}
/**
* Dispatch a submission discard action
*/
public confirmDiscard(content) {
this.modalService.open(content).result.then(
(result) => {
if (result === 'ok') {
this.submissionService.dispatchDiscard(this.submissionId)
}
}
);
}
}