From e68705f137880ed6e4ba82d9b1178c10c7bdd9ec Mon Sep 17 00:00:00 2001 From: mauriziovitale84 Date: Mon, 7 Nov 2016 11:32:59 +0000 Subject: [PATCH] Add createDefaultReports feature --- .../analytics-report-list.component.spec.ts | 34 +++++++++++++++++ .../analytics-report-list.component.ts | 37 +++++++++++++++++-- .../src/services/analytics.service.ts | 15 +++++--- 3 files changed, 76 insertions(+), 10 deletions(-) diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.spec.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.spec.ts index 702d31d9e8..8709b8157c 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.spec.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.spec.ts @@ -81,6 +81,40 @@ describe('Test ng2-activiti-analytics Report list', () => { expect(component.isReportsEmpty()).toBeTruthy(); }); + it('should return the default reports when the report list is empty', (done) => { + fixture.detectChanges(); + + component.onSuccess.subscribe(() => { + fixture.detectChanges(); + expect(element.querySelector('#report-list-0 > i').innerHTML).toBe('assignment'); + expect(element.querySelector('#report-list-0 > span').innerHTML).toBe('Fake Test Process definition heat map'); + expect(element.querySelector('#report-list-1 > span').innerHTML).toBe('Fake Test Process definition overview'); + expect(element.querySelector('#report-list-2 > span').innerHTML).toBe('Fake Test Process instances overview'); + expect(element.querySelector('#report-list-3 > span').innerHTML).toBe('Fake Test Task overview'); + expect(element.querySelector('#report-list-4 > span').innerHTML).toBe('Fake Test Task service level agreement'); + expect(component.isReportsEmpty()).toBeFalsy(); + done(); + }); + + jasmine.Ajax.requests.mostRecent().respondWith({ + status: 200, + contentType: 'json', + responseText: [] + }); + + jasmine.Ajax.requests.mostRecent().respondWith({ + status: 200, + contentType: 'json', + responseText: [] + }); + + jasmine.Ajax.requests.mostRecent().respondWith({ + status: 200, + contentType: 'json', + responseText: reportList + }); + }); + it('Report render the report list relative to a single app', (done) => { fixture.detectChanges(); 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 759c6cc0aa..979d8ad0b1 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 @@ -60,13 +60,20 @@ export class AnalyticsReportListComponent implements OnInit { this.getReportListByAppId(); } + /** + * Get the report list by app id + */ getReportListByAppId() { this.analyticsService.getReportList().subscribe( (res: ReportParametersModel[]) => { - res.forEach((report) => { - this.reportObserver.next(report); - }); - this.onSuccess.emit(res); + if (res && res.length === 0) { + this.createDefaultReports(); + } else { + res.forEach((report) => { + this.reportObserver.next(report); + }); + this.onSuccess.emit(res); + } }, (err: any) => { this.onError.emit(err); @@ -75,6 +82,28 @@ export class AnalyticsReportListComponent implements OnInit { ); } + /** + * Create the default reports and return the report list + */ + createDefaultReports() { + this.analyticsService.createDefaultReports().subscribe( + () => { + this.analyticsService.getReportList().subscribe( + (response: ReportParametersModel[]) => { + response.forEach((report) => { + this.reportObserver.next(report); + }); + this.onSuccess.emit(response); + } + ); + } + ); + } + + /** + * Check if the report list is empty + * @returns {boolean|ReportParametersModel[]} + */ isReportsEmpty(): boolean { return this.reports === undefined || (this.reports && this.reports.length === 0); } 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 325eb1453a..6b56ccc6a1 100644 --- a/ng2-components/ng2-activiti-analytics/src/services/analytics.service.ts +++ b/ng2-components/ng2-activiti-analytics/src/services/analytics.service.ts @@ -46,9 +46,6 @@ export class AnalyticsService { let reportModel = new ReportParametersModel(report); reports.push(reportModel); }); - if (body && body.length === 0) { - return this.createDefaultReports(); - } return reports; }).catch(this.handleError); } @@ -215,9 +212,15 @@ export class AnalyticsService { }).catch(this.handleError); } - public createDefaultReports(): ReportParametersModel[] { - let reports: ReportParametersModel[] = []; - return reports; + public createDefaultReports(): Observable { + let url = `${this.alfrescoSettingsService.getBPMApiBaseUrl()}/app/rest/reporting/default-reports`; + let options = this.getRequestOptions(); + let body = {}; + return this.http + .post(url, body, options) + .map((res: any) => { + return res; + }).catch(this.handleError); } public getHeaders(): Headers {