diff --git a/demo-shell-ng2/app/components/activiti/activiti-demo.component.html b/demo-shell-ng2/app/components/activiti/activiti-demo.component.html index 8469fd7fb2..0d08e2376e 100644 --- a/demo-shell-ng2/app/components/activiti/activiti-demo.component.html +++ b/demo-shell-ng2/app/components/activiti/activiti-demo.component.html @@ -92,10 +92,17 @@
- + +
- + +
diff --git a/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts b/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts index 7936e77575..5ae153cb8e 100644 --- a/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts +++ b/demo-shell-ng2/app/components/activiti/activiti-demo.component.ts @@ -30,6 +30,7 @@ import { ActivitiStartProcessInstance, ProcessInstance } from 'ng2-activiti-processlist'; +import { AnalyticsReportListComponent } from 'ng2-activiti-analytics'; import { ActivatedRoute } from '@angular/router'; import { Subscription } from 'rxjs/Rx'; import { @@ -75,6 +76,9 @@ export class ActivitiDemoComponent implements AfterViewInit { @ViewChild(ActivitiStartProcessInstance) activitiStartProcess: ActivitiStartProcessInstance; + @ViewChild(AnalyticsReportListComponent) + analyticsreportlist: AnalyticsReportListComponent; + @Input() appId: number; @@ -183,6 +187,10 @@ export class ActivitiDemoComponent implements AfterViewInit { this.currentProcessInstanceId = processInstanceId; } + onEditReport(name: string) { + this.analyticsreportlist.reload(); + } + navigateStartProcess() { this.currentProcessInstanceId = currentProcessIdNew; } @@ -225,11 +233,11 @@ export class ActivitiDemoComponent implements AfterViewInit { } loadStencilScriptsInPageFromActiviti() { - this.apiService.getInstance().activiti.scriptFileApi.getControllers().then(function (response) { + this.apiService.getInstance().activiti.scriptFileApi.getControllers().then(response => { if (response) { let s = document.createElement('script'); s.type = 'text/javascript'; - s.src = response; + s.text = response; this.elementRef.nativeElement.appendChild(s); } }); diff --git a/demo-shell-ng2/package.json b/demo-shell-ng2/package.json index cd076851ec..5244a567ed 100644 --- a/demo-shell-ng2/package.json +++ b/demo-shell-ng2/package.json @@ -6,6 +6,7 @@ "scripts": { "clean": "npm install rimraf && npm run clean-build && rimraf dist node_modules typings dist", "start": "webpack-dev-server --inline --progress --port 3000", + "start:dist": "wsrv -s dist/ -p 3000 -a 0.0.0.0", "clean-build": "rimraf 'app/{,**/}**.js' 'app/{,**/}**.js.map' 'app/{,**/}**.d.ts'", "test": "karma start", "build": "rimraf dist && webpack --config config/webpack.prod.js --progress --profile --bail", @@ -124,7 +125,12 @@ "typescript": "2.0.3", "webpack": "^1.13.0", "webpack-dev-server": "^1.14.1", - "webpack-merge": "^0.14.0" + "webpack-merge": "^0.14.0", + "source-map-loader": "^0.1.5", + "script-loader": "^0.7.0", + "copy-webpack-plugin": "^4.0.1", + "glob": "^7.1.1", + "wsrv": "^0.1.6" }, "license-check-config": { "src": [ diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.ts index 979d8ad0b1..47ce38c21b 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.ts @@ -57,13 +57,21 @@ export class AnalyticsReportListComponent implements OnInit { this.reports.push(report); }); - this.getReportListByAppId(); + this.getReportList(); } /** - * Get the report list by app id + * Reload the component */ - getReportListByAppId() { + reload() { + this.reset(); + this.getReportList(); + } + + /** + * Get the report list + */ + getReportList() { this.analyticsService.getReportList().subscribe( (res: ReportParametersModel[]) => { if (res && res.length === 0) { @@ -108,6 +116,15 @@ export class AnalyticsReportListComponent implements OnInit { return this.reports === undefined || (this.reports && this.reports.length === 0); } + /** + * Reset the list + */ + private reset() { + if (!this.isReportsEmpty()) { + this.reports = []; + } + } + /** * Select the current report * @param report diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.css b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.css index ae995ca854..aae39eab91 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.css +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.css @@ -21,3 +21,7 @@ .dropdown-widget__invalid .mdl-textfield__error { visibility: visible !important; } + +.large { + font-size: x-large; +} diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.html b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.html index f48bbb8bc0..ba7950517c 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.html +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.html @@ -1,7 +1,18 @@
-

{{reportParameters.name}}

+
+ +
+

{{reportParameters.name}}

diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.ts index da0ac5e510..57add5b40d 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.ts @@ -47,6 +47,9 @@ export class AnalyticsReportParametersComponent implements OnInit, OnChanges { @Output() onError = new EventEmitter(); + @Output() + onEdit = new EventEmitter(); + @Output() onFormValueChanged = new EventEmitter(); @@ -63,6 +66,7 @@ export class AnalyticsReportParametersComponent implements OnInit, OnChanges { private dropDownSub; private reportParamsSub; private paramOpts; + private isEditable: boolean = false; constructor(private translate: AlfrescoTranslationService, private analyticsService: AnalyticsService, @@ -210,4 +214,25 @@ export class AnalyticsReportParametersComponent implements OnInit, OnChanges { this.reportParamsSub.unsubscribe(); } } + + public editEnable() { + this.isEditable = true; + } + + public editDisable() { + this.isEditable = false; + } + + public editTitle() { + this.reportParamsSub = this.analyticsService.updateReport(this.reportParameters.id, this.reportParameters.name).subscribe( + (res: ReportParametersModel) => { + this.editDisable(); + this.onEdit.emit(this.reportParameters.name); + }, + (err: any) => { + console.log(err); + this.onError.emit(err); + } + ); + } } diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics.component.html b/ng2-components/ng2-activiti-analytics/src/components/analytics.component.html index a6b2f5ef26..a52b7480c7 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics.component.html +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics.component.html @@ -1,6 +1,9 @@
+ (onFormValueChanged)="reset()" + (onSuccess)="showReport($event)" + (onEdit)="onEditReport($event)"> +
diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics.component.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics.component.ts index a2b8e09129..6db510d36d 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics.component.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics.component.ts @@ -41,12 +41,15 @@ export class AnalyticsComponent implements OnChanges { @Output() onSuccess = new EventEmitter(); + @Output() + editReport = new EventEmitter(); + @Output() onError = new EventEmitter(); reportParamQuery = new ReportQuery(); - reports: any[]; + reports: Chart[]; public barChartOptions: any = { responsive: true, @@ -107,4 +110,8 @@ export class AnalyticsComponent implements OnChanges { let clone = JSON.parse(JSON.stringify(report)); report.datasets = clone.datasets; } + + public onEditReport(name: string) { + this.editReport.emit(name); + } } diff --git a/ng2-components/ng2-activiti-analytics/src/services/analytics.service.ts b/ng2-components/ng2-activiti-analytics/src/services/analytics.service.ts index d9fc0b94cd..f1ccd7c731 100644 --- a/ng2-components/ng2-activiti-analytics/src/services/analytics.service.ts +++ b/ng2-components/ng2-activiti-analytics/src/services/analytics.service.ts @@ -178,6 +178,13 @@ export class AnalyticsService { .catch(this.handleError); } + public updateReport(reportId: number, name: string): Observable { + return Observable.fromPromise(this.apiService.getInstance().activiti.reportApi.updateReport(reportId, name)) + .map((res: any) => { + console.log('upload'); + }).catch(this.handleError); + } + private handleError(error: Response) { console.error(error); return Observable.throw(error.json().error || 'Server error'); diff --git a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-instance-tasks.component.html b/ng2-components/ng2-activiti-processlist/src/components/activiti-process-instance-tasks.component.html index 0d94cb0823..97a617011e 100644 --- a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-instance-tasks.component.html +++ b/ng2-components/ng2-activiti-processlist/src/components/activiti-process-instance-tasks.component.html @@ -28,7 +28,7 @@ {{ 'DETAILS.TASKS.NO_ACTIVE' | translate }}
-
+
{{ 'DETAILS.LABELS.START_FORM'|translate }} @@ -78,7 +78,7 @@
- +

{{ 'DETAILS.LABELS.START_FORM'|translate }}

{{'START_PROCESS.DIALOG.LABEL.NAME'|translate}}
+ (formSaved)="onFormSaved($event)" + (formCompleted)="onFormCompleted($event)" + (formLoaded)="onFormLoaded($event)" + (onError)="onFormError($event)">
diff --git a/ng2-components/ng2-alfresco-core/src/services/AlfrescoAuthentication.service.ts b/ng2-components/ng2-alfresco-core/src/services/AlfrescoAuthentication.service.ts index 1741867c7c..870320a27b 100644 --- a/ng2-components/ng2-alfresco-core/src/services/AlfrescoAuthentication.service.ts +++ b/ng2-components/ng2-alfresco-core/src/services/AlfrescoAuthentication.service.ts @@ -140,6 +140,7 @@ export class AlfrescoAuthenticationService { public removeTicket(): void { this.storage.removeItem('ticket-ECM'); this.storage.removeItem('ticket-BPM'); + this.alfrescoApi.setTicket(undefined, undefined); } /** diff --git a/ng2-components/ng2-alfresco-core/src/services/AlfrescoContent.spec.ts b/ng2-components/ng2-alfresco-core/src/services/AlfrescoContent.spec.ts index b8192afe5f..b96f160cba 100644 --- a/ng2-components/ng2-alfresco-core/src/services/AlfrescoContent.spec.ts +++ b/ng2-components/ng2-alfresco-core/src/services/AlfrescoContent.spec.ts @@ -22,9 +22,15 @@ import { AlfrescoContentService } from './AlfrescoContent.service'; import { AlfrescoApiService } from './AlfrescoApi.service'; import { StorageService } from './storage.service'; +declare let jasmine: any; + describe('AlfrescoContentService', () => { - let injector, contentService: AlfrescoContentService, authService: AlfrescoAuthenticationService, node; + let injector, contentService: AlfrescoContentService; + let authService: AlfrescoAuthenticationService; + let settingsService: AlfrescoSettingsService; + let storage: StorageService; + let node: any; const nodeId = 'fake-node-id'; @@ -36,29 +42,56 @@ describe('AlfrescoContentService', () => { AlfrescoSettingsService, StorageService ]); - spyOn(localStorage, 'getItem').and.callFake(function (key) { - return 'myTicket'; - }); - contentService = injector.get(AlfrescoContentService); authService = injector.get(AlfrescoAuthenticationService); - authService.login('fake-username', 'fake-password'); + settingsService = injector.get(AlfrescoSettingsService); + contentService = injector.get(AlfrescoContentService); + storage = injector.get(StorageService); + storage.clear(); node = { entry: { id: nodeId } }; + + jasmine.Ajax.install(); }); - it('should return a valid content URL', () => { - expect(contentService.getContentUrl(node)).toBe('http://localhost:8080/alfresco/api/' + - '-default-/public/alfresco/versions/1/nodes/fake-node-id/content?attachment=false&alf_ticket=myTicket'); + afterEach(() => { + jasmine.Ajax.uninstall(); }); - it('should return a valid thumbnail URL', () => { - expect(contentService.getDocumentThumbnailUrl(node)) - .toBe('http://localhost:8080/alfresco/api/-default-/public/alfresco' + - '/versions/1/nodes/fake-node-id/renditions/doclib/content?attachment=false&alf_ticket=myTicket'); + beforeEach(() => { + settingsService.setProviders('ECM'); + }); + + it('should return a valid content URL', (done) => { + authService.login('fake-username', 'fake-password').subscribe(() => { + expect(contentService.getContentUrl(node)).toBe('http://localhost:8080/alfresco/api/' + + '-default-/public/alfresco/versions/1/nodes/fake-node-id/content?attachment=false&alf_ticket=fake-post-ticket'); + done(); + }); + + jasmine.Ajax.requests.mostRecent().respondWith({ + 'status': 201, + contentType: 'application/json', + responseText: JSON.stringify({'entry': {'id': 'fake-post-ticket', 'userId': 'admin'}}) + }); + }); + + it('should return a valid thumbnail URL', (done) => { + authService.login('fake-username', 'fake-password').subscribe(() => { + expect(contentService.getDocumentThumbnailUrl(node)) + .toBe('http://localhost:8080/alfresco/api/-default-/public/alfresco' + + '/versions/1/nodes/fake-node-id/renditions/doclib/content?attachment=false&alf_ticket=fake-post-ticket'); + done(); + }); + + jasmine.Ajax.requests.mostRecent().respondWith({ + 'status': 201, + contentType: 'application/json', + responseText: JSON.stringify({'entry': {'id': 'fake-post-ticket', 'userId': 'admin'}}) + }); }); }); diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/document-menu-action.html b/ng2-components/ng2-alfresco-documentlist/src/components/document-menu-action.html index 6a4d76d5a7..ce360fdc6f 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/components/document-menu-action.html +++ b/ng2-components/ng2-alfresco-documentlist/src/components/document-menu-action.html @@ -23,13 +23,14 @@ class="mdl-textfield__input" id="name" required - value="Untitled folder" + [(ngModel)]="folderName" + placeholder="Folder name" data-automation-id="name" autocapitalize="none" #name/>
- - + +
\ No newline at end of file diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/document-menu-action.ts b/ng2-components/ng2-alfresco-documentlist/src/components/document-menu-action.ts index 848d59a10e..40eca916b9 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/components/document-menu-action.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/components/document-menu-action.ts @@ -55,6 +55,8 @@ export class DocumentMenuAction implements OnInit { message: string; + folderName: string = ''; + constructor( private documentListService: DocumentListService, private translate: AlfrescoTranslationService) { @@ -72,7 +74,7 @@ export class DocumentMenuAction implements OnInit { .subscribe( res => { let relativeDir = this.currentFolderPath; - console.log(relativeDir); + this.folderName = ''; this.success.emit({value: relativeDir}); }, error => { @@ -128,4 +130,8 @@ export class DocumentMenuAction implements OnInit { } return message; } + + isFolderNameEmpty() { + return this.folderName === '' ? true : false; + } }