From 65826c27f64c437a7c24a83473f70e2868778b82 Mon Sep 17 00:00:00 2001
From: Dharan <14145706+dhrn@users.noreply.github.com>
Date: Mon, 6 Sep 2021 11:00:45 +0530
Subject: [PATCH] [ACA-3669] Incorrect Version Number Displayed (#2281)
* [ACA-3669] Incorrect Version Number Displayed
* * fixed lint
* * test fixed
---
.../src/lib/services/content-api.service.ts | 12 +++-
.../node-versions/node-versions.dialog.html | 16 ++---
.../node-versions.dialog.spec.ts | 61 ++++++++++---------
.../node-versions/node-versions.dialog.ts | 24 ++++----
.../content-management.service.spec.ts | 30 ++++-----
.../services/content-management.service.ts | 14 +++--
6 files changed, 82 insertions(+), 75 deletions(-)
diff --git a/projects/aca-shared/src/lib/services/content-api.service.ts b/projects/aca-shared/src/lib/services/content-api.service.ts
index 174b85e22..8cc52c6d8 100644
--- a/projects/aca-shared/src/lib/services/content-api.service.ts
+++ b/projects/aca-shared/src/lib/services/content-api.service.ts
@@ -50,7 +50,8 @@ import {
ContentApi,
SitesApi,
SearchApi,
- PeopleApi
+ PeopleApi,
+ VersionsApi
} from '@alfresco/js-api';
import { map } from 'rxjs/operators';
@@ -112,6 +113,11 @@ export class ContentApiService {
return this._peopleApi;
}
+ _versionsApi: VersionsApi;
+ get versionsApi(): VersionsApi {
+ this._versionsApi = this._versionsApi ?? new VersionsApi(this.api.getInstance());
+ return this._versionsApi;
+ }
constructor(private api: AlfrescoApiService, private preferences: UserPreferencesService) {}
/**
@@ -341,4 +347,8 @@ export class ContentApiService {
unlockNode(nodeId: string, opts?: any) {
return this.nodesApi.unlockNode(nodeId, opts);
}
+
+ getNodeVersions(nodeId: string, opts?: any) {
+ return from(this.versionsApi.listVersionHistory(nodeId, opts));
+ }
}
diff --git a/src/app/dialogs/node-versions/node-versions.dialog.html b/src/app/dialogs/node-versions/node-versions.dialog.html
index c3aba13b5..f6efa2798 100644
--- a/src/app/dialogs/node-versions/node-versions.dialog.html
+++ b/src/app/dialogs/node-versions/node-versions.dialog.html
@@ -1,23 +1,23 @@
-{{ 'VERSION.DIALOG_ADF.TITLE' | translate }}
-{{ 'VERSION.DIALOG.TITLE' | translate }}
-
-
+{{ data.title | translate }}
+
-
+
{
let fixture: ComponentFixture;
let component: NodeVersionsDialogComponent;
let store: Store;
+ const node = {
+ id: '1234',
+ name: 'TEST-NODE',
+ isFile: true,
+ nodeType: 'FAKE',
+ isFolder: false,
+ modifiedAt: new Date(),
+ modifiedByUser: null,
+ createdAt: new Date(),
+ createdByUser: null,
+ content: {
+ mimeType: 'text/html',
+ mimeTypeName: 'HTML',
+ sizeInBytes: 13
+ }
+ };
+ const showVersionsOnly = true;
+ const file = {
+ name: 'Fake New file',
+ type: 'application/pdf',
+ lastModified: 13,
+ size: 1351,
+ slice: null
+ } as File;
+
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CoreModule.forRoot(), TranslateModule.forRoot(), MatDialogModule, RouterTestingModule.withRoutes([]), AppTestingModule],
@@ -68,55 +93,31 @@ describe('NodeVersionsDialogComponent', () => {
dispatch: jasmine.createSpy('dispatch')
}
},
- { provide: MAT_DIALOG_DATA, useValue: {} }
+ { provide: MAT_DIALOG_DATA, useValue: { node, showVersionsOnly, file } }
]
});
store = TestBed.inject(Store);
fixture = TestBed.createComponent(NodeVersionsDialogComponent);
component = fixture.componentInstance;
- component.node = {
- id: '1234',
- name: 'TEST-NODE',
- isFile: true,
- nodeType: 'FAKE',
- isFolder: false,
- modifiedAt: new Date(),
- modifiedByUser: null,
- createdAt: new Date(),
- createdByUser: null,
- content: {
- mimeType: 'text/html',
- mimeTypeName: 'HTML',
- sizeInBytes: 13
- }
- };
- component.isTypeList = true;
- component.file = {
- name: 'Fake New file',
- type: 'application/pdf',
- lastModified: 13,
- size: 1351,
- slice: null
- } as File;
});
it('should display adf upload version if isTypeList is passed as false from parent component', () => {
- component.isTypeList = false;
+ component.data.showVersionsOnly = false;
fixture.detectChanges();
const adfVersionComponent = document.querySelector('#adf-version-upload-button');
expect(adfVersionComponent).not.toEqual(null);
});
it('should display adf version comparison if isTypeList is passed as false from parent component', () => {
- component.isTypeList = false;
+ component.data.showVersionsOnly = false;
fixture.detectChanges();
const adfVersionComparisonComponent = document.querySelector('#adf-version-comparison');
expect(adfVersionComparisonComponent).not.toEqual(null);
});
it('should unlock node if is locked when uploading a file', () => {
- component.isTypeList = false;
+ component.data.showVersionsOnly = false;
const nodeEvent: NodeEntityEvent = new NodeEntityEvent({
entry: {
id: 'a8b2caff-a58c-40f1-8c47-0b8e63ceaa0e',
@@ -138,12 +139,12 @@ describe('NodeVersionsDialogComponent', () => {
});
it('should view a previous version of a node', () => {
- component.isTypeList = false;
+ component.data.showVersionsOnly = false;
const versionId = '1.0';
const location: ViewNodeExtras = {
location: '/'
};
component.onViewingVersion(versionId);
- expect(store.dispatch).toHaveBeenCalledWith(new ViewNodeVersionAction(component.node.id, versionId, location));
+ expect(store.dispatch).toHaveBeenCalledWith(new ViewNodeVersionAction(component.data.node.id, versionId, location));
});
});
diff --git a/src/app/dialogs/node-versions/node-versions.dialog.ts b/src/app/dialogs/node-versions/node-versions.dialog.ts
index 56ae54b69..5373aca6f 100644
--- a/src/app/dialogs/node-versions/node-versions.dialog.ts
+++ b/src/app/dialogs/node-versions/node-versions.dialog.ts
@@ -24,13 +24,21 @@
*/
import { AppStore, SnackbarErrorAction, UnlockWriteAction, ViewNodeVersionAction } from '@alfresco/aca-shared/store';
-import { MinimalNodeEntryEntity, Node } from '@alfresco/js-api';
+import { MinimalNodeEntryEntity, Node, Version } from '@alfresco/js-api';
import { Component, EventEmitter, Inject, Output, ViewEncapsulation } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { Store } from '@ngrx/store';
import { NodeEntityEvent } from '@alfresco/adf-content-services';
import { Router } from '@angular/router';
+export interface NodeVersionDialogData {
+ title: string;
+ node: MinimalNodeEntryEntity;
+ file?: File;
+ currentVersion?: Version;
+ showVersionsOnly?: boolean;
+}
+
@Component({
templateUrl: './node-versions.dialog.html',
styleUrls: ['./node-versions.dialog.scss'],
@@ -38,24 +46,16 @@ import { Router } from '@angular/router';
host: { class: 'aca-node-versions-dialog' }
})
export class NodeVersionsDialogComponent {
- node: MinimalNodeEntryEntity;
- file: File;
- isTypeList = true;
-
/** Emitted when a version is restored or deleted. */
@Output()
refreshEvent = new EventEmitter();
constructor(
- @Inject(MAT_DIALOG_DATA) data: any,
+ @Inject(MAT_DIALOG_DATA) public data: NodeVersionDialogData,
private store: Store,
private dialogRef: MatDialogRef,
private router: Router
- ) {
- this.node = data.node;
- this.file = data.file;
- this.isTypeList = data.isTypeList !== undefined ? data.isTypeList : true;
- }
+ ) {}
onUploadError(errorMessage: any) {
this.store.dispatch(new SnackbarErrorAction(errorMessage));
@@ -78,7 +78,7 @@ export class NodeVersionsDialogComponent {
onViewingVersion(versionId: string) {
this.store.dispatch(
- new ViewNodeVersionAction(this.node.id, versionId, {
+ new ViewNodeVersionAction(this.data.node.id, versionId, {
location: this.router.url
})
);
diff --git a/src/app/services/content-management.service.spec.ts b/src/app/services/content-management.service.spec.ts
index 43362af73..784ef8ab2 100644
--- a/src/app/services/content-management.service.spec.ts
+++ b/src/app/services/content-management.service.spec.ts
@@ -53,7 +53,7 @@ import { NodeActionsService } from './node-actions.service';
import { TranslationService, AlfrescoApiService, FileModel } from '@alfresco/adf-core';
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar';
-import { NodeEntry, Node } from '@alfresco/js-api';
+import { NodeEntry, Node, VersionPaging } from '@alfresco/js-api';
import { NodeAspectService } from '@alfresco/adf-content-services';
describe('ContentManagementService', () => {
@@ -1462,6 +1462,11 @@ describe('ContentManagementService', () => {
});
describe('versionUpdateDialog', () => {
+ beforeEach(() => {
+ const fakeVersion = { list: { entries: [{ entry: { id: '1.0' } }] } } as VersionPaging;
+ spyOn(contentApi, 'getNodeVersions').and.returnValue(of(fakeVersion));
+ });
+
it('should open dialog with NodeVersionUploadDialogComponent instance', () => {
spyOn(dialog, 'open');
const fakeNode = {
@@ -1473,23 +1478,12 @@ describe('ContentManagementService', () => {
contentManagementService.versionUpdateDialog(fakeNode, fakeFile);
expect(dialog.open['calls'].argsFor(0)[0].name).toBe('NodeVersionsDialogComponent');
- });
-
- it('should return dialog instance reference', () => {
- const mockDialogInstance: any = {
- afterClose: () => {}
- };
- const fakeNode = {
- name: 'lights.jpg',
- id: 'f5e5cb54-200e-41a8-9c21-b5ee77da3992'
- };
- const fakeFile = new FileModel({ name: 'file1.png', size: 10 } as File, null, 'file1');
-
- spyOn(dialog, 'open').and.returnValue(mockDialogInstance);
-
- const dialogRef = contentManagementService.versionUpdateDialog(fakeNode, fakeFile);
-
- expect(dialogRef).toBe(mockDialogInstance);
+ expect(dialog.open['calls'].argsFor(0)[1].data).toEqual({
+ node: fakeNode,
+ file: fakeFile,
+ currentVersion: { id: '1.0' },
+ title: 'VERSION.DIALOG.TITLE'
+ });
});
});
diff --git a/src/app/services/content-management.service.ts b/src/app/services/content-management.service.ts
index e73df9d8c..c6af60f40 100644
--- a/src/app/services/content-management.service.ts
+++ b/src/app/services/content-management.service.ts
@@ -66,7 +66,7 @@ import { MatSnackBar } from '@angular/material/snack-bar';
import { Store } from '@ngrx/store';
import { forkJoin, Observable, of, zip } from 'rxjs';
import { catchError, map, mergeMap, take, tap } from 'rxjs/operators';
-import { NodeVersionsDialogComponent } from '../dialogs/node-versions/node-versions.dialog';
+import { NodeVersionsDialogComponent, NodeVersionDialogData } from '../dialogs/node-versions/node-versions.dialog';
import { NodeActionsService } from './node-actions.service';
interface RestoredNode {
@@ -139,7 +139,7 @@ export class ContentManagementService {
// workaround Shared
if (node.isFile || node.nodeId) {
const dialogRef = this.dialogRef.open(NodeVersionsDialogComponent, {
- data: { node },
+ data: { node, showVersionsOnly: true, title: 'VERSION.DIALOG_ADF.TITLE' } as NodeVersionDialogData,
panelClass: 'adf-version-manager-dialog-panel',
width: '630px'
});
@@ -176,10 +176,12 @@ export class ContentManagementService {
}
versionUpdateDialog(node, file) {
- return this.dialogRef.open(NodeVersionsDialogComponent, {
- data: { node, file, isTypeList: false },
- panelClass: 'adf-version-manager-dialog-panel-upload',
- width: '600px'
+ this.contentApi.getNodeVersions(node.id).subscribe(({ list }) => {
+ this.dialogRef.open(NodeVersionsDialogComponent, {
+ data: { node, file, currentVersion: list.entries[0].entry, title: 'VERSION.DIALOG.TITLE' } as NodeVersionDialogData,
+ panelClass: 'adf-version-manager-dialog-panel-upload',
+ width: '600px'
+ });
});
}