From 2588bbda7d19c2eacf69b77ffcc34eb1e47c62dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Popovics=20Andr=C3=A1s?= Date: Thu, 26 Oct 2017 14:22:34 +0100 Subject: [PATCH] [ADF-1751] Version manager POC (#2551) * First try * Upload new versions * Add versionComment * Permission handling for sidebar also * Add tests * Fix rebase * Add documentation --- demo-shell-ng2/src/app/app.module.ts | 7 +- .../app/components/files/files.component.html | 470 ++++++++++-------- .../app/components/files/files.component.scss | 39 ++ .../app/components/files/files.component.ts | 24 + ...sion-manager-dialog-adapter.component.html | 7 + ...ersion-manager-dialog-adapter.component.ts | 38 ++ docs/README.md | 1 + docs/docassets/images/version-manager.png | Bin 0 -> 120442 bytes docs/seeAlsoGraph.json | 1 + docs/version-manager.component.md | 25 + .../src/services/alfresco-api.service.ts | 7 +- .../ng2-alfresco-documentlist/index.ts | 14 +- .../ng2-alfresco-documentlist/package.json | 1 + .../document-list.component.spec.ts | 1 - .../version-list.component.html | 23 + .../version-list.component.scss | 17 + .../version-list.component.spec.ts | 135 +++++ .../version-manager/version-list.component.ts | 61 +++ .../version-manager.component.html | 6 + .../version-manager.component.scss | 8 + .../version-manager.component.ts | 31 ++ .../version-upload.component.html | 8 + .../version-upload.component.ts | 33 ++ .../src/data/share-datatable-adapter.spec.ts | 2 +- .../src/material.module.ts | 2 + .../ng2-alfresco-login/src/material.module.ts | 17 +- 26 files changed, 753 insertions(+), 225 deletions(-) create mode 100644 demo-shell-ng2/src/app/components/files/version-manager-dialog-adapter.component.html create mode 100644 demo-shell-ng2/src/app/components/files/version-manager-dialog-adapter.component.ts create mode 100644 docs/docassets/images/version-manager.png create mode 100644 docs/version-manager.component.md create mode 100644 ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.html create mode 100644 ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.scss create mode 100644 ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.spec.ts create mode 100644 ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.ts create mode 100644 ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.html create mode 100644 ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.scss create mode 100644 ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.ts create mode 100644 ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-upload.component.html create mode 100644 ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-upload.component.ts diff --git a/demo-shell-ng2/src/app/app.module.ts b/demo-shell-ng2/src/app/app.module.ts index 3dee347c34..28a6442059 100644 --- a/demo-shell-ng2/src/app/app.module.ts +++ b/demo-shell-ng2/src/app/app.module.ts @@ -35,6 +35,7 @@ import { FileViewComponent } from './components/file-view/file-view.component'; import { WebscriptComponent } from './components/webscript/webscript.component'; import { TagComponent } from './components/tag/tag.component'; import { SocialComponent } from './components/social/social.component'; +import { VersionManagerDialogAdapterComponent } from './components/files/version-manager-dialog-adapter.component'; import { ThemePickerModule } from './components/theme-picker/theme-picker'; import { DebugAppConfigService } from './services/debug-app-config.service'; @@ -67,7 +68,8 @@ import { routing } from './app.routes'; WebscriptComponent, TagComponent, SocialComponent, - CustomSourcesComponent + CustomSourcesComponent, + VersionManagerDialogAdapterComponent ], imports: [ BrowserModule, @@ -93,6 +95,9 @@ import { routing } from './app.routes'; } } ], + entryComponents: [ + VersionManagerDialogAdapterComponent + ], bootstrap: [AppComponent] }) export class AppModule { diff --git a/demo-shell-ng2/src/app/components/files/files.component.html b/demo-shell-ng2/src/app/components/files/files.component.html index 5a8dd2cb62..c3247b2cf3 100644 --- a/demo-shell-ng2/src/app/components/files/files.component.html +++ b/demo-shell-ng2/src/app/components/files/files.component.html @@ -3,230 +3,266 @@ - -
- - {{errorMessage}} -
- - - - - - - - - - -
- - - - + {{errorMessage}}
+ + + + + + + - + - - - - - - +
+ + + + +
- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ face + Please choose a document to see the versions of it. +
+
+ +
+ warning + You don't have permission to manage the versions of this content. +
+
+
+
+ diff --git a/demo-shell-ng2/src/app/components/files/files.component.scss b/demo-shell-ng2/src/app/components/files/files.component.scss index 9870b204bc..9a31f63c36 100644 --- a/demo-shell-ng2/src/app/components/files/files.component.scss +++ b/demo-shell-ng2/src/app/components/files/files.component.scss @@ -74,6 +74,45 @@ adf-document-list ::ng-deep adf-datatable tr.is-selected .image-table-cell::befo } } +.adf-manage-versions-sidebar { + width: 300px; + color: rgba(0, 0, 0, 0.87); + + .adf-manage-versions-empty, + .adf-manage-versions-no-permission { + margin: 24px; + color: grey; + text-align: justify; + + &-icon { + display: block; + font-size: 48px; + margin: 0 auto 32px auto; + } + } + + & ::ng-deep .adf-info-drawer-layout-header { + display: none; + } + + & ::ng-deep .adf-info-drawer-layout-content { + padding: 0; + + .adf-version-upload, + .adf-new-version-file-upload { + width: 100%; + + & .mat-raised-button { + width: 100%; + } + } + + .adf-new-version-uploader-container { + padding: 8px 24px 16px 24px; + } + } +} + @media (max-width: $minimumDocumentListWidth) { adf-document-list ::ng-deep adf-datatable { & ::ng-deep .adf-data-table-cell--fileSize { diff --git a/demo-shell-ng2/src/app/components/files/files.component.ts b/demo-shell-ng2/src/app/components/files/files.component.ts index ea1c0164cd..3dbbf256e7 100644 --- a/demo-shell-ng2/src/app/components/files/files.component.ts +++ b/demo-shell-ng2/src/app/components/files/files.component.ts @@ -26,6 +26,7 @@ import { } from 'ng2-alfresco-core'; import { DataColumn, DataRow } from 'ng2-alfresco-datatable'; import { DocumentListComponent, PermissionStyleModel } from 'ng2-alfresco-documentlist'; +import { VersionManagerDialogAdapterComponent } from './version-manager-dialog-adapter.component'; const DEFAULT_FOLDER_TO_SHOW = '-my-'; @@ -41,6 +42,7 @@ export class FilesComponent implements OnInit { errorMessage: string = null; fileNodeId: any; showViewer: boolean = false; + showVersions: boolean = false; toolbarColor = 'default'; @@ -211,6 +213,17 @@ export class FilesComponent implements OnInit { }); } + onManageVersions(event) { + const contentEntry = event.value.entry; + + if (this.contentService.hasPermission(contentEntry, 'update')) { + this.dialog.open(VersionManagerDialogAdapterComponent, { data: { contentEntry }, panelClass: 'adf-version-manager-dialog', width: '630px' }); + } else { + const translatedErrorMessage: any = this.translateService.get('OPERATION.ERROR.PERMISSION'); + this.notificationService.openSnackMessage(translatedErrorMessage.value, 4000); + } + } + getSiteContent(site: SiteModel) { this.currentFolderId = site && site.guid ? site.guid : DEFAULT_FOLDER_TO_SHOW; } @@ -223,6 +236,17 @@ export class FilesComponent implements OnInit { return selection && selection.length > 0; } + hasOneFileSelected(): boolean { + const selection: Array = this.documentList.selection; + const hasOneFileSelected = selection && selection.length === 1 && selection[0].entry.isFile; + return hasOneFileSelected; + } + + userHasPermissionToManageVersions(): boolean { + const selection: Array = this.documentList.selection; + return this.contentService.hasPermission(selection[0].entry, 'update'); + } + downloadNodes(selection: Array) { if (!selection || selection.length === 0) { return; diff --git a/demo-shell-ng2/src/app/components/files/version-manager-dialog-adapter.component.html b/demo-shell-ng2/src/app/components/files/version-manager-dialog-adapter.component.html new file mode 100644 index 0000000000..b507fcb4b8 --- /dev/null +++ b/demo-shell-ng2/src/app/components/files/version-manager-dialog-adapter.component.html @@ -0,0 +1,7 @@ +
Manage versions
+
+ +
+
+ +
\ No newline at end of file diff --git a/demo-shell-ng2/src/app/components/files/version-manager-dialog-adapter.component.ts b/demo-shell-ng2/src/app/components/files/version-manager-dialog-adapter.component.ts new file mode 100644 index 0000000000..0e66d74ad1 --- /dev/null +++ b/demo-shell-ng2/src/app/components/files/version-manager-dialog-adapter.component.ts @@ -0,0 +1,38 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Component, Inject, ViewEncapsulation } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; +import { MinimalNodeEntryEntity } from 'alfresco-js-api'; + +@Component({ + templateUrl: './version-manager-dialog-adapter.component.html', + encapsulation: ViewEncapsulation.None +}) +export class VersionManagerDialogAdapterComponent { + + public contentEntry: MinimalNodeEntryEntity; + + constructor(@Inject(MAT_DIALOG_DATA) data: any, + private containingDialog?: MatDialogRef) { + this.contentEntry = data.contentEntry; + } + + close() { + this.containingDialog.close(); + } +} diff --git a/docs/README.md b/docs/README.md index 9642a229f5..00d2851c00 100644 --- a/docs/README.md +++ b/docs/README.md @@ -422,6 +422,7 @@ for more information about installing and using the source code. - [Document list component](document-list.component.md) - [Sites dropdown component](sites-dropdown.component.md) - [*Content node selector component](../ng2-components/ng2-alfresco-documentlist/src/components/content-node-selector/content-node-selector.component.ts) +- [Version Manager Component](version-manager.component.md) ### Models diff --git a/docs/docassets/images/version-manager.png b/docs/docassets/images/version-manager.png new file mode 100644 index 0000000000000000000000000000000000000000..ea4f42f3e2debdcdf09c4de5f569adffeb0a4c25 GIT binary patch literal 120442 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 Cy%G5U literal 0 HcmV?d00001 diff --git a/docs/seeAlsoGraph.json b/docs/seeAlsoGraph.json index 45a1c5484a..e769fcd18d 100644 --- a/docs/seeAlsoGraph.json +++ b/docs/seeAlsoGraph.json @@ -38,6 +38,7 @@ "nodes-api.service" ], "dropdown-breadcrumb.component": ["document-list.component", "breadcrumb.component"], + "version-manager": ["document-list.component"], "extensibility": [], "file-uploading-dialog.component": [], "folder-actions.service": ["document-actions.service"], diff --git a/docs/version-manager.component.md b/docs/version-manager.component.md new file mode 100644 index 0000000000..2416bdfaf0 --- /dev/null +++ b/docs/version-manager.component.md @@ -0,0 +1,25 @@ +# Version Manager Component + +The Version manager component displays the version history of a node with the ability to upload a new version. + +![#f03c15](https://placehold.it/15/f03c15/000000?text=+) `This component is still in experimental phase, it has several limitations which will be resolved soon.` + +![Breadcrumb](docassets/images/version-manager.png) + +## Basic Usage + +```html + +``` + +### Properties + +| Name | Type | Description | +| --- | --- | --- | +| node | [MinimalNodeEntryEntity](https://github.com/Alfresco/alfresco-js-api/blob/master/src/alfresco-core-rest-api/docs/NodeMinimalEntry.md) | The node you want to see the version history of. | + + + + +## See also + \ No newline at end of file diff --git a/ng2-components/ng2-alfresco-core/src/services/alfresco-api.service.ts b/ng2-components/ng2-alfresco-core/src/services/alfresco-api.service.ts index 642709e384..38b24e4a86 100644 --- a/ng2-components/ng2-alfresco-core/src/services/alfresco-api.service.ts +++ b/ng2-components/ng2-alfresco-core/src/services/alfresco-api.service.ts @@ -18,7 +18,8 @@ import { Injectable } from '@angular/core'; import { AlfrescoApi, ContentApi, FavoritesApi, NodesApi, - PeopleApi, RenditionsApi, SharedlinksApi, SitesApi + PeopleApi, RenditionsApi, SharedlinksApi, SitesApi, + VersionsApi } from 'alfresco-js-api'; import * as alfrescoApi from 'alfresco-js-api'; import { AppConfigService } from './app-config.service'; @@ -65,6 +66,10 @@ export class AlfrescoApiService { return this.getInstance().search.searchApi; } + get versionsApi(): VersionsApi { + return this.getInstance().core.versionsApi; + } + constructor(private appConfig: AppConfigService, private storage: StorageService) { diff --git a/ng2-components/ng2-alfresco-documentlist/index.ts b/ng2-components/ng2-alfresco-documentlist/index.ts index 339651a37a..53b9ced5e9 100644 --- a/ng2-components/ng2-alfresco-documentlist/index.ts +++ b/ng2-components/ng2-alfresco-documentlist/index.ts @@ -16,8 +16,10 @@ */ import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; import { CoreModule, TRANSLATION_PROVIDER } from 'ng2-alfresco-core'; import { DataTableModule } from 'ng2-alfresco-datatable'; +import { UploadModule } from 'ng2-alfresco-upload'; import { BreadcrumbComponent } from './src/components/breadcrumb/breadcrumb.component'; import { DropdownBreadcrumbComponent } from './src/components/breadcrumb/dropdown-breadcrumb.component'; @@ -29,6 +31,9 @@ import { ContentNodeSelectorComponent } from './src/components/content-node-sele import { DocumentListComponent } from './src/components/document-list.component'; import { EmptyFolderContentDirective } from './src/components/empty-folder/empty-folder-content.directive'; import { DropdownSitesComponent } from './src/components/site-dropdown/sites-dropdown.component'; +import { VersionListComponent } from './src/components/version-manager/version-list.component'; +import { VersionManagerComponent } from './src/components/version-manager/version-manager.component'; +import { VersionUploadComponent } from './src/components/version-manager/version-upload.component'; import { MaterialModule } from './src/material.module'; import { ContentNodeSelectorService } from './src/components/content-node-selector/content-node-selector.service'; @@ -75,7 +80,10 @@ export const DOCUMENT_LIST_DIRECTIVES: any[] = [ BreadcrumbComponent, DropdownSitesComponent, DropdownBreadcrumbComponent, - ContentNodeSelectorComponent + ContentNodeSelectorComponent, + VersionListComponent, + VersionUploadComponent, + VersionManagerComponent ]; export const DOCUMENT_LIST_PROVIDERS: any[] = [ @@ -89,8 +97,10 @@ export const DOCUMENT_LIST_PROVIDERS: any[] = [ @NgModule({ imports: [ CoreModule, + UploadModule, DataTableModule, - MaterialModule + MaterialModule, + FlexLayoutModule ], declarations: [ ...DOCUMENT_LIST_DIRECTIVES diff --git a/ng2-components/ng2-alfresco-documentlist/package.json b/ng2-components/ng2-alfresco-documentlist/package.json index b3c86055cd..bdf429f1a9 100644 --- a/ng2-components/ng2-alfresco-documentlist/package.json +++ b/ng2-components/ng2-alfresco-documentlist/package.json @@ -47,6 +47,7 @@ "@angular/common": "4.4.5", "@angular/compiler": "4.4.5", "@angular/core": "4.4.5", + "@angular/flex-layout": "2.0.0-beta.9", "@angular/forms": "4.4.5", "@angular/http": "4.4.5", "@angular/material": "2.0.0-beta.12", diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts index 12e931aa75..4fa133d5e0 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts @@ -35,7 +35,6 @@ import { NodeMinimal, NodeMinimalEntry, NodePaging } from '../models/document-li import { ImageResolver } from './../data/image-resolver.model'; import { RowFilter } from './../data/row-filter.model'; - import { DocumentListService } from './../services/document-list.service'; import { DocumentListComponent } from './document-list.component'; diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.html b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.html new file mode 100644 index 0000000000..15a8bda858 --- /dev/null +++ b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.html @@ -0,0 +1,23 @@ + + + insert_drive_file +

{{version.entry.name}}

+

+ {{version.entry.id}} - + {{version.entry.modifiedAt | date}} +

+

{{version.entry.versionComment}}

+ + + + + + +
+
+ + + + diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.scss b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.scss new file mode 100644 index 0000000000..75fc565e19 --- /dev/null +++ b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.scss @@ -0,0 +1,17 @@ +.adf-version-list { + .mat-list-item { + border-bottom:1px solid #d8d8d8; + } + + &-item-version { + font-weight: bold; + } + + &-item-date { + opacity: 0.6; + } + + &-item-comment { + opacity: 0.5; + } +} diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.spec.ts b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.spec.ts new file mode 100644 index 0000000000..02fbe4eb95 --- /dev/null +++ b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.spec.ts @@ -0,0 +1,135 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CUSTOM_ELEMENTS_SCHEMA, DebugElement } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { AlfrescoApiService, CoreModule } from 'ng2-alfresco-core'; +import { MaterialModule } from '../../material.module'; +import { VersionListComponent } from './version-list.component'; + +describe('VersionListComponent', () => { + let component: VersionListComponent; + let fixture: ComponentFixture; + let element: DebugElement; + + const nodeId = 'test-id'; + const versionId = '1.0'; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + CoreModule, + MaterialModule + ], + declarations: [ + VersionListComponent + ], + providers: [ + AlfrescoApiService + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }).compileComponents(); + })); + + afterEach(() => { + fixture.destroy(); + TestBed.resetTestingModule(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(VersionListComponent); + element = fixture.debugElement; + component = fixture.componentInstance; + component.id = nodeId; + }); + + describe('Version history fetching', () => { + + it('should use loading bar', () => { + let loadingProgressBar = fixture.debugElement.query(By.css('[data-automation-id="version-history-loading-bar"]')); + expect(loadingProgressBar).toBeNull(); + + component.ngOnChanges(); + fixture.detectChanges(); + + loadingProgressBar = fixture.debugElement.query(By.css('[data-automation-id="version-history-loading-bar"]')); + expect(loadingProgressBar).not.toBeNull(); + }); + + it('should load the versions for a given id', () => { + const alfrescoApiService = TestBed.get(AlfrescoApiService); + spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and.callThrough(); + + component.ngOnChanges(); + fixture.detectChanges(); + + expect(alfrescoApiService.versionsApi.listVersionHistory).toHaveBeenCalledWith(nodeId); + }); + + it('should show the versions after loading', () => { + fixture.detectChanges(); + const alfrescoApiService = TestBed.get(AlfrescoApiService); + spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and.callFake(() => { + return Promise.resolve([ + { + entry: { name: 'test-file-name', id: '1.0', versionComment: 'test-version-comment' } + } + ]); + }); + + component.ngOnChanges(); + + fixture.whenStable().then(() => { + fixture.detectChanges(); + let versionFileName = fixture.debugElement.query(By.css('.adf-version-list-item-name')).nativeElement.innerText; + let versionIdText = fixture.debugElement.query(By.css('.adf-version-list-item-version')).nativeElement.innerText; + let versionComment = fixture.debugElement.query(By.css('.adf-version-list-item-comment')).nativeElement.innerText; + + expect(versionFileName).toBe('test-file-name'); + expect(versionIdText).toBe('1.0'); + expect(versionComment).toBe('test-version-comment'); + }); + }); + }); + + describe('Version restoring', () => { + + it('should load the versions for a given id', () => { + fixture.detectChanges(); + const alfrescoApiService = TestBed.get(AlfrescoApiService); + spyOn(alfrescoApiService.versionsApi, 'revertVersion').and.callThrough(); + + component.restore(versionId); + + expect(alfrescoApiService.versionsApi.revertVersion).toHaveBeenCalledWith(nodeId, versionId, { majorVersion: true, comment: ''}); + }); + + it('should reload the version list after a version restore', () => { + fixture.detectChanges(); + const alfrescoApiService = TestBed.get(AlfrescoApiService); + spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and.callThrough(); + spyOn(alfrescoApiService.versionsApi, 'revertVersion').and.callFake(() => Promise.resolve()); + + component.restore(versionId); + + fixture.whenStable().then(() => { + expect(alfrescoApiService.versionsApi.listVersionHistory).toHaveBeenCalledTimes(1); + }); + }); + }); +}); diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.ts b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.ts new file mode 100644 index 0000000000..3d02514dbd --- /dev/null +++ b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-list.component.ts @@ -0,0 +1,61 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Component, Input, OnChanges, ViewEncapsulation } from '@angular/core'; +import { VersionsApi } from 'alfresco-js-api'; +import { AlfrescoApiService } from 'ng2-alfresco-core'; + +@Component({ + selector: 'adf-version-list', + templateUrl: './version-list.component.html', + styleUrls: ['./version-list.component.scss'], + encapsulation: ViewEncapsulation.None, + host: { + 'class': 'adf-version-list' + } +}) +export class VersionListComponent implements OnChanges { + + private versionsApi: VersionsApi; + versions: any = []; + isLoading: boolean = true; + + @Input() + id: string; + + constructor(private alfrescoApi: AlfrescoApiService) { + this.versionsApi = this.alfrescoApi.versionsApi; + } + + ngOnChanges() { + this.loadVersionHistory(); + } + + restore(versionId) { + this.versionsApi + .revertVersion(this.id, versionId, { majorVersion: true, comment: ''}) + .then(this.loadVersionHistory.bind(this)); + } + + private loadVersionHistory() { + this.isLoading = true; + this.versionsApi.listVersionHistory(this.id).then((data) => { + this.versions = data.list.entries; + this.isLoading = false; + }); + } +} diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.html b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.html new file mode 100644 index 0000000000..ea6f7d54dc --- /dev/null +++ b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.html @@ -0,0 +1,6 @@ +
+ +
+
+ +
diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.scss b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.scss new file mode 100644 index 0000000000..22552b9e70 --- /dev/null +++ b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.scss @@ -0,0 +1,8 @@ +.adf-button.upload-new-version { + box-shadow: none; +} + +.adf-new-version-uploader-container { + border-bottom:1px solid #d8d8d8; + padding: 16px 0; +} \ No newline at end of file diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.ts b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.ts new file mode 100644 index 0000000000..a8ee77874c --- /dev/null +++ b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-manager.component.ts @@ -0,0 +1,31 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { MinimalNodeEntryEntity } from 'alfresco-js-api'; + +@Component({ + selector: 'adf-version-manager', + templateUrl: './version-manager.component.html', + styleUrls: ['./version-manager.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class VersionManagerComponent { + + @Input() + node: MinimalNodeEntryEntity; +} diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-upload.component.html b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-upload.component.html new file mode 100644 index 0000000000..74111c1c3d --- /dev/null +++ b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-upload.component.html @@ -0,0 +1,8 @@ + + diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-upload.component.ts b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-upload.component.ts new file mode 100644 index 0000000000..a0ade6da7e --- /dev/null +++ b/ng2-components/ng2-alfresco-documentlist/src/components/version-manager/version-upload.component.ts @@ -0,0 +1,33 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { MinimalNodeEntryEntity } from 'alfresco-js-api'; + +@Component({ + selector: 'adf-version-upload', + templateUrl: './version-upload.component.html', + encapsulation: ViewEncapsulation.None, + host: { + 'class': 'adf-version-upload' + } +}) +export class VersionUploadComponent { + + @Input() + node: MinimalNodeEntryEntity; +} diff --git a/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.spec.ts b/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.spec.ts index cdd52e679e..cd8a5b4073 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.spec.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.spec.ts @@ -20,8 +20,8 @@ import { CoreModule } from 'ng2-alfresco-core'; import { DataColumn, DataRow, DataSorting } from 'ng2-alfresco-datatable'; import { FileNode, FolderNode } from './../assets/document-library.model.mock'; import { DocumentListService } from './../services/document-list.service'; -import { ShareDataTableAdapter } from './share-datatable-adapter'; import { ShareDataRow } from './share-data-row.model'; +import { ShareDataTableAdapter } from './share-datatable-adapter'; describe('ShareDataTableAdapter', () => { diff --git a/ng2-components/ng2-alfresco-documentlist/src/material.module.ts b/ng2-components/ng2-alfresco-documentlist/src/material.module.ts index a7f4afbc45..9ccb6d52d9 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/material.module.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/material.module.ts @@ -21,6 +21,7 @@ import { MatDialogModule, MatIconModule, MatInputModule, + MatListModule, MatMenuModule, MatOptionModule, MatProgressSpinnerModule, @@ -34,6 +35,7 @@ export function modules() { MatDialogModule, MatButtonModule, MatIconModule, + MatListModule, MatInputModule, MatProgressSpinnerModule, MatSelectModule, diff --git a/ng2-components/ng2-alfresco-login/src/material.module.ts b/ng2-components/ng2-alfresco-login/src/material.module.ts index 59043547f4..62cb6ee569 100644 --- a/ng2-components/ng2-alfresco-login/src/material.module.ts +++ b/ng2-components/ng2-alfresco-login/src/material.module.ts @@ -18,9 +18,15 @@ import { NgModule } from '@angular/core'; import { MatCheckboxModule, + MatDialogModule, MatIconModule, MatInputModule, - MatProgressSpinnerModule + MatListModule, + MatProgressBarModule, + MatProgressSpinnerModule, + MatSelectModule, + MatSidenavModule, + MatSlideToggleModule } from '@angular/material'; export function modules() { @@ -28,7 +34,14 @@ export function modules() { MatCheckboxModule, MatIconModule, MatInputModule, - MatProgressSpinnerModule + MatProgressSpinnerModule, + MatSlideToggleModule, + MatInputModule, + MatSelectModule, + MatListModule, + MatDialogModule, + MatSidenavModule, + MatProgressBarModule ]; }