-
-
-
-
-
-
-
-
- {{version.version}}
-
-
- {{version.version}}
-
- *
-
-
- {{ "item.version.history.table.workspaceItem" | translate }}
-
-
-
- {{ "item.version.history.table.workflowItem" | translate }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
|
{{version?.submitterName}}
diff --git a/src/app/item-page/versions/item-versions.component.scss b/src/app/item-page/versions/item-versions.component.scss
index 5594e0cafe..e69de29bb2 100644
--- a/src/app/item-page/versions/item-versions.component.scss
+++ b/src/app/item-page/versions/item-versions.component.scss
@@ -1,9 +0,0 @@
-.left-column {
- float: left;
- text-align: left;
-}
-
-.right-column {
- float: right;
- text-align: right;
-}
diff --git a/src/app/item-page/versions/item-versions.component.ts b/src/app/item-page/versions/item-versions.component.ts
index d93cdeb3b9..46852a8477 100644
--- a/src/app/item-page/versions/item-versions.component.ts
+++ b/src/app/item-page/versions/item-versions.component.ts
@@ -11,15 +11,8 @@ import {
OnDestroy,
OnInit,
} from '@angular/core';
-import {
- FormsModule,
- UntypedFormBuilder,
-} from '@angular/forms';
-import {
- Router,
- RouterLink,
-} from '@angular/router';
-import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
+import { FormsModule } from '@angular/forms';
+import { RouterLink } from '@angular/router';
import {
TranslateModule,
TranslateService,
@@ -28,22 +21,18 @@ import {
BehaviorSubject,
combineLatest,
Observable,
- of,
Subscription,
} from 'rxjs';
import {
map,
- mergeMap,
startWith,
switchMap,
take,
- tap,
} from 'rxjs/operators';
import { ConfigurationDataService } from '../../core/data/configuration-data.service';
import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service';
import { FeatureID } from '../../core/data/feature-authorization/feature-id';
-import { ItemDataService } from '../../core/data/item-data.service';
import { PaginatedList } from '../../core/data/paginated-list.model';
import { RemoteData } from '../../core/data/remote-data';
import { VersionDataService } from '../../core/data/version-data.service';
@@ -60,9 +49,6 @@ import {
} from '../../core/shared/operators';
import { Version } from '../../core/shared/version.model';
import { VersionHistory } from '../../core/shared/version-history.model';
-import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model';
-import { WorkflowItemDataService } from '../../core/submission/workflowitem-data.service';
-import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service';
import { AlertComponent } from '../../shared/alert/alert.component';
import { AlertType } from '../../shared/alert/alert-type';
import {
@@ -75,21 +61,15 @@ import { PaginationComponentOptions } from '../../shared/pagination/pagination-c
import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model';
import { followLink } from '../../shared/utils/follow-link-config.model';
import { VarDirective } from '../../shared/utils/var.directive';
-import {
- getItemEditVersionhistoryRoute,
- getItemPageRoute,
- getItemVersionRoute,
-} from '../item-page-routing-paths';
-import { ItemVersionsDeleteModalComponent } from './item-versions-delete-modal/item-versions-delete-modal.component';
-import { ItemVersionsSharedService } from './item-versions-shared.service';
-import { ItemVersionsSummaryModalComponent } from './item-versions-summary-modal/item-versions-summary-modal.component';
+import { getItemPageRoute } from '../item-page-routing-paths';
+import { ItemVersionsRowElementVersionComponent } from './item-versions-row-element-version/item-versions-row-element-version.component';
@Component({
selector: 'ds-item-versions',
templateUrl: './item-versions.component.html',
styleUrls: ['./item-versions.component.scss'],
standalone: true,
- imports: [VarDirective, NgIf, AlertComponent, PaginationComponent, NgFor, RouterLink, NgClass, FormsModule, AsyncPipe, DatePipe, TranslateModule],
+ imports: [VarDirective, NgIf, AlertComponent, PaginationComponent, NgFor, RouterLink, NgClass, FormsModule, AsyncPipe, DatePipe, TranslateModule, ItemVersionsRowElementVersionComponent],
})
/**
@@ -206,17 +186,10 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
constructor(private versionHistoryService: VersionHistoryDataService,
private versionService: VersionDataService,
- private itemService: ItemDataService,
private paginationService: PaginationService,
- private formBuilder: UntypedFormBuilder,
- private modalService: NgbModal,
private notificationsService: NotificationsService,
private translateService: TranslateService,
- private router: Router,
- private itemVersionShared: ItemVersionsSharedService,
private authorizationService: AuthorizationDataService,
- private workspaceItemDataService: WorkspaceitemDataService,
- private workflowItemDataService: WorkflowItemDataService,
private configurationService: ConfigurationDataService,
) {
}
@@ -255,14 +228,6 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
this.versionBeingEditedId = undefined;
}
- /**
- * Get the route to the specified version
- * @param versionId the ID of the version for which the route will be retrieved
- */
- getVersionRoute(versionId: string) {
- return getItemVersionRoute(versionId);
- }
-
/**
* Applies changes to version currently being edited
*/
@@ -291,121 +256,6 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
);
}
- /**
- * Delete the item and get the result of the operation
- * @param item
- */
- deleteItemAndGetResult$(item: Item): Observable {
- return this.itemService.delete(item.id).pipe(
- getFirstCompletedRemoteData(),
- map((deleteItemRes) => deleteItemRes.hasSucceeded),
- take(1),
- );
- }
-
- /**
- * Deletes the specified version, notify the success/failure and redirect to latest version
- * @param version the version to be deleted
- * @param redirectToLatest force the redirect to the latest version in the history
- */
- deleteVersion(version: Version, redirectToLatest: boolean): void {
- const successMessageKey = 'item.version.delete.notification.success';
- const failureMessageKey = 'item.version.delete.notification.failure';
- const versionNumber = version.version;
- const versionItem$ = version.item;
-
- // Open modal
- const activeModal = this.modalService.open(ItemVersionsDeleteModalComponent);
- activeModal.componentInstance.versionNumber = version.version;
- activeModal.componentInstance.firstVersion = false;
-
- // On modal submit/dismiss
- activeModal.componentInstance.response.pipe(take(1)).subscribe((ok) => {
- if (ok) {
- versionItem$.pipe(
- getFirstSucceededRemoteDataPayload- (),
- // Retrieve version history
- mergeMap((item: Item) => combineLatest([
- of(item),
- this.versionHistoryService.getVersionHistoryFromVersion$(version),
- ])),
- // Delete item
- mergeMap(([item, versionHistory]: [Item, VersionHistory]) => combineLatest([
- this.deleteItemAndGetResult$(item),
- of(versionHistory),
- ])),
- // Retrieve new latest version
- mergeMap(([deleteItemResult, versionHistory]: [boolean, VersionHistory]) => combineLatest([
- of(deleteItemResult),
- this.versionHistoryService.getLatestVersionItemFromHistory$(versionHistory).pipe(
- tap(() => {
- this.getAllVersions(of(versionHistory));
- }),
- ),
- ])),
- ).subscribe(([deleteHasSucceeded, newLatestVersionItem]: [boolean, Item]) => {
- // Notify operation result and redirect to latest item
- if (deleteHasSucceeded) {
- this.notificationsService.success(null, this.translateService.get(successMessageKey, { 'version': versionNumber }));
- } else {
- this.notificationsService.error(null, this.translateService.get(failureMessageKey, { 'version': versionNumber }));
- }
- if (redirectToLatest) {
- const path = getItemEditVersionhistoryRoute(newLatestVersionItem);
- this.router.navigateByUrl(path);
- }
- });
- }
- });
- }
-
- /**
- * Creates a new version starting from the specified one
- * @param version the version from which a new one will be created
- */
- createNewVersion(version: Version) {
- const versionNumber = version.version;
-
- // Open modal and set current version number
- const activeModal = this.modalService.open(ItemVersionsSummaryModalComponent);
- activeModal.componentInstance.versionNumber = versionNumber;
-
- // On createVersionEvent emitted create new version and notify
- activeModal.componentInstance.createVersionEvent.pipe(
- mergeMap((summary: string) => combineLatest([
- of(summary),
- version.item.pipe(getFirstSucceededRemoteDataPayload()),
- ])),
- mergeMap(([summary, item]: [string, Item]) => this.versionHistoryService.createVersion(item._links.self.href, summary)),
- getFirstCompletedRemoteData(),
- // close model (should be displaying loading/waiting indicator) when version creation failed/succeeded
- tap(() => activeModal.close()),
- // show success/failure notification
- tap((newVersionRD: RemoteData) => {
- this.itemVersionShared.notifyCreateNewVersion(newVersionRD);
- if (newVersionRD.hasSucceeded) {
- const versionHistory$ = this.versionService.getHistoryFromVersion(version).pipe(
- tap((versionHistory: VersionHistory) => {
- this.itemService.invalidateItemCache(this.item.uuid);
- this.versionHistoryService.invalidateVersionHistoryCache(versionHistory.id);
- }),
- );
- this.getAllVersions(versionHistory$);
- }
- }),
- // get workspace item
- getFirstSucceededRemoteDataPayload(),
- switchMap((newVersion: Version) => this.itemService.findByHref(newVersion._links.item.href)),
- getFirstSucceededRemoteDataPayload
- (),
- switchMap((newVersionItem: Item) => this.workspaceItemDataService.findByItem(newVersionItem.uuid, true, false)),
- getFirstSucceededRemoteDataPayload(),
- ).subscribe((wsItem) => {
- const wsiId = wsItem.id;
- const route = 'workspaceitems/' + wsiId + '/edit';
- this.router.navigateByUrl(route);
- });
- }
-
/**
* Check is the current user can edit the version summary
* @param version
@@ -444,14 +294,6 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
}
- /**
- * Check if the current user can delete the version
- * @param version
- */
- canDeleteVersion$(version: Version): Observable {
- return this.authorizationService.isAuthorized(FeatureID.CanDeleteVersion, version.self);
- }
-
/**
* Get all versions for the given version history and store them in versionRD$
* @param versionHistory$
@@ -477,44 +319,6 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
this.getAllVersions(this.versionHistory$);
}
- /**
- * Get the ID of the workspace item, if present, otherwise return undefined
- * @param versionItem the item for which retrieve the workspace item id
- */
- getWorkspaceId(versionItem): Observable {
- return versionItem.pipe(
- getFirstSucceededRemoteDataPayload(),
- map((item: Item) => item.uuid),
- switchMap((itemUuid: string) => this.workspaceItemDataService.findByItem(itemUuid, true)),
- getFirstCompletedRemoteData(),
- map((res: RemoteData) => res?.payload?.id ),
- );
- }
-
- /**
- * Get the ID of the workflow item, if present, otherwise return undefined
- * @param versionItem the item for which retrieve the workspace item id
- */
- getWorkflowId(versionItem): Observable {
- return versionItem.pipe(
- getFirstSucceededRemoteDataPayload(),
- map((item: Item) => item.uuid),
- switchMap((itemUuid: string) => this.workflowItemDataService.findByItem(itemUuid, true)),
- getFirstCompletedRemoteData(),
- map((res: RemoteData) => res?.payload?.id ),
- );
- }
-
- /**
- * redirect to the edit page of the workspace item
- * @param id$ the id of the workspace item
- */
- editWorkspaceItem(id$: Observable) {
- id$.subscribe((id) => {
- this.router.navigateByUrl('workspaceitems/' + id + '/edit');
- });
- }
-
/**
* Initialize all observables
*/
@@ -532,19 +336,12 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
hasValueOperator(),
);
- this.canCreateVersion$ = this.authorizationService.isAuthorized(FeatureID.CanCreateVersion, this.item.self);
-
// If there is a draft item in the version history the 'Create version' button is disabled and a different tooltip message is shown
this.hasDraftVersion$ = this.versionHistoryRD$.pipe(
getFirstSucceededRemoteDataPayload(),
map((res) => Boolean(res?.draftVersion)),
);
- this.createVersionTitle$ = this.hasDraftVersion$.pipe(
- take(1),
- switchMap((res) => of(res ? 'item.version.history.table.action.hasDraft' : 'item.version.history.table.action.newVersion')),
- );
-
this.getAllVersions(this.versionHistory$);
this.hasEpersons$ = this.versionsRD$.pipe(
getAllSucceededRemoteData(),
From 87cff6c90792553b2170e6a9326fdabdd478456c Mon Sep 17 00:00:00 2001
From: Andrea Barbasso <´andrea.barbasso@4science.com´>
Date: Mon, 15 Apr 2024 09:43:38 +0200
Subject: [PATCH 14/17] [DURACOM-248] set function call result in a class
attribute
---
src/app/item-page/versions/item-versions.component.html | 4 ++--
src/app/item-page/versions/item-versions.component.ts | 5 +++++
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/app/item-page/versions/item-versions.component.html b/src/app/item-page/versions/item-versions.component.html
index b272c87853..bda86f2810 100644
--- a/src/app/item-page/versions/item-versions.component.html
+++ b/src/app/item-page/versions/item-versions.component.html
@@ -17,7 +17,7 @@
{{"item.version.history.table.version" | translate}} |
- {{"item.version.history.table.editor" | translate}} |
+ {{"item.version.history.table.editor" | translate}} |
{{"item.version.history.table.date" | translate}} |
{{"item.version.history.table.summary" | translate}} |
@@ -33,7 +33,7 @@
(versionsHistoryChange)="getAllVersions($event)"
>
-
+ |
{{version?.submitterName}}
|
diff --git a/src/app/item-page/versions/item-versions.component.ts b/src/app/item-page/versions/item-versions.component.ts
index 46852a8477..a4f9d9328b 100644
--- a/src/app/item-page/versions/item-versions.component.ts
+++ b/src/app/item-page/versions/item-versions.component.ts
@@ -142,6 +142,11 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
*/
hasDraftVersion$: Observable;
+ /**
+ * Show submitter in version history table
+ */
+ showSubmitter$: Observable = this.showSubmitter();
+
/**
* The amount of versions to display per page
*/
From d6595daa9b5fe7dacccf6a069eee9929a4abe670 Mon Sep 17 00:00:00 2001
From: Andrea Barbasso <´andrea.barbasso@4science.com´>
Date: Mon, 15 Apr 2024 10:55:04 +0200
Subject: [PATCH 15/17] [DURACOM-248] move tests
---
...ions-row-element-version.component.spec.ts | 164 +++++++++++++++++-
.../versions/item-versions.component.spec.ts | 53 ------
2 files changed, 163 insertions(+), 54 deletions(-)
diff --git a/src/app/item-page/versions/item-versions-row-element-version/item-versions-row-element-version.component.spec.ts b/src/app/item-page/versions/item-versions-row-element-version/item-versions-row-element-version.component.spec.ts
index 2695e334f7..4a1e448889 100644
--- a/src/app/item-page/versions/item-versions-row-element-version/item-versions-row-element-version.component.spec.ts
+++ b/src/app/item-page/versions/item-versions-row-element-version/item-versions-row-element-version.component.spec.ts
@@ -1,26 +1,188 @@
+import { CommonModule } from '@angular/common';
+import { NO_ERRORS_SCHEMA } from '@angular/core';
import {
ComponentFixture,
TestBed,
+ waitForAsync,
} from '@angular/core/testing';
+import {
+ FormsModule,
+ ReactiveFormsModule,
+} from '@angular/forms';
+import {
+ BrowserModule,
+ By,
+} from '@angular/platform-browser';
+import {
+ ActivatedRoute,
+ RouterModule,
+} from '@angular/router';
+import { TranslateModule } from '@ngx-translate/core';
+import {
+ EMPTY,
+ of as observableOf,
+ of,
+} from 'rxjs';
+import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service';
+import { ItemDataService } from '../../../core/data/item-data.service';
+import { VersionDataService } from '../../../core/data/version-data.service';
+import { VersionHistoryDataService } from '../../../core/data/version-history-data.service';
+import { Item } from '../../../core/shared/item.model';
+import { Version } from '../../../core/shared/version.model';
+import { VersionHistory } from '../../../core/shared/version-history.model';
+import { WorkflowItemDataService } from '../../../core/submission/workflowitem-data.service';
+import { WorkspaceitemDataService } from '../../../core/submission/workspaceitem-data.service';
+import { NotificationsService } from '../../../shared/notifications/notifications.service';
+import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils';
+import { ActivatedRouteStub } from '../../../shared/testing/active-router.stub';
+import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub';
+import { createPaginatedList } from '../../../shared/testing/utils.test';
+import { ItemVersionsComponent } from '../item-versions.component';
import { ItemVersionsRowElementVersionComponent } from './item-versions-row-element-version.component';
describe('ItemVersionsRowElementVersionComponent', () => {
let component: ItemVersionsRowElementVersionComponent;
let fixture: ComponentFixture;
+ const versionHistory = Object.assign(new VersionHistory(), {
+ id: '1',
+ draftVersion: true,
+ });
+
+ const version = Object.assign(new Version(), {
+ id: '1',
+ version: 1,
+ created: new Date(2020, 1, 1),
+ summary: 'first version',
+ versionhistory: createSuccessfulRemoteDataObject$(versionHistory),
+ _links: {
+ self: {
+ href: 'version2-url',
+ },
+ },
+ });
+
+ versionHistory.versions = createSuccessfulRemoteDataObject$(createPaginatedList([version]));
+
+
+ const item = Object.assign(new Item(), { // is a workspace item
+ id: 'item-identifier-1',
+ uuid: 'item-identifier-1',
+ handle: '123456789/1',
+ version: createSuccessfulRemoteDataObject$(version),
+ _links: {
+ self: {
+ href: '/items/item-identifier-1',
+ },
+ },
+ });
+
+ version.item = createSuccessfulRemoteDataObject$(item);
+
+ const versionHistoryServiceSpy = jasmine.createSpyObj('versionHistoryService', {
+ getVersions: createSuccessfulRemoteDataObject$(createPaginatedList([version])),
+ getVersionHistoryFromVersion$: of(versionHistory),
+ getLatestVersionItemFromHistory$: of(item),
+ });
+ const authorizationServiceSpy = jasmine.createSpyObj('authorizationService', {
+ isAuthorized: observableOf(true),
+ });
+ const workspaceItemDataServiceSpy = jasmine.createSpyObj('workspaceItemDataService', {
+ findByItem: EMPTY,
+ });
+ const workflowItemDataServiceSpy = jasmine.createSpyObj('workflowItemDataService', {
+ findByItem: EMPTY,
+ });
+ const versionServiceSpy = jasmine.createSpyObj('versionService', {
+ findById: EMPTY,
+ });
+ const itemDataServiceSpy = jasmine.createSpyObj('itemDataService', {
+ delete: createSuccessfulRemoteDataObject$({}),
+ });
+
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [ItemVersionsRowElementVersionComponent]
+ imports: [TranslateModule.forRoot(), RouterModule.forRoot([
+ { path: 'items/:id/edit/versionhistory', component: {} as any },
+ ]), CommonModule, FormsModule, ReactiveFormsModule, BrowserModule, ItemVersionsComponent],
+ providers: [
+ { provide: NotificationsService, useValue: new NotificationsServiceStub() },
+ { provide: AuthorizationDataService, useValue: authorizationServiceSpy },
+ { provide: VersionHistoryDataService, useValue: versionHistoryServiceSpy },
+ { provide: ItemDataService, useValue: itemDataServiceSpy },
+ { provide: VersionDataService, useValue: versionServiceSpy },
+ { provide: WorkspaceitemDataService, useValue: workspaceItemDataServiceSpy },
+ { provide: WorkflowItemDataService, useValue: workflowItemDataServiceSpy },
+ { provide: ActivatedRoute, useValue: new ActivatedRouteStub() },
+ ],
+ schemas: [NO_ERRORS_SCHEMA],
})
.compileComponents();
fixture = TestBed.createComponent(ItemVersionsRowElementVersionComponent);
component = fixture.componentInstance;
+
+ component.version = version;
+ component.itemVersion = version;
+ component.item = item;
+ component.displayActions = true;
+
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
+
+ it(`should display version ${version.version} in the correct column for version ${version.id}`, () => {
+ const id = fixture.debugElement.query(By.css(`.left-column`));
+ expect(id.nativeElement.textContent).toContain(version.version.toString());
+ });
+
+ it(`should displau an asterisk in the correct column for current version`, () => {
+ const draft = fixture.debugElement.query(By.css(`.left-column`));
+ expect(draft.nativeElement.textContent).toContain('*');
+ });
+
+ it('should display action buttons in the correct column if displayActions is true', () => {
+ fixture.detectChanges();
+ const actions = fixture.debugElement.query(By.css(`.right-column`));
+ expect(actions).toBeTruthy();
+ });
+
+ describe('when deleting a version', () => {
+ let deleteButton;
+
+ beforeEach(() => {
+ deleteButton = fixture.debugElement.queryAll(By.css('.version-row-element-delete'))[0].nativeElement;
+
+ itemDataServiceSpy.delete.calls.reset();
+ });
+
+ describe('if confirmed via modal', () => {
+ beforeEach(waitForAsync(() => {
+ deleteButton.click();
+ fixture.detectChanges();
+ (document as any).querySelector('.modal-footer .confirm').click();
+ }));
+
+ it('should call ItemService.delete', () => {
+ expect(itemDataServiceSpy.delete).toHaveBeenCalledWith(item.id);
+ });
+ });
+
+ describe('if canceled via modal', () => {
+ beforeEach(waitForAsync(() => {
+ deleteButton.click();
+ fixture.detectChanges();
+ (document as any).querySelector('.modal-footer .cancel').click();
+ }));
+
+ it('should not call ItemService.delete', () => {
+ expect(itemDataServiceSpy.delete).not.toHaveBeenCalled();
+ });
+ });
+ });
+
});
diff --git a/src/app/item-page/versions/item-versions.component.spec.ts b/src/app/item-page/versions/item-versions.component.spec.ts
index 770724d041..ee3c0110c8 100644
--- a/src/app/item-page/versions/item-versions.component.spec.ts
+++ b/src/app/item-page/versions/item-versions.component.spec.ts
@@ -206,19 +206,6 @@ describe('ItemVersionsComponent', () => {
versions.forEach((version: Version, index: number) => {
const versionItem = items[index];
- it(`should display version ${version.version} in the correct column for version ${version.id}`, () => {
- const id = fixture.debugElement.query(By.css(`#version-row-${version.id} .version-row-element-version`));
- expect(id.nativeElement.textContent).toContain(version.version.toString());
- });
-
- // Check if the current version contains an asterisk
- if (item1.uuid === versionItem.uuid) {
- it('should add an asterisk to the version of the selected item', () => {
- const item = fixture.debugElement.query(By.css(`#version-row-${version.id} .version-row-element-version`));
- expect(item.nativeElement.textContent).toContain('*');
- });
- }
-
it(`should display date ${version.created} in the correct column for version ${version.id}`, () => {
const date = fixture.debugElement.query(By.css(`#version-row-${version.id} .version-row-element-date`));
switch (versionItem.uuid) {
@@ -319,44 +306,4 @@ describe('ItemVersionsComponent', () => {
expect(component.isThisBeingEdited(version2)).toBeFalse();
});
});
-
- describe('when deleting a version', () => {
- let deleteButton;
-
- beforeEach(() => {
- const canDelete = (featureID: FeatureID, url: string ) => of(featureID === FeatureID.CanDeleteVersion);
- authorizationServiceSpy.isAuthorized.and.callFake(canDelete);
-
- fixture.detectChanges();
-
- // delete the last version in the table (version2 → item2)
- deleteButton = fixture.debugElement.queryAll(By.css('.version-row-element-delete'))[1].nativeElement;
-
- itemDataServiceSpy.delete.calls.reset();
- });
-
- describe('if confirmed via modal', () => {
- beforeEach(waitForAsync(() => {
- deleteButton.click();
- fixture.detectChanges();
- (document as any).querySelector('.modal-footer .confirm').click();
- }));
-
- it('should call ItemService.delete', () => {
- expect(itemDataServiceSpy.delete).toHaveBeenCalledWith(item2.id);
- });
- });
-
- describe('if canceled via modal', () => {
- beforeEach(waitForAsync(() => {
- deleteButton.click();
- fixture.detectChanges();
- (document as any).querySelector('.modal-footer .cancel').click();
- }));
-
- it('should not call ItemService.delete', () => {
- expect(itemDataServiceSpy.delete).not.toHaveBeenCalled();
- });
- });
- });
});
From 93bcd92b0a7f33a6b47204ba11221c87d96cbdbc Mon Sep 17 00:00:00 2001
From: Andrea Barbasso <´andrea.barbasso@4science.com´>
Date: Mon, 15 Apr 2024 12:31:18 +0200
Subject: [PATCH 16/17] [DURACOM-248] lint fix
---
.../item-versions-row-element-version.component.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/app/item-page/versions/item-versions-row-element-version/item-versions-row-element-version.component.ts b/src/app/item-page/versions/item-versions-row-element-version/item-versions-row-element-version.component.ts
index b239fd5d95..3d017c38a4 100644
--- a/src/app/item-page/versions/item-versions-row-element-version/item-versions-row-element-version.component.ts
+++ b/src/app/item-page/versions/item-versions-row-element-version/item-versions-row-element-version.component.ts
@@ -20,7 +20,8 @@ import {
TranslateService,
} from '@ngx-translate/core';
import {
- combineLatest, concatMap,
+ combineLatest,
+ concatMap,
Observable,
of,
} from 'rxjs';
From bd9e58038dfb981066a0095a714c653467ee9bb0 Mon Sep 17 00:00:00 2001
From: Giuseppe Digilio
Date: Mon, 15 Apr 2024 13:18:06 +0200
Subject: [PATCH 17/17] [DURACOM-248] Upgrade to latest Angular minor release
---
package.json | 28 +++++------
yarn.lock | 135 ++++++++++++++++++++++++++++++---------------------
2 files changed, 94 insertions(+), 69 deletions(-)
diff --git a/package.json b/package.json
index 6b9d2a4c06..0571d166bc 100644
--- a/package.json
+++ b/package.json
@@ -55,17 +55,17 @@
"ts-node": "10.2.1"
},
"dependencies": {
- "@angular/animations": "^17.3.0",
- "@angular/cdk": "^17.3.0",
- "@angular/common": "^17.3.0",
- "@angular/compiler": "^17.3.0",
- "@angular/core": "^17.3.0",
- "@angular/forms": "^17.3.0",
- "@angular/localize": "17.3.0",
- "@angular/platform-browser": "^17.3.0",
- "@angular/platform-browser-dynamic": "^17.3.0",
- "@angular/platform-server": "^17.3.0",
- "@angular/router": "^17.3.0",
+ "@angular/animations": "^17.3.4",
+ "@angular/cdk": "^17.3.4",
+ "@angular/common": "^17.3.4",
+ "@angular/compiler": "^17.3.4",
+ "@angular/core": "^17.3.4",
+ "@angular/forms": "^17.3.4",
+ "@angular/localize": "17.3.4",
+ "@angular/platform-browser": "^17.3.4",
+ "@angular/platform-browser-dynamic": "^17.3.4",
+ "@angular/platform-server": "^17.3.4",
+ "@angular/router": "^17.3.4",
"@angular/ssr": "^17.3.0",
"@babel/runtime": "7.21.0",
"@kolkov/ngx-gallery": "^2.0.1",
@@ -141,8 +141,8 @@
"@angular-eslint/schematics": "17.2.1",
"@angular-eslint/template-parser": "17.2.1",
"@angular/cli": "^17.3.0",
- "@angular/compiler-cli": "^17.3.0",
- "@angular/language-service": "^17.3.0",
+ "@angular/compiler-cli": "^17.3.4",
+ "@angular/language-service": "^17.3.4",
"@cypress/schematic": "^1.5.0",
"@fortawesome/fontawesome-free": "^6.4.0",
"@ngrx/store-devtools": "^17.1.1",
@@ -206,4 +206,4 @@
"webpack-cli": "^4.2.0",
"webpack-dev-server": "^4.13.3"
}
-}
+}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 087c3e3068..8b129366b5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -237,17 +237,17 @@
"@angular-eslint/bundled-angular-compiler" "17.2.1"
"@typescript-eslint/utils" "6.19.0"
-"@angular/animations@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-17.3.0.tgz#8dd498aff5bc75b60409d5ea5442d0200e538d01"
- integrity sha512-H7R3c2E479CPpaX6bU84F8u4JV+IFEfM8BUOgrbcI9tF16m6C2eJbl8IqNuW0yADuTarRSlOT7TW0qyrmcxhRw==
+"@angular/animations@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-17.3.4.tgz#a6ac313fcfc66777b5ef4dbc1dcfc4402a5ea8cc"
+ integrity sha512-2nBgXRdTSVPZMueV6ZJjajDRucwJBLxwiVhGafk/nI5MJF0Yss/Jfp2Kfzk5Xw2AqGhz0rd00IyNNUQIzO2mlw==
dependencies:
tslib "^2.3.0"
-"@angular/cdk@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-17.3.0.tgz#c05d57d4c59a313d74d9aeaf09a44ca5dd3723fd"
- integrity sha512-/RIEzP7D3wCGgk2FEvSWTvcKMa+4L7djMF6ZnOKqU6CiJLX3Ksr3+RXqXuiVkdVZBoRXEWRofS/DYEai+nIW8A==
+"@angular/cdk@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-17.3.4.tgz#9c7b758e79643bb893a3ee103cf4e089ae201fb8"
+ integrity sha512-/wbKUbc0YC3HGE2TCgW7D07Q99PZ/5uoRvMyWw0/wHa8VLNavXZPecbvtyLs//3HnqoCMSUFE7E2Mrd7jAWfcA==
dependencies:
tslib "^2.3.0"
optionalDependencies:
@@ -277,17 +277,17 @@
symbol-observable "4.0.0"
yargs "17.7.2"
-"@angular/common@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/common/-/common-17.3.0.tgz#d7151a1ffeb52a10e00496f850f477f1e121d66f"
- integrity sha512-JnS6jbLl2RxsvGFUOBGeoyviNLEjZKRhn3uK4Ein3DENPv0BeSFMjif9Dp4ReUCnqoD4QQVG0X/r1GFaqHn2pw==
+"@angular/common@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/common/-/common-17.3.4.tgz#4821d05c008f78e064bc92e51e79b07b7c42c792"
+ integrity sha512-rEsmtwUMJaNvaimh9hwaHdDLXaOIrjEnYdhmJUvDaKPQaFfSbH3CGGVz9brUyzVJyiWJYkYM0ssxavczeiEe8g==
dependencies:
tslib "^2.3.0"
-"@angular/compiler-cli@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-17.3.0.tgz#39e7dcc70793a6b246187d1def0d844b3a543047"
- integrity sha512-ewo+pb0QUC69Ey15z4vPteoBeO81HitqplysOoeXbyVBjMnKmZl3343wx7ukgcI97lmj4d38d1r4AnIoO5n/Vw==
+"@angular/compiler-cli@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-17.3.4.tgz#584cae760772a12f18ae362d6af02fcad9a95c54"
+ integrity sha512-TVWjpZSI/GIXTYsmVgEKYjBckcW8Aj62DcxLNehRFR+c7UB95OY3ZFjU8U4jL0XvWPgTkkVWQVq+P6N4KCBsyw==
dependencies:
"@babel/core" "7.23.9"
"@jridgewell/sourcemap-codec" "^1.4.14"
@@ -298,68 +298,68 @@
tslib "^2.3.0"
yargs "^17.2.1"
-"@angular/compiler@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-17.3.0.tgz#204d930c372ef556a18ea62cc93de2fc13d6aac8"
- integrity sha512-lZBD5mFq7SzFJydZwW2jvnQGmtcU1s3e548hl4MSZpRgt13m5UmBQKbyMOvVN2WxKvWKlmDlywsAJlMSXepYig==
+"@angular/compiler@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-17.3.4.tgz#7100326d25da92183953eb948265963ef45576ec"
+ integrity sha512-YrDClIzgj6nQwiYHrfV6AkT1C5LCDgJh+LICus/2EY1w80j1Qf48Zh4asictReePdVE2Tarq6dnpDh4RW6LenQ==
dependencies:
tslib "^2.3.0"
-"@angular/core@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/core/-/core-17.3.0.tgz#24eca359f4d530ac96d5e93679d39d910ae1a5b9"
- integrity sha512-umwsNFl/wEMTCUVvNl5iieEgHA+ESxSMcjedZGFWNGnpUxKTgYFYNG41/1wNZfPrS0+uRPHuYU9IHD+NR2s/Rw==
+"@angular/core@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/core/-/core-17.3.4.tgz#abdd2fc78f1db422fb3c16738f060ba5fccf95c1"
+ integrity sha512-fvhBkfa/DDBzp1UcNzSxHj+Z9DebSS/o9pZpZlbu/0uEiu9hScmScnhaty5E0EbutzHB0SVUCz7zZuDeAywvWg==
dependencies:
tslib "^2.3.0"
-"@angular/forms@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-17.3.0.tgz#7c6a0ea38184629722a57c6df233ea4c34dfbdc3"
- integrity sha512-TnLOake1fQCmmGEOZbTjP2gbKerZ/bfEMuiFfoe7R2rUvKl4xHGAHp99bqf7bUyAbB8ZgmPZc9/VHrrts8UNyA==
+"@angular/forms@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-17.3.4.tgz#8791529975ec5e5fc5dcae793e6473e8ff82f2fd"
+ integrity sha512-XWA/FAs0r7VRdztMIfGU9EE0Chj+1U/sDnzJK3ZPO0n8F8oDAEWGJyiw8GIyWTLs+mz43thVIED3DhbRNsXbWw==
dependencies:
tslib "^2.3.0"
-"@angular/language-service@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-17.3.0.tgz#87c5598eeb6963f6bc1b57b6b65cc395a6c78319"
- integrity sha512-h4bwuyeAmZkoeCM/KvhWW+p2xjKiVt4GfSWZsIuW5ilfJt7hmkUFGyu0ABCjt6fiNQRrS2tvBZdXxk+A+zX8KQ==
+"@angular/language-service@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-17.3.4.tgz#2adeb8fcf66f7f975a9d1dd259c4b334fdcbc0a9"
+ integrity sha512-CgLg/7P0+NEeGU+vqvoG0rh2ns5iyfi/UO4JTxN1iMjuFBAUhGHxjiItPy8cN2XK/dWgOhXAFe4oqxA4dMBp/Q==
-"@angular/localize@17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-17.3.0.tgz#ee466d8bd4d010a3184271f317dc9e001267b76f"
- integrity sha512-f1Ilf7TtG1WoxDxazC8Wn9BP8Nx9z/sD9JWyO1ov8f7zyvtfuqVa8MVuQcggpRcgEi/4wRMGzOOANgs+CovYxw==
+"@angular/localize@17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-17.3.4.tgz#dc26f6a242767b7815620aba01c8cde6a2ea885b"
+ integrity sha512-sNViKDiu/sdeaeyOYSdaifigdj1hjwcivxEoqw2k/GI4hlVtEtOZrqZUfgT4PycGpE4mizdwgRYX+NvKY0D5uQ==
dependencies:
"@babel/core" "7.23.9"
"@types/babel__core" "7.20.5"
fast-glob "3.3.2"
yargs "^17.2.1"
-"@angular/platform-browser-dynamic@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.0.tgz#c19a89433cd20daf2a97c84838aebcb8769440db"
- integrity sha512-oX5AG0aSjmB89SyJZGyabr6uwfWd7yJM+krcrzHxFbVhvDCwdi9G+B0ADmaUn1shaXDseOFiLpo3R/oagd2fTA==
+"@angular/platform-browser-dynamic@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.4.tgz#dbacff82c3eb82206c37471d8bbd56c59b443acd"
+ integrity sha512-S53jPyQtInVYkjdGEFt4dxM1NrHNkWCvXGRsCO7Uh+laDf1OpIDp9YHf49OZohYLajJradN6y4QfdZL6IUwXKA==
dependencies:
tslib "^2.3.0"
-"@angular/platform-browser@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-17.3.0.tgz#5b6e14d5db76a9a96dd0a1ec9360d4a4c7a6091e"
- integrity sha512-sIquvbq04KMOdpk1VdVFt7kVhOk/Rk+hI3M4raarMK5EbZ16nLYzpqjc2OZetUpKy6LB/FemClgNUShj9NlrqA==
+"@angular/platform-browser@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-17.3.4.tgz#926955d30e742ab0bd3c17ffa33fbb11cfff0a34"
+ integrity sha512-W2nH9WSQJfdNG4HH9B1Cvj5CTmy9gF3321I+65Tnb8jFmpeljYDBC/VVUhTZUCRpg8udMWeMHEQHuSb8CbozmQ==
dependencies:
tslib "^2.3.0"
-"@angular/platform-server@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-17.3.0.tgz#29e0ad05ada9280f5897fb7e693d47a984476499"
- integrity sha512-kCtAZskxn5iKSF9yw+IALA6Otv8eqGp19R0RX/Btj7hLPEUPz1/n9pUIBLOtyE5P4xWT6JCty+vaPOdloSO9RA==
+"@angular/platform-server@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-17.3.4.tgz#dcb52e86b16a8c818711a8d4430a93420b9d928a"
+ integrity sha512-2tKIzUfYxaBFfMamujdhZNt+Nr72522Mpk6H0bbk/t91RcQWb/Zx3LoGfDb8mZaHATSTERYNsA9jIp5Awv0ucg==
dependencies:
tslib "^2.3.0"
xhr2 "^0.2.0"
-"@angular/router@^17.3.0":
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/@angular/router/-/router-17.3.0.tgz#b6d0ea13b5330f4114555a59596c15a2ee166e28"
- integrity sha512-OBMAfjaSfEdEYqfYsAemDvknYZV69ABFf06hhduNLhB5QgbPrZCbNptnlrCPx4YDrzcANj2hrcyAmAVNTk8Giw==
+"@angular/router@^17.3.4":
+ version "17.3.4"
+ resolved "https://registry.yarnpkg.com/@angular/router/-/router-17.3.4.tgz#5928b4caa45f12be3e5b8b81f5d4a0d0f7a301d1"
+ integrity sha512-B1zjUYyhN66dp47zdF96NRwo0dEdM5In4Ob8HN64PAbnaK3y1EPp31aN6EGernPvKum1ibgwSZw+Uwnbkuv7Ww==
dependencies:
tslib "^2.3.0"
@@ -10981,7 +10981,16 @@ streamroller@^3.1.5:
debug "^4.3.4"
fs-extra "^8.1.0"
-"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+"string-width-cjs@npm:string-width@^4.2.0":
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -11040,7 +11049,7 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -11061,6 +11070,13 @@ strip-ansi@^4.0.0:
dependencies:
ansi-regex "^3.0.0"
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
strip-ansi@^7.0.1:
version "7.1.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
@@ -12061,7 +12077,7 @@ wildcard@^2.0.0:
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -12079,6 +12095,15 @@ wrap-ansi@^6.2.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrap-ansi@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
| |