From ba28b9831003f9090781addc03d50585e9f723ca Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Fri, 4 Oct 2024 13:30:42 +0200 Subject: [PATCH 1/9] Added share submission button into workspaceitem actions page. --- .../workspaceitem-actions.component.html | 11 +++++++++++ .../workspaceitem-actions.component.ts | 19 +++++++++++++++++-- src/assets/i18n/cs.json5 | 4 ++++ src/assets/i18n/en.json5 | 4 ++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html index 6e958c7a8bf..c106ff6a179 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html @@ -25,6 +25,17 @@ {{'submission.workflow.generic.delete' | translate}} + + diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts index 05afacf0daa..d6bd88cea3d 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts @@ -19,6 +19,9 @@ import { getFirstCompletedRemoteData, getRemoteDataPayload } from '../../../core import { RemoteData } from '../../../core/data/remote-data'; import { NoContent } from '../../../core/shared/NoContent.model'; import { getWorkspaceItemViewRoute } from '../../../workspaceitems-edit-page/workspaceitems-edit-page-routing-paths'; +import {GetRequest} from '../../../core/data/request.models'; +import {HALEndpointService} from '../../../core/shared/hal-endpoint.service'; +import {RemoteDataBuildService} from '../../../core/cache/builders/remote-data-build.service'; /** * This component represents actions related to WorkspaceItem object. @@ -46,8 +49,7 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent} - */ - canEditItem$: Observable; + */ canEditItem$: Observable; /** * Initialize instance variables @@ -69,6 +71,8 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent - + + {{'submission.workflow.generic.share-submission' | translate}} diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts index d6bd88cea3d..60953f6164b 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts @@ -38,6 +38,8 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent} @@ -138,5 +140,16 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent) => { + if (rd.hasSucceeded) { + this.notificationsService.success( + this.translate.instant('submission.workflow.share-submission.email.successful')); + } else { + this.notificationsService.error( + this.translate.instant('submission.workflow.share-submission.email.error')); + } + this.shareSubmissionSpinner = false; + }); } } diff --git a/src/assets/i18n/cs.json5 b/src/assets/i18n/cs.json5 index c8a25f51f0e..1f5d6609d8c 100644 --- a/src/assets/i18n/cs.json5 +++ b/src/assets/i18n/cs.json5 @@ -5146,6 +5146,10 @@ "submission.workflow.generic.share-submission": "Sdílet příspěvek", // "submission.workflow.generic.share-submission.tooltip": "Share submission", "submission.workflow.generic.share-submission.tooltip": "Sdílet příspěvek", + // "submission.workflow.share-submission.email.successful": "The email with the share link has been sent successfully", + "submission.workflow.share-submission.email.successful": "E-mail s odkazem na sdílení byl úspěšně odeslán", + // "submission.workflow.share-submission.email.error": "Cannot send the email with share link", + "submission.workflow.share-submission.email.error": "Nelze odeslat e-mail s odkazem na sdílení", // "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve": "Schválit", // "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 21567b66517..95561c2857d 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -5275,6 +5275,10 @@ "submission.workflow.generic.share-submission.tooltip": "Share submission", + "submission.workflow.share-submission.email.successful": "The email with the share link has been sent successfully", + + "submission.workflow.share-submission.email.error": "Cannot send the email with share link", + "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", From 50f4b0bd25eba4c6bb22b0bae2e51b093b7ee0e3 Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Fri, 4 Oct 2024 14:26:21 +0200 Subject: [PATCH 3/9] Created share submission module, page with routing. That page could access only the administrator. --- src/app/app-routing.module.ts | 5 ++++ .../share-submission-page.component.html | 5 ++++ .../share-submission-page.component.scss | 0 .../share-submission-page.component.spec.ts | 23 +++++++++++++++++++ .../share-submission-page.component.ts | 10 ++++++++ .../share-submission-routing.module.ts | 20 ++++++++++++++++ .../share-submission.module.ts | 19 +++++++++++++++ src/assets/i18n/cs.json5 | 2 ++ src/assets/i18n/en.json5 | 2 ++ 9 files changed, 86 insertions(+) create mode 100644 src/app/share-submission/share-submission-page/share-submission-page.component.html create mode 100644 src/app/share-submission/share-submission-page/share-submission-page.component.scss create mode 100644 src/app/share-submission/share-submission-page/share-submission-page.component.spec.ts create mode 100644 src/app/share-submission/share-submission-page/share-submission-page.component.ts create mode 100644 src/app/share-submission/share-submission-page/share-submission-routing.module.ts create mode 100644 src/app/share-submission/share-submission.module.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 967cc55d9bc..0c02926c3f7 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -265,6 +265,11 @@ import { STATIC_PAGE_PATH } from './static-page/static-page-routing-paths'; path: STATIC_PAGE_PATH, loadChildren: () => import('./static-page/static-page.module').then((m) => m.StaticPageModule), }, + { + path: 'share-submission', + loadChildren: () => import('./share-submission/share-submission.module').then((m) => m.ShareSubmissionModule), + canActivate: [AuthenticatedGuard, EndUserAgreementCurrentUserGuard] + }, { path: '**', pathMatch: 'full', component: ThemedPageNotFoundComponent } ] } diff --git a/src/app/share-submission/share-submission-page/share-submission-page.component.html b/src/app/share-submission/share-submission-page/share-submission-page.component.html new file mode 100644 index 00000000000..93bb1d7159f --- /dev/null +++ b/src/app/share-submission/share-submission-page/share-submission-page.component.html @@ -0,0 +1,5 @@ +
+ +
+ + diff --git a/src/app/share-submission/share-submission-page/share-submission-page.component.scss b/src/app/share-submission/share-submission-page/share-submission-page.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/share-submission/share-submission-page/share-submission-page.component.spec.ts b/src/app/share-submission/share-submission-page/share-submission-page.component.spec.ts new file mode 100644 index 00000000000..286b1488bef --- /dev/null +++ b/src/app/share-submission/share-submission-page/share-submission-page.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ShareSubmissionPageComponent } from './share-submission-page.component'; + +describe('ShareSubmissionPageComponent', () => { + let component: ShareSubmissionPageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ShareSubmissionPageComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ShareSubmissionPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/share-submission/share-submission-page/share-submission-page.component.ts b/src/app/share-submission/share-submission-page/share-submission-page.component.ts new file mode 100644 index 00000000000..3142d65a862 --- /dev/null +++ b/src/app/share-submission/share-submission-page/share-submission-page.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'ds-share-submission-page', + templateUrl: './share-submission-page.component.html', + styleUrls: ['./share-submission-page.component.scss'] +}) +export class ShareSubmissionPageComponent { + +} diff --git a/src/app/share-submission/share-submission-page/share-submission-routing.module.ts b/src/app/share-submission/share-submission-page/share-submission-routing.module.ts new file mode 100644 index 00000000000..2751fa4e91c --- /dev/null +++ b/src/app/share-submission/share-submission-page/share-submission-routing.module.ts @@ -0,0 +1,20 @@ +import { RouterModule, Routes } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { ShareSubmissionPageComponent } from './share-submission-page.component'; +import { I18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver'; + +const routes: Routes = [ + { path: '', + component: ShareSubmissionPageComponent, + resolve: { breadcrumb: I18nBreadcrumbResolver }, + data: { + breadcrumbKey: 'share.submission', + }, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class ShareSubmissionPageModule { } diff --git a/src/app/share-submission/share-submission.module.ts b/src/app/share-submission/share-submission.module.ts new file mode 100644 index 00000000000..743022c5483 --- /dev/null +++ b/src/app/share-submission/share-submission.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ShareSubmissionPageComponent } from './share-submission-page/share-submission-page.component'; +import { SharedModule } from '../shared/shared.module'; +import { ShareSubmissionPageModule } from './share-submission-page/share-submission-routing.module'; + + + +@NgModule({ + declarations: [ + ShareSubmissionPageComponent + ], + imports: [ + CommonModule, + ShareSubmissionPageModule, + SharedModule, + ] +}) +export class ShareSubmissionModule { } diff --git a/src/assets/i18n/cs.json5 b/src/assets/i18n/cs.json5 index 1f5d6609d8c..e4c1f6c35d0 100644 --- a/src/assets/i18n/cs.json5 +++ b/src/assets/i18n/cs.json5 @@ -5740,4 +5740,6 @@ "navbar.about.service-integrations": "Integrace služeb", // "navbar.about.project-partnership": "Project partnerships" "navbar.about.project-partnership": "Projektové partnerství", + // "share.submission.breadcrumbs": "Share submission" + "share.submission.breadcrumbs": "Sdílení příspěvku", } diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 95561c2857d..03f8ace175c 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -5939,4 +5939,6 @@ "navbar.about.service-integrations": "Service integrations", "navbar.about.project-partnership": "Project partnerships", + + "share.submission.breadcrumbs": "Share submission", } From 255e13df5a1b23dda6283cffb66948d36ad053e6 Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Fri, 4 Oct 2024 17:04:44 +0200 Subject: [PATCH 4/9] WIP - created a new page `change-submitter-page`. --- .../change-submitter-page.component.html | 7 ++++ .../change-submitter-page.component.scss | 0 .../change-submitter-page.component.spec.ts | 23 ++++++++++++ .../change-submitter-page.component.ts | 37 +++++++++++++++++++ .../share-submission-page.component.html | 9 +++-- .../share-submission-page.component.ts | 21 +++++++++++ .../share-submission-routing.module.ts | 8 ++++ .../share-submission.module.ts | 4 +- .../workspaceitem-actions.component.ts | 9 ++++- src/assets/i18n/cs.json5 | 8 ++++ src/assets/i18n/en.json5 | 14 +++++++ 11 files changed, 134 insertions(+), 6 deletions(-) create mode 100644 src/app/change-submitter-page/change-submitter-page.component.html create mode 100644 src/app/change-submitter-page/change-submitter-page.component.scss create mode 100644 src/app/change-submitter-page/change-submitter-page.component.spec.ts create mode 100644 src/app/change-submitter-page/change-submitter-page.component.ts diff --git a/src/app/change-submitter-page/change-submitter-page.component.html b/src/app/change-submitter-page/change-submitter-page.component.html new file mode 100644 index 00000000000..4a2a715eac3 --- /dev/null +++ b/src/app/change-submitter-page/change-submitter-page.component.html @@ -0,0 +1,7 @@ +
+

{{'share.submission.page.title' | translate}}

+ {{'change.submitter.page.message' | translate}} + +
+ + diff --git a/src/app/change-submitter-page/change-submitter-page.component.scss b/src/app/change-submitter-page/change-submitter-page.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/change-submitter-page/change-submitter-page.component.spec.ts b/src/app/change-submitter-page/change-submitter-page.component.spec.ts new file mode 100644 index 00000000000..ca8ef63f2cb --- /dev/null +++ b/src/app/change-submitter-page/change-submitter-page.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ChangeSubmitterPageComponent } from './change-submitter-page.component'; + +describe('ChangeSubmitterPageComponent', () => { + let component: ChangeSubmitterPageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ChangeSubmitterPageComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ChangeSubmitterPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/change-submitter-page/change-submitter-page.component.ts b/src/app/change-submitter-page/change-submitter-page.component.ts new file mode 100644 index 00000000000..a3c117ac981 --- /dev/null +++ b/src/app/change-submitter-page/change-submitter-page.component.ts @@ -0,0 +1,37 @@ +import {Component, OnInit} from '@angular/core'; +import {Observable} from 'rxjs'; +import {WorkspaceItem} from '../core/submission/models/workspaceitem.model'; +import {RequestParam} from '../core/cache/models/request-param.model'; +import {getFirstSucceededRemoteListPayload} from '../core/shared/operators'; +import {map} from 'rxjs/operators'; +import {WorkspaceitemDataService} from '../core/submission/workspaceitem-data.service'; +import {ActivatedRoute, Router} from '@angular/router'; +import {followLink} from '../shared/utils/follow-link-config.model'; + +@Component({ + selector: 'ds-change-submitter-page', + templateUrl: './change-submitter-page.component.html', + styleUrls: ['./change-submitter-page.component.scss'] +}) +export class ChangeSubmitterPageComponent implements OnInit { + + constructor(private workspaceItemService: WorkspaceitemDataService, + private route: ActivatedRoute, + private router: Router) {} + + ngOnInit(): void { + // Load `share_token` param value from the url + let shareToken = this.route.snapshot.queryParams.share_token; + this.findWorkspaceItemByShareToken(shareToken).subscribe((workspaceItem: WorkspaceItem) => { + console.log('workspaceItem', workspaceItem); + }); + } + + findWorkspaceItemByShareToken(shareToken: string): Observable { + return this.workspaceItemService.searchBy('shareToken', { + searchParams: [Object.assign(new RequestParam('shareToken', shareToken))] + }, false, false, followLink('submitter')) + .pipe(getFirstSucceededRemoteListPayload(), + map((workspaceItems: WorkspaceItem[]) => workspaceItems?.[0])); + } +} diff --git a/src/app/share-submission/share-submission-page/share-submission-page.component.html b/src/app/share-submission/share-submission-page/share-submission-page.component.html index 93bb1d7159f..cb6d4b6663e 100644 --- a/src/app/share-submission/share-submission-page/share-submission-page.component.html +++ b/src/app/share-submission/share-submission-page/share-submission-page.component.html @@ -1,5 +1,6 @@ -
- +
+

{{'share.submission.page.title' | translate}}

+ {{'share.submission.page.share-link.message.start' | translate}} + {{changeSubmitterLink}} + {{'share.submission.page.share-link.message.end' | translate}}
- - diff --git a/src/app/share-submission/share-submission-page/share-submission-page.component.ts b/src/app/share-submission/share-submission-page/share-submission-page.component.ts index 3142d65a862..a7d18f22571 100644 --- a/src/app/share-submission/share-submission-page/share-submission-page.component.ts +++ b/src/app/share-submission/share-submission-page/share-submission-page.component.ts @@ -1,4 +1,11 @@ import { Component } from '@angular/core'; +import { Observable } from 'rxjs'; +import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model'; +import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service'; +import { RequestParam } from '../../core/cache/models/request-param.model'; +import { map } from 'rxjs/operators'; +import { getFirstSucceededRemoteListPayload } from '../../core/shared/operators'; +import { ActivatedRoute, Router } from '@angular/router'; @Component({ selector: 'ds-share-submission-page', @@ -7,4 +14,18 @@ import { Component } from '@angular/core'; }) export class ShareSubmissionPageComponent { + changeSubmitterLink: string; + + constructor(private workspaceItemService: WorkspaceitemDataService, + private route: ActivatedRoute, + private router: Router) {} + + ngOnInit(): void { + // Load `share-token` param value from the url + this.changeSubmitterLink = this.route.snapshot.queryParams.changeSubmitterLink; + } + // + // findWorkspaceItemById(id: number) { + // + // } } diff --git a/src/app/share-submission/share-submission-page/share-submission-routing.module.ts b/src/app/share-submission/share-submission-page/share-submission-routing.module.ts index 2751fa4e91c..9a70a406168 100644 --- a/src/app/share-submission/share-submission-page/share-submission-routing.module.ts +++ b/src/app/share-submission/share-submission-page/share-submission-routing.module.ts @@ -2,6 +2,7 @@ import { RouterModule, Routes } from '@angular/router'; import { NgModule } from '@angular/core'; import { ShareSubmissionPageComponent } from './share-submission-page.component'; import { I18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver'; +import {ChangeSubmitterPageComponent} from '../../change-submitter-page/change-submitter-page.component'; const routes: Routes = [ { path: '', @@ -11,6 +12,13 @@ const routes: Routes = [ breadcrumbKey: 'share.submission', }, }, + { path: 'change-submitter', + component: ChangeSubmitterPageComponent, + resolve: { breadcrumb: I18nBreadcrumbResolver }, + data: { + breadcrumbKey: 'change.submitter', + }, + }, ]; @NgModule({ diff --git a/src/app/share-submission/share-submission.module.ts b/src/app/share-submission/share-submission.module.ts index 743022c5483..7e73f7469a4 100644 --- a/src/app/share-submission/share-submission.module.ts +++ b/src/app/share-submission/share-submission.module.ts @@ -3,12 +3,14 @@ import { CommonModule } from '@angular/common'; import { ShareSubmissionPageComponent } from './share-submission-page/share-submission-page.component'; import { SharedModule } from '../shared/shared.module'; import { ShareSubmissionPageModule } from './share-submission-page/share-submission-routing.module'; +import { ChangeSubmitterPageComponent } from '../change-submitter-page/change-submitter-page.component'; @NgModule({ declarations: [ - ShareSubmissionPageComponent + ShareSubmissionPageComponent, + ChangeSubmitterPageComponent ], imports: [ CommonModule, diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts index 60953f6164b..3924d07d5fe 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts @@ -141,10 +141,13 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent) => { + response.pipe(getFirstCompletedRemoteData()).subscribe((rd: RemoteData) => { if (rd.hasSucceeded) { this.notificationsService.success( this.translate.instant('submission.workflow.share-submission.email.successful')); + void this.router.navigate(['/share-submission'], { queryParams: { + changeSubmitterLink: rd.payload?.shareLink + }}); } else { this.notificationsService.error( this.translate.instant('submission.workflow.share-submission.email.error')); @@ -153,3 +156,7 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent Date: Mon, 7 Oct 2024 13:30:58 +0200 Subject: [PATCH 5/9] Created page when the user could take the workspace item as its own. --- .../change-submitter-page.component.html | 13 +- .../change-submitter-page.component.ts | 134 ++++++++++++++++-- src/assets/i18n/cs.json5 | 10 ++ src/assets/i18n/en.json5 | 5 + 4 files changed, 151 insertions(+), 11 deletions(-) diff --git a/src/app/change-submitter-page/change-submitter-page.component.html b/src/app/change-submitter-page/change-submitter-page.component.html index 4a2a715eac3..1c9a9b3d7af 100644 --- a/src/app/change-submitter-page/change-submitter-page.component.html +++ b/src/app/change-submitter-page/change-submitter-page.component.html @@ -1,7 +1,16 @@ -
+

{{'share.submission.page.title' | translate}}

{{'change.submitter.page.message' | translate}} - + {{getSubmitterName(sub)}} + ({{sub?.email}}) +
+ +
diff --git a/src/app/change-submitter-page/change-submitter-page.component.ts b/src/app/change-submitter-page/change-submitter-page.component.ts index a3c117ac981..55b5fbc8669 100644 --- a/src/app/change-submitter-page/change-submitter-page.component.ts +++ b/src/app/change-submitter-page/change-submitter-page.component.ts @@ -1,12 +1,26 @@ import {Component, OnInit} from '@angular/core'; -import {Observable} from 'rxjs'; +import {BehaviorSubject, Observable} from 'rxjs'; import {WorkspaceItem} from '../core/submission/models/workspaceitem.model'; import {RequestParam} from '../core/cache/models/request-param.model'; -import {getFirstSucceededRemoteListPayload} from '../core/shared/operators'; +import { + getFirstCompletedRemoteData, + getFirstSucceededRemoteDataPayload, + getFirstSucceededRemoteListPayload +} from '../core/shared/operators'; import {map} from 'rxjs/operators'; import {WorkspaceitemDataService} from '../core/submission/workspaceitem-data.service'; -import {ActivatedRoute, Router} from '@angular/router'; +import {ActivatedRoute} from '@angular/router'; import {followLink} from '../shared/utils/follow-link-config.model'; +import {EPerson} from '../core/eperson/models/eperson.model'; +import {DSONameService} from '../core/breadcrumbs/dso-name.service'; +import {isNullOrUndef} from 'chart.js/helpers'; +import {HALEndpointService} from '../core/shared/hal-endpoint.service'; +import {RemoteDataBuildService} from '../core/cache/builders/remote-data-build.service'; +import {RequestService} from '../core/data/request.service'; +import {PostRequest} from '../core/data/request.models'; +import {RemoteData} from '../core/data/remote-data'; +import {NotificationsService} from '../shared/notifications/notifications.service'; +import {TranslateService} from '@ngx-translate/core'; @Component({ selector: 'ds-change-submitter-page', @@ -15,23 +29,125 @@ import {followLink} from '../shared/utils/follow-link-config.model'; }) export class ChangeSubmitterPageComponent implements OnInit { + /** + * Share token from the url. This token is used to retrieve the WorkspaceItem. + */ + private shareToken = ''; + + /** + * BehaviorSubject that contains the submitter of the WorkspaceItem. + */ + submitter: BehaviorSubject = new BehaviorSubject(null); + + /** + * BehaviorSubject that contains the WorkspaceItem. + */ + workspaceItem: BehaviorSubject = new BehaviorSubject(null); + + /** + * Boolean that indicates if the spinner should be shown when the submitter is being changed. + */ + changeSubmitterSpinner = false; + constructor(private workspaceItemService: WorkspaceitemDataService, private route: ActivatedRoute, - private router: Router) {} + public dsoNameService: DSONameService, + protected halService: HALEndpointService, + protected rdbService: RemoteDataBuildService, + protected requestService: RequestService, + protected notificationsService: NotificationsService, + protected translate: TranslateService) {} ngOnInit(): void { // Load `share_token` param value from the url - let shareToken = this.route.snapshot.queryParams.share_token; - this.findWorkspaceItemByShareToken(shareToken).subscribe((workspaceItem: WorkspaceItem) => { - console.log('workspaceItem', workspaceItem); + this.shareToken = this.route.snapshot.queryParams.share_token; + this.loadWorkspaceItemAndAssignSubmitter(this.shareToken); + } + + /** + * Load the WorkspaceItem using the shareToken and assign the submitter from the retrieved WorkspaceItem. + */ + loadWorkspaceItemAndAssignSubmitter(shareToken: string) { + this.findWorkspaceItemByShareToken(shareToken)?.subscribe((workspaceItem: WorkspaceItem) => { + this.workspaceItem.next(workspaceItem); + this.loadAndAssignSubmitter(workspaceItem); }); } + /** + * Find a WorkspaceItem by its shareToken. + */ findWorkspaceItemByShareToken(shareToken: string): Observable { return this.workspaceItemService.searchBy('shareToken', { searchParams: [Object.assign(new RequestParam('shareToken', shareToken))] - }, false, false, followLink('submitter')) - .pipe(getFirstSucceededRemoteListPayload(), + }, false, false, followLink('submitter')).pipe(getFirstSucceededRemoteListPayload(), map((workspaceItems: WorkspaceItem[]) => workspaceItems?.[0])); } + + /** + * Load the submitter from the WorkspaceItem and assign it to the submitter BehaviorSubject. + */ + loadAndAssignSubmitter(workspaceItem: WorkspaceItem) { + if (isNullOrUndef(workspaceItem)) { + console.error('Cannot load submitter because WorkspaceItem is null or undefined'); + return; + } + + if (workspaceItem.submitter instanceof Observable) { + console.log('Loading submitter from observable', workspaceItem); + workspaceItem.submitter + .pipe(getFirstSucceededRemoteDataPayload()) + .subscribe((submitter: any) => { + this.assignSubmitter(submitter); + }); + } else { + this.assignSubmitter(workspaceItem.submitter); + } + } + + /** + * Assign a new submitter to the submitter BehaviorSubject. + */ + assignSubmitter(eperson: EPerson) { + this.submitter.next(eperson); + } + + /** + * Get the name of the submitter using the DSONameService. + * @param submitter + */ + getSubmitterName(submitter: EPerson): string { + if (isNullOrUndef(submitter)) { + return ''; + } + return this.dsoNameService.getName(submitter); + } + + /** + * Change the submitter of the WorkspaceItem using the shareToken. This will send a POST request to the backend when + * the submitter of the Item is changed. + */ + changeSubmitter() { + const requestId = this.requestService.generateRequestId(); + + const url = this.halService.getRootHref() + '/submission/setOwner?shareToken=' + this.shareToken; + const postRequest = new PostRequest(requestId, url); + // Send GET request + this.requestService.send(postRequest); + this.changeSubmitterSpinner = true; + // Get response + const response = this.rdbService.buildFromRequestUUID(requestId); + response.pipe(getFirstCompletedRemoteData()).subscribe((rd: RemoteData) => { + if (rd.hasSucceeded) { + this.notificationsService.success( + this.translate.instant('change.submitter.page.changed-successfully')); + // Update the submitter + this.loadWorkspaceItemAndAssignSubmitter(this.shareToken); + } else { + this.notificationsService.error( + this.translate.instant('change.submitter.page.changed-error')); + } + this.changeSubmitterSpinner = false; + }); + } } diff --git a/src/assets/i18n/cs.json5 b/src/assets/i18n/cs.json5 index 57bcc311e69..07e8e72efc6 100644 --- a/src/assets/i18n/cs.json5 +++ b/src/assets/i18n/cs.json5 @@ -5750,4 +5750,14 @@ "share.submission.page.share-link.message.end": ". Odkaz vám také přijde e-mailem (v angličtině).", // "change.submitter.breadcrumbs": "Change submitter", "change.submitter.breadcrumbs": "Změna předkladatele", + // "change.submitter.page.title": "Change submitter", + "change.submitter.page.title": "Změna předkladatele", + // "change.submitter.page.message": "This items currently belongs to: ", + "change.submitter.page.message": "Tato položka nyní patří: ", + // "change.submitter.page.button.take-it": "Take it", + "change.submitter.page.button.take-it": "Převzít", + // "change.submitter.page.changed-successfully": "The submitter has been successfully changed", + "change.submitter.page.changed-successfully": "Předkladatel byl úspěšně změněn", + // "change.submitter.page.changed-error": "An error occurred while changing the submitter", + "change.submitter.page.changed-error": "Při změně předkladatele došlo k chybě", } diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index bf7c2f66058..bb407e16c0e 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -5954,5 +5954,10 @@ "change.submitter.page.message": "This items currently belongs to: ", + "change.submitter.page.button.take-it": "Take it", + + "change.submitter.page.changed-successfully": "The submitter has been successfully changed", + + "change.submitter.page.changed-error": "An error occurred while changing the submitter", } From 63a0efb8035a948322fbe8b5feb1a4b8e6b38ae4 Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Mon, 7 Oct 2024 14:11:08 +0200 Subject: [PATCH 6/9] Pretified the code and added some docs --- .../change-submitter-page.component.scss | 3 ++ .../change-submitter-page.component.ts | 36 +++++++++---------- .../share-submission-page.component.scss | 3 ++ .../share-submission-page.component.ts | 20 ++++------- .../share-submission-routing.module.ts | 2 +- .../workspaceitem-actions.component.ts | 21 +++++++++-- 6 files changed, 49 insertions(+), 36 deletions(-) diff --git a/src/app/change-submitter-page/change-submitter-page.component.scss b/src/app/change-submitter-page/change-submitter-page.component.scss index e69de29bb2d..46dea8e2a2a 100644 --- a/src/app/change-submitter-page/change-submitter-page.component.scss +++ b/src/app/change-submitter-page/change-submitter-page.component.scss @@ -0,0 +1,3 @@ +/** +The file for styling the ChangeSubmitterPageComponent. + */ diff --git a/src/app/change-submitter-page/change-submitter-page.component.ts b/src/app/change-submitter-page/change-submitter-page.component.ts index 55b5fbc8669..c220cb3eb8d 100644 --- a/src/app/change-submitter-page/change-submitter-page.component.ts +++ b/src/app/change-submitter-page/change-submitter-page.component.ts @@ -1,26 +1,26 @@ -import {Component, OnInit} from '@angular/core'; -import {BehaviorSubject, Observable} from 'rxjs'; -import {WorkspaceItem} from '../core/submission/models/workspaceitem.model'; -import {RequestParam} from '../core/cache/models/request-param.model'; +import { Component, OnInit } from '@angular/core'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { WorkspaceItem } from '../core/submission/models/workspaceitem.model'; +import { RequestParam } from '../core/cache/models/request-param.model'; import { getFirstCompletedRemoteData, getFirstSucceededRemoteDataPayload, getFirstSucceededRemoteListPayload } from '../core/shared/operators'; -import {map} from 'rxjs/operators'; -import {WorkspaceitemDataService} from '../core/submission/workspaceitem-data.service'; -import {ActivatedRoute} from '@angular/router'; -import {followLink} from '../shared/utils/follow-link-config.model'; -import {EPerson} from '../core/eperson/models/eperson.model'; -import {DSONameService} from '../core/breadcrumbs/dso-name.service'; -import {isNullOrUndef} from 'chart.js/helpers'; -import {HALEndpointService} from '../core/shared/hal-endpoint.service'; -import {RemoteDataBuildService} from '../core/cache/builders/remote-data-build.service'; -import {RequestService} from '../core/data/request.service'; -import {PostRequest} from '../core/data/request.models'; -import {RemoteData} from '../core/data/remote-data'; -import {NotificationsService} from '../shared/notifications/notifications.service'; -import {TranslateService} from '@ngx-translate/core'; +import { map } from 'rxjs/operators'; +import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service'; +import { ActivatedRoute } from '@angular/router'; +import { followLink } from '../shared/utils/follow-link-config.model'; +import { EPerson } from '../core/eperson/models/eperson.model'; +import { DSONameService } from '../core/breadcrumbs/dso-name.service'; +import { isNullOrUndef } from 'chart.js/helpers'; +import { HALEndpointService } from '../core/shared/hal-endpoint.service'; +import { RemoteDataBuildService } from '../core/cache/builders/remote-data-build.service'; +import { RequestService } from '../core/data/request.service'; +import { PostRequest } from '../core/data/request.models'; +import { RemoteData } from '../core/data/remote-data'; +import { NotificationsService } from '../shared/notifications/notifications.service'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'ds-change-submitter-page', diff --git a/src/app/share-submission/share-submission-page/share-submission-page.component.scss b/src/app/share-submission/share-submission-page/share-submission-page.component.scss index e69de29bb2d..7fd1808a33f 100644 --- a/src/app/share-submission/share-submission-page/share-submission-page.component.scss +++ b/src/app/share-submission/share-submission-page/share-submission-page.component.scss @@ -0,0 +1,3 @@ +/** +The file for styling the ShareSubmissionPageComponent. + */ diff --git a/src/app/share-submission/share-submission-page/share-submission-page.component.ts b/src/app/share-submission/share-submission-page/share-submission-page.component.ts index a7d18f22571..0c230c93796 100644 --- a/src/app/share-submission/share-submission-page/share-submission-page.component.ts +++ b/src/app/share-submission/share-submission-page/share-submission-page.component.ts @@ -1,11 +1,5 @@ import { Component } from '@angular/core'; -import { Observable } from 'rxjs'; -import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model'; -import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service'; -import { RequestParam } from '../../core/cache/models/request-param.model'; -import { map } from 'rxjs/operators'; -import { getFirstSucceededRemoteListPayload } from '../../core/shared/operators'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute } from '@angular/router'; @Component({ selector: 'ds-share-submission-page', @@ -14,18 +8,16 @@ import { ActivatedRoute, Router } from '@angular/router'; }) export class ShareSubmissionPageComponent { + /** + * Share token from the url. This token is used to retrieve the WorkspaceItem. + * With this link, the submitter can be changed. + */ changeSubmitterLink: string; - constructor(private workspaceItemService: WorkspaceitemDataService, - private route: ActivatedRoute, - private router: Router) {} + constructor(private route: ActivatedRoute) {} ngOnInit(): void { // Load `share-token` param value from the url this.changeSubmitterLink = this.route.snapshot.queryParams.changeSubmitterLink; } - // - // findWorkspaceItemById(id: number) { - // - // } } diff --git a/src/app/share-submission/share-submission-page/share-submission-routing.module.ts b/src/app/share-submission/share-submission-page/share-submission-routing.module.ts index 9a70a406168..b590ef38d24 100644 --- a/src/app/share-submission/share-submission-page/share-submission-routing.module.ts +++ b/src/app/share-submission/share-submission-page/share-submission-routing.module.ts @@ -2,7 +2,7 @@ import { RouterModule, Routes } from '@angular/router'; import { NgModule } from '@angular/core'; import { ShareSubmissionPageComponent } from './share-submission-page.component'; import { I18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver'; -import {ChangeSubmitterPageComponent} from '../../change-submitter-page/change-submitter-page.component'; +import { ChangeSubmitterPageComponent } from '../../change-submitter-page/change-submitter-page.component'; const routes: Routes = [ { path: '', diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts index 3924d07d5fe..916195e27cd 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts @@ -19,9 +19,9 @@ import { getFirstCompletedRemoteData, getRemoteDataPayload } from '../../../core import { RemoteData } from '../../../core/data/remote-data'; import { NoContent } from '../../../core/shared/NoContent.model'; import { getWorkspaceItemViewRoute } from '../../../workspaceitems-edit-page/workspaceitems-edit-page-routing-paths'; -import {GetRequest} from '../../../core/data/request.models'; -import {HALEndpointService} from '../../../core/shared/hal-endpoint.service'; -import {RemoteDataBuildService} from '../../../core/cache/builders/remote-data-build.service'; +import { GetRequest } from '../../../core/data/request.models'; +import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; +import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; /** * This component represents actions related to WorkspaceItem object. @@ -38,6 +38,9 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent) => { + // If the request has succeeded if (rd.hasSucceeded) { + // Show success notification this.notificationsService.success( this.translate.instant('submission.workflow.share-submission.email.successful')); + // Redirect to share-submission page void this.router.navigate(['/share-submission'], { queryParams: { changeSubmitterLink: rd.payload?.shareLink }}); } else { + // Show error notification this.notificationsService.error( this.translate.instant('submission.workflow.share-submission.email.error')); } @@ -157,6 +169,9 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent Date: Mon, 7 Oct 2024 14:35:19 +0200 Subject: [PATCH 7/9] Updated tests following the new feature --- .../change-submitter-page.component.spec.ts | 53 ++++++++++++++++++- .../share-submission-page.component.spec.ts | 19 ++++++- .../workspaceitem-actions.component.spec.ts | 11 ++++ 3 files changed, 80 insertions(+), 3 deletions(-) diff --git a/src/app/change-submitter-page/change-submitter-page.component.spec.ts b/src/app/change-submitter-page/change-submitter-page.component.spec.ts index ca8ef63f2cb..1e1e18351b2 100644 --- a/src/app/change-submitter-page/change-submitter-page.component.spec.ts +++ b/src/app/change-submitter-page/change-submitter-page.component.spec.ts @@ -1,14 +1,63 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { ChangeSubmitterPageComponent } from './change-submitter-page.component'; +import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { HALEndpointService } from '../core/shared/hal-endpoint.service'; +import { RemoteDataBuildService } from '../core/cache/builders/remote-data-build.service'; +import { RequestService } from '../core/data/request.service'; +import { NotificationsService } from '../shared/notifications/notifications.service'; +import { TranslateModule } from '@ngx-translate/core'; +import { NotificationsServiceStub } from '../shared/testing/notifications-service.stub'; +import { RouterStub } from '../shared/testing/router.stub'; +import { of as observableOf } from 'rxjs'; +import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; +import { getMockRequestService } from '../shared/mocks/request.service.mock'; +import { createPaginatedList } from '../shared/testing/utils.test'; +import { HALEndpointServiceStub } from '../shared/testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../shared/mocks/remote-data-build.service.mock'; +import { DSONameService } from '../core/breadcrumbs/dso-name.service'; +import { DSONameServiceMock } from '../shared/mocks/dso-name.service.mock'; describe('ChangeSubmitterPageComponent', () => { let component: ChangeSubmitterPageComponent; let fixture: ComponentFixture; + let activatedRoute; + let requestService: RequestService; + let mockDataService: WorkspaceitemDataService; + let halService: HALEndpointService; + let rdbService: RemoteDataBuildService; + beforeEach(async () => { + activatedRoute = { + snapshot: { + queryParams: new Map([ + ['shareToken', 'fake-share-token'], + ]) + } + }; + requestService = getMockRequestService(); + mockDataService = jasmine.createSpyObj('WorkspaceitemDataService', { + searchBy: observableOf(createSuccessfulRemoteDataObject$(createPaginatedList([]))), + }); + halService = Object.assign(new HALEndpointServiceStub('some-url')); + rdbService = getMockRemoteDataBuildService(); + await TestBed.configureTestingModule({ - declarations: [ ChangeSubmitterPageComponent ] + declarations: [ ChangeSubmitterPageComponent ], + imports: [ + TranslateModule.forRoot() + ], + providers: [ + { provide: ActivatedRoute, useValue: activatedRoute }, + { provide: NotificationsService, useValue: new NotificationsServiceStub() }, + { provide: Router, useValue: new RouterStub() }, + { provide: RequestService, useValue: requestService }, + { provide: WorkspaceitemDataService, useValue: mockDataService }, + { provide: HALEndpointService, useValue: halService }, + { provide: RemoteDataBuildService, useValue: rdbService }, + { provide: DSONameService, useValue: DSONameServiceMock }, + ] }) .compileComponents(); diff --git a/src/app/share-submission/share-submission-page/share-submission-page.component.spec.ts b/src/app/share-submission/share-submission-page/share-submission-page.component.spec.ts index 286b1488bef..04a1ca32bc5 100644 --- a/src/app/share-submission/share-submission-page/share-submission-page.component.spec.ts +++ b/src/app/share-submission/share-submission-page/share-submission-page.component.spec.ts @@ -1,14 +1,31 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ShareSubmissionPageComponent } from './share-submission-page.component'; +import { ActivatedRoute } from '@angular/router'; +import { TranslateModule } from '@ngx-translate/core'; describe('ShareSubmissionPageComponent', () => { let component: ShareSubmissionPageComponent; let fixture: ComponentFixture; + let activatedRoute; beforeEach(async () => { + activatedRoute = { + snapshot: { + queryParams: new Map([ + ['shareToken', 'fake-share-token'], + ]) + } + }; + await TestBed.configureTestingModule({ - declarations: [ ShareSubmissionPageComponent ] + declarations: [ ShareSubmissionPageComponent ], + imports: [ + TranslateModule.forRoot() + ], + providers: [ + { provide: ActivatedRoute, useValue: activatedRoute } + ] }) .compileComponents(); diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts index c76cce3982b..a22774748bf 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts @@ -27,6 +27,10 @@ import { getMockSearchService } from '../../mocks/search-service.mock'; import { SearchService } from '../../../core/shared/search/search.service'; import { AuthService } from '../../../core/auth/auth.service'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; +import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; +import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; +import { HALEndpointServiceStub } from '../../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../../mocks/remote-data-build.service.mock'; let component: WorkspaceitemActionsComponent; let fixture: ComponentFixture; @@ -35,6 +39,8 @@ let mockObject: WorkspaceItem; let notificationsServiceStub: NotificationsServiceStub; let authorizationService; let authService; +let halService: HALEndpointService; +let rdbService: RemoteDataBuildService; const mockDataService = jasmine.createSpyObj('WorkspaceitemDataService', { delete: jasmine.createSpy('delete') @@ -155,6 +161,9 @@ authService = jasmine.createSpyObj('authService', { getAuthenticatedUserFromStore: jasmine.createSpy('getAuthenticatedUserFromStore') }); +halService = Object.assign(new HALEndpointServiceStub('url')); +rdbService = getMockRemoteDataBuildService(); + describe('WorkspaceitemActionsComponent', () => { beforeEach(waitForAsync(async () => { authorizationService = jasmine.createSpyObj('authorizationService', { @@ -180,6 +189,8 @@ describe('WorkspaceitemActionsComponent', () => { { provide: RequestService, useValue: requestServce }, { provide: AuthService, useValue: authService }, { provide: AuthorizationDataService, useValue: authorizationService}, + { provide: HALEndpointService, useValue: halService }, + { provide: RemoteDataBuildService, useValue: rdbService }, NgbModal ], schemas: [NO_ERRORS_SCHEMA] From db8ce27629211fbfd14fa41f9dd832c85aa813e3 Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Mon, 7 Oct 2024 14:36:51 +0200 Subject: [PATCH 8/9] Pretified the code --- src/app/share-submission/share-submission.module.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app/share-submission/share-submission.module.ts b/src/app/share-submission/share-submission.module.ts index 7e73f7469a4..debb292dc73 100644 --- a/src/app/share-submission/share-submission.module.ts +++ b/src/app/share-submission/share-submission.module.ts @@ -5,8 +5,6 @@ import { SharedModule } from '../shared/shared.module'; import { ShareSubmissionPageModule } from './share-submission-page/share-submission-routing.module'; import { ChangeSubmitterPageComponent } from '../change-submitter-page/change-submitter-page.component'; - - @NgModule({ declarations: [ ShareSubmissionPageComponent, From 666d5537e78ebcf52c3ad573bde31b438418031e Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Fri, 11 Oct 2024 15:31:36 +0200 Subject: [PATCH 9/9] Fixed unwanted changes, updated docs --- .../change-submitter-page/change-submitter-page.component.ts | 3 +-- .../workspaceitem/workspaceitem-actions.component.ts | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/change-submitter-page/change-submitter-page.component.ts b/src/app/change-submitter-page/change-submitter-page.component.ts index c220cb3eb8d..cf84c9f86ba 100644 --- a/src/app/change-submitter-page/change-submitter-page.component.ts +++ b/src/app/change-submitter-page/change-submitter-page.component.ts @@ -94,7 +94,6 @@ export class ChangeSubmitterPageComponent implements OnInit { } if (workspaceItem.submitter instanceof Observable) { - console.log('Loading submitter from observable', workspaceItem); workspaceItem.submitter .pipe(getFirstSucceededRemoteDataPayload()) .subscribe((submitter: any) => { @@ -132,7 +131,7 @@ export class ChangeSubmitterPageComponent implements OnInit { const url = this.halService.getRootHref() + '/submission/setOwner?shareToken=' + this.shareToken; const postRequest = new PostRequest(requestId, url); - // Send GET request + // Send POST request this.requestService.send(postRequest); this.changeSubmitterSpinner = true; // Get response diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts index 916195e27cd..3be989a6aa0 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts @@ -54,7 +54,8 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent} - */ canEditItem$: Observable; + */ + canEditItem$: Observable; /** * Initialize instance variables