import { ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core'; import { Subscription } from 'rxjs'; import { first } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { TranslateService } from '@ngx-translate/core'; import { SubmissionState } from '../../submission/submission.reducers'; import { AuthService } from '../../core/auth/auth.service'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { NotificationOptions } from '../../shared/notifications/models/notification-options.model'; import { UploaderOptions } from '../../shared/uploader/uploader-options.model'; import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; import { NotificationType } from '../../shared/notifications/models/notification-type'; import { hasValue } from '../../shared/empty.util'; import { SearchResult } from '../../shared/search/search-result.model'; import { Router } from '@angular/router'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { CreateItemParentSelectorComponent } from 'src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component'; /** * This component represents the whole mydspace page header */ @Component({ selector: 'ds-my-dspace-new-submission', styleUrls: ['./my-dspace-new-submission.component.scss'], templateUrl: './my-dspace-new-submission.component.html' }) export class MyDSpaceNewSubmissionComponent implements OnDestroy, OnInit { /** * Output that emits the workspace item when the upload has completed */ @Output() uploadEnd = new EventEmitter>>(); /** * The UploaderOptions object */ public uploadFilesOptions: UploaderOptions = new UploaderOptions(); /** * Subscription to unsubscribe from */ private sub: Subscription; /** * Initialize instance variables * * @param {AuthService} authService * @param {ChangeDetectorRef} changeDetectorRef * @param {HALEndpointService} halService * @param {NotificationsService} notificationsService * @param {Store} store * @param {TranslateService} translate */ constructor(private authService: AuthService, private changeDetectorRef: ChangeDetectorRef, private halService: HALEndpointService, private notificationsService: NotificationsService, private store: Store, private translate: TranslateService, private router: Router, private modalService: NgbModal) { } /** * Initialize url and Bearer token */ ngOnInit() { this.sub = this.halService.getEndpoint('workspaceitems').pipe(first()).subscribe((url) => { this.uploadFilesOptions.url = url; this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); this.changeDetectorRef.detectChanges(); } ); } /** * Method called when file upload is completed to notify upload status */ public onCompleteItem(res) { if (res && res._embedded && res._embedded.workspaceitems && res._embedded.workspaceitems.length > 0) { const workspaceitems = res._embedded.workspaceitems; this.uploadEnd.emit(workspaceitems); if (workspaceitems.length === 1) { const options = new NotificationOptions(); options.timeOut = 0; const link = '/workspaceitems/' + workspaceitems[0].id + '/edit'; this.notificationsService.notificationWithAnchor( NotificationType.Success, options, link, 'mydspace.general.text-here', 'mydspace.upload.upload-successful', 'here'); } else if (workspaceitems.length > 1) { this.notificationsService.success(null, this.translate.get('mydspace.upload.upload-multiple-successful', {qty: workspaceitems.length})); } } else { this.notificationsService.error(null, this.translate.get('mydspace.upload.upload-failed')); } } /** * Method called on file upload error */ public onUploadError() { this.notificationsService.error(null, this.translate.get('mydspace.upload.upload-failed')); } /** * Method called on clicking the button "New Submition", It opens a dialog for * select a collection. */ openDialog() { this.modalService.open(CreateItemParentSelectorComponent); } /** * Unsubscribe from the subscription */ ngOnDestroy(): void { if (hasValue(this.sub)) { this.sub.unsubscribe(); } } }