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} */ public processingDepositStatus: Observable; /** * A boolean representing if a submission save operation is pending * @type {Observable} */ public processingSaveStatus: Observable; /** * A boolean representing if showing deposit and discard buttons * @type {Observable} */ public showDepositAndDiscard: Observable; /** * A boolean representing if submission form is valid or not * @type {Observable} */ public submissionIsInvalid: Observable = observableOf(true); /** * A boolean representing if submission form has unsaved modifications */ public hasUnsavedModification: Observable; /** * 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) } } ); } }