Merge branch 'development' into dev-eromano-bundle

This commit is contained in:
Mario Romano
2016-12-15 10:40:01 +00:00
committed by GitHub
17 changed files with 174 additions and 34 deletions

View File

@@ -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

View File

@@ -21,3 +21,7 @@
.dropdown-widget__invalid .mdl-textfield__error {
visibility: visible !important;
}
.large {
font-size: x-large;
}

View File

@@ -1,7 +1,18 @@
<div class="col-md-6">
<div *ngIf="reportParameters">
<form [formGroup]="reportForm" novalidate>
<h4>{{reportParameters.name}}</h4>
<div *ngIf="isEditable">
<input
type="text"
class="mdl-textfield__input large"
id="reportName"
data-automation-id="reportName"
[value]="reportParameters.name"
(input)="reportParameters.name=$event.target.value"
(blur)="editTitle($event)"
/>
</div>
<h4 *ngIf="!isEditable" (click)="editEnable()">{{reportParameters.name}}</h4>
<div *ngFor="let field of reportParameters.definition.parameters">
<div [ngSwitch]="field.type">
<div *ngSwitchCase="'integer'">

View File

@@ -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);
}
);
}
}

View File

@@ -1,6 +1,9 @@
<div class="col-md-6">
<analytics-report-parameters [appId]="appId" [reportId]="reportId"
(onFormValueChanged)="reset()" (onSuccess)="showReport($event)"></analytics-report-parameters>
(onFormValueChanged)="reset()"
(onSuccess)="showReport($event)"
(onEdit)="onEditReport($event)">
</analytics-report-parameters>
<div *ngIf="reports">
<div *ngFor="let report of reports">

View File

@@ -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);
}
}

View File

@@ -178,6 +178,13 @@ export class AnalyticsService {
.catch(this.handleError);
}
public updateReport(reportId: number, name: string): Observable<any> {
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');

View File

@@ -28,7 +28,7 @@
{{ 'DETAILS.TASKS.NO_ACTIVE' | translate }}
</div>
<div *ngIf="processInstanceDetails && processInstanceDetails.startFormDefined">
<div *ngIf="hasStartFormDefined()">
<span class="activiti-label">{{ 'DETAILS.LABELS.START_FORM'|translate }}</span>
<!--IF START TASK COMPLETED -->
@@ -78,7 +78,7 @@
</div>
</dialog>
<dialog class="mdl-dialog task-details-dialog" #startDialog>
<dialog *ngIf="hasStartFormDefined()" class="mdl-dialog task-details-dialog" #startDialog>
<h4 class="mdl-dialog__title">{{ 'DETAILS.LABELS.START_FORM'|translate }}</h4>
<div class="mdl-dialog__content form__size">
<activiti-start-form [processId]="processId" [processDefinitionId]="processInstanceDetails?.processDefinitionId"

View File

@@ -134,6 +134,10 @@ export class ActivitiProcessInstanceTasks implements OnInit, OnChanges {
}
}
hasStartFormDefined(): boolean {
return this.processInstanceDetails && this.processInstanceDetails.startFormDefined === true;
}
getUserFullName(user: any) {
if (user) {
return (user.firstName && user.firstName !== 'null'

View File

@@ -18,10 +18,10 @@
<label class="mdl-textfield__label" for="processName">{{'START_PROCESS.DIALOG.LABEL.NAME'|translate}}</label>
</div>
<activiti-start-form *ngIf="hasStartForm()" [processDefinitionId]="currentProcessDef.id"
(formSaved)='onFormSaved($event)'
(formCompleted)='onFormCompleted($event)'
(formLoaded)='onFormLoaded($event)'
(onError)='onFormError($event)'>
(formSaved)="onFormSaved($event)"
(formCompleted)="onFormCompleted($event)"
(formLoaded)="onFormLoaded($event)"
(onError)="onFormError($event)">
</activiti-start-form>
</div>
<div class="mdl-card__actions mdl-card--border" *ngIf="showStartButton">

View File

@@ -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);
}
/**

View File

@@ -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'}})
});
});
});

View File

@@ -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/>
</div>
</div>
<div class="mdl-dialog__actions">
<button type="button" (click)="createFolder(name.value)" class="mdl-button">{{ 'BUTTON.CREATE' | translate }}</button>
<button type="button" (click)="cancel()" class="mdl-button close">{{ 'BUTTON.CANCEL' | translate }}</button>
<button type="button" [disabled]="isFolderNameEmpty()" (click)="createFolder(folderName)" class="mdl-button">{{ 'BUTTON.CREATE' | translate }}</button>
<button type="button" (click)="cancel()" class="mdl-button close">{{ 'BUTTON.CANCEL' | translate}}</button>
</div>
</dialog>

View File

@@ -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;
}
}