mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-09-09 18:03:21 +00:00
[ADF-] update library to use new js-api 3.0.0 (#4097)
This commit is contained in:
committed by
Eugenio Romano
parent
2acd1b4e26
commit
3ef7d3b7ea
@@ -17,7 +17,7 @@
|
||||
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, SimpleChange } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { PathElementEntity } from 'alfresco-js-api';
|
||||
import { PathElementEntity } from '@alfresco/js-api';
|
||||
import { setupTestBed } from '@alfresco/adf-core';
|
||||
import { fakeNodeWithCreatePermission } from '../mock';
|
||||
import { DocumentListComponent } from '../document-list';
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import { MatSelect } from '@angular/material';
|
||||
import { MinimalNodeEntryEntity, PathElementEntity } from 'alfresco-js-api';
|
||||
import { Node, PathElementEntity } from '@alfresco/js-api';
|
||||
import { DocumentListComponent } from '../document-list';
|
||||
|
||||
@Component({
|
||||
@@ -33,7 +33,7 @@ export class BreadcrumbComponent implements OnInit, OnChanges {
|
||||
|
||||
/** Active node, builds UI based on folderNode.path.elements collection. */
|
||||
@Input()
|
||||
folderNode: MinimalNodeEntryEntity = null;
|
||||
folderNode: Node = null;
|
||||
|
||||
/** (optional) Name of the root element of the breadcrumb. You can use
|
||||
* this property to rename "Company Home" to "Personal Files" for
|
||||
@@ -88,7 +88,7 @@ export class BreadcrumbComponent implements OnInit, OnChanges {
|
||||
|
||||
ngOnChanges(changes: SimpleChanges): void {
|
||||
if (changes.folderNode) {
|
||||
let node: MinimalNodeEntryEntity = null;
|
||||
let node: Node = null;
|
||||
node = this.transform ? this.transform(changes.folderNode.currentValue) : changes.folderNode.currentValue;
|
||||
this.route = this.parseRoute(node);
|
||||
}
|
||||
@@ -121,7 +121,7 @@ export class BreadcrumbComponent implements OnInit, OnChanges {
|
||||
return this.previousNodes ? true : false;
|
||||
}
|
||||
|
||||
parseRoute(node: MinimalNodeEntryEntity): PathElementEntity[] {
|
||||
parseRoute(node: Node): PathElementEntity[] {
|
||||
if (node && node.path) {
|
||||
const route = <PathElementEntity[]> (node.path.elements || []).slice();
|
||||
|
||||
@@ -150,13 +150,13 @@ export class BreadcrumbComponent implements OnInit, OnChanges {
|
||||
}
|
||||
|
||||
private getElementPosition(route: PathElementEntity[], nodeId: string): number {
|
||||
let result: number = -1;
|
||||
let position: number = -1;
|
||||
|
||||
if (route && route.length > 0 && nodeId) {
|
||||
result = route.findIndex((el) => el.id === nodeId);
|
||||
position = route.findIndex((el) => el.id === nodeId);
|
||||
}
|
||||
|
||||
return result;
|
||||
return position;
|
||||
}
|
||||
|
||||
onRoutePathClick(route: PathElementEntity, event?: Event): void {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Component, OnChanges, SimpleChanges, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import { MatSelect } from '@angular/material';
|
||||
import { PathElementEntity, MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { PathElementEntity, Node } from '@alfresco/js-api';
|
||||
import { BreadcrumbComponent } from './breadcrumb.component';
|
||||
|
||||
@Component({
|
||||
@@ -39,7 +39,7 @@ export class DropdownBreadcrumbComponent extends BreadcrumbComponent implements
|
||||
|
||||
ngOnChanges(changes: SimpleChanges): void {
|
||||
if (changes.folderNode) {
|
||||
let node: MinimalNodeEntryEntity = null;
|
||||
let node: Node = null;
|
||||
node = this.transform ? this.transform(changes.folderNode.currentValue) : changes.folderNode.currentValue;
|
||||
this.route = this.parseRoute(node);
|
||||
}
|
||||
|
||||
+3
-3
@@ -17,7 +17,7 @@
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { ContentMetadataCardComponent } from './content-metadata-card.component';
|
||||
import { ContentMetadataComponent } from '../content-metadata/content-metadata.component';
|
||||
import { setupTestBed, PermissionsEnum } from '@alfresco/adf-core';
|
||||
@@ -27,7 +27,7 @@ describe('ContentMetadataCardComponent', () => {
|
||||
|
||||
let component: ContentMetadataCardComponent;
|
||||
let fixture: ComponentFixture<ContentMetadataCardComponent>;
|
||||
let node: MinimalNodeEntryEntity;
|
||||
let node: Node;
|
||||
let preset = 'custom-preset';
|
||||
|
||||
setupTestBed({
|
||||
@@ -37,7 +37,7 @@ describe('ContentMetadataCardComponent', () => {
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(ContentMetadataCardComponent);
|
||||
component = fixture.componentInstance;
|
||||
node = <MinimalNodeEntryEntity> {
|
||||
node = <Node> {
|
||||
aspectNames: [],
|
||||
nodeType: '',
|
||||
content: {},
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { Component, Input, ViewEncapsulation } from '@angular/core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { ContentService, PermissionsEnum } from '@alfresco/adf-core';
|
||||
|
||||
@Component({
|
||||
@@ -29,7 +29,7 @@ import { ContentService, PermissionsEnum } from '@alfresco/adf-core';
|
||||
export class ContentMetadataCardComponent {
|
||||
/** (required) The node entity to fetch metadata about */
|
||||
@Input()
|
||||
node: MinimalNodeEntryEntity;
|
||||
node: Node;
|
||||
|
||||
/** (optional) This flag displays/hides empty metadata
|
||||
* fields.
|
||||
|
||||
+5
-5
@@ -18,7 +18,7 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { ContentMetadataComponent } from './content-metadata.component';
|
||||
import { ContentMetadataService } from '../../services/content-metadata.service';
|
||||
import { CardViewBaseItemModel, CardViewComponent, CardViewUpdateService, NodesApiService, LogService, setupTestBed } from '@alfresco/adf-core';
|
||||
@@ -28,8 +28,8 @@ import { ContentTestingModule } from '../../../testing/content.testing.module';
|
||||
describe('ContentMetadataComponent', () => {
|
||||
let component: ContentMetadataComponent;
|
||||
let fixture: ComponentFixture<ContentMetadataComponent>;
|
||||
let node: MinimalNodeEntryEntity;
|
||||
let folderNode: MinimalNodeEntryEntity;
|
||||
let node: Node;
|
||||
let folderNode: Node;
|
||||
let preset = 'custom-preset';
|
||||
|
||||
setupTestBed({
|
||||
@@ -40,7 +40,7 @@ describe('ContentMetadataComponent', () => {
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(ContentMetadataComponent);
|
||||
component = fixture.componentInstance;
|
||||
node = <MinimalNodeEntryEntity> {
|
||||
node = <Node> {
|
||||
id: 'node-id',
|
||||
aspectNames: [],
|
||||
nodeType: '',
|
||||
@@ -50,7 +50,7 @@ describe('ContentMetadataComponent', () => {
|
||||
modifiedByUser: {}
|
||||
};
|
||||
|
||||
folderNode = <MinimalNodeEntryEntity> {
|
||||
folderNode = <Node> {
|
||||
id: 'folder-id',
|
||||
aspectNames: [],
|
||||
nodeType: '',
|
||||
|
||||
+4
-4
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { Observable, Subscription } from 'rxjs';
|
||||
import { CardViewItem, NodesApiService, LogService, CardViewUpdateService, AlfrescoApiService } from '@alfresco/adf-core';
|
||||
import { ContentMetadataService } from '../../services/content-metadata.service';
|
||||
@@ -33,7 +33,7 @@ import { switchMap } from 'rxjs/operators';
|
||||
export class ContentMetadataComponent implements OnChanges, OnInit, OnDestroy {
|
||||
/** (required) The node entity to fetch metadata about */
|
||||
@Input()
|
||||
node: MinimalNodeEntryEntity;
|
||||
node: Node;
|
||||
|
||||
/** Toggles whether the edit button should be shown */
|
||||
@Input()
|
||||
@@ -95,14 +95,14 @@ export class ContentMetadataComponent implements OnChanges, OnInit, OnDestroy {
|
||||
}
|
||||
}
|
||||
|
||||
private loadProperties(node: MinimalNodeEntryEntity) {
|
||||
private loadProperties(node: Node) {
|
||||
if (node) {
|
||||
this.basicProperties$ = this.contentMetadataService.getBasicProperties(node);
|
||||
this.groupedProperties$ = this.contentMetadataService.getGroupedProperties(node, this.preset);
|
||||
}
|
||||
}
|
||||
|
||||
private saveNode({ changed: nodeBody }): Observable<MinimalNodeEntryEntity> {
|
||||
private saveNode({ changed: nodeBody }): Observable<Node> {
|
||||
return this.nodesApiService.updateNode(this.node.id, nodeBody);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { Injectable } from '@angular/core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { CardViewDateItemModel, CardViewTextItemModel, FileSizePipe } from '@alfresco/adf-core';
|
||||
|
||||
@Injectable({
|
||||
@@ -27,7 +27,7 @@ export class BasicPropertiesService {
|
||||
constructor(private fileSizePipe: FileSizePipe) {
|
||||
}
|
||||
|
||||
getProperties(node: MinimalNodeEntryEntity) {
|
||||
getProperties(node: Node) {
|
||||
|
||||
const sizeInBytes = node.content ? node.content.sizeInBytes : '',
|
||||
mimeTypeName = node.content ? node.content.mimeTypeName : '',
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { Injectable } from '@angular/core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { BasicPropertiesService } from './basic-properties.service';
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { PropertyGroupTranslatorService } from './property-groups-translator.service';
|
||||
@@ -37,11 +37,11 @@ export class ContentMetadataService {
|
||||
private propertyDescriptorsService: PropertyDescriptorsService) {
|
||||
}
|
||||
|
||||
getBasicProperties(node: MinimalNodeEntryEntity): Observable<CardViewItem[]> {
|
||||
getBasicProperties(node: Node): Observable<CardViewItem[]> {
|
||||
return of(this.basicPropertiesService.getProperties(node));
|
||||
}
|
||||
|
||||
getGroupedProperties(node: MinimalNodeEntryEntity, presetName: string = 'default'): Observable<CardViewGroup[]> {
|
||||
getGroupedProperties(node: Node, presetName: string = 'default'): Observable<CardViewGroup[]> {
|
||||
let groupedProperties = of([]);
|
||||
|
||||
if (node.aspectNames) {
|
||||
|
||||
@@ -19,7 +19,7 @@ import { TestBed } from '@angular/core/testing';
|
||||
import { PropertyDescriptorsService } from './property-descriptors.service';
|
||||
import { AlfrescoApiService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { of } from 'rxjs';
|
||||
import { ClassesApi } from 'alfresco-js-api';
|
||||
import { ClassesApi } from '@alfresco/js-api';
|
||||
import { PropertyGroup } from '../interfaces/content-metadata.interfaces';
|
||||
import { ContentTestingModule } from '../../testing/content.testing.module';
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { TestBed, fakeAsync, tick } from '@angular/core/testing';
|
||||
import { MinimalNodeEntryEntity, SitePaging } from 'alfresco-js-api';
|
||||
import { NodeEntry, Node, SitePaging, Site } from '@alfresco/js-api';
|
||||
import { AppConfigService, SitesService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { DocumentListService } from '../document-list/services/document-list.service';
|
||||
import { ContentNodeDialogService } from './content-node-dialog.service';
|
||||
@@ -24,13 +24,20 @@ import { MatDialog } from '@angular/material';
|
||||
import { Subject, of } from 'rxjs';
|
||||
import { ContentTestingModule } from '../testing/content.testing.module';
|
||||
|
||||
const fakeNode: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
|
||||
const fakeNodeEntry: NodeEntry = <NodeEntry> {
|
||||
entry: {
|
||||
id: 'fake',
|
||||
name: 'fake-name'
|
||||
}
|
||||
};
|
||||
|
||||
const fakeSiteList: SitePaging = {
|
||||
list: {
|
||||
const fakeNode: Node = <Node> {
|
||||
id: 'fake',
|
||||
name: 'fake-name'
|
||||
};
|
||||
|
||||
const fakeSiteList: SitePaging = new SitePaging({
|
||||
list: {
|
||||
pagination: {
|
||||
count: 1,
|
||||
hasMoreItems: false,
|
||||
@@ -48,7 +55,7 @@ const fakeSiteList: SitePaging = {
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
describe('ContentNodeDialogService', () => {
|
||||
|
||||
@@ -82,12 +89,13 @@ describe('ContentNodeDialogService', () => {
|
||||
});
|
||||
|
||||
it('should not open the lock node dialog if have no permission', () => {
|
||||
const testNode: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
|
||||
const testNode: Node = <Node> {
|
||||
id: 'fake',
|
||||
isFile: false
|
||||
};
|
||||
|
||||
service.openLockNodeDialog(testNode).subscribe(() => {}, (error) => {
|
||||
service.openLockNodeDialog(testNode).subscribe(() => {
|
||||
}, (error) => {
|
||||
expect(error).toBe('OPERATION.FAIL.NODE.NO_PERMISSION');
|
||||
});
|
||||
});
|
||||
@@ -103,7 +111,8 @@ describe('ContentNodeDialogService', () => {
|
||||
|
||||
it('should NOT be able to open the dialog when node has NOT permission', () => {
|
||||
service.openCopyMoveDialog('fake-action', fakeNode, 'noperm').subscribe(
|
||||
() => { },
|
||||
() => {
|
||||
},
|
||||
(error) => {
|
||||
expect(spyOnDialogOpen).not.toHaveBeenCalled();
|
||||
expect(JSON.parse(error.message).error.statusCode).toBe(403);
|
||||
@@ -111,24 +120,27 @@ describe('ContentNodeDialogService', () => {
|
||||
});
|
||||
|
||||
it('should be able to open the dialog using a folder id', fakeAsync(() => {
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNode));
|
||||
service.openFileBrowseDialogByFolderId('fake-folder-id').subscribe(() => {});
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNodeEntry));
|
||||
service.openFileBrowseDialogByFolderId('fake-folder-id').subscribe(() => {
|
||||
});
|
||||
tick();
|
||||
expect(spyOnDialogOpen).toHaveBeenCalled();
|
||||
}));
|
||||
|
||||
it('should be able to open the dialog for files using the first user site', fakeAsync(() => {
|
||||
spyOn(sitesService, 'getSites').and.returnValue(of(fakeSiteList));
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNode));
|
||||
service.openFileBrowseDialogBySite().subscribe(() => {});
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNodeEntry));
|
||||
service.openFileBrowseDialogBySite().subscribe(() => {
|
||||
});
|
||||
tick();
|
||||
expect(spyOnDialogOpen).toHaveBeenCalled();
|
||||
}));
|
||||
|
||||
it('should be able to open the dialog for folder using the first user site', fakeAsync(() => {
|
||||
spyOn(sitesService, 'getSites').and.returnValue(of(fakeSiteList));
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNode));
|
||||
service.openFolderBrowseDialogBySite().subscribe(() => {});
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNodeEntry));
|
||||
service.openFolderBrowseDialogBySite().subscribe(() => {
|
||||
});
|
||||
tick();
|
||||
expect(spyOnDialogOpen).toHaveBeenCalled();
|
||||
}));
|
||||
@@ -140,23 +152,23 @@ describe('ContentNodeDialogService', () => {
|
||||
});
|
||||
|
||||
describe('for the copy/move dialog', () => {
|
||||
const siteNode: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
|
||||
const siteNode: Node = <Node> {
|
||||
id: 'site-node-id',
|
||||
nodeType: 'st:site'
|
||||
};
|
||||
const sites: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
|
||||
const sites: Node = <Node> {
|
||||
id: 'sites-id',
|
||||
nodeType: 'st:sites'
|
||||
};
|
||||
const site: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
|
||||
const site: Site = <Site> {
|
||||
id: 'site-id',
|
||||
guid: 'any-guid'
|
||||
};
|
||||
const nodeEntryWithRightPermissions: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
|
||||
const nodeEntryWithRightPermissions: Node = <Node> {
|
||||
id: 'node-id',
|
||||
allowableOperations: ['create']
|
||||
};
|
||||
const nodeEntryNoPermissions: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
|
||||
const nodeEntryNoPermissions: Node = <Node> {
|
||||
id: 'node-id',
|
||||
allowableOperations: []
|
||||
};
|
||||
@@ -192,7 +204,7 @@ describe('ContentNodeDialogService', () => {
|
||||
beforeEach(() => {
|
||||
spyOnDialogOpen.and.callFake((contentNodeSelectorComponent: any, config: any) => {
|
||||
testContentNodeSelectorComponentData = config.data;
|
||||
return {componentInstance: {}};
|
||||
return { componentInstance: {} };
|
||||
});
|
||||
service.openCopyMoveDialog('fake-action', fakeNode, '!update');
|
||||
});
|
||||
|
||||
@@ -20,7 +20,7 @@ import { EventEmitter, Injectable, Output } from '@angular/core';
|
||||
import { ContentService } from '@alfresco/adf-core';
|
||||
import { Subject, Observable, throwError } from 'rxjs';
|
||||
import { ShareDataRow } from '../document-list/data/share-data-row.model';
|
||||
import { MinimalNodeEntryEntity, SitePaging } from 'alfresco-js-api';
|
||||
import { Node, NodeEntry, SitePaging } from '@alfresco/js-api';
|
||||
import { DataColumn, SitesService, TranslationService, PermissionsEnum } from '@alfresco/adf-core';
|
||||
import { DocumentListService } from '../document-list/services/document-list.service';
|
||||
import { ContentNodeSelectorComponent } from './content-node-selector.component';
|
||||
@@ -49,9 +49,9 @@ export class ContentNodeDialogService {
|
||||
* @param folderNodeId ID of the folder to use
|
||||
* @returns Information about the selected file(s)
|
||||
*/
|
||||
openFileBrowseDialogByFolderId(folderNodeId: string): Observable<MinimalNodeEntryEntity[]> {
|
||||
return this.documentListService.getFolderNode(folderNodeId).pipe(switchMap((node: MinimalNodeEntryEntity) => {
|
||||
return this.openUploadFileDialog('Choose', node);
|
||||
openFileBrowseDialogByFolderId(folderNodeId: string): Observable<Node[]> {
|
||||
return this.documentListService.getFolderNode(folderNodeId).pipe(switchMap((nodeEntry: NodeEntry) => {
|
||||
return this.openUploadFileDialog('Choose', nodeEntry.entry);
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ export class ContentNodeDialogService {
|
||||
* @param contentEntry Node to lock
|
||||
* @returns Error/status message (if any)
|
||||
*/
|
||||
public openLockNodeDialog(contentEntry: MinimalNodeEntryEntity): Subject<string> {
|
||||
public openLockNodeDialog(contentEntry: Node): Subject<string> {
|
||||
const observable: Subject<string> = new Subject<string>();
|
||||
|
||||
if (this.contentService.hasPermission(contentEntry, PermissionsEnum.LOCK)) {
|
||||
@@ -85,7 +85,7 @@ export class ContentNodeDialogService {
|
||||
* Opens a file browser at a chosen site location.
|
||||
* @returns Information about the selected file(s)
|
||||
*/
|
||||
openFileBrowseDialogBySite(): Observable<MinimalNodeEntryEntity[]> {
|
||||
openFileBrowseDialogBySite(): Observable<Node[]> {
|
||||
return this.siteService.getSites().pipe(switchMap((response: SitePaging) => {
|
||||
return this.openFileBrowseDialogByFolderId(response.list.entries[0].entry.guid);
|
||||
}));
|
||||
@@ -95,7 +95,7 @@ export class ContentNodeDialogService {
|
||||
* Opens a folder browser at a chosen site location.
|
||||
* @returns Information about the selected folder(s)
|
||||
*/
|
||||
openFolderBrowseDialogBySite(): Observable<MinimalNodeEntryEntity[]> {
|
||||
openFolderBrowseDialogBySite(): Observable<Node[]> {
|
||||
return this.siteService.getSites().pipe(switchMap((response: SitePaging) => {
|
||||
return this.openFolderBrowseDialogByFolderId(response.list.entries[0].entry.guid);
|
||||
}));
|
||||
@@ -106,9 +106,9 @@ export class ContentNodeDialogService {
|
||||
* @param folderNodeId ID of the folder to use
|
||||
* @returns Information about the selected folder(s)
|
||||
*/
|
||||
openFolderBrowseDialogByFolderId(folderNodeId: string): Observable<MinimalNodeEntryEntity[]> {
|
||||
return this.documentListService.getFolderNode(folderNodeId).pipe(switchMap((node: MinimalNodeEntryEntity) => {
|
||||
return this.openUploadFolderDialog('Choose', node);
|
||||
openFolderBrowseDialogByFolderId(folderNodeId: string): Observable<Node[]> {
|
||||
return this.documentListService.getFolderNode(folderNodeId).pipe(switchMap((node: NodeEntry) => {
|
||||
return this.openUploadFolderDialog('Choose', node.entry);
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -119,10 +119,10 @@ export class ContentNodeDialogService {
|
||||
* @param permission Permission for the operation
|
||||
* @returns Information about files that were copied/moved
|
||||
*/
|
||||
openCopyMoveDialog(action: string, contentEntry: MinimalNodeEntryEntity, permission?: string): Observable<MinimalNodeEntryEntity[]> {
|
||||
openCopyMoveDialog(action: string, contentEntry: Node, permission?: string): Observable<Node[]> {
|
||||
if (this.contentService.hasPermission(contentEntry, permission)) {
|
||||
|
||||
const select = new Subject<MinimalNodeEntryEntity[]>();
|
||||
const select = new Subject<Node[]>();
|
||||
select.subscribe({
|
||||
complete: this.close.bind(this)
|
||||
});
|
||||
@@ -164,8 +164,8 @@ export class ContentNodeDialogService {
|
||||
* @param contentEntry Item to upload
|
||||
* @returns Information about the chosen folder(s)
|
||||
*/
|
||||
openUploadFolderDialog(action: string, contentEntry: MinimalNodeEntryEntity): Observable<MinimalNodeEntryEntity[]> {
|
||||
const select = new Subject<MinimalNodeEntryEntity[]>();
|
||||
openUploadFolderDialog(action: string, contentEntry: Node): Observable<Node[]> {
|
||||
const select = new Subject<Node[]>();
|
||||
select.subscribe({
|
||||
complete: this.close.bind(this)
|
||||
});
|
||||
@@ -190,8 +190,8 @@ export class ContentNodeDialogService {
|
||||
* @param contentEntry Item to upload
|
||||
* @returns Information about the chosen file(s)
|
||||
*/
|
||||
openUploadFileDialog(action: string, contentEntry: MinimalNodeEntryEntity): Observable<MinimalNodeEntryEntity[]> {
|
||||
const select = new Subject<MinimalNodeEntryEntity[]>();
|
||||
openUploadFileDialog(action: string, contentEntry: Node): Observable<Node[]> {
|
||||
const select = new Subject<Node[]>();
|
||||
select.subscribe({
|
||||
complete: this.close.bind(this)
|
||||
});
|
||||
@@ -214,7 +214,7 @@ export class ContentNodeDialogService {
|
||||
}
|
||||
|
||||
private imageResolver(row: ShareDataRow, col: DataColumn): string | null {
|
||||
const entry: MinimalNodeEntryEntity = row.node.entry;
|
||||
const entry: Node = row.node.entry;
|
||||
if (!this.contentService.hasPermission(entry, 'create')) {
|
||||
return this.documentListService.getMimeTypeIcon('disable/folder');
|
||||
}
|
||||
@@ -223,7 +223,7 @@ export class ContentNodeDialogService {
|
||||
}
|
||||
|
||||
private rowFilter(currentNodeId, row: ShareDataRow): boolean {
|
||||
const node: MinimalNodeEntryEntity = row.node.entry;
|
||||
const node: Node = row.node.entry;
|
||||
|
||||
if (node.id === currentNodeId || node.isFile) {
|
||||
return false;
|
||||
@@ -232,23 +232,23 @@ export class ContentNodeDialogService {
|
||||
}
|
||||
}
|
||||
|
||||
private isNodeFile(entry: MinimalNodeEntryEntity): boolean {
|
||||
private isNodeFile(entry: Node): boolean {
|
||||
return entry.isFile;
|
||||
}
|
||||
|
||||
private hasPermissionOnNodeFolder(entry: MinimalNodeEntryEntity): boolean {
|
||||
private hasPermissionOnNodeFolder(entry: Node): boolean {
|
||||
return this.isNodeFolder(entry) && this.contentService.hasPermission(entry, 'create');
|
||||
}
|
||||
|
||||
private isNodeFolder(entry: MinimalNodeEntryEntity): boolean {
|
||||
private isNodeFolder(entry: Node): boolean {
|
||||
return entry.isFolder;
|
||||
}
|
||||
|
||||
private isCopyMoveSelectionValid(entry: MinimalNodeEntryEntity): boolean {
|
||||
private isCopyMoveSelectionValid(entry: Node): boolean {
|
||||
return this.hasEntityCreatePermission(entry) && !this.isSite(entry);
|
||||
}
|
||||
|
||||
private hasEntityCreatePermission(entry: MinimalNodeEntryEntity): boolean {
|
||||
private hasEntityCreatePermission(entry: Node): boolean {
|
||||
return this.contentService.hasPermission(entry, 'create');
|
||||
}
|
||||
|
||||
|
||||
+18
-18
@@ -18,13 +18,13 @@
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, fakeAsync, tick, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { MinimalNodeEntryEntity, SiteEntry, SitePaging } from 'alfresco-js-api';
|
||||
import { NodeEntry, Node, SiteEntry, SitePaging } from '@alfresco/js-api';
|
||||
import { SearchService, SitesService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { Observable, Observer, of, throwError } from 'rxjs';
|
||||
import { DropdownBreadcrumbComponent } from '../breadcrumb';
|
||||
import { ContentNodeSelectorPanelComponent } from './content-node-selector-panel.component';
|
||||
import { ContentNodeSelectorService } from './content-node-selector.service';
|
||||
import { NodePaging } from 'alfresco-js-api';
|
||||
import { NodePaging } from '@alfresco/js-api';
|
||||
import { ContentTestingModule } from '../testing/content.testing.module';
|
||||
import { DocumentListService } from '../document-list/services/document-list.service';
|
||||
import { DocumentListComponent } from '../document-list/components/document-list.component';
|
||||
@@ -98,7 +98,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
describe('Parameters', () => {
|
||||
|
||||
it('should trigger the select event when selection has been made', (done) => {
|
||||
const expectedNode = <MinimalNodeEntryEntity> {};
|
||||
const expectedNode = <Node> {};
|
||||
component.select.subscribe((nodes) => {
|
||||
expect(nodes.length).toBe(1);
|
||||
expect(nodes[0]).toBe(expectedNode);
|
||||
@@ -116,10 +116,10 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
expectedDefaultFolderNode;
|
||||
|
||||
beforeEach(() => {
|
||||
expectedDefaultFolderNode = <MinimalNodeEntryEntity> { path: { elements: [] } };
|
||||
expectedDefaultFolderNode = <Node> { path: { elements: [] } };
|
||||
documentListService = TestBed.get(DocumentListService);
|
||||
sitesService = TestBed.get(SitesService);
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(expectedDefaultFolderNode));
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(<NodeEntry> { entry: { path: { elements: [] } } }));
|
||||
spyOn(documentListService, 'getFolder').and.returnValue(throwError('No results for test'));
|
||||
spyOn(sitesService, 'getSites').and.returnValue(of({ list: { entries: [] } }));
|
||||
spyOn(component.documentList, 'loadFolderNodesByFolderNodeId').and.returnValue(Promise.resolve());
|
||||
@@ -134,7 +134,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
fixture.detectChanges();
|
||||
const breadcrumb = fixture.debugElement.query(By.directive(DropdownBreadcrumbComponent));
|
||||
expect(breadcrumb).not.toBeNull();
|
||||
expect(breadcrumb.componentInstance.folderNode).toBe(expectedDefaultFolderNode);
|
||||
expect(breadcrumb.componentInstance.folderNode).toEqual(expectedDefaultFolderNode);
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -189,7 +189,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
|
||||
tick(debounceSearch);
|
||||
|
||||
const chosenNode = <MinimalNodeEntryEntity> { path: { elements: ['one'] } };
|
||||
const chosenNode = new Node({ path: { elements: ['one'] } });
|
||||
component.onNodeSelect({ detail: { node: { entry: chosenNode } } });
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -210,13 +210,13 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
component.onFolderChange();
|
||||
fixture.detectChanges();
|
||||
|
||||
const chosenNode = <MinimalNodeEntryEntity> { path: { elements: [] } };
|
||||
const chosenNode = <Node> { path: { elements: [] } };
|
||||
component.onNodeSelect({ detail: { node: { entry: chosenNode } } });
|
||||
fixture.detectChanges();
|
||||
|
||||
const breadcrumb = fixture.debugElement.query(By.directive(DropdownBreadcrumbComponent));
|
||||
expect(breadcrumb).not.toBeNull();
|
||||
expect(breadcrumb.componentInstance.folderNode).toBe(expectedDefaultFolderNode);
|
||||
expect(breadcrumb.componentInstance.folderNode).toEqual(expectedDefaultFolderNode);
|
||||
done();
|
||||
}, 300);
|
||||
});
|
||||
@@ -229,13 +229,13 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
expect(component.breadcrumbTransform).toBeNull();
|
||||
|
||||
const breadcrumb = fixture.debugElement.query(By.directive(DropdownBreadcrumbComponent));
|
||||
expect(breadcrumb.componentInstance.folderNode).toBe(expectedDefaultFolderNode);
|
||||
expect(breadcrumb.componentInstance.folderNode).toEqual(expectedDefaultFolderNode);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should make changes to breadcrumb\'s folderNode if breadcrumbTransform is defined', (done) => {
|
||||
const transformedFolderNode = <MinimalNodeEntryEntity> {
|
||||
const transformedFolderNode = <Node> {
|
||||
id: 'trans-node',
|
||||
name: 'trans-node-name',
|
||||
path: { elements: [{ id: 'testId', name: 'testName' }] }
|
||||
@@ -288,7 +288,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
const documentListService = TestBed.get(DocumentListService);
|
||||
const expectedDefaultFolderNode = <MinimalNodeEntryEntity> { path: { elements: [] } };
|
||||
const expectedDefaultFolderNode = <NodeEntry> { entry: { path: { elements: [] } } };
|
||||
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(expectedDefaultFolderNode));
|
||||
spyOn(component.documentList, 'loadFolderNodesByFolderNodeId').and.returnValue(Promise.resolve());
|
||||
@@ -319,7 +319,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
}));
|
||||
|
||||
it('should reset the currently chosen node in case of starting a new search', fakeAsync(() => {
|
||||
component.chosenNode = <MinimalNodeEntryEntity> {};
|
||||
component.chosenNode = <Node> {};
|
||||
typeToSearchBox('kakarot');
|
||||
|
||||
tick(debounceSearch);
|
||||
@@ -458,7 +458,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
}));
|
||||
|
||||
it('should clear the search field, nodes and chosenNode when clicking on the X (clear) icon', () => {
|
||||
component.chosenNode = <MinimalNodeEntryEntity> {};
|
||||
component.chosenNode = <Node> {};
|
||||
component.nodes = {
|
||||
list: {
|
||||
entries: [{ entry: component.chosenNode }]
|
||||
@@ -684,7 +684,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
|
||||
describe('Chosen node', () => {
|
||||
|
||||
const entry: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {};
|
||||
const entry: Node = <Node> {};
|
||||
const nodePage: NodePaging = <NodePaging> { list: {}, pagination: {} };
|
||||
let hasPermission;
|
||||
|
||||
@@ -783,7 +783,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
|
||||
it('should be null when the chosenNode is reset', async(() => {
|
||||
hasPermission = true;
|
||||
component.onNodeSelect({ detail: { node: { entry: <MinimalNodeEntryEntity> {} } } });
|
||||
component.onNodeSelect({ detail: { node: { entry: <Node> {} } } });
|
||||
fixture.detectChanges();
|
||||
|
||||
component.select.subscribe((nodes) => {
|
||||
@@ -833,7 +833,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
|
||||
it('should be null when the chosenNode is reset', async(() => {
|
||||
fixture.detectChanges();
|
||||
component.onNodeSelect({ detail: { node: { entry: <MinimalNodeEntryEntity> {} } } });
|
||||
component.onNodeSelect({ detail: { node: { entry: <Node> {} } } });
|
||||
fixture.detectChanges();
|
||||
|
||||
component.select.subscribe((nodes) => {
|
||||
@@ -885,7 +885,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
it('should be null when the chosenNode is reset', async(() => {
|
||||
fixture.detectChanges();
|
||||
|
||||
component.onNodeSelect({ detail: { node: { entry: <MinimalNodeEntryEntity> {} } } });
|
||||
component.onNodeSelect({ detail: { node: { entry: <Node> {} } } });
|
||||
fixture.detectChanges();
|
||||
|
||||
component.select.subscribe((nodes) => {
|
||||
|
||||
+10
-10
@@ -21,7 +21,7 @@ import {
|
||||
PaginatedComponent, PaginationModel
|
||||
} from '@alfresco/adf-core';
|
||||
import { FormControl } from '@angular/forms';
|
||||
import { MinimalNodeEntryEntity, NodePaging, Pagination, SiteEntry, SitePaging } from 'alfresco-js-api';
|
||||
import { Node, NodePaging, Pagination, SiteEntry, SitePaging } from '@alfresco/js-api';
|
||||
import { DocumentListComponent, PaginationStrategy } from '../document-list/components/document-list.component';
|
||||
import { RowFilter } from '../document-list/data/row-filter.model';
|
||||
import { ImageResolver } from '../document-list/data/image-resolver.model';
|
||||
@@ -30,7 +30,7 @@ import { debounceTime } from 'rxjs/operators';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
import { CustomResourcesService } from '../document-list/services/custom-resources.service';
|
||||
|
||||
export type ValidationFunction = (entry: MinimalNodeEntryEntity) => boolean;
|
||||
export type ValidationFunction = (entry: Node) => boolean;
|
||||
|
||||
const defaultValidation = () => true;
|
||||
|
||||
@@ -95,7 +95,7 @@ export class ContentNodeSelectorPanelComponent implements OnInit, PaginatedCompo
|
||||
|
||||
/** Emitted when the user has chosen an item. */
|
||||
@Output()
|
||||
select: EventEmitter<MinimalNodeEntryEntity[]> = new EventEmitter<MinimalNodeEntryEntity[]>();
|
||||
select: EventEmitter<Node[]> = new EventEmitter<Node[]>();
|
||||
|
||||
@ViewChild('documentList')
|
||||
documentList: DocumentListComponent;
|
||||
@@ -109,7 +109,7 @@ export class ContentNodeSelectorPanelComponent implements OnInit, PaginatedCompo
|
||||
showingSearchResults: boolean = false;
|
||||
loadingSearchResults: boolean = false;
|
||||
inDialog: boolean = false;
|
||||
_chosenNode: MinimalNodeEntryEntity = null;
|
||||
_chosenNode: Node = null;
|
||||
folderIdToShow: string | null = null;
|
||||
paginationStrategy: PaginationStrategy = PaginationStrategy.Infinite;
|
||||
pagination: BehaviorSubject<PaginationModel>;
|
||||
@@ -141,7 +141,7 @@ export class ContentNodeSelectorPanelComponent implements OnInit, PaginatedCompo
|
||||
this.pagination = new BehaviorSubject<PaginationModel>(defaultPagination);
|
||||
}
|
||||
|
||||
set chosenNode(value: MinimalNodeEntryEntity) {
|
||||
set chosenNode(value: Node) {
|
||||
this._chosenNode = value;
|
||||
let valuesArray = null;
|
||||
if (value) {
|
||||
@@ -184,8 +184,8 @@ export class ContentNodeSelectorPanelComponent implements OnInit, PaginatedCompo
|
||||
/**
|
||||
* Returns the actually selected|entered folder node or null in case of searching for the breadcrumb
|
||||
*/
|
||||
get breadcrumbFolderNode(): MinimalNodeEntryEntity | null {
|
||||
let folderNode: MinimalNodeEntryEntity;
|
||||
get breadcrumbFolderNode(): Node | null {
|
||||
let folderNode: Node;
|
||||
|
||||
if (this.showingSearchResults && this.chosenNode) {
|
||||
folderNode = this.chosenNode;
|
||||
@@ -345,7 +345,7 @@ export class ContentNodeSelectorPanelComponent implements OnInit, PaginatedCompo
|
||||
*
|
||||
* @param entry
|
||||
*/
|
||||
private attemptNodeSelection(entry: MinimalNodeEntryEntity): void {
|
||||
private attemptNodeSelection(entry: Node): void {
|
||||
if (this.isSelectionValid(entry)) {
|
||||
this.chosenNode = entry;
|
||||
} else {
|
||||
@@ -369,8 +369,8 @@ export class ContentNodeSelectorPanelComponent implements OnInit, PaginatedCompo
|
||||
this.attemptNodeSelection(event.detail.node.entry);
|
||||
}
|
||||
|
||||
onNodeDoubleClick(e: CustomEvent) {
|
||||
const node: any = e.detail.node.entry;
|
||||
onNodeDoubleClick(customEvent: CustomEvent) {
|
||||
const node: any = customEvent.detail.node.entry;
|
||||
|
||||
if (node && node.guid) {
|
||||
const options = {
|
||||
|
||||
+3
-3
@@ -15,7 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { MinimalNodeEntryEntity, SitePaging } from 'alfresco-js-api';
|
||||
import { Node, SitePaging } from '@alfresco/js-api';
|
||||
import { Subject } from 'rxjs';
|
||||
|
||||
export interface ContentNodeSelectorComponentData {
|
||||
@@ -26,7 +26,7 @@ export interface ContentNodeSelectorComponentData {
|
||||
dropdownSiteList?: SitePaging;
|
||||
rowFilter?: any;
|
||||
imageResolver?: any;
|
||||
isSelectionValid?: (entry: MinimalNodeEntryEntity) => boolean;
|
||||
isSelectionValid?: (entry: Node) => boolean;
|
||||
breadcrumbTransform?: (node) => any;
|
||||
select: Subject<MinimalNodeEntryEntity[]>;
|
||||
select: Subject<Node[]>;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { EventEmitter } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ContentNodeSelectorComponent } from './content-node-selector.component';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { setupTestBed, SitesService } from '@alfresco/adf-core';
|
||||
import { of } from 'rxjs';
|
||||
@@ -35,7 +35,7 @@ describe('ContentNodeSelectorDialogComponent', () => {
|
||||
let data: any = {
|
||||
title: 'Move along citizen...',
|
||||
actionName: 'move',
|
||||
select: new EventEmitter<MinimalNodeEntryEntity>(),
|
||||
select: new EventEmitter<Node>(),
|
||||
rowFilter: () => {
|
||||
},
|
||||
imageResolver: () => 'piccolo',
|
||||
@@ -140,7 +140,7 @@ describe('ContentNodeSelectorDialogComponent', () => {
|
||||
});
|
||||
|
||||
it('should be enabled when a node is chosen', () => {
|
||||
component.onSelect([{ id: 'fake' }]);
|
||||
component.onSelect([new Node({ id: 'fake' })]);
|
||||
fixture.detectChanges();
|
||||
|
||||
let actionButton = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-choose"]'));
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Component, Inject, ViewEncapsulation, Input } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA } from '@angular/material';
|
||||
import { MinimalNodeEntryEntity, SitePaging } from 'alfresco-js-api';
|
||||
import { Node, SitePaging } from '@alfresco/js-api';
|
||||
import { ContentNodeSelectorComponentData } from './content-node-selector.component-data.interface';
|
||||
import { RowFilter } from '../document-list/data/row-filter.model';
|
||||
import { ImageResolver } from '../document-list/data/image-resolver.model';
|
||||
@@ -73,7 +73,7 @@ export class ContentNodeSelectorComponent {
|
||||
pageSize: number;
|
||||
|
||||
buttonActionName: string;
|
||||
chosenNode: MinimalNodeEntryEntity[];
|
||||
chosenNode: Node[];
|
||||
|
||||
constructor(@Inject(MAT_DIALOG_DATA) public data: ContentNodeSelectorComponentData) {
|
||||
this.buttonActionName = data.actionName ? `NODE_SELECTOR.${data.actionName.toUpperCase()}` : 'NODE_SELECTOR.CHOOSE';
|
||||
@@ -83,7 +83,7 @@ export class ContentNodeSelectorComponent {
|
||||
this.data.select.complete();
|
||||
}
|
||||
|
||||
onSelect(nodeList: MinimalNodeEntryEntity[]) {
|
||||
onSelect(nodeList: Node[]) {
|
||||
this.chosenNode = nodeList;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { QueryBody } from 'alfresco-js-api';
|
||||
import { QueryBody } from '@alfresco/js-api';
|
||||
import { SearchService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { ContentNodeSelectorService } from './content-node-selector.service';
|
||||
import { ContentTestingModule } from '../testing/content.testing.module';
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { SearchService } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { NodePaging } from 'alfresco-js-api';
|
||||
import { NodePaging } from '@alfresco/js-api';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
/**
|
||||
|
||||
@@ -78,10 +78,6 @@ describe('ShareDialogComponent', () => {
|
||||
};
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fixture.destroy();
|
||||
});
|
||||
|
||||
it(`should toggle share action when property 'sharedId' does not exists`, () => {
|
||||
spyOn(sharedLinksApiService, 'createSharedLinks').and.returnValue(of({
|
||||
entry: { id: 'sharedId', sharedId: 'sharedId' }
|
||||
|
||||
@@ -34,7 +34,7 @@ import {
|
||||
ContentService,
|
||||
RenditionsService
|
||||
} from '@alfresco/adf-core';
|
||||
import { SharedLinkEntry, MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { SharedLinkEntry, Node } from '@alfresco/js-api';
|
||||
import { ConfirmDialogComponent } from '../dialogs/confirm.dialog';
|
||||
import moment from 'moment-es6';
|
||||
|
||||
@@ -195,7 +195,7 @@ export class ShareDialogComponent implements OnInit, OnDestroy {
|
||||
});
|
||||
}
|
||||
|
||||
private updateNode(updates): Observable<MinimalNodeEntryEntity> {
|
||||
private updateNode(updates): Observable<Node> {
|
||||
return this.nodesApiService.updateNode(
|
||||
this.data.node.entry.id,
|
||||
{
|
||||
|
||||
@@ -28,7 +28,7 @@ import { ContentNodeShareModule } from './content-node-share.module';
|
||||
@Component({
|
||||
selector: 'adf-node-share-test-component',
|
||||
template: `
|
||||
<button
|
||||
<button
|
||||
[disabled]="!shareRef.isFile"
|
||||
#shareRef="adfShare"
|
||||
[baseShareUrl]="baseShareUrl"
|
||||
@@ -75,7 +75,9 @@ describe('NodeSharedDirective', () => {
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fixture.destroy();
|
||||
if (fixture) {
|
||||
fixture.destroy();
|
||||
}
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -88,67 +90,61 @@ describe('NodeSharedDirective', () => {
|
||||
};
|
||||
});
|
||||
|
||||
it('should have share button disabled when selection is empty', async() => {
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(shareButtonElement.disabled).toBe(true);
|
||||
});
|
||||
it('should have share button disabled when selection is empty', async () => {
|
||||
fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
expect(shareButtonElement.disabled).toBe(true);
|
||||
});
|
||||
|
||||
it('should have button enabled when selection is not empty', () => {
|
||||
it('should have button enabled when selection is not empty', async () => {
|
||||
component.documentList.selection = [selection];
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(shareButtonElement.disabled).toBe(false);
|
||||
});
|
||||
fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
expect(shareButtonElement.disabled).toBe(false);
|
||||
});
|
||||
|
||||
it('should have button disabled when selection is not a file', () => {
|
||||
it('should have button disabled when selection is not a file', async () => {
|
||||
selection.entry.isFile = false;
|
||||
component.documentList.selection = [selection];
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(shareButtonElement.disabled).toBe(true);
|
||||
});
|
||||
fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
expect(shareButtonElement.disabled).toBe(true);
|
||||
});
|
||||
|
||||
it('should indicate if file is not shared', () => {
|
||||
it('should indicate if file is not shared', async () => {
|
||||
component.documentList.selection = [selection];
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(shareButtonElement.title).toBe('Not Shared');
|
||||
});
|
||||
fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
expect(shareButtonElement.title).toBe('Not Shared');
|
||||
});
|
||||
|
||||
it('should indicate if file is already shared', () => {
|
||||
it('should indicate if file is already shared', async () => {
|
||||
selection.entry.properties['qshare:sharedId'] = 'someId';
|
||||
component.documentList.selection = [selection];
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable();
|
||||
|
||||
fixture.detectChanges();
|
||||
expect(shareButtonElement.title).toBe('Shared');
|
||||
});
|
||||
|
||||
it('should open share dialog on click event', async () => {
|
||||
selection.entry.properties['qshare:sharedId'] = 'someId';
|
||||
component.documentList.selection = [selection];
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(shareButtonElement.title).toBe('Shared');
|
||||
});
|
||||
});
|
||||
|
||||
it('should open share dialog on click event', () => {
|
||||
selection.entry.properties['qshare:sharedId'] = 'someId';
|
||||
component.documentList.selection = [selection];
|
||||
fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
shareButtonElement.click();
|
||||
fixture.detectChanges();
|
||||
|
||||
shareButtonElement.click();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(document.querySelector('.adf-share-link-dialog')).not.toBe(null);
|
||||
});
|
||||
expect(document.querySelector('.adf-share-link-dialog')).not.toBe(null);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Directive, Input, HostListener, OnChanges, NgZone } from '@angular/core';
|
||||
import { MatDialog } from '@angular/material';
|
||||
import { MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
|
||||
import { ShareDialogComponent } from './content-node-share.dialog';
|
||||
|
||||
@@ -33,7 +33,7 @@ export class NodeSharedDirective implements OnChanges {
|
||||
/** Node to share. */
|
||||
// tslint:disable-next-line:no-input-rename
|
||||
@Input('adf-share')
|
||||
node: MinimalNodeEntity;
|
||||
node: NodeEntry;
|
||||
|
||||
/** Prefix to add to the generated link. */
|
||||
@Input()
|
||||
@@ -48,7 +48,7 @@ export class NodeSharedDirective implements OnChanges {
|
||||
|
||||
constructor(private dialog: MatDialog, private zone: NgZone) {}
|
||||
|
||||
shareNode(node: MinimalNodeEntity) {
|
||||
shareNode(node: NodeEntry) {
|
||||
if (node && node.entry && node.entry.isFile) {
|
||||
this.dialog.open(ShareDialogComponent, {
|
||||
width: '600px',
|
||||
|
||||
@@ -21,7 +21,7 @@ import { Component, Inject, OnInit, Optional, EventEmitter, Output } from '@angu
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
|
||||
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { NodesApiService, TranslationService } from '@alfresco/adf-core';
|
||||
|
||||
import { forbidEndingDot, forbidOnlySpaces, forbidSpecialCharacters } from './folder-name.validators';
|
||||
@@ -35,7 +35,7 @@ export class FolderDialogComponent implements OnInit {
|
||||
|
||||
form: FormGroup;
|
||||
|
||||
folder: MinimalNodeEntryEntity = null;
|
||||
folder: Node = null;
|
||||
|
||||
/** Emitted when the edit/create folder give error for example a folder with same name already exist
|
||||
*/
|
||||
@@ -45,7 +45,7 @@ export class FolderDialogComponent implements OnInit {
|
||||
/** Emitted when the edit/create folder is successfully created/modified
|
||||
*/
|
||||
@Output()
|
||||
success: EventEmitter<any> = new EventEmitter<MinimalNodeEntryEntity>();
|
||||
success: EventEmitter<any> = new EventEmitter<Node>();
|
||||
|
||||
editTitle = 'CORE.FOLDER_DIALOG.EDIT_FOLDER_TITLE';
|
||||
createTitle = 'CORE.FOLDER_DIALOG.CREATE_FOLDER_TITLE';
|
||||
@@ -119,12 +119,12 @@ export class FolderDialogComponent implements OnInit {
|
||||
};
|
||||
}
|
||||
|
||||
private create(): Observable<MinimalNodeEntryEntity> {
|
||||
private create(): Observable<Node> {
|
||||
const { name, properties, nodeType, nodesApi, data: { parentNodeId} } = this;
|
||||
return nodesApi.createFolder(parentNodeId, { name, properties, nodeType });
|
||||
}
|
||||
|
||||
private edit(): Observable<MinimalNodeEntryEntity> {
|
||||
private edit(): Observable<Node> {
|
||||
const { name, properties, nodesApi, data: { folder: { id: nodeId }} } = this;
|
||||
return nodesApi.updateNode(nodeId, { name, properties });
|
||||
}
|
||||
@@ -136,7 +136,7 @@ export class FolderDialogComponent implements OnInit {
|
||||
|
||||
(editing ? this.edit() : this.create())
|
||||
.subscribe(
|
||||
(folder: MinimalNodeEntryEntity) => {
|
||||
(folder: Node) => {
|
||||
this.success.emit(folder);
|
||||
dialog.close(folder);
|
||||
},
|
||||
|
||||
@@ -23,237 +23,240 @@ import { TestBed, fakeAsync, tick, flush } from '@angular/core/testing';
|
||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||
import { MatDialogRef } from '@angular/material';
|
||||
import {
|
||||
AlfrescoApiService,
|
||||
AlfrescoApiServiceMock,
|
||||
setupTestBed
|
||||
AlfrescoApiService,
|
||||
AlfrescoApiServiceMock,
|
||||
setupTestBed
|
||||
} from '@alfresco/adf-core';
|
||||
|
||||
describe('LibraryDialogComponent', () => {
|
||||
let fixture;
|
||||
let component;
|
||||
let alfrescoApi;
|
||||
let findSitesSpy;
|
||||
const findSitesResponse = { list: { entries: [] } };
|
||||
const dialogRef = {
|
||||
close: jasmine.createSpy('close')
|
||||
};
|
||||
let fixture;
|
||||
let component;
|
||||
let alfrescoApi;
|
||||
let findSitesSpy;
|
||||
const findSitesResponse = { list: { entries: [] } };
|
||||
const dialogRef = {
|
||||
close: jasmine.createSpy('close')
|
||||
};
|
||||
|
||||
setupTestBed({
|
||||
imports: [NoopAnimationsModule, CoreModule, ReactiveFormsModule],
|
||||
declarations: [LibraryDialogComponent],
|
||||
providers: [
|
||||
{
|
||||
provide: AlfrescoApiService,
|
||||
useClass: AlfrescoApiServiceMock
|
||||
},
|
||||
{ provide: MatDialogRef, useValue: dialogRef }
|
||||
],
|
||||
schemas: [NO_ERRORS_SCHEMA]
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(LibraryDialogComponent);
|
||||
component = fixture.componentInstance;
|
||||
alfrescoApi = TestBed.get(AlfrescoApiService);
|
||||
findSitesSpy = spyOn(alfrescoApi.getInstance().core.queriesApi, 'findSites');
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
findSitesSpy.calls.reset();
|
||||
});
|
||||
|
||||
it('should set library id automatically on title input', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
setupTestBed({
|
||||
imports: [NoopAnimationsModule, CoreModule, ReactiveFormsModule],
|
||||
declarations: [LibraryDialogComponent],
|
||||
providers: [
|
||||
{
|
||||
provide: AlfrescoApiService,
|
||||
useClass: AlfrescoApiServiceMock
|
||||
},
|
||||
{ provide: MatDialogRef, useValue: dialogRef }
|
||||
],
|
||||
schemas: [NO_ERRORS_SCHEMA]
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('libraryTitle');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.form.controls.id.value).toBe('libraryTitle');
|
||||
}));
|
||||
|
||||
it('should translate library title space character to dash for library id', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(LibraryDialogComponent);
|
||||
component = fixture.componentInstance;
|
||||
alfrescoApi = TestBed.get(AlfrescoApiService);
|
||||
findSitesSpy = spyOn(alfrescoApi.getInstance().core.queriesApi, 'findSites');
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('library title');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.form.controls.id.value).toBe('library-title');
|
||||
}));
|
||||
|
||||
it('should not change custom library id on title input', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
afterEach(() => {
|
||||
findSitesSpy.calls.reset();
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.id.setValue('custom-id');
|
||||
component.form.controls.id.markAsDirty();
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
it('should set library id automatically on title input', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
|
||||
component.form.controls.title.setValue('library title');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('libraryTitle');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.form.controls.id.value).toBe('custom-id');
|
||||
}));
|
||||
expect(component.form.controls.id.value).toBe('libraryTitle');
|
||||
}));
|
||||
|
||||
it('should invalidate form when library id already exists', fakeAsync(() => {
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.returnValue(Promise.resolve());
|
||||
it('should translate library title space character to dash for library id', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.id.setValue('existingLibrary');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('library title');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.form.controls.id.errors).toEqual({
|
||||
message: 'LIBRARY.ERRORS.EXISTENT_SITE'
|
||||
});
|
||||
expect(component.form.valid).toBe(false);
|
||||
}));
|
||||
expect(component.form.controls.id.value).toBe('library-title');
|
||||
}));
|
||||
|
||||
it('should create site when form is valid', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'createSite').and.returnValue(
|
||||
Promise.resolve()
|
||||
);
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
it('should not change custom library id on title input', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('library title');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
fixture.detectChanges();
|
||||
component.form.controls.id.setValue('custom-id');
|
||||
component.form.controls.id.markAsDirty();
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
component.submit();
|
||||
fixture.detectChanges();
|
||||
flush();
|
||||
component.form.controls.title.setValue('library title');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(alfrescoApi.sitesApi.createSite).toHaveBeenCalledWith({
|
||||
id: 'library-title',
|
||||
title: 'library title',
|
||||
description: '',
|
||||
visibility: 'PUBLIC'
|
||||
});
|
||||
}));
|
||||
expect(component.form.controls.id.value).toBe('custom-id');
|
||||
}));
|
||||
|
||||
it('should not create site when form is invalid', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'createSite').and.returnValue(
|
||||
Promise.resolve({})
|
||||
);
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.returnValue(Promise.resolve());
|
||||
it('should invalidate form when library id already exists', fakeAsync(() => {
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.returnValue(Promise.resolve());
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('existingLibrary');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
fixture.detectChanges();
|
||||
component.form.controls.id.setValue('existingLibrary');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
component.submit();
|
||||
fixture.detectChanges();
|
||||
flush();
|
||||
expect(component.form.controls.id.errors).toEqual({
|
||||
message: 'LIBRARY.ERRORS.EXISTENT_SITE'
|
||||
});
|
||||
expect(component.form.valid).toBe(false);
|
||||
}));
|
||||
|
||||
expect(alfrescoApi.sitesApi.createSite).not.toHaveBeenCalled();
|
||||
}));
|
||||
it('should create site when form is valid', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'createSite').and.returnValue(
|
||||
Promise.resolve()
|
||||
);
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
|
||||
it('should notify when library title is already used', fakeAsync(() => {
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.returnValue(Promise.resolve());
|
||||
findSitesSpy.and.returnValue(Promise.resolve(
|
||||
{ list: { entries: [ { entry: { title: 'TEST', id: 'library-id' } } ] } }
|
||||
));
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('library title');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('test');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
component.submit();
|
||||
fixture.detectChanges();
|
||||
flush();
|
||||
|
||||
expect(component.libraryTitleExists).toBe(true);
|
||||
}));
|
||||
expect(alfrescoApi.sitesApi.createSite).toHaveBeenCalledWith({
|
||||
id: 'library-title',
|
||||
title: 'library title',
|
||||
description: '',
|
||||
visibility: 'PUBLIC'
|
||||
});
|
||||
}));
|
||||
|
||||
it('should notify on 409 conflict error (might be in trash)', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
const error = { message: '{ "error": { "statusCode": 409 } }' };
|
||||
spyOn(alfrescoApi.sitesApi, 'createSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject(error));
|
||||
});
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
it('should not create site when form is invalid', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'createSite').and.returnValue(
|
||||
Promise.resolve({})
|
||||
);
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.returnValue(Promise.resolve());
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('test');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('existingLibrary');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
component.submit();
|
||||
fixture.detectChanges();
|
||||
flush();
|
||||
component.submit();
|
||||
fixture.detectChanges();
|
||||
flush();
|
||||
|
||||
expect(component.form.controls.id.errors).toEqual({
|
||||
message: 'LIBRARY.ERRORS.CONFLICT'
|
||||
});
|
||||
}));
|
||||
expect(alfrescoApi.sitesApi.createSite).not.toHaveBeenCalled();
|
||||
}));
|
||||
|
||||
it('should not translate library title if value is not a valid id', fakeAsync(() => {
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
it('should notify when library title is already used', fakeAsync(() => {
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.returnValue(Promise.resolve());
|
||||
findSitesSpy.and.returnValue(Promise.resolve(
|
||||
{ list: { entries: [{ entry: { title: 'TEST', id: 'library-id' } }] } }
|
||||
));
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('@@@####');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('test');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.form.controls.id.value).toBe(null);
|
||||
}));
|
||||
expect(component.libraryTitleExists).toBe(true);
|
||||
}));
|
||||
|
||||
it('should translate library title partially for library id', fakeAsync(() => {
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
it('should notify on 409 conflict error (might be in trash)', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
const error = { message: '{ "error": { "statusCode": 409 } }' };
|
||||
spyOn(alfrescoApi.sitesApi, 'createSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject(error));
|
||||
});
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('@@@####library');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('test');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.form.controls.id.value).toBe('library');
|
||||
}));
|
||||
component.submit();
|
||||
fixture.detectChanges();
|
||||
flush();
|
||||
|
||||
it('should translate library title multiple space character to one dash for library id', fakeAsync(() => {
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
expect(component.form.controls.id.errors).toEqual({
|
||||
message: 'LIBRARY.ERRORS.CONFLICT'
|
||||
});
|
||||
}));
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('library title');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
it('should not translate library title if value is not a valid id', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
|
||||
expect(component.form.controls.id.value).toBe('library-title');
|
||||
}));
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('@@@####');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.form.controls.id.value).toBe(null);
|
||||
}));
|
||||
|
||||
it('should translate library title partially for library id', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('@@@####library');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.form.controls.id.value).toBe('library');
|
||||
}));
|
||||
|
||||
it('should translate library title multiple space character to one dash for library id', fakeAsync(() => {
|
||||
findSitesSpy.and.returnValue(Promise.resolve(findSitesResponse));
|
||||
spyOn(alfrescoApi.sitesApi, 'getSite').and.callFake(() => {
|
||||
return new Promise((resolve, reject) => reject());
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
component.form.controls.title.setValue('library title');
|
||||
tick(500);
|
||||
flush();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.form.controls.id.value).toBe('library-title');
|
||||
}));
|
||||
});
|
||||
|
||||
@@ -32,7 +32,7 @@ import {
|
||||
AbstractControl
|
||||
} from '@angular/forms';
|
||||
import { MatDialogRef } from '@angular/material';
|
||||
import { SiteBody, SiteEntry, SitePaging } from 'alfresco-js-api';
|
||||
import { SiteBodyCreate, SiteEntry, SitePaging } from '@alfresco/js-api';
|
||||
import { AlfrescoApiService } from '@alfresco/adf-core';
|
||||
import { debounceTime, mergeMap, takeUntil } from 'rxjs/operators';
|
||||
|
||||
@@ -166,7 +166,7 @@ export class LibraryDialogComponent implements OnInit, OnDestroy {
|
||||
|
||||
private create(): Observable<SiteEntry> {
|
||||
const { title, id, description, visibility } = this;
|
||||
const siteBody = <SiteBody> {
|
||||
const siteBody = <SiteBodyCreate> {
|
||||
id,
|
||||
title,
|
||||
description,
|
||||
|
||||
@@ -21,6 +21,7 @@ import { TestBed, fakeAsync, tick } from '@angular/core/testing';
|
||||
import { ComponentFixture } from '@angular/core/testing';
|
||||
import { MatDialogRef } from '@angular/material';
|
||||
import { AlfrescoApiService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { NodeBodyLock } from '@alfresco/js-api';
|
||||
import { NodeLockDialogComponent } from './node-lock.dialog';
|
||||
import { ContentTestingModule } from '../testing/content.testing.module';
|
||||
|
||||
@@ -67,7 +68,8 @@ describe('NodeLockDialogComponent', () => {
|
||||
['cm:expiryDate']: expiryDate
|
||||
}
|
||||
},
|
||||
onError: () => {}
|
||||
onError: () => {
|
||||
}
|
||||
};
|
||||
fixture.detectChanges();
|
||||
});
|
||||
@@ -100,11 +102,11 @@ describe('NodeLockDialogComponent', () => {
|
||||
|
||||
expect(alfrescoApi.nodesApi.lockNode).toHaveBeenCalledWith(
|
||||
'node-id',
|
||||
{
|
||||
new NodeBodyLock({
|
||||
'timeToExpire': 60,
|
||||
'type': 'ALLOW_OWNER_CHANGES',
|
||||
'lifetime': 'PERSISTENT'
|
||||
}
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ import { Component, Inject, OnInit, Optional } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
|
||||
import { MinimalNodeEntryEntity, NodeEntry } from 'alfresco-js-api';
|
||||
import { NodeBodyLock, Node, NodeEntry } from '@alfresco/js-api';
|
||||
import { AlfrescoApiService } from '@alfresco/adf-core';
|
||||
|
||||
@Component({
|
||||
@@ -32,7 +32,7 @@ import { AlfrescoApiService } from '@alfresco/adf-core';
|
||||
export class NodeLockDialogComponent implements OnInit {
|
||||
|
||||
form: FormGroup;
|
||||
node: MinimalNodeEntryEntity = null;
|
||||
node: Node = null;
|
||||
nodeName: string;
|
||||
|
||||
constructor(
|
||||
@@ -42,7 +42,8 @@ export class NodeLockDialogComponent implements OnInit {
|
||||
@Optional()
|
||||
@Inject(MAT_DIALOG_DATA)
|
||||
public data: any
|
||||
) {}
|
||||
) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
const { node } = this.data;
|
||||
@@ -65,12 +66,12 @@ export class NodeLockDialogComponent implements OnInit {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private get nodeBodyLock(): object {
|
||||
return {
|
||||
private get nodeBodyLock(): NodeBodyLock {
|
||||
return new NodeBodyLock({
|
||||
'timeToExpire': this.lockTimeInSeconds,
|
||||
'type': this.form.value.allowOwner ? 'ALLOW_OWNER_CHANGES' : 'FULL',
|
||||
'lifetime': 'PERSISTENT'
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
private toggleLock(): Promise<NodeEntry> {
|
||||
@@ -85,10 +86,10 @@ export class NodeLockDialogComponent implements OnInit {
|
||||
|
||||
submit(): void {
|
||||
this.toggleLock()
|
||||
.then((node) => {
|
||||
.then((node: NodeEntry) => {
|
||||
this.data.node.isLocked = this.form.value.isLocked;
|
||||
this.dialog.close(node.entry);
|
||||
})
|
||||
.catch((error) => this.data.onError(error));
|
||||
.catch((error: any) => this.data.onError(error));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,14 +20,14 @@ import { By } from '@angular/platform-browser';
|
||||
import { Component, DebugElement } from '@angular/core';
|
||||
|
||||
import { NodeLockDirective } from './node-lock.directive';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { NodeActionsService } from '../document-list/services/node-actions.service';
|
||||
import { ContentNodeDialogService } from '../content-node-selector/content-node-dialog.service';
|
||||
import { DocumentListService } from '../document-list/services/document-list.service';
|
||||
import { setupTestBed } from '../../core/testing';
|
||||
import { CoreModule } from '@alfresco/adf-core';
|
||||
|
||||
const fakeNode: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
|
||||
const fakeNode: Node = <Node> {
|
||||
id: 'fake',
|
||||
isFile: true,
|
||||
isLocked: false
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
/* tslint:disable:no-input-rename */
|
||||
|
||||
import { Directive, ElementRef, Renderer2, HostListener, Input, AfterViewInit } from '@angular/core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { PermissionsEnum, ContentService } from '@alfresco/adf-core';
|
||||
import { ContentNodeDialogService } from '../content-node-selector/content-node-dialog.service';
|
||||
|
||||
@@ -29,7 +29,7 @@ export class NodeLockDirective implements AfterViewInit {
|
||||
|
||||
/** Node to lock/unlock. */
|
||||
@Input('adf-node-lock')
|
||||
node: MinimalNodeEntryEntity;
|
||||
node: Node;
|
||||
|
||||
@HostListener('click', [ '$event' ])
|
||||
onClick(event) {
|
||||
|
||||
@@ -38,6 +38,7 @@ import { CustomResourcesService } from './../services/custom-resources.service';
|
||||
import { DocumentListComponent } from './document-list.component';
|
||||
import { setupTestBed } from '@alfresco/adf-core';
|
||||
import { ContentTestingModule } from '../../testing/content.testing.module';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
|
||||
describe('DocumentList', () => {
|
||||
|
||||
@@ -73,7 +74,7 @@ describe('DocumentList', () => {
|
||||
documentList.ngOnInit();
|
||||
|
||||
spyGetSites = spyOn(apiService.sitesApi, 'getSites').and.returnValue(Promise.resolve(fakeGetSitesAnswer));
|
||||
spyFavorite = spyOn(apiService.favoritesApi, 'getFavorites').and.returnValue(Promise.resolve({list: []}));
|
||||
spyFavorite = spyOn(apiService.favoritesApi, 'getFavorites').and.returnValue(Promise.resolve({ list: [] }));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -202,6 +203,7 @@ describe('DocumentList', () => {
|
||||
});
|
||||
|
||||
it('should reset selection upon reload', () => {
|
||||
documentList.currentFolderId = 'id-folder';
|
||||
spyOn(documentList, 'resetSelection').and.callThrough();
|
||||
|
||||
documentList.reload();
|
||||
@@ -228,6 +230,7 @@ describe('DocumentList', () => {
|
||||
});
|
||||
|
||||
it('should reset selection upon reload', () => {
|
||||
documentList.currentFolderId = 'id-folder';
|
||||
spyOn(documentList, 'resetSelection').and.callThrough();
|
||||
|
||||
documentList.reload();
|
||||
@@ -296,6 +299,7 @@ describe('DocumentList', () => {
|
||||
});
|
||||
|
||||
it('should disable the action if there is no permission for the file and disableWithNoPermission true', () => {
|
||||
documentList.currentFolderId = 'fake-node-id';
|
||||
let documentMenu = new ContentActionModel({
|
||||
disableWithNoPermission: true,
|
||||
permission: 'delete',
|
||||
@@ -929,7 +933,7 @@ describe('DocumentList', () => {
|
||||
it('should emit node-click DOM event', (done) => {
|
||||
let node = new NodeMinimalEntry();
|
||||
|
||||
document.addEventListener('node-click', (e: CustomEvent) => {
|
||||
document.addEventListener('node-click', (customEvent: CustomEvent) => {
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -947,7 +951,7 @@ describe('DocumentList', () => {
|
||||
it('should emit node-dblclick DOM event', (done) => {
|
||||
let node = new NodeMinimalEntry();
|
||||
|
||||
document.addEventListener('node-dblclick', (e: CustomEvent) => {
|
||||
document.addEventListener('node-dblclick', (customEvent: CustomEvent) => {
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -977,7 +981,7 @@ describe('DocumentList', () => {
|
||||
|
||||
it('should emit error when loadFolderNodesByFolderNodeId fails', (done) => {
|
||||
const error = { message: '{ "error": { "statusCode": 501 } }' };
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNodeWithCreatePermission));
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of({ entry: fakeNodeWithCreatePermission }));
|
||||
spyOn(documentList, 'loadFolderNodesByFolderNodeId').and.returnValue(Promise.reject(error));
|
||||
|
||||
let disposableError = documentList.error.subscribe((val) => {
|
||||
@@ -996,7 +1000,7 @@ describe('DocumentList', () => {
|
||||
expect(folderNode.value.id).toBe('fake-node');
|
||||
done();
|
||||
});
|
||||
documentList.onNodeDblClick({ entry: { id: 'fake-node', isFolder: true } });
|
||||
documentList.onNodeDblClick(new NodeEntry({ entry: { id: 'fake-node', isFolder: true } }));
|
||||
});
|
||||
|
||||
it('should set no permission when getFolderNode fails with 403', (done) => {
|
||||
@@ -1014,6 +1018,7 @@ describe('DocumentList', () => {
|
||||
});
|
||||
|
||||
it('should reset noPermission upon reload', () => {
|
||||
documentList.currentFolderId = 'fake-node-id';
|
||||
documentList.noPermission = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -1043,7 +1048,7 @@ describe('DocumentList', () => {
|
||||
documentList.folderNode = new NodeMinimal();
|
||||
documentList.folderNode.id = '1d26e465-dea3-42f3-b415-faa8364b9692';
|
||||
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNodeWithNoPermission));
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(of({ entry: fakeNodeWithNoPermission }));
|
||||
spyOn(documentListService, 'getFolder').and.returnValue(throwError(error));
|
||||
|
||||
documentList.loadFolder();
|
||||
@@ -1153,14 +1158,14 @@ describe('DocumentList', () => {
|
||||
|
||||
it('should fetch user membership sites', () => {
|
||||
const peopleApi = apiService.getInstance().core.peopleApi;
|
||||
spyOn(peopleApi, 'getSiteMembership').and.returnValue(Promise.resolve(fakeGetSiteMembership));
|
||||
spyOn(peopleApi, 'listSiteMembershipsForPerson').and.returnValue(Promise.resolve(fakeGetSiteMembership));
|
||||
|
||||
documentList.loadFolderByNodeId('-mysites-');
|
||||
expect(peopleApi.getSiteMembership).toHaveBeenCalled();
|
||||
expect(peopleApi.listSiteMembershipsForPerson).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should emit error when fetch membership sites fails', (done) => {
|
||||
spyOn(apiService.getInstance().core.peopleApi, 'getSiteMembership')
|
||||
spyOn(apiService.getInstance().core.peopleApi, 'listSiteMembershipsForPerson')
|
||||
.and.returnValue(Promise.reject('error'));
|
||||
|
||||
let disposableError = documentList.error.subscribe((val) => {
|
||||
@@ -1175,10 +1180,10 @@ describe('DocumentList', () => {
|
||||
it('should assure that user membership sites have name property set', (done) => {
|
||||
fixture.detectChanges();
|
||||
const peopleApi = apiService.getInstance().core.peopleApi;
|
||||
spyOn(peopleApi, 'getSiteMembership').and.returnValue(Promise.resolve(fakeGetSiteMembership));
|
||||
spyOn(peopleApi, 'listSiteMembershipsForPerson').and.returnValue(Promise.resolve(fakeGetSiteMembership));
|
||||
|
||||
documentList.loadFolderByNodeId('-mysites-');
|
||||
expect(peopleApi.getSiteMembership).toHaveBeenCalled();
|
||||
expect(peopleApi.listSiteMembershipsForPerson).toHaveBeenCalled();
|
||||
|
||||
let disposableReady = documentList.ready.subscribe((page) => {
|
||||
const entriesWithoutName = page.list.entries.filter((item) => !item.entry.name);
|
||||
@@ -1191,10 +1196,10 @@ describe('DocumentList', () => {
|
||||
it('should assure that user membership sites have name property set correctly', (done) => {
|
||||
fixture.detectChanges();
|
||||
const peopleApi = apiService.getInstance().core.peopleApi;
|
||||
spyOn(peopleApi, 'getSiteMembership').and.returnValue(Promise.resolve(fakeGetSiteMembership));
|
||||
spyOn(peopleApi, 'listSiteMembershipsForPerson').and.returnValue(Promise.resolve(fakeGetSiteMembership));
|
||||
|
||||
documentList.loadFolderByNodeId('-mysites-');
|
||||
expect(peopleApi.getSiteMembership).toHaveBeenCalled();
|
||||
expect(peopleApi.listSiteMembershipsForPerson).toHaveBeenCalled();
|
||||
|
||||
let disposableReady = documentList.ready.subscribe((page) => {
|
||||
const wrongName = page.list.entries.filter((item) => (item.entry.name !== item.entry.title));
|
||||
@@ -1259,6 +1264,7 @@ describe('DocumentList', () => {
|
||||
});
|
||||
|
||||
it('should reset folder node upon changing current folder id', () => {
|
||||
documentList.currentFolderId = 'fake-node-id';
|
||||
documentList.folderNode = <any> {};
|
||||
|
||||
documentList.ngOnChanges({ currentFolderId: new SimpleChange(null, '-sites-', false) });
|
||||
@@ -1278,7 +1284,7 @@ describe('DocumentList', () => {
|
||||
documentList.currentFolderId = '12345-some-id-6789';
|
||||
|
||||
const peopleApi = apiService.getInstance().core.peopleApi;
|
||||
spyOn(peopleApi, 'getSiteMembership').and.returnValue(Promise.resolve(fakeGetSiteMembership));
|
||||
spyOn(peopleApi, 'listSiteMembershipsForPerson').and.returnValue(Promise.resolve(fakeGetSiteMembership));
|
||||
|
||||
documentList.loadFolderByNodeId('-mysites-');
|
||||
expect(documentList.currentFolderId).toBe('-mysites-');
|
||||
|
||||
@@ -28,7 +28,7 @@ import {
|
||||
UserPreferencesService, PaginationModel, ThumbnailService
|
||||
} from '@alfresco/adf-core';
|
||||
|
||||
import { MinimalNodeEntity, MinimalNodeEntryEntity, NodePaging } from 'alfresco-js-api';
|
||||
import { Node, NodeEntry, NodePaging } from '@alfresco/js-api';
|
||||
import { Subject, BehaviorSubject, Subscription, of } from 'rxjs';
|
||||
import { ShareDataRow } from './../data/share-data-row.model';
|
||||
import { ShareDataTableAdapter } from './../data/share-datatable-adapter';
|
||||
@@ -178,7 +178,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
* @deprecated 2.3.0 - use currentFolderId or node
|
||||
*/
|
||||
@Input()
|
||||
folderNode: MinimalNodeEntryEntity = null;
|
||||
folderNode: Node = null;
|
||||
|
||||
/** The Document list will show all the nodes contained in the NodePaging entity */
|
||||
@Input()
|
||||
@@ -238,7 +238,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
contextActionHandler: Subject<any> = new Subject();
|
||||
data: ShareDataTableAdapter;
|
||||
noPermission: boolean = false;
|
||||
selection = new Array<MinimalNodeEntity>();
|
||||
selection = new Array<NodeEntry>();
|
||||
|
||||
private _pagination: BehaviorSubject<PaginationModel>;
|
||||
private layoutPresets = {};
|
||||
@@ -256,7 +256,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
private thumbnailService: ThumbnailService) {
|
||||
}
|
||||
|
||||
getContextActions(node: MinimalNodeEntity) {
|
||||
getContextActions(node: NodeEntry) {
|
||||
if (node && node.entry) {
|
||||
let actions = this.getNodeActions(node);
|
||||
if (actions && actions.length > 0) {
|
||||
@@ -446,7 +446,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
}
|
||||
}
|
||||
|
||||
getNodeActions(node: MinimalNodeEntity | any): ContentActionModel[] {
|
||||
getNodeActions(node: NodeEntry | any): ContentActionModel[] {
|
||||
if (node && node.entry) {
|
||||
let target = null;
|
||||
|
||||
@@ -487,12 +487,12 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
return [];
|
||||
}
|
||||
|
||||
private refreshAction(action: ContentActionModel, node: MinimalNodeEntity) {
|
||||
private refreshAction(action: ContentActionModel, node: NodeEntry) {
|
||||
action.disabled = this.isActionDisabled(action, node);
|
||||
action.visible = this.isActionVisible(action, node);
|
||||
}
|
||||
|
||||
private isActionVisible(action: ContentActionModel, node: MinimalNodeEntity): boolean {
|
||||
private isActionVisible(action: ContentActionModel, node: NodeEntry): boolean {
|
||||
if (typeof action.visible === 'function') {
|
||||
return action.visible(node);
|
||||
}
|
||||
@@ -500,7 +500,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
return action.visible;
|
||||
}
|
||||
|
||||
private isActionDisabled(action: ContentActionModel, node: MinimalNodeEntity): boolean {
|
||||
private isActionDisabled(action: ContentActionModel, node: NodeEntry): boolean {
|
||||
if (typeof action.disabled === 'function') {
|
||||
return action.disabled(node);
|
||||
}
|
||||
@@ -519,7 +519,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
}
|
||||
}
|
||||
|
||||
performNavigation(node: MinimalNodeEntity): boolean {
|
||||
performNavigation(node: NodeEntry): boolean {
|
||||
if (this.canNavigateFolder(node)) {
|
||||
this.updateFolderData(node);
|
||||
return true;
|
||||
@@ -527,7 +527,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
return false;
|
||||
}
|
||||
|
||||
performCustomSourceNavigation(node: MinimalNodeEntity): boolean {
|
||||
performCustomSourceNavigation(node: NodeEntry): boolean {
|
||||
if (this.customResourcesService.isCustomSource(this.currentFolderId)) {
|
||||
this.updateFolderData(node);
|
||||
return true;
|
||||
@@ -535,18 +535,18 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
return false;
|
||||
}
|
||||
|
||||
updateFolderData(node: MinimalNodeEntity): void {
|
||||
updateFolderData(node: NodeEntry): void {
|
||||
this.resetNewFolderPagination();
|
||||
this.currentFolderId = this.getNodeFolderDestinationId(node);
|
||||
this.folderChange.emit(new NodeEntryEvent({ id: this.currentFolderId }));
|
||||
this.folderChange.emit(new NodeEntryEvent(<Node> { id: this.currentFolderId }));
|
||||
this.reload();
|
||||
}
|
||||
|
||||
private getNodeFolderDestinationId(node: MinimalNodeEntity) {
|
||||
private getNodeFolderDestinationId(node: NodeEntry) {
|
||||
return this.isLinkFolder(node) ? node.entry.properties['cm:destination'] : node.entry.id;
|
||||
}
|
||||
|
||||
private isLinkFolder(node: MinimalNodeEntity) {
|
||||
private isLinkFolder(node: NodeEntry) {
|
||||
return node.entry.nodeType === 'app:folderlink' && node.entry.properties &&
|
||||
node.entry.properties['cm:destination'];
|
||||
}
|
||||
@@ -561,7 +561,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
* @param node Node to be the context of the execution.
|
||||
* @param action Action to be executed against the context.
|
||||
*/
|
||||
executeContentAction(node: MinimalNodeEntity, action: ContentActionModel) {
|
||||
executeContentAction(node: NodeEntry, action: ContentActionModel) {
|
||||
if (node && node.entry && action) {
|
||||
let handlerSub;
|
||||
|
||||
@@ -620,9 +620,9 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
} else {
|
||||
this.documentListService
|
||||
.getFolderNode(nodeId, this.includeFields)
|
||||
.subscribe((node: MinimalNodeEntryEntity) => {
|
||||
this.folderNode = node;
|
||||
return this.loadFolderNodesByFolderNodeId(node.id, this.pagination.getValue())
|
||||
.subscribe((node: NodeEntry) => {
|
||||
this.folderNode = node.entry;
|
||||
return this.loadFolderNodesByFolderNodeId(node.entry.id, this.pagination.getValue())
|
||||
.catch((err) => this.handleError(err));
|
||||
}, (err) => {
|
||||
this.handleError(err);
|
||||
@@ -675,13 +675,13 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
}
|
||||
}
|
||||
|
||||
onPreviewFile(node: MinimalNodeEntity) {
|
||||
onPreviewFile(node: NodeEntry) {
|
||||
if (node) {
|
||||
this.preview.emit(new NodeEntityEvent(node));
|
||||
}
|
||||
}
|
||||
|
||||
onNodeClick(node: MinimalNodeEntity) {
|
||||
onNodeClick(node: NodeEntry) {
|
||||
const domEvent = new CustomEvent('node-click', {
|
||||
detail: {
|
||||
sender: this,
|
||||
@@ -709,7 +709,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
}
|
||||
}
|
||||
|
||||
onNodeDblClick(node: MinimalNodeEntity) {
|
||||
onNodeDblClick(node: NodeEntry) {
|
||||
const domEvent = new CustomEvent('node-dblclick', {
|
||||
detail: {
|
||||
sender: this,
|
||||
@@ -796,7 +796,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
}
|
||||
}
|
||||
|
||||
canNavigateFolder(node: MinimalNodeEntity): boolean {
|
||||
canNavigateFolder(node: NodeEntry): boolean {
|
||||
let canNavigateFolder: boolean = false;
|
||||
|
||||
if (this.customResourcesService.isCustomSource(this.currentFolderId)) {
|
||||
@@ -833,7 +833,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
this.currentFolderId = nodeId;
|
||||
this.resetNewFolderPagination();
|
||||
this.loadFolder();
|
||||
this.folderChange.emit(new NodeEntryEvent({ id: nodeId }));
|
||||
this.folderChange.emit(new NodeEntryEvent(<Node> { id: nodeId }));
|
||||
}
|
||||
|
||||
private resetNewFolderPagination() {
|
||||
@@ -848,9 +848,12 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
|
||||
private handleError(err: any) {
|
||||
if (err.message) {
|
||||
if (JSON.parse(err.message).error.statusCode === 403) {
|
||||
this.setLoadingState(false);
|
||||
this.noPermission = true;
|
||||
try {
|
||||
if (JSON.parse(err.message).error.statusCode === 403) {
|
||||
this.setLoadingState(false);
|
||||
this.noPermission = true;
|
||||
}
|
||||
} catch (error) {
|
||||
}
|
||||
}
|
||||
this.error.emit(err);
|
||||
|
||||
+2
-2
@@ -23,7 +23,7 @@ import {
|
||||
Input,
|
||||
ElementRef
|
||||
} from '@angular/core';
|
||||
import { MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
import { ShareDataRow } from '../../data/share-data-row.model';
|
||||
|
||||
@Component({
|
||||
@@ -43,7 +43,7 @@ export class LibraryNameColumnComponent implements OnInit {
|
||||
|
||||
displayTooltip: string;
|
||||
displayText: string;
|
||||
node: MinimalNodeEntity;
|
||||
node: NodeEntry;
|
||||
|
||||
constructor(private element: ElementRef) {}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ import {
|
||||
ViewEncapsulation,
|
||||
ElementRef
|
||||
} from '@angular/core';
|
||||
import { MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-name-column',
|
||||
@@ -41,7 +41,7 @@ export class NameColumnComponent implements OnInit {
|
||||
context: any;
|
||||
|
||||
displayText: string;
|
||||
node: MinimalNodeEntity;
|
||||
node: NodeEntry;
|
||||
|
||||
constructor(private element: ElementRef) {}
|
||||
|
||||
|
||||
@@ -16,28 +16,28 @@
|
||||
*/
|
||||
|
||||
import { BaseEvent } from '@alfresco/adf-core';
|
||||
import { MinimalNodeEntity, MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry, Node } from '@alfresco/js-api';
|
||||
|
||||
export class NodeEntityEvent extends BaseEvent<MinimalNodeEntity> {
|
||||
export class NodeEntityEvent extends BaseEvent<NodeEntry> {
|
||||
|
||||
value: MinimalNodeEntity;
|
||||
value: NodeEntry;
|
||||
|
||||
defaultPrevented: boolean;
|
||||
|
||||
constructor(entity: MinimalNodeEntity) {
|
||||
constructor(nodeEntry: NodeEntry) {
|
||||
super();
|
||||
this.value = entity;
|
||||
this.value = nodeEntry;
|
||||
}
|
||||
}
|
||||
|
||||
export class NodeEntryEvent extends BaseEvent<MinimalNodeEntryEntity> {
|
||||
export class NodeEntryEvent extends BaseEvent<Node> {
|
||||
|
||||
value: MinimalNodeEntryEntity;
|
||||
value: Node;
|
||||
|
||||
defaultPrevented: boolean;
|
||||
|
||||
constructor(entity: MinimalNodeEntryEntity) {
|
||||
constructor(node: Node) {
|
||||
super();
|
||||
this.value = entity;
|
||||
this.value = node;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -22,7 +22,7 @@ import {
|
||||
OnInit,
|
||||
Input
|
||||
} from '@angular/core';
|
||||
import { MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
import { ShareDataRow } from '../../data/share-data-row.model';
|
||||
|
||||
@Component({
|
||||
@@ -46,7 +46,7 @@ export class TrashcanNameColumnComponent implements OnInit {
|
||||
isLibrary = false;
|
||||
displayText: string;
|
||||
displayTooltip: string;
|
||||
node: MinimalNodeEntity;
|
||||
node: NodeEntry;
|
||||
|
||||
ngOnInit() {
|
||||
this.node = this.context.row.node;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { DataRow, ObjectUtils, ThumbnailService } from '@alfresco/adf-core';
|
||||
import { MinimalNode, MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { MinimalNode, NodeEntry } from '@alfresco/js-api';
|
||||
import { PermissionStyleModel } from './../models/permissions-style.model';
|
||||
import { DocumentListService } from './../services/document-list.service';
|
||||
|
||||
@@ -29,11 +29,11 @@ export class ShareDataRow implements DataRow {
|
||||
isDropTarget: boolean;
|
||||
cssClass: string = '';
|
||||
|
||||
get node(): MinimalNodeEntity {
|
||||
get node(): NodeEntry {
|
||||
return this.obj;
|
||||
}
|
||||
|
||||
constructor(private obj: MinimalNodeEntity,
|
||||
constructor(private obj: NodeEntry,
|
||||
private documentListService: DocumentListService,
|
||||
private permissionsStyle: PermissionStyleModel[],
|
||||
private thumbnailService?: ThumbnailService) {
|
||||
@@ -48,7 +48,7 @@ export class ShareDataRow implements DataRow {
|
||||
}
|
||||
}
|
||||
|
||||
getPermissionClass(nodeEntity: MinimalNodeEntity): string {
|
||||
getPermissionClass(nodeEntity: NodeEntry): string {
|
||||
let permissionsClasses = '';
|
||||
|
||||
this.permissionsStyle.forEach((currentPermissionsStyle: PermissionStyleModel) => {
|
||||
@@ -73,12 +73,12 @@ export class ShareDataRow implements DataRow {
|
||||
return (currentPermissionsStyle.isFolder && node.isFolder);
|
||||
}
|
||||
|
||||
isFolderAndHasPermissionToUpload(obj: MinimalNodeEntity): boolean {
|
||||
return this.isFolder(obj) && this.documentListService.hasPermission(obj.entry, 'create');
|
||||
isFolderAndHasPermissionToUpload(nodeEntry: NodeEntry): boolean {
|
||||
return this.isFolder(nodeEntry) && this.documentListService.hasPermission(nodeEntry.entry, 'create');
|
||||
}
|
||||
|
||||
isFolder(obj: MinimalNodeEntity): boolean {
|
||||
return obj.entry && obj.entry.isFolder;
|
||||
isFolder(nodeEntry: NodeEntry): boolean {
|
||||
return nodeEntry.entry && nodeEntry.entry.isFolder;
|
||||
}
|
||||
|
||||
cacheValue(key: string, value: any): any {
|
||||
@@ -94,7 +94,9 @@ export class ShareDataRow implements DataRow {
|
||||
}
|
||||
|
||||
imageErrorResolver(event: Event): any {
|
||||
return this.thumbnailService.getMimeTypeIcon(this.obj.entry.content.mimeType);
|
||||
if (this.obj.entry.content) {
|
||||
return this.thumbnailService.getMimeTypeIcon(this.obj.entry.content.mimeType);
|
||||
}
|
||||
}
|
||||
|
||||
hasValue(key: string): boolean {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { DataColumn, DataRow, DataSorting, DataTableAdapter, ThumbnailService } from '@alfresco/adf-core';
|
||||
import { NodePaging } from 'alfresco-js-api';
|
||||
import { NodePaging } from '@alfresco/js-api';
|
||||
import { PermissionStyleModel } from './../models/permissions-style.model';
|
||||
import { DocumentListService } from './../services/document-list.service';
|
||||
import { ShareDataRow } from './share-data-row.model';
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
// note: contains only limited subset of available fields
|
||||
|
||||
import { MinimalNodeEntity, MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry, Node } from '@alfresco/js-api';
|
||||
|
||||
export class NodePaging {
|
||||
list: NodePagingList;
|
||||
@@ -28,7 +28,7 @@ export class NodePagingList {
|
||||
entries: NodeMinimalEntry[];
|
||||
}
|
||||
|
||||
export class NodeMinimalEntry implements MinimalNodeEntity {
|
||||
export class NodeMinimalEntry implements NodeEntry {
|
||||
entry: NodeMinimal;
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ export class Pagination {
|
||||
maxItems: number;
|
||||
}
|
||||
|
||||
export class NodeMinimal implements MinimalNodeEntryEntity {
|
||||
export class NodeMinimal implements Node {
|
||||
id: string;
|
||||
parentId: string;
|
||||
name: string;
|
||||
|
||||
@@ -26,8 +26,12 @@ import {
|
||||
PersonEntry,
|
||||
SitePaging,
|
||||
DeletedNodesPaging,
|
||||
SearchRequest
|
||||
} from 'alfresco-js-api';
|
||||
SearchRequest,
|
||||
SharedLinkPaging,
|
||||
FavoritePaging,
|
||||
SiteMemberPaging,
|
||||
SiteRolePaging
|
||||
} from '@alfresco/js-api';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable, from, of, throwError } from 'rxjs';
|
||||
import { catchError, map } from 'rxjs/operators';
|
||||
@@ -54,7 +58,7 @@ export class CustomResourcesService {
|
||||
this.apiService.peopleApi.getPerson(personId)
|
||||
.then((person: PersonEntry) => {
|
||||
const username = person.entry.id;
|
||||
const query: SearchRequest = {
|
||||
const query: SearchRequest = new SearchRequest({
|
||||
query: {
|
||||
query: '*',
|
||||
language: 'afts'
|
||||
@@ -74,7 +78,7 @@ export class CustomResourcesService {
|
||||
maxItems: pagination.maxItems,
|
||||
skipCount: pagination.skipCount
|
||||
}
|
||||
};
|
||||
});
|
||||
return this.apiService.searchApi.search(query)
|
||||
.then((searchResult) => {
|
||||
observer.next(searchResult);
|
||||
@@ -110,8 +114,8 @@ export class CustomResourcesService {
|
||||
|
||||
return new Observable((observer) => {
|
||||
this.apiService.favoritesApi.getFavorites('-me-', options)
|
||||
.then((result: NodePaging) => {
|
||||
let page: NodePaging = {
|
||||
.then((result: FavoritePaging) => {
|
||||
let page: FavoritePaging = {
|
||||
list: {
|
||||
entries: result.list.entries
|
||||
.map(({ entry: { target } }: any) => ({
|
||||
@@ -143,7 +147,7 @@ export class CustomResourcesService {
|
||||
* @param pagination Specifies how to paginate the results
|
||||
* @returns List of sites
|
||||
*/
|
||||
loadMemberSites(pagination: PaginationModel): Observable<NodePaging> {
|
||||
loadMemberSites(pagination: PaginationModel): Observable<SiteMemberPaging> {
|
||||
const options = {
|
||||
include: ['properties'],
|
||||
maxItems: pagination.maxItems,
|
||||
@@ -151,9 +155,9 @@ export class CustomResourcesService {
|
||||
};
|
||||
|
||||
return new Observable((observer) => {
|
||||
this.apiService.peopleApi.getSiteMembership('-me-', options)
|
||||
.then((result: SitePaging) => {
|
||||
let page: NodePaging = {
|
||||
this.apiService.peopleApi.listSiteMembershipsForPerson('-me-', options)
|
||||
.then((result: SiteRolePaging) => {
|
||||
let page: SiteMemberPaging = new SiteMemberPaging( {
|
||||
list: {
|
||||
entries: result.list.entries
|
||||
.map(({ entry: { site } }: any) => {
|
||||
@@ -165,7 +169,7 @@ export class CustomResourcesService {
|
||||
}),
|
||||
pagination: result.list.pagination
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
observer.next(page);
|
||||
observer.complete();
|
||||
@@ -191,7 +195,7 @@ export class CustomResourcesService {
|
||||
|
||||
return new Observable((observer) => {
|
||||
this.apiService.sitesApi.getSites(options)
|
||||
.then((page: NodePaging) => {
|
||||
.then((page: SitePaging) => {
|
||||
page.list.entries.map(
|
||||
({ entry }: any) => {
|
||||
entry.name = entry.name || entry.title;
|
||||
@@ -234,7 +238,7 @@ export class CustomResourcesService {
|
||||
* @param includeFields List of data field names to include in the results
|
||||
* @returns List of shared links
|
||||
*/
|
||||
loadSharedLinks(pagination: PaginationModel, includeFields: string[] = []): Observable<NodePaging> {
|
||||
loadSharedLinks(pagination: PaginationModel, includeFields: string[] = []): Observable<SharedLinkPaging> {
|
||||
let includeFieldsRequest = this.getIncludesFields(includeFields);
|
||||
|
||||
const options = {
|
||||
@@ -286,7 +290,7 @@ export class CustomResourcesService {
|
||||
* @param includeFields List of data field names to include in the results
|
||||
* @returns List of items contained in the folder
|
||||
*/
|
||||
loadFolderByNodeId(nodeId: string, pagination: PaginationModel, includeFields: string[]): Observable<NodePaging> {
|
||||
loadFolderByNodeId(nodeId: string, pagination: PaginationModel, includeFields: string[] = []): any {
|
||||
if (nodeId === '-trashcan-') {
|
||||
return this.loadTrashcan(pagination, includeFields);
|
||||
} else if (nodeId === '-sharedlinks-') {
|
||||
@@ -313,20 +317,10 @@ export class CustomResourcesService {
|
||||
getCorrespondingNodeIds(nodeId: string, pagination: PaginationModel = {}): Observable<string[]> {
|
||||
if (this.isCustomSource(nodeId)) {
|
||||
|
||||
return this.loadFolderByNodeId(nodeId, pagination, [])
|
||||
.pipe(map((result) => result.list.entries.map((node: any) => {
|
||||
if (nodeId === '-sharedlinks-') {
|
||||
return node.entry.nodeId;
|
||||
|
||||
} else if (nodeId === '-sites-' || nodeId === '-mysites-') {
|
||||
return node.entry.guid;
|
||||
|
||||
} else if (nodeId === '-favorites-') {
|
||||
return node.entry.targetGuid;
|
||||
}
|
||||
|
||||
return node.entry.id;
|
||||
})));
|
||||
return this.loadFolderByNodeId(nodeId, pagination)
|
||||
.pipe(map((result: any): string[] => {
|
||||
return result.list.entries.map((node: any): string => this.getIdFromEntry(node, nodeId));
|
||||
}));
|
||||
|
||||
} else if (nodeId) {
|
||||
// cases when nodeId is '-my-', '-root-' or '-shared-'
|
||||
@@ -337,6 +331,18 @@ export class CustomResourcesService {
|
||||
return of([]);
|
||||
}
|
||||
|
||||
getIdFromEntry(node: any, nodeId: string): string {
|
||||
if (nodeId === '-sharedlinks-') {
|
||||
return node.entry.nodeId;
|
||||
} else if (nodeId === '-sites-' || nodeId === '-mysites-') {
|
||||
return node.entry.guid;
|
||||
} else if (nodeId === '-favorites-') {
|
||||
return node.entry.targetGuid;
|
||||
} else {
|
||||
return node.entry.id;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Does the well-known alias have a corresponding node ID?
|
||||
* @param nodeId Node to check
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { ContentService, TranslationService } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
import { Observable, Subject, throwError } from 'rxjs';
|
||||
import { ContentActionHandler } from '../models/content-action.model';
|
||||
import { PermissionModel } from '../models/permissions.model';
|
||||
@@ -77,8 +77,8 @@ export class DocumentActionsService {
|
||||
* @param obj Item to receive an action
|
||||
* @returns True if the action can be executed on this item, false otherwise
|
||||
*/
|
||||
canExecuteAction(obj: any): boolean {
|
||||
return this.documentListService && obj && obj.entry.isFile === true;
|
||||
canExecuteAction(nodeEntry: NodeEntry): boolean {
|
||||
return this.documentListService && nodeEntry && nodeEntry.entry.isFile === true;
|
||||
}
|
||||
|
||||
private setupActionHandlers() {
|
||||
@@ -89,21 +89,21 @@ export class DocumentActionsService {
|
||||
this.handlers['lock'] = this.lockNode.bind(this);
|
||||
}
|
||||
|
||||
private lockNode(node: MinimalNodeEntity, target?: any, permission?: string) {
|
||||
private lockNode(node: NodeEntry, target?: any, permission?: string) {
|
||||
return this.contentNodeDialogService.openLockNodeDialog(node.entry);
|
||||
}
|
||||
|
||||
private downloadNode(obj: MinimalNodeEntity, target?: any, permission?: string) {
|
||||
private downloadNode(obj: NodeEntry, target?: any, permission?: string) {
|
||||
this.nodeActionsService.downloadNode(obj);
|
||||
}
|
||||
|
||||
private copyNode(node: MinimalNodeEntity, target?: any, permission?: string) {
|
||||
private copyNode(node: NodeEntry, target?: any, permission?: string) {
|
||||
const actionObservable = this.nodeActionsService.copyContent(node.entry, permission);
|
||||
this.prepareHandlers(actionObservable, 'content', 'copy', target, permission);
|
||||
return actionObservable;
|
||||
}
|
||||
|
||||
private moveNode(node: MinimalNodeEntity, target?: any, permission?: string) {
|
||||
private moveNode(node: NodeEntry, target?: any, permission?: string) {
|
||||
const actionObservable = this.nodeActionsService.moveContent(node.entry, permission);
|
||||
this.prepareHandlers(actionObservable, 'content', 'move', target, permission);
|
||||
return actionObservable;
|
||||
@@ -118,7 +118,7 @@ export class DocumentActionsService {
|
||||
);
|
||||
}
|
||||
|
||||
private deleteNode(node: MinimalNodeEntity, target?: any, permission?: string): Observable<any> {
|
||||
private deleteNode(node: NodeEntry, target?: any, permission?: string): Observable<any> {
|
||||
let handlerObservable;
|
||||
|
||||
if (this.canExecuteAction(node)) {
|
||||
|
||||
@@ -26,33 +26,6 @@ describe('DocumentListService', () => {
|
||||
let service: DocumentListService;
|
||||
let alfrescoApiService: AlfrescoApiService;
|
||||
|
||||
let fakeEntryNode = {
|
||||
'entry': {
|
||||
'aspectNames': ['cm:auditable'],
|
||||
'createdAt': '2016-12-06T15:58:32.408+0000',
|
||||
'isFolder': true,
|
||||
'isFile': false,
|
||||
'createdByUser': { 'id': 'admin', 'displayName': 'Administrator' },
|
||||
'modifiedAt': '2016-12-06T15:58:32.408+0000',
|
||||
'modifiedByUser': { 'id': 'admin', 'displayName': 'Administrator' },
|
||||
'name': 'fake-name',
|
||||
'id': '2214733d-a920-4dbe-af95-4230345fae82',
|
||||
'nodeType': 'cm:folder',
|
||||
'parentId': 'ed7ab80e-b398-4bed-b38d-139ae4cc592a'
|
||||
}
|
||||
};
|
||||
|
||||
let fakeAlreadyExist = {
|
||||
'error': {
|
||||
'errorKey': 'Duplicate child name not allowed: empty',
|
||||
'statusCode': 409,
|
||||
'briefSummary': '11060002 Duplicate child name not' +
|
||||
' allowed: empty',
|
||||
'stackTrace': 'For security reasons the stack trace is no longer displayed, but the property is kept for previous versions.',
|
||||
'descriptionURL': 'https://api-explorer.alfresco.com'
|
||||
}
|
||||
};
|
||||
|
||||
let fakeFolder = {
|
||||
'list': {
|
||||
'pagination': { 'count': 1, 'hasMoreItems': false, 'totalItems': 1, 'skipCount': 0, 'maxItems': 20 },
|
||||
@@ -105,43 +78,6 @@ describe('DocumentListService', () => {
|
||||
jasmine.Ajax.uninstall();
|
||||
});
|
||||
|
||||
it('should create a folder in the path', () => {
|
||||
service.createFolder('fake-name', 'fake-path').subscribe(
|
||||
(res) => {
|
||||
expect(res).toBeDefined();
|
||||
expect(res.entry).toBeDefined();
|
||||
expect(res.entry.isFolder).toBeTruthy();
|
||||
expect(res.entry.name).toEqual('fake-name');
|
||||
expect(res.entry.nodeType).toEqual('cm:folder');
|
||||
}
|
||||
);
|
||||
|
||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
||||
status: 200,
|
||||
contentType: 'json',
|
||||
responseText: fakeEntryNode
|
||||
});
|
||||
});
|
||||
|
||||
it('should emit an error when the folder already exist', () => {
|
||||
service.createFolder('fake-name', 'fake-path').subscribe(
|
||||
(res) => {
|
||||
|
||||
},
|
||||
(err) => {
|
||||
expect(err).toBeDefined();
|
||||
expect(err.status).toEqual(409);
|
||||
expect(err.response).toBeDefined();
|
||||
}
|
||||
);
|
||||
|
||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
||||
status: 409,
|
||||
contentType: 'json',
|
||||
responseText: fakeAlreadyExist
|
||||
});
|
||||
});
|
||||
|
||||
it('should return the folder info', () => {
|
||||
service.getFolder('/fake-root/fake-name').subscribe(
|
||||
(res) => {
|
||||
@@ -186,7 +122,7 @@ describe('DocumentListService', () => {
|
||||
});
|
||||
|
||||
it('should add the includeTypes in the request getFolderNode if required', () => {
|
||||
let spyGetNodeInfo = spyOn(alfrescoApiService.getInstance().nodes, 'getNodeInfo').and.callThrough();
|
||||
let spyGetNodeInfo = spyOn(alfrescoApiService.getInstance().nodes, 'getNode').and.callThrough();
|
||||
|
||||
service.getFolderNode('test-id', ['isLocked']);
|
||||
|
||||
@@ -197,7 +133,7 @@ describe('DocumentListService', () => {
|
||||
});
|
||||
|
||||
it('should not add the includeTypes in the request getFolderNode if is duplicated', () => {
|
||||
let spyGetNodeInfo = spyOn(alfrescoApiService.getInstance().nodes, 'getNodeInfo').and.callThrough();
|
||||
let spyGetNodeInfo = spyOn(alfrescoApiService.getInstance().nodes, 'getNode').and.callThrough();
|
||||
|
||||
service.getFolderNode('test-id', ['allowableOperations']);
|
||||
|
||||
@@ -211,7 +147,7 @@ describe('DocumentListService', () => {
|
||||
it('should delete the folder', () => {
|
||||
service.deleteNode('fake-id').subscribe(
|
||||
(res) => {
|
||||
expect(res).toBeNull();
|
||||
expect(res).toBe('');
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ import {
|
||||
} from '@alfresco/adf-core';
|
||||
|
||||
import { Injectable } from '@angular/core';
|
||||
import { MinimalNodeEntity, MinimalNodeEntryEntity, NodeEntry, NodePaging } from 'alfresco-js-api';
|
||||
import { NodeEntry, NodePaging } from '@alfresco/js-api';
|
||||
import { Observable, from, throwError } from 'rxjs';
|
||||
import { catchError } from 'rxjs/operators';
|
||||
|
||||
@@ -39,37 +39,6 @@ export class DocumentListService {
|
||||
private thumbnailService: ThumbnailService) {
|
||||
}
|
||||
|
||||
private getNodesPromise(folder: string, opts?: any, includeFields: string[] = []): Promise<NodePaging> {
|
||||
|
||||
let rootNodeId = DocumentListService.ROOT_ID;
|
||||
if (opts && opts.rootFolderId) {
|
||||
rootNodeId = opts.rootFolderId;
|
||||
}
|
||||
|
||||
let includeFieldsRequest = ['path', 'properties', 'allowableOperations', 'permissions', 'aspectNames', ...includeFields]
|
||||
.filter((element, index, array) => index === array.indexOf(element));
|
||||
|
||||
let params: any = {
|
||||
includeSource: true,
|
||||
include: includeFieldsRequest
|
||||
};
|
||||
|
||||
if (folder) {
|
||||
params.relativePath = folder;
|
||||
}
|
||||
|
||||
if (opts) {
|
||||
if (opts.maxItems) {
|
||||
params.maxItems = opts.maxItems;
|
||||
}
|
||||
if (opts.skipCount) {
|
||||
params.skipCount = opts.skipCount;
|
||||
}
|
||||
}
|
||||
|
||||
return this.apiService.getInstance().nodes.getNodeChildren(rootNodeId, params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a node.
|
||||
* @param nodeId ID of the node to delete
|
||||
@@ -105,19 +74,6 @@ export class DocumentListService {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new folder in the path.
|
||||
* @param name Folder name
|
||||
* @param parentId Parent folder ID
|
||||
* @returns Details of the created folder node
|
||||
*/
|
||||
createFolder(name: string, parentId: string): Observable<MinimalNodeEntity> {
|
||||
return from(this.apiService.getInstance().nodes.createFolder(name, '/', parentId))
|
||||
.pipe(
|
||||
catchError((err) => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the folder node with the specified relative name path below the root node.
|
||||
* @param folder Path to folder.
|
||||
@@ -126,10 +82,35 @@ export class DocumentListService {
|
||||
* @returns Details of the folder
|
||||
*/
|
||||
getFolder(folder: string, opts?: any, includeFields: string[] = []): Observable<NodePaging> {
|
||||
return from(this.getNodesPromise(folder, opts, includeFields))
|
||||
.pipe(
|
||||
catchError((err) => this.handleError(err))
|
||||
);
|
||||
let rootNodeId = DocumentListService.ROOT_ID;
|
||||
if (opts && opts.rootFolderId) {
|
||||
rootNodeId = opts.rootFolderId;
|
||||
}
|
||||
|
||||
let includeFieldsRequest = ['path', 'properties', 'allowableOperations', 'permissions', 'aspectNames', ...includeFields]
|
||||
.filter((element, index, array) => index === array.indexOf(element));
|
||||
|
||||
let params: any = {
|
||||
includeSource: true,
|
||||
include: includeFieldsRequest
|
||||
};
|
||||
|
||||
if (folder) {
|
||||
params.relativePath = folder;
|
||||
}
|
||||
|
||||
if (opts) {
|
||||
if (opts.maxItems) {
|
||||
params.maxItems = opts.maxItems;
|
||||
}
|
||||
if (opts.skipCount) {
|
||||
params.skipCount = opts.skipCount;
|
||||
}
|
||||
}
|
||||
|
||||
return from(this.apiService.getInstance().nodes.getNodeChildren(rootNodeId, params)).pipe(
|
||||
catchError((err) => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -153,12 +134,11 @@ export class DocumentListService {
|
||||
|
||||
/**
|
||||
* Gets a folder node via its node ID.
|
||||
* @deprecated 2.3.0
|
||||
* @param nodeId ID of the folder node
|
||||
* @param includeFields Extra information to include (available options are "aspectNames", "isLink" and "association")
|
||||
* @returns Details of the folder
|
||||
*/
|
||||
getFolderNode(nodeId: string, includeFields: string[] = []): Observable<MinimalNodeEntryEntity> {
|
||||
getFolderNode(nodeId: string, includeFields: string[] = []): Observable<NodeEntry> {
|
||||
|
||||
let includeFieldsRequest = ['path', 'properties', 'allowableOperations', 'permissions', 'aspectNames', ...includeFields]
|
||||
.filter((element, index, array) => index === array.indexOf(element));
|
||||
@@ -168,14 +148,17 @@ export class DocumentListService {
|
||||
include: includeFieldsRequest
|
||||
};
|
||||
|
||||
return from(this.apiService.getInstance().nodes.getNodeInfo(nodeId, opts));
|
||||
return from(this.apiService.getInstance().nodes.getNode(nodeId, opts)).pipe(
|
||||
catchError((err) => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get thumbnail URL for the given document node.
|
||||
* @param node Node to get URL for.
|
||||
* @returns Thumbnail URL string
|
||||
*/
|
||||
getDocumentThumbnailUrl(node: MinimalNodeEntity): string {
|
||||
getDocumentThumbnailUrl(node: NodeEntry): string {
|
||||
return this.thumbnailService.getDocumentThumbnailUrl(node);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { ContentService, TranslationService } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
import { Observable, Subject, throwError } from 'rxjs';
|
||||
import { ContentActionHandler } from '../models/content-action.model';
|
||||
import { PermissionModel } from '../models/permissions.model';
|
||||
@@ -72,11 +72,11 @@ export class FolderActionsService {
|
||||
|
||||
/**
|
||||
* Checks if an action is available for a particular item.
|
||||
* @param obj Item to check
|
||||
* @param nodeEntry Item to check
|
||||
* @returns True if the action is available, false otherwise
|
||||
*/
|
||||
canExecuteAction(obj: any): boolean {
|
||||
return this.documentListService && obj && obj.entry.isFolder === true;
|
||||
canExecuteAction(nodeEntry: NodeEntry): boolean {
|
||||
return this.documentListService && nodeEntry && nodeEntry.entry.isFolder === true;
|
||||
}
|
||||
|
||||
private setupActionHandlers() {
|
||||
@@ -86,18 +86,18 @@ export class FolderActionsService {
|
||||
this.handlers['download'] = this.downloadNode.bind(this);
|
||||
}
|
||||
|
||||
private downloadNode(obj: MinimalNodeEntity, target?: any, permission?: string) {
|
||||
this.nodeActionsService.downloadNode(obj);
|
||||
private downloadNode(nodeEntry: NodeEntry) {
|
||||
this.nodeActionsService.downloadNode(nodeEntry);
|
||||
}
|
||||
|
||||
private copyNode(obj: MinimalNodeEntity, target?: any, permission?: string) {
|
||||
const actionObservable = this.nodeActionsService.copyFolder(obj.entry, permission);
|
||||
private copyNode(nodeEntry: NodeEntry, target?: any, permission?: string) {
|
||||
const actionObservable = this.nodeActionsService.copyFolder(nodeEntry.entry, permission);
|
||||
this.prepareHandlers(actionObservable, 'folder', 'copy', target, permission);
|
||||
return actionObservable;
|
||||
}
|
||||
|
||||
private moveNode(obj: MinimalNodeEntity, target?: any, permission?: string) {
|
||||
const actionObservable = this.nodeActionsService.moveFolder(obj.entry, permission);
|
||||
private moveNode(nodeEntry: NodeEntry, target?: any, permission?: string) {
|
||||
const actionObservable = this.nodeActionsService.moveFolder(nodeEntry.entry, permission);
|
||||
this.prepareHandlers(actionObservable, 'folder', 'move', target, permission);
|
||||
return actionObservable;
|
||||
}
|
||||
@@ -114,7 +114,7 @@ export class FolderActionsService {
|
||||
);
|
||||
}
|
||||
|
||||
private deleteNode(node: MinimalNodeEntity, target?: any, permission?: string): Observable<any> {
|
||||
private deleteNode(node: NodeEntry, target?: any, permission?: string): Observable<any> {
|
||||
let handlerObservable: Observable<any>;
|
||||
|
||||
if (this.canExecuteAction(node)) {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { async, TestBed } from '@angular/core/testing';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { AppConfigService, setupTestBed, CoreModule } from '@alfresco/adf-core';
|
||||
import { DocumentListService } from './document-list.service';
|
||||
import { NodeActionsService } from './node-actions.service';
|
||||
@@ -25,7 +25,7 @@ import { of, throwError } from 'rxjs';
|
||||
import { MatDialogRef } from '@angular/material';
|
||||
import { DialogModule } from '../../dialogs/dialog.module';
|
||||
|
||||
const fakeNode: MinimalNodeEntryEntity = <MinimalNodeEntryEntity> {
|
||||
const fakeNode: Node = <Node> {
|
||||
id: 'fake'
|
||||
};
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { Injectable, Output, EventEmitter } from '@angular/core';
|
||||
import { MinimalNodeEntryEntity, MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { Node, NodeEntry } from '@alfresco/js-api';
|
||||
import { Subject } from 'rxjs';
|
||||
import { AlfrescoApiService, ContentService, NodeDownloadDirective } from '@alfresco/adf-core';
|
||||
import { MatDialog } from '@angular/material';
|
||||
@@ -39,7 +39,7 @@ export class NodeActionsService {
|
||||
private apiService?: AlfrescoApiService,
|
||||
private dialog?: MatDialog) {}
|
||||
|
||||
downloadNode(node: MinimalNodeEntity) {
|
||||
downloadNode(node: NodeEntry) {
|
||||
new NodeDownloadDirective(this.apiService, this.dialog)
|
||||
.downloadNode(node);
|
||||
}
|
||||
@@ -50,7 +50,7 @@ export class NodeActionsService {
|
||||
* @param contentEntry node to copy
|
||||
* @param permission permission which is needed to apply the action
|
||||
*/
|
||||
public copyContent(contentEntry: MinimalNodeEntryEntity, permission?: string): Subject<string> {
|
||||
public copyContent(contentEntry: Node, permission?: string): Subject<string> {
|
||||
return this.doFileOperation('copy', 'content', contentEntry, permission);
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ export class NodeActionsService {
|
||||
* @param contentEntry node to copy
|
||||
* @param permission permission which is needed to apply the action
|
||||
*/
|
||||
public copyFolder(contentEntry: MinimalNodeEntryEntity, permission?: string): Subject<string> {
|
||||
public copyFolder(contentEntry: Node, permission?: string): Subject<string> {
|
||||
return this.doFileOperation('copy', 'folder', contentEntry, permission);
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ export class NodeActionsService {
|
||||
* @param contentEntry node to move
|
||||
* @param permission permission which is needed to apply the action
|
||||
*/
|
||||
public moveContent(contentEntry: MinimalNodeEntryEntity, permission?: string): Subject<string> {
|
||||
public moveContent(contentEntry: Node, permission?: string): Subject<string> {
|
||||
return this.doFileOperation('move', 'content', contentEntry, permission);
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ export class NodeActionsService {
|
||||
* @param contentEntry node to move
|
||||
* @param permission permission which is needed to apply the action
|
||||
*/
|
||||
public moveFolder(contentEntry: MinimalNodeEntryEntity, permission?: string): Subject<string> {
|
||||
public moveFolder(contentEntry: Node, permission?: string): Subject<string> {
|
||||
return this.doFileOperation('move', 'folder', contentEntry, permission);
|
||||
}
|
||||
|
||||
@@ -92,12 +92,12 @@ export class NodeActionsService {
|
||||
* @param contentEntry the contentEntry which has to have the action performed on
|
||||
* @param permission permission which is needed to apply the action
|
||||
*/
|
||||
private doFileOperation(action: string, type: string, contentEntry: MinimalNodeEntryEntity, permission?: string): Subject<string> {
|
||||
private doFileOperation(action: string, type: string, contentEntry: Node, permission?: string): Subject<string> {
|
||||
const observable: Subject<string> = new Subject<string>();
|
||||
|
||||
this.contentDialogService
|
||||
.openCopyMoveDialog(action, contentEntry, permission)
|
||||
.subscribe((selections: MinimalNodeEntryEntity[]) => {
|
||||
.subscribe((selections: Node[]) => {
|
||||
const selection = selections[0];
|
||||
this.documentListService[`${action}Node`].call(this.documentListService, contentEntry.id, selection.id)
|
||||
.subscribe(
|
||||
|
||||
@@ -24,7 +24,7 @@ import { FolderDialogComponent } from '../dialogs/folder.dialog';
|
||||
|
||||
import { ContentService, setupTestBed, CoreModule } from '@alfresco/adf-core';
|
||||
import { FolderCreateDirective } from './folder-create.directive';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
|
||||
@Component({
|
||||
template: `
|
||||
@@ -37,9 +37,9 @@ import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
})
|
||||
class TestTypeComponent {
|
||||
parentNode = '';
|
||||
public successParameter: MinimalNodeEntryEntity = null;
|
||||
public successParameter: Node = null;
|
||||
|
||||
success(node: MinimalNodeEntryEntity) {
|
||||
success(node: Node) {
|
||||
this.successParameter = node;
|
||||
}
|
||||
}
|
||||
@@ -49,7 +49,7 @@ class TestTypeComponent {
|
||||
})
|
||||
class TestComponent {
|
||||
parentNode = '';
|
||||
public successParameter: MinimalNodeEntryEntity = null;
|
||||
public successParameter: Node = null;
|
||||
}
|
||||
|
||||
describe('FolderCreateDirective', () => {
|
||||
@@ -91,7 +91,7 @@ describe('FolderCreateDirective', () => {
|
||||
afterClosed: (val) => of(val),
|
||||
componentInstance: {
|
||||
error: new Subject<any>(),
|
||||
success: new Subject<MinimalNodeEntryEntity>()
|
||||
success: new Subject<Node>()
|
||||
}
|
||||
};
|
||||
});
|
||||
@@ -135,7 +135,7 @@ describe('FolderCreateDirective', () => {
|
||||
});
|
||||
|
||||
it('should emit success event with node if the folder creation was successful', async(() => {
|
||||
const testNode = <MinimalNodeEntryEntity> {};
|
||||
const testNode = <Node> {};
|
||||
fixture.detectChanges();
|
||||
|
||||
element.triggerEventHandler('click', event);
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
import { Directive, HostListener, Input, Output, EventEmitter } from '@angular/core';
|
||||
import { MatDialog, MatDialogConfig } from '@angular/material';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { FolderDialogComponent } from '../dialogs/folder.dialog';
|
||||
import { ContentService } from '@alfresco/adf-core';
|
||||
|
||||
@@ -49,7 +49,7 @@ export class FolderCreateDirective {
|
||||
|
||||
/** Emitted when the folder is created successfully. */
|
||||
@Output()
|
||||
success: EventEmitter<MinimalNodeEntryEntity> = new EventEmitter<MinimalNodeEntryEntity>();
|
||||
success: EventEmitter<Node> = new EventEmitter<Node>();
|
||||
|
||||
@HostListener('click', [ '$event' ])
|
||||
onClick(event) {
|
||||
@@ -80,11 +80,11 @@ export class FolderCreateDirective {
|
||||
this.error.emit(error);
|
||||
});
|
||||
|
||||
dialogInstance.componentInstance.success.subscribe((node: MinimalNodeEntryEntity) => {
|
||||
dialogInstance.componentInstance.success.subscribe((node: Node) => {
|
||||
this.success.emit(node);
|
||||
});
|
||||
|
||||
dialogInstance.afterClosed().subscribe((node: MinimalNodeEntryEntity) => {
|
||||
dialogInstance.afterClosed().subscribe((node: Node) => {
|
||||
if (node) {
|
||||
content.folderCreate.next(node);
|
||||
}
|
||||
|
||||
@@ -23,16 +23,16 @@ import { Subject, of } from 'rxjs';
|
||||
|
||||
import { ContentService, setupTestBed, CoreModule } from '@alfresco/adf-core';
|
||||
import { FolderEditDirective } from './folder-edit.directive';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
|
||||
@Component({
|
||||
template: '<div [adf-edit-folder]="folder" (success)="success($event)" title="edit-title"></div>'
|
||||
})
|
||||
class TestComponent {
|
||||
folder = {};
|
||||
public successParameter: MinimalNodeEntryEntity = null;
|
||||
public successParameter: Node = null;
|
||||
|
||||
success(node: MinimalNodeEntryEntity) {
|
||||
success(node: Node) {
|
||||
this.successParameter = node;
|
||||
}
|
||||
}
|
||||
@@ -74,7 +74,7 @@ describe('FolderEditDirective', () => {
|
||||
afterClosed: (val) => of(val),
|
||||
componentInstance: {
|
||||
error: new Subject<any>(),
|
||||
success: new Subject<MinimalNodeEntryEntity>()
|
||||
success: new Subject<Node>()
|
||||
}
|
||||
};
|
||||
|
||||
@@ -106,7 +106,7 @@ describe('FolderEditDirective', () => {
|
||||
});
|
||||
|
||||
it('should emit success event with node if the folder creation was successful', async(() => {
|
||||
const testNode = <MinimalNodeEntryEntity> {};
|
||||
const testNode = <Node> {};
|
||||
fixture.detectChanges();
|
||||
|
||||
element.triggerEventHandler('click', event);
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
import { Directive, ElementRef, HostListener, Input, Output, EventEmitter } from '@angular/core';
|
||||
import { MatDialog, MatDialogConfig } from '@angular/material';
|
||||
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
|
||||
import { FolderDialogComponent } from '../dialogs/folder.dialog';
|
||||
import { ContentService } from '@alfresco/adf-core';
|
||||
@@ -33,7 +33,7 @@ export class FolderEditDirective {
|
||||
|
||||
/** Folder node to edit. */
|
||||
@Input('adf-edit-folder')
|
||||
folder: MinimalNodeEntryEntity;
|
||||
folder: Node;
|
||||
|
||||
/** Emitted when an error occurs (eg, a folder with same name already exists). */
|
||||
@Output()
|
||||
@@ -45,7 +45,7 @@ export class FolderEditDirective {
|
||||
|
||||
/** Emitted when the folder has been edited successfully. */
|
||||
@Output()
|
||||
success: EventEmitter<MinimalNodeEntryEntity> = new EventEmitter<MinimalNodeEntryEntity>();
|
||||
success: EventEmitter<Node> = new EventEmitter<Node>();
|
||||
|
||||
@HostListener('click', [ '$event' ])
|
||||
onClick(event) {
|
||||
@@ -82,11 +82,11 @@ export class FolderEditDirective {
|
||||
this.error.emit(error);
|
||||
});
|
||||
|
||||
dialogInstance.componentInstance.success.subscribe((node: MinimalNodeEntryEntity) => {
|
||||
dialogInstance.componentInstance.success.subscribe((node: Node) => {
|
||||
this.success.emit(node);
|
||||
});
|
||||
|
||||
dialogInstance.afterClosed().subscribe((node: MinimalNodeEntryEntity) => {
|
||||
dialogInstance.afterClosed().subscribe((node: Node) => {
|
||||
if (node) {
|
||||
content.folderEdit.next(node);
|
||||
}
|
||||
|
||||
@@ -35,8 +35,10 @@ module.exports = function (config) {
|
||||
|
||||
proxies: {
|
||||
'/base/assets/': '/base/lib/content-services/assets/',
|
||||
'/assets/': '/base/lib/content-services/assets/',
|
||||
'/assets/adf-content-services/i18n/en.json': '/base/lib/content-services/i18n/en.json',
|
||||
'/assets/adf-core/i18n/en.json': '/base/lib/core/i18n/en.json',
|
||||
'/assets/adf-core/i18n/en-GB.json': '/base/lib/core/i18n/en.json',
|
||||
'/app.config.json': '/base/lib/config/app.config.json',
|
||||
},
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Component, ViewChild } from '@angular/core';
|
||||
import { SearchComponent } from '../search/components/search.component';
|
||||
import { QueryBody } from 'alfresco-js-api';
|
||||
import { QueryBody } from '@alfresco/js-api';
|
||||
|
||||
const entryItem = {
|
||||
entry: {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"entryFile": "./public-api.ts",
|
||||
"flatModuleFile": "adf-content-services",
|
||||
"umdModuleIds": {
|
||||
"alfresco-js-api": "alfresco-js-api",
|
||||
"@alfresco/js-api": "@alfresco/js-ap",
|
||||
"minimatch": "minimatch",
|
||||
"@angular/platform-browser/animations": "@angular/platform-browser/animations",
|
||||
"@angular/material": "@angular/material",
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"alfresco-js-api": ">=2.7.0-beta5",
|
||||
"rxjs": ">=6.2.2",
|
||||
"@alfresco/adf-core": ">=2.7.0-beta5",
|
||||
"@ngx-translate/core": ">=10.0.2",
|
||||
"@ngx-translate/core": ">=11.0.0",
|
||||
"hammerjs": ">=2.0.8",
|
||||
"moment": ">=2.22.2",
|
||||
"reflect-metadata": ">=0.1.10",
|
||||
|
||||
+2
-2
@@ -15,11 +15,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
import { Subject } from 'rxjs';
|
||||
|
||||
export interface AddPermissionDialogData {
|
||||
title?: string;
|
||||
nodeId: string;
|
||||
confirm: Subject<MinimalNodeEntity[]>;
|
||||
confirm: Subject<NodeEntry[]>;
|
||||
}
|
||||
|
||||
+2
-2
@@ -22,7 +22,7 @@ import { ContentTestingModule } from '../../../testing/content.testing.module';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { setupTestBed } from '@alfresco/adf-core';
|
||||
import { AddPermissionDialogComponent } from './add-permission-dialog.component';
|
||||
import { MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
import { Subject } from 'rxjs';
|
||||
import { AddPermissionDialogData } from './add-permission-dialog-data.interface';
|
||||
import { fakeAuthorityResults } from '../../../mock/add-permission.component.mock';
|
||||
@@ -35,7 +35,7 @@ describe('AddPermissionDialog', () => {
|
||||
let data: AddPermissionDialogData = {
|
||||
title: 'dead or alive you are coming with me',
|
||||
nodeId: 'fake-node-id',
|
||||
confirm: new Subject<MinimalNodeEntity[]> ()
|
||||
confirm: new Subject<NodeEntry[]> ()
|
||||
};
|
||||
const dialogRef = {
|
||||
close: jasmine.createSpy('close')
|
||||
|
||||
+3
-3
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Component, ViewEncapsulation, Inject, ViewChild } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA } from '@angular/material';
|
||||
import { MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
import { AddPermissionDialogData } from './add-permission-dialog-data.interface';
|
||||
import { AddPermissionComponent } from '../add-permission/add-permission.component';
|
||||
|
||||
@@ -32,12 +32,12 @@ export class AddPermissionDialogComponent {
|
||||
@ViewChild('addPermission')
|
||||
addPermissionComponent: AddPermissionComponent;
|
||||
|
||||
currentSelection: MinimalNodeEntity[] = [];
|
||||
currentSelection: NodeEntry[] = [];
|
||||
|
||||
constructor(@Inject(MAT_DIALOG_DATA) public data: AddPermissionDialogData) {
|
||||
}
|
||||
|
||||
onSelect(items: MinimalNodeEntity[]) {
|
||||
onSelect(items: NodeEntry[]) {
|
||||
this.currentSelection = items;
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -21,7 +21,7 @@ import { SearchService, SearchConfigurationService } from '@alfresco/adf-core';
|
||||
import { SearchComponent } from '../../../search/components/search.component';
|
||||
import { FormControl } from '@angular/forms';
|
||||
import { debounceTime } from 'rxjs/operators';
|
||||
import { MinimalNodeEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-add-permission-panel',
|
||||
@@ -46,9 +46,9 @@ export class AddPermissionPanelComponent {
|
||||
searchedWord = '';
|
||||
debounceSearch: number = 200;
|
||||
|
||||
selectedItems: MinimalNodeEntity[] = [];
|
||||
selectedItems: NodeEntry[] = [];
|
||||
|
||||
EVERYONE: MinimalNodeEntity = { entry: { properties: {'cm:authorityName': 'GROUP_EVERYONE'}}};
|
||||
EVERYONE: NodeEntry = new NodeEntry({ entry: { properties: {'cm:authorityName': 'GROUP_EVERYONE'}}});
|
||||
|
||||
constructor() {
|
||||
this.searchInput.valueChanges
|
||||
@@ -63,7 +63,7 @@ export class AddPermissionPanelComponent {
|
||||
});
|
||||
}
|
||||
|
||||
elementClicked(item: MinimalNodeEntity) {
|
||||
elementClicked(item: NodeEntry) {
|
||||
if (this.isAlreadySelected(item)) {
|
||||
this.selectedItems.splice(this.selectedItems.indexOf(item), 1);
|
||||
} else {
|
||||
@@ -72,7 +72,7 @@ export class AddPermissionPanelComponent {
|
||||
this.select.emit(this.selectedItems);
|
||||
}
|
||||
|
||||
private isAlreadySelected(item: MinimalNodeEntity): boolean {
|
||||
private isAlreadySelected(item: NodeEntry): boolean {
|
||||
return this.selectedItems.indexOf(item) >= 0;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -24,6 +24,7 @@ import { of, throwError } from 'rxjs';
|
||||
import { fakeAuthorityResults } from '../../../mock/add-permission.component.mock';
|
||||
import { ContentTestingModule } from '../../../testing/content.testing.module';
|
||||
import { NodePermissionService } from '../../services/node-permission.service';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
|
||||
describe('AddPermissionComponent', () => {
|
||||
|
||||
@@ -73,7 +74,7 @@ describe('AddPermissionComponent', () => {
|
||||
it('should NOT enable the ADD button when a selection is sent but the user does not have the permissions', async(() => {
|
||||
const addPermissionPanelComponent: AddPermissionPanelComponent = fixture.debugElement.query(By.directive(AddPermissionPanelComponent)).componentInstance;
|
||||
addPermissionPanelComponent.select.emit(fakeAuthorityResults);
|
||||
fixture.componentInstance.currentNode = {id: 'fake-node-id'};
|
||||
fixture.componentInstance.currentNode = new Node({id: 'fake-node-id'});
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
const addButton: HTMLButtonElement = <HTMLButtonElement> element.querySelector('#adf-add-permission-action-button');
|
||||
@@ -100,7 +101,7 @@ describe('AddPermissionComponent', () => {
|
||||
|
||||
it('should NOT emit a success event when the user does not have permission to update the node', () => {
|
||||
fixture.componentInstance.selectedItems = fakeAuthorityResults;
|
||||
fixture.componentInstance.currentNode = { id: 'fake-node-id' };
|
||||
fixture.componentInstance.currentNode = new Node({ id: 'fake-node-id' });
|
||||
spyOn(nodePermissionService, 'updateNodePermissions').and.returnValue(of({ id: 'fake-node-id' }));
|
||||
|
||||
let spySuccess = spyOn(fixture.componentInstance, 'success');
|
||||
|
||||
+5
-5
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { Component, ViewEncapsulation, EventEmitter, Input, Output } from '@angular/core';
|
||||
import { MinimalNodeEntity, MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { NodeEntry, Node } from '@alfresco/js-api';
|
||||
import { NodePermissionService } from '../../services/node-permission.service';
|
||||
import { NodesApiService, ContentService, PermissionsEnum } from '@alfresco/adf-core';
|
||||
|
||||
@@ -34,14 +34,14 @@ export class AddPermissionComponent {
|
||||
|
||||
/** Emitted when the node is updated successfully. */
|
||||
@Output()
|
||||
success: EventEmitter<MinimalNodeEntryEntity> = new EventEmitter();
|
||||
success: EventEmitter<Node> = new EventEmitter();
|
||||
|
||||
/** Emitted when an error occurs during the update. */
|
||||
@Output()
|
||||
error: EventEmitter<any> = new EventEmitter();
|
||||
|
||||
selectedItems: MinimalNodeEntity[] = [];
|
||||
currentNode: MinimalNodeEntryEntity;
|
||||
selectedItems: NodeEntry[] = [];
|
||||
currentNode: Node;
|
||||
currentNodeRoles: string[];
|
||||
|
||||
constructor(private nodePermissionService: NodePermissionService,
|
||||
@@ -50,7 +50,7 @@ export class AddPermissionComponent {
|
||||
this.nodeApiService.getNode(this.nodeId).subscribe((node) => this.currentNode = node);
|
||||
}
|
||||
|
||||
onSelect(selection: MinimalNodeEntity[]) {
|
||||
onSelect(selection: NodeEntry[]) {
|
||||
this.selectedItems = selection;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { QueryBody } from 'alfresco-js-api';
|
||||
import { QueryBody } from '@alfresco/js-api';
|
||||
import { SearchConfigurationInterface } from '@alfresco/adf-core';
|
||||
|
||||
export class SearchPermissionConfigurationService implements SearchConfigurationInterface {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
/* tslint:disable:no-input-rename */
|
||||
import { Directive, Input, Output, EventEmitter } from '@angular/core';
|
||||
import { NodesApiService, ContentService, PermissionsEnum } from '@alfresco/adf-core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
|
||||
@Directive({
|
||||
selector: 'button[adf-inherit-permission], mat-button-toggle[adf-inherit-permission]',
|
||||
@@ -35,7 +35,7 @@ export class InheritPermissionDirective {
|
||||
|
||||
/** Emitted when the node is updated. */
|
||||
@Output()
|
||||
updated: EventEmitter<MinimalNodeEntryEntity> = new EventEmitter<MinimalNodeEntryEntity>();
|
||||
updated: EventEmitter<Node> = new EventEmitter<Node>();
|
||||
|
||||
/** Emitted when an error occurs. */
|
||||
@Output()
|
||||
@@ -46,10 +46,10 @@ export class InheritPermissionDirective {
|
||||
}
|
||||
|
||||
onInheritPermissionClicked() {
|
||||
this.nodeService.getNode(this.nodeId).subscribe((node: MinimalNodeEntryEntity) => {
|
||||
this.nodeService.getNode(this.nodeId).subscribe((node: Node) => {
|
||||
if (this.contentService.hasPermission(node, PermissionsEnum.UPDATEPERMISSIONS)) {
|
||||
const nodeBody = { permissions: { isInheritanceEnabled: !node.permissions.isInheritanceEnabled } };
|
||||
this.nodeService.updateNode(this.nodeId, nodeBody, { include: ['permissions'] }).subscribe((nodeUpdated: MinimalNodeEntryEntity) => {
|
||||
this.nodeService.updateNode(this.nodeId, nodeBody, { include: ['permissions'] }).subscribe((nodeUpdated: Node) => {
|
||||
this.updated.emit(nodeUpdated);
|
||||
}, (error) => this.error.emit(error));
|
||||
} else {
|
||||
|
||||
+10
-10
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Component, ViewEncapsulation, Input, OnInit, EventEmitter, Output } from '@angular/core';
|
||||
import { NodesApiService } from '@alfresco/adf-core';
|
||||
import { MinimalNodeEntryEntity, PermissionElement } from 'alfresco-js-api';
|
||||
import { Node, PermissionElement } from '@alfresco/js-api';
|
||||
import { PermissionDisplayModel } from '../../models/permission.model';
|
||||
import { NodePermissionService } from '../../services/node-permission.service';
|
||||
|
||||
@@ -43,7 +43,7 @@ export class PermissionListComponent implements OnInit {
|
||||
|
||||
permissionList: PermissionDisplayModel[];
|
||||
settableRoles: any[];
|
||||
actualNode: MinimalNodeEntryEntity;
|
||||
actualNode: Node;
|
||||
|
||||
constructor(private nodeService: NodesApiService,
|
||||
private nodePermissionService: NodePermissionService) {
|
||||
@@ -59,26 +59,26 @@ export class PermissionListComponent implements OnInit {
|
||||
}
|
||||
|
||||
private fetchNodePermissions() {
|
||||
this.nodeService.getNode(this.nodeId).subscribe((node: MinimalNodeEntryEntity) => {
|
||||
this.nodeService.getNode(this.nodeId).subscribe((node: Node) => {
|
||||
this.actualNode = node;
|
||||
this.permissionList = this.getPermissionList(node);
|
||||
this.nodePermissionService.getNodeRoles(node).subscribe((settableList: string[]) => {
|
||||
this.settableRoles = settableList;
|
||||
this.settableRoles = settableList;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private getPermissionList(node: MinimalNodeEntryEntity): PermissionDisplayModel[] {
|
||||
private getPermissionList(node: Node): PermissionDisplayModel[] {
|
||||
let allPermissions: PermissionDisplayModel[] = [];
|
||||
if (node.permissions.locallySet) {
|
||||
node.permissions.locallySet.map((element) => {
|
||||
let permission = new PermissionDisplayModel(element);
|
||||
node.permissions.locallySet.map((permissionElement: PermissionElement) => {
|
||||
let permission = new PermissionDisplayModel(permissionElement);
|
||||
allPermissions.push(permission);
|
||||
});
|
||||
}
|
||||
if (node.permissions.inherited) {
|
||||
node.permissions.inherited.map((element) => {
|
||||
let permissionInherited = new PermissionDisplayModel(element);
|
||||
node.permissions.inherited.map((permissionElement: PermissionElement) => {
|
||||
let permissionInherited = new PermissionDisplayModel(permissionElement);
|
||||
permissionInherited.isInherited = true;
|
||||
allPermissions.push(permissionInherited);
|
||||
});
|
||||
@@ -89,7 +89,7 @@ export class PermissionListComponent implements OnInit {
|
||||
saveNewRole(event: any, permissionRow: PermissionDisplayModel) {
|
||||
let updatedPermissionRole: PermissionElement = this.buildUpdatedPermission(event.value, permissionRow);
|
||||
this.nodePermissionService.updatePermissionRole(this.actualNode, updatedPermissionRole)
|
||||
.subscribe((node: MinimalNodeEntryEntity) => {
|
||||
.subscribe((node: Node) => {
|
||||
this.update.emit(updatedPermissionRole);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { PermissionElement } from 'alfresco-js-api';
|
||||
import { PermissionElement } from '@alfresco/js-api';
|
||||
|
||||
export class PermissionDisplayModel implements PermissionElement {
|
||||
|
||||
|
||||
+3
-3
@@ -22,7 +22,7 @@ import { MatDialog } from '@angular/material';
|
||||
import { Subject, of, throwError } from 'rxjs';
|
||||
import { ContentTestingModule } from '../../testing/content.testing.module';
|
||||
import { NodePermissionService } from './node-permission.service';
|
||||
import { Node } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
|
||||
describe('NodePermissionDialogService', () => {
|
||||
|
||||
@@ -61,7 +61,7 @@ describe('NodePermissionDialogService', () => {
|
||||
|
||||
describe('when node has permission to update permissions', () => {
|
||||
|
||||
let fakePermissionNode = {};
|
||||
let fakePermissionNode = new Node({});
|
||||
|
||||
beforeEach(() => {
|
||||
fakePermissionNode = <Node> { id: 'fake-permission-node', allowableOperations: ['updatePermissions']};
|
||||
@@ -97,7 +97,7 @@ describe('NodePermissionDialogService', () => {
|
||||
|
||||
describe('when node does not have permission to update permissions', () => {
|
||||
|
||||
let fakeForbiddenNode = {};
|
||||
let fakeForbiddenNode = new Node({});
|
||||
|
||||
beforeEach(() => {
|
||||
fakeForbiddenNode = <Node> { id: 'fake-permission-node', allowableOperations: ['update']};
|
||||
|
||||
@@ -20,7 +20,7 @@ import { Injectable } from '@angular/core';
|
||||
import { Subject, Observable, throwError } from 'rxjs';
|
||||
import { AddPermissionDialogComponent } from '../components/add-permission/add-permission-dialog.component';
|
||||
import { AddPermissionDialogData } from '../components/add-permission/add-permission-dialog-data.interface';
|
||||
import { MinimalNodeEntity, MinimalNodeEntryEntity, Node } from 'alfresco-js-api';
|
||||
import { NodeEntry, Node } from '@alfresco/js-api';
|
||||
import { NodePermissionService } from './node-permission.service';
|
||||
import { ContentService, PermissionsEnum } from '@alfresco/adf-core';
|
||||
import { switchMap } from 'rxjs/operators';
|
||||
@@ -41,9 +41,9 @@ export class NodePermissionDialogService {
|
||||
* @param title Dialog title
|
||||
* @returns Node with updated permissions
|
||||
*/
|
||||
openAddPermissionDialog(node: Node, title?: string): Observable<MinimalNodeEntity[]> {
|
||||
openAddPermissionDialog(node: Node, title?: string): Observable<NodeEntry[]> {
|
||||
if (this.contentService.hasPermission(node, PermissionsEnum.UPDATEPERMISSIONS)) {
|
||||
const confirm = new Subject<MinimalNodeEntity[]>();
|
||||
const confirm = new Subject<NodeEntry[]>();
|
||||
|
||||
confirm.subscribe({
|
||||
complete: this.close.bind(this)
|
||||
@@ -81,7 +81,7 @@ export class NodePermissionDialogService {
|
||||
* @param title Dialog title
|
||||
* @returns Node with updated permissions
|
||||
*/
|
||||
updateNodePermissionByDialog(nodeId?: string, title?: string): Observable<MinimalNodeEntryEntity> {
|
||||
updateNodePermissionByDialog(nodeId?: string, title?: string): Observable<Node> {
|
||||
return this.contentService.getNode(nodeId, { include: ['allowableOperations'] })
|
||||
.pipe(
|
||||
switchMap((node) => {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import { async, TestBed } from '@angular/core/testing';
|
||||
import { NodePermissionService } from './node-permission.service';
|
||||
import { SearchService, NodesApiService, setupTestBed, CoreModule } from '@alfresco/adf-core';
|
||||
import { MinimalNodeEntryEntity, PermissionElement } from 'alfresco-js-api';
|
||||
import { Node, PermissionElement } from '@alfresco/js-api';
|
||||
import { of } from 'rxjs';
|
||||
import { fakeEmptyResponse, fakeNodeWithOnlyLocally, fakeSiteRoles, fakeSiteNodeResponse,
|
||||
fakeNodeToRemovePermission, fakeNodeWithoutPermissions } from '../../mock/permission-list.component.mock';
|
||||
@@ -52,7 +52,7 @@ describe('NodePermissionService', () => {
|
||||
});
|
||||
|
||||
function returnUpdatedNode(nodeId, nodeBody) {
|
||||
let fakeNode: MinimalNodeEntryEntity = {};
|
||||
let fakeNode: Node = new Node({});
|
||||
fakeNode.id = 'fake-updated-node';
|
||||
fakeNode.permissions = nodeBody.permissions;
|
||||
return of(fakeNode);
|
||||
@@ -89,7 +89,7 @@ describe('NodePermissionService', () => {
|
||||
|
||||
spyOn(nodeService, 'updateNode').and.callFake((nodeId, permissionBody) => returnUpdatedNode(nodeId, permissionBody));
|
||||
|
||||
service.updatePermissionRole(fakeNodeWithOnlyLocally, fakePermission).subscribe((node: MinimalNodeEntryEntity) => {
|
||||
service.updatePermissionRole(fakeNodeWithOnlyLocally, fakePermission).subscribe((node: Node) => {
|
||||
expect(node).not.toBeNull();
|
||||
expect(node.id).toBe('fake-updated-node');
|
||||
expect(node.permissions.locallySet.length).toBe(1);
|
||||
@@ -108,7 +108,7 @@ describe('NodePermissionService', () => {
|
||||
spyOn(nodeService, 'updateNode').and.callFake((nodeId, permissionBody) => returnUpdatedNode(nodeId, permissionBody));
|
||||
const fakeNodeCopy = JSON.parse(JSON.stringify(fakeNodeToRemovePermission));
|
||||
|
||||
service.removePermission(fakeNodeCopy, fakePermission).subscribe((node: MinimalNodeEntryEntity) => {
|
||||
service.removePermission(fakeNodeCopy, fakePermission).subscribe((node: Node) => {
|
||||
expect(node).not.toBeNull();
|
||||
expect(node.id).toBe('fake-updated-node');
|
||||
expect(node.permissions.locallySet.length).toBe(2);
|
||||
@@ -124,7 +124,7 @@ describe('NodePermissionService', () => {
|
||||
spyOn(searchApiService, 'searchByQueryBody').and.returnValue(of(fakeSiteNodeResponse));
|
||||
spyOn(service, 'getGroupMemberByGroupName').and.returnValue(of(fakeSiteRoles));
|
||||
|
||||
service.updateNodePermissions('fake-node-id', fakeAuthorityResults).subscribe((node: MinimalNodeEntryEntity) => {
|
||||
service.updateNodePermissions('fake-node-id', fakeAuthorityResults).subscribe((node: Node) => {
|
||||
expect(node).not.toBeNull();
|
||||
expect(node.id).toBe('fake-updated-node');
|
||||
expect(node.permissions.locallySet.length).toBe(4);
|
||||
@@ -138,7 +138,7 @@ describe('NodePermissionService', () => {
|
||||
const fakeNodeCopy = JSON.parse(JSON.stringify(fakeNodeWithOnlyLocally));
|
||||
spyOn(nodeService, 'updateNode').and.callFake((nodeId, permissionBody) => returnUpdatedNode(nodeId, permissionBody));
|
||||
|
||||
service.updateLocallySetPermissions(fakeNodeCopy, fakeAuthorityResults, fakeSiteRoles).subscribe((node: MinimalNodeEntryEntity) => {
|
||||
service.updateLocallySetPermissions(fakeNodeCopy, fakeAuthorityResults, fakeSiteRoles).subscribe((node: Node) => {
|
||||
expect(node).not.toBeNull();
|
||||
expect(node.id).toBe('fake-updated-node');
|
||||
expect(node.permissions.locallySet.length).toBe(4);
|
||||
@@ -153,7 +153,7 @@ describe('NodePermissionService', () => {
|
||||
fakeNodeCopy.permissions.locallySet = undefined;
|
||||
spyOn(nodeService, 'updateNode').and.callFake((nodeId, permissionBody) => returnUpdatedNode(nodeId, permissionBody));
|
||||
|
||||
service.updateLocallySetPermissions(fakeNodeCopy, fakeAuthorityResults, fakeSiteRoles).subscribe((node: MinimalNodeEntryEntity) => {
|
||||
service.updateLocallySetPermissions(fakeNodeCopy, fakeAuthorityResults, fakeSiteRoles).subscribe((node: Node) => {
|
||||
expect(node).not.toBeNull();
|
||||
expect(node.id).toBe('fake-updated-node');
|
||||
expect(node.permissions.locallySet.length).toBe(3);
|
||||
@@ -185,7 +185,7 @@ describe('NodePermissionService', () => {
|
||||
}];
|
||||
|
||||
service.updateLocallySetPermissions(fakeNodeCopy, fakeDuplicateAuthority, ['Contributor'])
|
||||
.subscribe((node: MinimalNodeEntryEntity) => {
|
||||
.subscribe((node: Node) => {
|
||||
|
||||
}, (errorMessage) => {
|
||||
expect(errorMessage).not.toBeNull();
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable, of, from, throwError } from 'rxjs';
|
||||
import { AlfrescoApiService, SearchService, NodesApiService, TranslationService } from '@alfresco/adf-core';
|
||||
import { QueryBody, MinimalNodeEntryEntity, MinimalNodeEntity, PathElement, GroupMemberEntry, GroupsPaging, GroupMemberPaging, PermissionElement } from 'alfresco-js-api';
|
||||
import { QueryBody, Node, NodeEntry, PathElement, GroupMemberEntry, GroupMemberPaging, PermissionElement } from '@alfresco/js-api';
|
||||
import { switchMap, map } from 'rxjs/operators';
|
||||
|
||||
@Injectable({
|
||||
@@ -37,7 +37,7 @@ export class NodePermissionService {
|
||||
* @param node The target node
|
||||
* @returns Array of strings representing the roles
|
||||
*/
|
||||
getNodeRoles(node: MinimalNodeEntryEntity): Observable<string[]> {
|
||||
getNodeRoles(node: Node): Observable<string[]> {
|
||||
const retrieveSiteQueryBody: QueryBody = this.buildRetrieveSiteQueryBody(node.path.elements);
|
||||
return this.searchApiService.searchByQueryBody(retrieveSiteQueryBody)
|
||||
.pipe(
|
||||
@@ -58,7 +58,7 @@ export class NodePermissionService {
|
||||
* @param updatedPermissionRole Permission role to update or add
|
||||
* @returns Node with updated permission
|
||||
*/
|
||||
updatePermissionRole(node: MinimalNodeEntryEntity, updatedPermissionRole: PermissionElement): Observable<MinimalNodeEntryEntity> {
|
||||
updatePermissionRole(node: Node, updatedPermissionRole: PermissionElement): Observable<Node> {
|
||||
let permissionBody = { permissions: { locallySet: []} };
|
||||
const index = node.permissions.locallySet.map((permission) => permission.authorityId).indexOf(updatedPermissionRole.authorityId);
|
||||
permissionBody.permissions.locallySet = permissionBody.permissions.locallySet.concat(node.permissions.locallySet);
|
||||
@@ -76,7 +76,7 @@ export class NodePermissionService {
|
||||
* @param permissionList New permission settings
|
||||
* @returns Node with updated permissions
|
||||
*/
|
||||
updateNodePermissions(nodeId: string, permissionList: MinimalNodeEntity[]): Observable<MinimalNodeEntryEntity> {
|
||||
updateNodePermissions(nodeId: string, permissionList: NodeEntry[]): Observable<Node> {
|
||||
return this.nodeService.getNode(nodeId).pipe(
|
||||
switchMap((node) => {
|
||||
return this.getNodeRoles(node).pipe(
|
||||
@@ -94,7 +94,7 @@ export class NodePermissionService {
|
||||
* @param nodeRole Permission role
|
||||
* @returns Node with updated permissions
|
||||
*/
|
||||
updateLocallySetPermissions(node: MinimalNodeEntryEntity, nodes: MinimalNodeEntity[], nodeRole: string[]): Observable<MinimalNodeEntryEntity> {
|
||||
updateLocallySetPermissions(node: Node, nodes: NodeEntry[], nodeRole: string[]): Observable<Node> {
|
||||
let permissionBody = { permissions: { locallySet: []} };
|
||||
const permissionList = this.transformNodeToPermissionElement(nodes, nodeRole[0]);
|
||||
const duplicatedPermissions = this.getDuplicatedPermissions(node.permissions.locallySet, permissionList);
|
||||
@@ -126,7 +126,7 @@ export class NodePermissionService {
|
||||
oldPermission.name === newPermission.name;
|
||||
}
|
||||
|
||||
private transformNodeToPermissionElement(nodes: MinimalNodeEntity[], nodeRole: any): PermissionElement[] {
|
||||
private transformNodeToPermissionElement(nodes: NodeEntry[], nodeRole: any): PermissionElement[] {
|
||||
return nodes.map((node) => {
|
||||
let newPermissionElement: PermissionElement = <PermissionElement> {
|
||||
'authorityId': node.entry.properties['cm:authorityName'] ?
|
||||
@@ -145,7 +145,7 @@ export class NodePermissionService {
|
||||
* @param permissionToRemove Permission setting to remove
|
||||
* @returns Node with modified permissions
|
||||
*/
|
||||
removePermission(node: MinimalNodeEntryEntity, permissionToRemove: PermissionElement): Observable<MinimalNodeEntryEntity> {
|
||||
removePermission(node: Node, permissionToRemove: PermissionElement): Observable<Node> {
|
||||
let permissionBody = { permissions: { locallySet: [] } };
|
||||
const index = node.permissions.locallySet.map((permission) => permission.authorityId).indexOf(permissionToRemove.authorityId);
|
||||
if (index !== -1) {
|
||||
@@ -159,9 +159,9 @@ export class NodePermissionService {
|
||||
const groupName = 'GROUP_site_' + siteName;
|
||||
return this.getGroupMemberByGroupName(groupName)
|
||||
.pipe(
|
||||
map((res: GroupsPaging) => {
|
||||
map((groupMemberPaging: GroupMemberPaging) => {
|
||||
let displayResult: string[] = [];
|
||||
res.list.entries.forEach((member: GroupMemberEntry) => {
|
||||
groupMemberPaging.list.entries.forEach((member: GroupMemberEntry) => {
|
||||
displayResult.push(this.formattedRoleName(member.entry.displayName, 'site_' + siteName));
|
||||
});
|
||||
return displayResult;
|
||||
|
||||
@@ -19,7 +19,7 @@ import { AuthenticationService, ThumbnailService } from '@alfresco/adf-core';
|
||||
import { animate, state, style, transition, trigger } from '@angular/animations';
|
||||
import { Component, EventEmitter, Input, OnDestroy, OnInit, Output,
|
||||
QueryList, ViewEncapsulation, ViewChild, ViewChildren, ElementRef, TemplateRef, ContentChild } from '@angular/core';
|
||||
import { MinimalNodeEntity, QueryBody } from 'alfresco-js-api';
|
||||
import { NodeEntry, QueryBody } from '@alfresco/js-api';
|
||||
import { Observable, Subject } from 'rxjs';
|
||||
import { SearchComponent } from './search.component';
|
||||
import { MatListItem } from '@angular/material';
|
||||
@@ -175,7 +175,7 @@ export class SearchControlComponent implements OnInit, OnDestroy {
|
||||
return this.autocomplete ? 'on' : 'off';
|
||||
}
|
||||
|
||||
getMimeTypeIcon(node: MinimalNodeEntity): string {
|
||||
getMimeTypeIcon(node: NodeEntry): string {
|
||||
let mimeType;
|
||||
|
||||
if (node.entry.content && node.entry.content.mimeType) {
|
||||
|
||||
@@ -25,6 +25,7 @@ import { FacetQuery } from '../../facet-query.interface';
|
||||
import { FacetField } from '../../facet-field.interface';
|
||||
import { SearchFilterList } from './models/search-filter-list.model';
|
||||
import { takeWhile } from 'rxjs/operators';
|
||||
import { ResultSetPaging } from '@alfresco/js-api';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-search-filter',
|
||||
@@ -73,9 +74,9 @@ export class SearchFilterComponent implements OnInit, OnDestroy {
|
||||
if (this.queryBuilder) {
|
||||
this.queryBuilder.executed.pipe(
|
||||
takeWhile(() => this.isAlive)
|
||||
).subscribe((data) => {
|
||||
this.onDataLoaded(data);
|
||||
this.searchService.dataLoaded.next(data);
|
||||
).subscribe((resultSetPaging: ResultSetPaging) => {
|
||||
this.onDataLoaded(resultSetPaging);
|
||||
this.searchService.dataLoaded.next(resultSetPaging);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { SearchService, setupTestBed, CoreModule } from '@alfresco/adf-core';
|
||||
import { QueryBody } from 'alfresco-js-api';
|
||||
import { QueryBody } from '@alfresco/js-api';
|
||||
import { differentResult, folderResult, result, SimpleSearchTestComponent } from '../../mock';
|
||||
import { Observable, of, throwError } from 'rxjs';
|
||||
import { SearchModule } from '../search.module';
|
||||
|
||||
@@ -29,7 +29,7 @@ import {
|
||||
ViewChild,
|
||||
ViewEncapsulation
|
||||
} from '@angular/core';
|
||||
import { NodePaging, QueryBody } from 'alfresco-js-api';
|
||||
import { NodePaging, QueryBody } from '@alfresco/js-api';
|
||||
import { Subject } from 'rxjs';
|
||||
import { debounceTime } from 'rxjs/operators';
|
||||
|
||||
@@ -119,7 +119,7 @@ export class SearchComponent implements AfterContentInit, OnChanges {
|
||||
});
|
||||
|
||||
searchService.dataLoaded.subscribe(
|
||||
(data) => this.onSearchDataLoaded(data),
|
||||
(nodePaging: NodePaging) => this.onSearchDataLoaded(nodePaging),
|
||||
(error) => this.onSearchDataError(error)
|
||||
);
|
||||
}
|
||||
@@ -176,9 +176,9 @@ export class SearchComponent implements AfterContentInit, OnChanges {
|
||||
}
|
||||
}
|
||||
|
||||
onSearchDataLoaded(data: NodePaging) {
|
||||
if (data) {
|
||||
this.results = data;
|
||||
onSearchDataLoaded(nodePaging: NodePaging) {
|
||||
if (nodePaging) {
|
||||
this.results = nodePaging;
|
||||
this.resultLoaded.emit(this.results);
|
||||
this.isOpen = true;
|
||||
this.setVisibility();
|
||||
|
||||
@@ -18,7 +18,13 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Subject } from 'rxjs';
|
||||
import { AlfrescoApiService, AppConfigService } from '@alfresco/adf-core';
|
||||
import { QueryBody, RequestFacetFields, RequestFacetField, RequestSortDefinitionInner } from 'alfresco-js-api';
|
||||
import {
|
||||
QueryBody,
|
||||
RequestFacetFields,
|
||||
RequestFacetField,
|
||||
RequestSortDefinitionInner,
|
||||
ResultSetPaging
|
||||
} from '@alfresco/js-api';
|
||||
import { SearchCategory } from './search-category.interface';
|
||||
import { FilterQuery } from './filter-query.interface';
|
||||
import { SearchRange } from './search-range.interface';
|
||||
@@ -36,7 +42,7 @@ export class SearchQueryBuilderService {
|
||||
private _userQuery = '';
|
||||
|
||||
updated: Subject<QueryBody> = new Subject();
|
||||
executed: Subject<any> = new Subject();
|
||||
executed: Subject<ResultSetPaging> = new Subject();
|
||||
|
||||
categories: Array<SearchCategory> = [];
|
||||
queryFragments: { [id: string]: string } = {};
|
||||
@@ -165,8 +171,8 @@ export class SearchQueryBuilderService {
|
||||
async execute() {
|
||||
const query = this.buildQuery();
|
||||
if (query) {
|
||||
const data = await this.alfrescoApiService.searchApi.search(query);
|
||||
this.executed.next(data);
|
||||
const resultSetPaging: ResultSetPaging = await this.alfrescoApiService.searchApi.search(query);
|
||||
this.executed.next(resultSetPaging);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,11 +240,11 @@ export class SearchQueryBuilderService {
|
||||
|
||||
protected get sort(): RequestSortDefinitionInner[] {
|
||||
return this.sorting.map((def) => {
|
||||
return {
|
||||
return new RequestSortDefinitionInner({
|
||||
type: def.type,
|
||||
field: def.field,
|
||||
ascending: def.ascending
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';
|
||||
import { SitesService, LogService } from '@alfresco/adf-core';
|
||||
import { SitePaging, SiteEntry } from 'alfresco-js-api';
|
||||
import { SitePaging, SiteEntry } from '@alfresco/js-api';
|
||||
|
||||
export enum Relations {
|
||||
Members = 'members',
|
||||
@@ -91,30 +91,36 @@ export class DropdownSitesComponent implements OnInit {
|
||||
if (this.relations) {
|
||||
extendedOptions = { relations: [this.relations] };
|
||||
}
|
||||
this.sitesService.getSites(extendedOptions).subscribe((result) => {
|
||||
this.sitesService.getSites(extendedOptions).subscribe((sitePaging: SitePaging) => {
|
||||
|
||||
this.siteList = this.relations === Relations.Members ? this.filteredResultsByMember(result) : result;
|
||||
this.siteList = this.relations === Relations.Members ? this.filteredResultsByMember(sitePaging) : sitePaging;
|
||||
|
||||
if (!this.hideMyFiles) {
|
||||
let myItem = { entry: { id: '-my-', guid: '-my-', title: 'DROPDOWN.MY_FILES_OPTION' } };
|
||||
if (!this.hideMyFiles) {
|
||||
let siteEntry = new SiteEntry({
|
||||
entry: {
|
||||
id: '-my-',
|
||||
guid: '-my-',
|
||||
title: 'DROPDOWN.MY_FILES_OPTION'
|
||||
}
|
||||
});
|
||||
|
||||
this.siteList.list.entries.unshift(myItem);
|
||||
this.siteList.list.entries.unshift(siteEntry);
|
||||
|
||||
if (!this.value) {
|
||||
this.value = '-my-';
|
||||
if (!this.value) {
|
||||
this.value = '-my-';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.selected = this.siteList.list.entries.find((site) => site.entry.id === this.value);
|
||||
},
|
||||
(error) => {
|
||||
this.logService.error(error);
|
||||
});
|
||||
this.selected = this.siteList.list.entries.find((site: SiteEntry) => site.entry.id === this.value);
|
||||
},
|
||||
(error) => {
|
||||
this.logService.error(error);
|
||||
});
|
||||
}
|
||||
|
||||
private filteredResultsByMember(sites: SitePaging): SitePaging {
|
||||
const loggedUserName = this.sitesService.getEcmCurrentLoggedUserName();
|
||||
sites.list.entries = sites.list.entries.filter( (site) => this.isCurrentUserMember(site, loggedUserName));
|
||||
sites.list.entries = sites.list.entries.filter((site) => this.isCurrentUserMember(site, loggedUserName));
|
||||
return sites;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
import { Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation } from '@angular/core';
|
||||
import { RatingService } from './services/rating.service';
|
||||
import { RatingEntry } from 'alfresco-js-api-node';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-like',
|
||||
@@ -37,16 +38,17 @@ export class LikeComponent implements OnChanges {
|
||||
ratingType: string = 'likes';
|
||||
isLike: boolean = false;
|
||||
|
||||
constructor(private ratingService: RatingService) {}
|
||||
constructor(private ratingService: RatingService) {
|
||||
}
|
||||
|
||||
ngOnChanges() {
|
||||
this.clean();
|
||||
|
||||
this.ratingService.getRating(this.nodeId, this.ratingType).subscribe(
|
||||
(data) => {
|
||||
if (data.entry.aggregate) {
|
||||
this.likesCounter = data.entry.aggregate.numberOfRatings;
|
||||
if (data.entry.ratedAt) {
|
||||
(ratingEntry: RatingEntry) => {
|
||||
if (ratingEntry.entry.aggregate) {
|
||||
this.likesCounter = ratingEntry.entry.aggregate.numberOfRatings;
|
||||
if (ratingEntry.entry.ratedAt) {
|
||||
this.isLike = true;
|
||||
}
|
||||
}
|
||||
@@ -65,8 +67,8 @@ export class LikeComponent implements OnChanges {
|
||||
);
|
||||
} else {
|
||||
this.ratingService.postRating(this.nodeId, this.ratingType, true).subscribe(
|
||||
(data) => {
|
||||
this.likesCounter = data.entry.aggregate.numberOfRatings;
|
||||
(ratingEntry: RatingEntry) => {
|
||||
this.likesCounter = ratingEntry.entry.aggregate.numberOfRatings;
|
||||
this.isLike = true;
|
||||
this.changeVote.emit(this.likesCounter);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
import { Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation } from '@angular/core';
|
||||
import { RatingService } from './services/rating.service';
|
||||
import { RatingEntry } from '@alfresco/js-api';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-rating',
|
||||
@@ -47,9 +48,9 @@ export class RatingComponent implements OnChanges {
|
||||
let ratingObserver = this.ratingService.getRating(this.nodeId, this.ratingType);
|
||||
|
||||
ratingObserver.subscribe(
|
||||
(data) => {
|
||||
if (data.entry.aggregate) {
|
||||
this.average = data.entry.aggregate.average;
|
||||
(ratingEntry: RatingEntry) => {
|
||||
if (ratingEntry.entry.aggregate) {
|
||||
this.average = ratingEntry.entry.aggregate.average;
|
||||
this.calculateStars();
|
||||
}
|
||||
}
|
||||
@@ -63,9 +64,9 @@ export class RatingComponent implements OnChanges {
|
||||
|
||||
for (let i = 0; i < 5; i++) {
|
||||
if (i < this.average) {
|
||||
this.stars.push({fill: true});
|
||||
this.stars.push({ fill: true });
|
||||
} else {
|
||||
this.stars.push({fill: false});
|
||||
this.stars.push({ fill: false });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,10 +75,10 @@ export class RatingComponent implements OnChanges {
|
||||
|
||||
updateVote(vote: number) {
|
||||
this.ratingService.postRating(this.nodeId, this.ratingType, vote).subscribe(
|
||||
(data) => {
|
||||
if (data.entry.aggregate) {
|
||||
if (this.average !== data.entry.aggregate.average) {
|
||||
this.average = data.entry.aggregate.average;
|
||||
(ratingEntry: RatingEntry) => {
|
||||
if (ratingEntry.entry.aggregate) {
|
||||
if (this.average !== ratingEntry.entry.aggregate.average) {
|
||||
this.average = ratingEntry.entry.aggregate.average;
|
||||
this.calculateStars();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ describe('Rating service', () => {
|
||||
contentType: 'json',
|
||||
responseText: {
|
||||
'entry': {
|
||||
myRating: 1,
|
||||
myRating: '1',
|
||||
'ratedAt': '2017-04-06T14:34:28.061+0000',
|
||||
'id': 'fiveStar',
|
||||
'aggregate': {'numberOfRatings': 1, 'average': 1.0}
|
||||
@@ -79,7 +79,7 @@ describe('Rating service', () => {
|
||||
contentType: 'json',
|
||||
responseText: {
|
||||
'entry': {
|
||||
'myRating': 3,
|
||||
'myRating': '3',
|
||||
'ratedAt': '2017-04-06T14:36:40.731+0000',
|
||||
'id': 'fiveStar',
|
||||
'aggregate': {'numberOfRatings': 1, 'average': 3.0}
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
|
||||
import { AlfrescoApiService } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Response } from '@angular/http';
|
||||
import { RatingBody } from 'alfresco-js-api';
|
||||
import { RatingEntry, RatingBody } from '@alfresco/js-api';
|
||||
import { from, throwError } from 'rxjs';
|
||||
import { catchError } from 'rxjs/operators';
|
||||
import { Observable } from 'rxjs/internal/Observable';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@@ -36,7 +36,7 @@ export class RatingService {
|
||||
* @param ratingType Type of rating (can be "likes" or "fiveStar")
|
||||
* @returns The rating value
|
||||
*/
|
||||
getRating(nodeId: string, ratingType: any): any {
|
||||
getRating(nodeId: string, ratingType: any): Observable<RatingEntry | {}> {
|
||||
return from(this.apiService.getInstance().core.ratingsApi.getRating(nodeId, ratingType))
|
||||
.pipe(
|
||||
catchError(this.handleError)
|
||||
@@ -50,11 +50,11 @@ export class RatingService {
|
||||
* @param vote Rating value (boolean for "likes", numeric 0..5 for "fiveStar")
|
||||
* @returns Details about the rating, including the new value
|
||||
*/
|
||||
postRating(nodeId: string, ratingType: any, vote: any): any {
|
||||
let ratingBody: RatingBody = {
|
||||
postRating(nodeId: string, ratingType: string, vote: any): Observable<RatingEntry | {}> {
|
||||
let ratingBody: RatingBody = new RatingBody({
|
||||
'id': ratingType,
|
||||
'myRating': vote
|
||||
};
|
||||
});
|
||||
return from(this.apiService.getInstance().core.ratingsApi.rate(nodeId, ratingBody))
|
||||
.pipe(
|
||||
catchError(this.handleError)
|
||||
@@ -67,14 +67,14 @@ export class RatingService {
|
||||
* @param ratingType Type of rating to remove (can be "likes" or "fiveStar")
|
||||
* @returns Null response indicating that the operation is complete
|
||||
*/
|
||||
deleteRating(nodeId: string, ratingType: any): any {
|
||||
deleteRating(nodeId: string, ratingType: any): Observable<any> {
|
||||
return from(this.apiService.getInstance().core.ratingsApi.removeRating(nodeId, ratingType))
|
||||
.pipe(
|
||||
catchError(this.handleError)
|
||||
);
|
||||
}
|
||||
|
||||
private handleError(error: Response): any {
|
||||
private handleError(error: any): any {
|
||||
console.error(error);
|
||||
return throwError(error || 'Server error');
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ import { AlfrescoApiService, LogService } from '@alfresco/adf-core';
|
||||
import { EventEmitter, Injectable, Output } from '@angular/core';
|
||||
import { Observable, from, throwError } from 'rxjs';
|
||||
import { catchError } from 'rxjs/operators';
|
||||
import { TagPaging } from 'alfresco-js-api';
|
||||
import { TagBody, TagPaging, TagEntry } from '@alfresco/js-api';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@@ -39,7 +39,7 @@ export class TagService {
|
||||
* @param nodeId ID of the target node
|
||||
* @returns TagPaging object (defined in JS-API) containing the tags
|
||||
*/
|
||||
getTagsByNodeId(nodeId: string): any {
|
||||
getTagsByNodeId(nodeId: string): Observable<TagPaging> {
|
||||
return from(this.apiService.getInstance().core.tagsApi.getNodeTags(nodeId)).pipe(
|
||||
catchError((err) => this.handleError(err))
|
||||
);
|
||||
@@ -61,20 +61,19 @@ export class TagService {
|
||||
* @param tagName Name of the tag to add
|
||||
* @returns TagEntry object (defined in JS-API) with details of the new tag
|
||||
*/
|
||||
addTag(nodeId: string, tagName: string): any {
|
||||
const alfrescoApi: any = this.apiService.getInstance();
|
||||
const tagBody = new alfrescoApi.core.TagBody();
|
||||
addTag(nodeId: string, tagName: string): Observable<TagEntry> {
|
||||
const tagBody = new TagBody();
|
||||
tagBody.tag = tagName;
|
||||
|
||||
let promiseAdd = from(this.apiService.getInstance().core.tagsApi.addTag(nodeId, tagBody));
|
||||
let observableAdd = from(this.apiService.getInstance().core.tagsApi.addTag(nodeId, tagBody));
|
||||
|
||||
promiseAdd.subscribe((data) => {
|
||||
this.refresh.emit(data);
|
||||
observableAdd.subscribe((tagEntry: TagEntry) => {
|
||||
this.refresh.emit(tagEntry);
|
||||
}, (err) => {
|
||||
this.handleError(err);
|
||||
});
|
||||
|
||||
return promiseAdd;
|
||||
return observableAdd;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -83,16 +82,16 @@ export class TagService {
|
||||
* @param tag Name of the tag to remove
|
||||
* @returns Null object when the operation completes
|
||||
*/
|
||||
removeTag(nodeId: string, tag: string): any {
|
||||
const promiseRemove = from(this.apiService.getInstance().core.tagsApi.removeTag(nodeId, tag));
|
||||
removeTag(nodeId: string, tag: string): Observable<any> {
|
||||
const observableRemove = from(this.apiService.getInstance().core.tagsApi.removeTag(nodeId, tag));
|
||||
|
||||
promiseRemove.subscribe((data) => {
|
||||
observableRemove.subscribe((data) => {
|
||||
this.refresh.emit(data);
|
||||
}, (err) => {
|
||||
this.handleError(err);
|
||||
});
|
||||
|
||||
return promiseRemove;
|
||||
return observableRemove;
|
||||
}
|
||||
|
||||
private handleError(error: any) {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { AppConfigService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { setupTestBed } from '@alfresco/adf-core';
|
||||
import { TagActionsComponent } from './tag-actions.component';
|
||||
import { ContentTestingModule } from '../testing/content.testing.module';
|
||||
|
||||
@@ -33,9 +33,6 @@ describe('TagActionsComponent', () => {
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
let appConfig: AppConfigService = TestBed.get(AppConfigService);
|
||||
appConfig.config.ecmHost = 'http://localhost:9876/ecm';
|
||||
|
||||
fixture = TestBed.createComponent(TagActionsComponent);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
|
||||
@@ -19,6 +19,7 @@ import { TranslationService } from '@alfresco/adf-core';
|
||||
import { Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation, OnDestroy, OnInit } from '@angular/core';
|
||||
import { TagService } from './services/tag.service';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { TagPaging } from '@alfresco/js-api';
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -56,7 +57,8 @@ export class TagActionsComponent implements OnChanges, OnInit, OnDestroy {
|
||||
|
||||
private subscriptions: Subscription[] = [];
|
||||
|
||||
constructor(private tagService: TagService, private translateService: TranslationService) {}
|
||||
constructor(private tagService: TagService, private translateService: TranslationService) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.subscriptions.push(
|
||||
@@ -77,8 +79,8 @@ export class TagActionsComponent implements OnChanges, OnInit, OnDestroy {
|
||||
|
||||
refreshTag() {
|
||||
if (this.nodeId) {
|
||||
this.tagService.getTagsByNodeId(this.nodeId).subscribe((data) => {
|
||||
this.tagsEntries = data.list.entries;
|
||||
this.tagService.getTagsByNodeId(this.nodeId).subscribe((tagPaging: TagPaging) => {
|
||||
this.tagsEntries = tagPaging.list.entries;
|
||||
this.disableAddTag = false;
|
||||
this.result.emit(this.tagsEntries);
|
||||
}, () => {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
import { Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation } from '@angular/core';
|
||||
import { TagService } from './services/tag.service';
|
||||
import { TagPaging } from '@alfresco/js-api';
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -60,8 +61,8 @@ export class TagNodeListComponent implements OnChanges {
|
||||
|
||||
refreshTag() {
|
||||
if (this.nodeId) {
|
||||
this.tagService.getTagsByNodeId(this.nodeId).subscribe((data) => {
|
||||
this.tagsEntries = data.list.entries;
|
||||
this.tagService.getTagsByNodeId(this.nodeId).subscribe((tagPaging: TagPaging) => {
|
||||
this.tagsEntries = tagPaging.list.entries;
|
||||
this.results.emit(this.tagsEntries);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ import { ContentTestingModule } from '../../testing/content.testing.module';
|
||||
import { TreeViewService } from '../services/tree-view.service';
|
||||
import { of, throwError } from 'rxjs';
|
||||
import { TreeBaseNode } from '../models/tree-view.model';
|
||||
import { NodeEntry } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
import { SimpleChange } from '@angular/core';
|
||||
|
||||
describe('TreeViewComponent', () => {
|
||||
@@ -33,18 +33,32 @@ describe('TreeViewComponent', () => {
|
||||
let component: any;
|
||||
|
||||
let fakeNodeList: TreeBaseNode[] = [
|
||||
{ nodeId: 'fake-node-id', name: 'fake-node-name', level: 0, expandable: true,
|
||||
node: { entry: { name: 'fake-node-name', id: 'fake-node-id' } } }
|
||||
<TreeBaseNode> {
|
||||
nodeId: 'fake-node-id', name: 'fake-node-name', level: 0, expandable: true,
|
||||
node: { entry: { name: 'fake-node-name', id: 'fake-node-id' } }
|
||||
}
|
||||
];
|
||||
|
||||
let fakeChildrenList: TreeBaseNode[] = [
|
||||
{ nodeId: 'fake-child-id', name: 'fake-child-name', level: 0, expandable: true, node : {} },
|
||||
{ nodeId: 'fake-second-id', name: 'fake-second-name', level: 0, expandable: true, node : {} }
|
||||
<TreeBaseNode> { nodeId: 'fake-child-id', name: 'fake-child-name', level: 0, expandable: true, node: {} },
|
||||
<TreeBaseNode> { nodeId: 'fake-second-id', name: 'fake-second-name', level: 0, expandable: true, node: {} }
|
||||
];
|
||||
|
||||
let fakeNextChildrenList: TreeBaseNode[] = [
|
||||
{ nodeId: 'fake-next-child-id', name: 'fake-next-child-name', level: 0, expandable: true, node : {} },
|
||||
{ nodeId: 'fake-next-second-id', name: 'fake-next-second-name', level: 0, expandable: true, node : {} }
|
||||
<TreeBaseNode> {
|
||||
nodeId: 'fake-next-child-id',
|
||||
name: 'fake-next-child-name',
|
||||
level: 0,
|
||||
expandable: true,
|
||||
node: {}
|
||||
},
|
||||
<TreeBaseNode> {
|
||||
nodeId: 'fake-next-second-id',
|
||||
name: 'fake-next-second-name',
|
||||
level: 0,
|
||||
expandable: true,
|
||||
node: {}
|
||||
}
|
||||
];
|
||||
|
||||
let returnRootOrChildrenNode = function (nodeId: string) {
|
||||
@@ -61,8 +75,7 @@ describe('TreeViewComponent', () => {
|
||||
imports: [
|
||||
ContentTestingModule
|
||||
],
|
||||
declarations: [
|
||||
]
|
||||
declarations: []
|
||||
});
|
||||
|
||||
describe('When there is a nodeId', () => {
|
||||
|
||||
@@ -20,7 +20,7 @@ import { Component, Input, OnChanges, SimpleChanges, Output, EventEmitter } from
|
||||
import { TreeBaseNode } from '../models/tree-view.model';
|
||||
import { TreeViewDataSource } from '../data/tree-view-datasource';
|
||||
import { TreeViewService } from '../services/tree-view.service';
|
||||
import { NodeEntry } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-tree-view-list',
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { NodeEntry } from 'alfresco-js-api';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
|
||||
export class TreeBaseNode {
|
||||
|
||||
@@ -25,10 +25,12 @@ export class TreeBaseNode {
|
||||
expandable = true;
|
||||
node: NodeEntry;
|
||||
|
||||
constructor(nodeEntry: NodeEntry, level?: number) {
|
||||
constructor(nodeEntry: NodeEntry, level?: number, expandable?: boolean) {
|
||||
this.name = nodeEntry.entry.name;
|
||||
this.level = level ? level : 0;
|
||||
this.nodeId = nodeEntry.entry.id;
|
||||
this.node = nodeEntry;
|
||||
this.level = level ? level : 0;
|
||||
this.expandable = expandable ? expandable : true;
|
||||
this.node = nodeEntry ? new NodeEntry(nodeEntry) : undefined;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ import { NodesApiService } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs';
|
||||
import { TreeBaseNode } from '../models/tree-view.model';
|
||||
import { NodePaging, NodeEntry } from 'alfresco-js-api';
|
||||
import { NodePaging, NodeEntry } from '@alfresco/js-api';
|
||||
import { map } from 'rxjs/operators';
|
||||
|
||||
@Injectable({
|
||||
|
||||
@@ -22,6 +22,7 @@ import { of, throwError } from 'rxjs';
|
||||
import { UploadButtonComponent } from './upload-button.component';
|
||||
import { TranslationMock } from '@alfresco/adf-core';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
|
||||
describe('UploadButtonComponent', () => {
|
||||
|
||||
@@ -33,7 +34,7 @@ describe('UploadButtonComponent', () => {
|
||||
target: { value: 'fake-name-1' }
|
||||
};
|
||||
|
||||
let fakeFolderNodeWithPermission = {
|
||||
let fakeFolderNodeWithPermission = new NodeEntry({
|
||||
entry: {
|
||||
allowableOperations: [
|
||||
'create',
|
||||
@@ -43,7 +44,7 @@ describe('UploadButtonComponent', () => {
|
||||
name: 'Folder Fake Name',
|
||||
nodeType: 'cm:folder'
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
let component: UploadButtonComponent;
|
||||
let fixture: ComponentFixture<UploadButtonComponent>;
|
||||
@@ -161,7 +162,7 @@ describe('UploadButtonComponent', () => {
|
||||
it('should create a folder and emit an File uploaded event', (done) => {
|
||||
component.rootFolderId = '-my-';
|
||||
|
||||
spyOn(contentService, 'createFolder').and.returnValue(of(true));
|
||||
// spyOn(contentService, 'createFolder').and.returnValue(of(true));
|
||||
spyOn(contentService, 'getNode').and.returnValue(of(fakeFolderNodeWithPermission));
|
||||
|
||||
component.ngOnChanges({ rootFolderId: new SimpleChange(null, component.rootFolderId, true) });
|
||||
|
||||
@@ -23,7 +23,7 @@ import {
|
||||
Component, EventEmitter, forwardRef, Input,
|
||||
OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation, NgZone
|
||||
} from '@angular/core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { Subject } from 'rxjs';
|
||||
import { PermissionModel } from '../../document-list/models/permissions.model';
|
||||
import { UploadBase } from './base-upload/upload-base';
|
||||
@@ -125,7 +125,7 @@ export class UploadButtonComponent extends UploadBase implements OnInit, OnChang
|
||||
}
|
||||
}
|
||||
|
||||
nodeHasPermission(node: MinimalNodeEntryEntity, permission: PermissionsEnum | string): boolean {
|
||||
nodeHasPermission(node: Node, permission: PermissionsEnum | string): boolean {
|
||||
return this.contentService.hasPermission(node, permission);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { PermissionsEnum } from '@alfresco/adf-core';
|
||||
import { Component, forwardRef, Input, OnChanges, ViewEncapsulation, OnInit } from '@angular/core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { UploadButtonComponent } from './upload-button.component';
|
||||
import { FileModel, EXTENDIBLE_COMPONENT } from '@alfresco/adf-core';
|
||||
|
||||
@@ -34,7 +34,7 @@ export class UploadVersionButtonComponent extends UploadButtonComponent implemen
|
||||
|
||||
/** (**Required**) The node to be versioned. */
|
||||
@Input()
|
||||
node: MinimalNodeEntryEntity;
|
||||
node: Node;
|
||||
|
||||
protected createFileModel(file: File): FileModel {
|
||||
const fileModel = super.createFileModel(file, this.rootFolderId, ((<any> file).webkitRelativePath || '').replace(/\/[^\/]*$/, ''), this.node.id);
|
||||
|
||||
@@ -23,6 +23,7 @@ import { AlfrescoApiService, setupTestBed, CoreModule, AlfrescoApiServiceMock }
|
||||
import { MatDialog } from '@angular/material';
|
||||
import { of } from 'rxjs';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { Node, VersionPaging, VersionEntry } from '@alfresco/js-api';
|
||||
|
||||
describe('VersionListComponent', () => {
|
||||
let component: VersionListComponent;
|
||||
@@ -34,10 +35,10 @@ describe('VersionListComponent', () => {
|
||||
const versionId = '1.0';
|
||||
|
||||
const versionTest = [
|
||||
{
|
||||
<VersionEntry> {
|
||||
entry: { name: 'test-file-name', id: '1.0', versionComment: 'test-version-comment' }
|
||||
},
|
||||
{
|
||||
<VersionEntry> {
|
||||
entry: { name: 'test-file-name-two', id: '1.0', versionComment: 'test-version-comment' }
|
||||
}
|
||||
];
|
||||
@@ -67,7 +68,7 @@ describe('VersionListComponent', () => {
|
||||
dialog = TestBed.get(MatDialog);
|
||||
|
||||
component = fixture.componentInstance;
|
||||
component.node = { id: nodeId, allowableOperations: ['update'] };
|
||||
component.node = <Node> { id: nodeId, allowableOperations: ['update'] };
|
||||
|
||||
spyOn(component, 'downloadContent').and.stub();
|
||||
});
|
||||
@@ -240,7 +241,7 @@ describe('VersionListComponent', () => {
|
||||
}
|
||||
};
|
||||
spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and
|
||||
.callFake(() => Promise.resolve({ list: { entries: [versionEntry] } }));
|
||||
.callFake(() => Promise.resolve(new VersionPaging({ list: { entries: [versionEntry] } })));
|
||||
const spyOnDownload = spyOn(alfrescoApiService.contentApi, 'getContentUrl').and.stub();
|
||||
|
||||
component.allowDownload = false;
|
||||
@@ -276,8 +277,8 @@ describe('VersionListComponent', () => {
|
||||
component.versions = versionTest;
|
||||
|
||||
const spyOnRevertVersion = spyOn(alfrescoApiService.versionsApi, 'revertVersion').and
|
||||
.callFake(() => Promise.resolve(
|
||||
{ entry: { name: 'test-file-name', id: '1.0', versionComment: 'test-version-comment' } }));
|
||||
.callFake(() => Promise.resolve(new VersionEntry(
|
||||
{ entry: { name: 'test-file-name', id: '1.0', versionComment: 'test-version-comment' } })));
|
||||
|
||||
component.restore(versionId);
|
||||
|
||||
@@ -307,9 +308,9 @@ describe('VersionListComponent', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
fixture.detectChanges();
|
||||
component.node = { id: nodeId };
|
||||
component.node = new Node({ id: nodeId });
|
||||
spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and.callFake(() => {
|
||||
return Promise.resolve({
|
||||
return Promise.resolve(new VersionPaging({
|
||||
list: {
|
||||
entries: [
|
||||
{
|
||||
@@ -317,7 +318,7 @@ describe('VersionListComponent', () => {
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
component.ngOnChanges();
|
||||
@@ -356,9 +357,9 @@ describe('VersionListComponent', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
fixture.detectChanges();
|
||||
component.node = { id: nodeId };
|
||||
component.node = <Node> { id: nodeId };
|
||||
spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and.callFake(() => {
|
||||
return Promise.resolve({
|
||||
return Promise.resolve(new VersionPaging({
|
||||
list: {
|
||||
entries: [
|
||||
{
|
||||
@@ -369,7 +370,7 @@ describe('VersionListComponent', () => {
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
component.ngOnChanges();
|
||||
@@ -406,9 +407,9 @@ describe('VersionListComponent', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
fixture.detectChanges();
|
||||
component.node = { id: nodeId, allowableOperations: ['update', 'delete'] };
|
||||
component.node = <Node> { id: nodeId, allowableOperations: ['update', 'delete'] };
|
||||
spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and.callFake(() => {
|
||||
return Promise.resolve({
|
||||
return Promise.resolve(new VersionPaging({
|
||||
list: {
|
||||
entries: [
|
||||
{
|
||||
@@ -419,7 +420,7 @@ describe('VersionListComponent', () => {
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
component.ngOnChanges();
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { AlfrescoApiService, ContentService } from '@alfresco/adf-core';
|
||||
import { Component, Input, OnChanges, ViewEncapsulation, EventEmitter, Output } from '@angular/core';
|
||||
import { VersionsApi, MinimalNodeEntryEntity, VersionEntry } from 'alfresco-js-api';
|
||||
import { VersionsApi, Node, VersionEntry, VersionPaging } from '@alfresco/js-api';
|
||||
import { MatDialog } from '@angular/material';
|
||||
import { ConfirmDialogComponent } from '../dialogs/confirm.dialog';
|
||||
|
||||
@@ -42,7 +42,7 @@ export class VersionListComponent implements OnChanges {
|
||||
|
||||
/** The target node. */
|
||||
@Input()
|
||||
node: MinimalNodeEntryEntity;
|
||||
node: Node;
|
||||
|
||||
/** Toggles showing/hiding of comments */
|
||||
@Input()
|
||||
@@ -58,11 +58,11 @@ export class VersionListComponent implements OnChanges {
|
||||
|
||||
/** Emitted when a version is restored */
|
||||
@Output()
|
||||
restored: EventEmitter<MinimalNodeEntryEntity> = new EventEmitter<MinimalNodeEntryEntity>();
|
||||
restored: EventEmitter<Node> = new EventEmitter<Node>();
|
||||
|
||||
/** Emitted when a version is deleted */
|
||||
@Output()
|
||||
deleted: EventEmitter<MinimalNodeEntryEntity> = new EventEmitter<MinimalNodeEntryEntity>();
|
||||
deleted: EventEmitter<Node> = new EventEmitter<Node>();
|
||||
|
||||
constructor(private alfrescoApi: AlfrescoApiService,
|
||||
private contentService: ContentService,
|
||||
@@ -92,8 +92,8 @@ export class VersionListComponent implements OnChanges {
|
||||
|
||||
loadVersionHistory() {
|
||||
this.isLoading = true;
|
||||
this.versionsApi.listVersionHistory(this.node.id).then((data) => {
|
||||
this.versions = data.list.entries;
|
||||
this.versionsApi.listVersionHistory(this.node.id).then((versionPaging: VersionPaging) => {
|
||||
this.versions = versionPaging.list.entries;
|
||||
this.isLoading = false;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { AlfrescoApiService, setupTestBed, CoreModule, AlfrescoApiServiceMock } from '@alfresco/adf-core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { VersionManagerComponent } from './version-manager.component';
|
||||
import { VersionListComponent } from './version-list.component';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
@@ -31,11 +31,11 @@ describe('VersionManagerComponent', () => {
|
||||
let alfrescoApiService: AlfrescoApiService;
|
||||
|
||||
const expectedComment = 'test-version-comment';
|
||||
const node: MinimalNodeEntryEntity = {
|
||||
const node: Node = new Node({
|
||||
id: '1234',
|
||||
name: 'TEST-NODE',
|
||||
isFile: true
|
||||
};
|
||||
});
|
||||
const versionEntry = {
|
||||
entry: {
|
||||
id: '1.0',
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { Component, Input, ViewEncapsulation, ViewChild, Output, EventEmitter } from '@angular/core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { VersionListComponent } from './version-list.component';
|
||||
import { AppConfigService, ContentService, AlfrescoApiService } from '@alfresco/adf-core';
|
||||
import { trigger, state, style, animate, transition } from '@angular/animations';
|
||||
@@ -45,7 +45,7 @@ export class VersionManagerComponent {
|
||||
|
||||
/** Target node to manage version history. */
|
||||
@Input()
|
||||
node: MinimalNodeEntryEntity;
|
||||
node: Node;
|
||||
|
||||
/** Toggles showing/hiding of comments. */
|
||||
@Input()
|
||||
@@ -57,11 +57,11 @@ export class VersionManagerComponent {
|
||||
|
||||
/** Emitted when a file is uploaded successfully. */
|
||||
@Output()
|
||||
uploadSuccess: EventEmitter<MinimalNodeEntryEntity> = new EventEmitter<MinimalNodeEntryEntity>();
|
||||
uploadSuccess: EventEmitter<Node> = new EventEmitter<Node>();
|
||||
|
||||
/** Emitted when an error occurs during upload. */
|
||||
@Output()
|
||||
uploadError: EventEmitter<MinimalNodeEntryEntity> = new EventEmitter<MinimalNodeEntryEntity>();
|
||||
uploadError: EventEmitter<Node> = new EventEmitter<Node>();
|
||||
|
||||
@ViewChild('versionList')
|
||||
versionListComponent: VersionListComponent;
|
||||
@@ -73,7 +73,7 @@ export class VersionManagerComponent {
|
||||
private alfrescoApiService: AlfrescoApiService) {
|
||||
}
|
||||
|
||||
refresh(node: MinimalNodeEntryEntity) {
|
||||
refresh(node: Node) {
|
||||
this.alfrescoApiService.nodeUpdated.next(node);
|
||||
this.versionListComponent.loadVersionHistory();
|
||||
this.uploadSuccess.emit(node);
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { Component, Input, ViewEncapsulation, Output, EventEmitter } from '@angular/core';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { ContentService } from '@alfresco/adf-core';
|
||||
|
||||
@Component({
|
||||
@@ -33,7 +33,7 @@ export class VersionUploadComponent {
|
||||
uploadVersion: boolean = false;
|
||||
|
||||
@Input()
|
||||
node: MinimalNodeEntryEntity;
|
||||
node: Node;
|
||||
|
||||
@Output()
|
||||
success = new EventEmitter();
|
||||
|
||||
@@ -130,7 +130,7 @@ export class WebscriptComponent implements OnChanges {
|
||||
this.data = new ObjectDataTableAdapter(data.data, data.schema);
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
} catch (error) {
|
||||
this.logService.error('error during the cast as datatable');
|
||||
}
|
||||
|
||||
|
||||
@@ -28,16 +28,16 @@ export abstract class CardViewBaseItemModel {
|
||||
validators?: CardViewItemValidator[];
|
||||
data?: any;
|
||||
|
||||
constructor(obj: CardViewItemProperties) {
|
||||
this.label = obj.label || '';
|
||||
this.value = obj.value;
|
||||
this.key = obj.key;
|
||||
this.default = obj.default;
|
||||
this.editable = !!obj.editable;
|
||||
this.clickable = !!obj.clickable;
|
||||
this.icon = obj.icon || '';
|
||||
this.validators = obj.validators || [];
|
||||
this.data = obj.data || null;
|
||||
constructor(cardViewItemProperties: CardViewItemProperties) {
|
||||
this.label = cardViewItemProperties.label || '';
|
||||
this.value = cardViewItemProperties.value;
|
||||
this.key = cardViewItemProperties.key;
|
||||
this.default = cardViewItemProperties.default;
|
||||
this.editable = !!cardViewItemProperties.editable;
|
||||
this.clickable = !!cardViewItemProperties.clickable;
|
||||
this.icon = cardViewItemProperties.icon || '';
|
||||
this.validators = cardViewItemProperties.validators || [];
|
||||
this.data = cardViewItemProperties.data || null;
|
||||
}
|
||||
|
||||
isEmpty(): boolean {
|
||||
|
||||
@@ -25,11 +25,11 @@ export class CardViewBoolItemModel extends CardViewBaseItemModel implements Card
|
||||
value: boolean = false;
|
||||
default: boolean;
|
||||
|
||||
constructor(obj: CardViewBoolItemProperties) {
|
||||
super(obj);
|
||||
constructor(cardViewBoolItemProperties: CardViewBoolItemProperties) {
|
||||
super(cardViewBoolItemProperties);
|
||||
|
||||
if (obj.value !== undefined) {
|
||||
this.value = !!JSON.parse(obj.value);
|
||||
if (cardViewBoolItemProperties.value !== undefined) {
|
||||
this.value = !!JSON.parse(cardViewBoolItemProperties.value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,11 +25,11 @@ export class CardViewDateItemModel extends CardViewBaseItemModel implements Card
|
||||
type: string = 'date';
|
||||
format: string = 'MMM DD YYYY';
|
||||
|
||||
constructor(obj: CardViewDateItemProperties) {
|
||||
super(obj);
|
||||
constructor(cardViewDateItemProperties: CardViewDateItemProperties) {
|
||||
super(cardViewDateItemProperties);
|
||||
|
||||
if (obj.format) {
|
||||
this.format = obj.format;
|
||||
if (cardViewDateItemProperties.format) {
|
||||
this.format = cardViewDateItemProperties.format;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -24,12 +24,12 @@ import { CardViewItemFloatValidator } from '..//validators/card-view.validators'
|
||||
export class CardViewFloatItemModel extends CardViewTextItemModel implements CardViewItem, DynamicComponentModel {
|
||||
type: string = 'float';
|
||||
|
||||
constructor(obj: CardViewTextItemProperties) {
|
||||
super(obj);
|
||||
constructor(cardViewTextItemProperties: CardViewTextItemProperties) {
|
||||
super(cardViewTextItemProperties);
|
||||
|
||||
this.validators.push(new CardViewItemFloatValidator());
|
||||
if (obj.value) {
|
||||
this.value = parseFloat(obj.value);
|
||||
if (cardViewTextItemProperties.value) {
|
||||
this.value = parseFloat(cardViewTextItemProperties.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,12 +24,12 @@ import { CardViewItemIntValidator } from '../validators/card-view.validators';
|
||||
export class CardViewIntItemModel extends CardViewTextItemModel implements CardViewItem, DynamicComponentModel {
|
||||
type: string = 'int';
|
||||
|
||||
constructor(obj: CardViewTextItemProperties) {
|
||||
super(obj);
|
||||
constructor(cardViewTextItemProperties: CardViewTextItemProperties) {
|
||||
super(cardViewTextItemProperties);
|
||||
|
||||
this.validators.push(new CardViewItemIntValidator());
|
||||
if (obj.value) {
|
||||
this.value = parseInt(obj.value, 10);
|
||||
if (cardViewTextItemProperties.value) {
|
||||
this.value = parseInt(cardViewTextItemProperties.value, 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user