TSK-380 Adapt application services for using HAL format
This commit is contained in:
parent
7dc951351d
commit
751d77254b
|
@ -3,7 +3,6 @@ import { RouterModule, Routes } from '@angular/router';
|
|||
import { AppComponent } from './app.component';
|
||||
import { WorkbasketListComponent } from './workbasket/list/workbasket-list.component';
|
||||
import { WorkbasketDetailsComponent } from './workbasket/details/workbasket-details.component';
|
||||
import { CategoriesadministrationComponent } from './categoriesadministration/categoriesadministration.component';
|
||||
import { MasterAndDetailComponent } from './shared/masterAndDetail/master-and-detail.component';
|
||||
import { NoAccessComponent } from './workbasket/noAccess/no-access.component';
|
||||
|
||||
|
@ -33,7 +32,7 @@ const appRoutes: Routes = [
|
|||
children: [
|
||||
{
|
||||
path: '',
|
||||
component: CategoriesadministrationComponent,
|
||||
component: WorkbasketListComponent,
|
||||
outlet: 'detail'
|
||||
}
|
||||
]
|
||||
|
|
|
@ -17,10 +17,6 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|||
*/
|
||||
import { AppComponent } from './app.component';
|
||||
import { WorkbasketListComponent } from './workbasket/list/workbasket-list.component';
|
||||
import { CategorieslistComponent } from './categorieslist/categorieslist.component';
|
||||
import { CategoriestreeComponent } from './categoriestree/categoriestree.component';
|
||||
import { CategoryeditorComponent } from './categoryeditor/categoryeditor.component';
|
||||
import { CategoriesadministrationComponent } from './categoriesadministration/categoriesadministration.component';
|
||||
import { WorkbasketDetailsComponent } from './workbasket/details/workbasket-details.component';
|
||||
import { WorkbasketInformationComponent } from './workbasket/details/information/workbasket-information.component';
|
||||
import { DistributionTargetsComponent } from './workbasket/details/distribution-targets/distribution-targets.component';
|
||||
|
@ -69,10 +65,6 @@ const MODULES = [
|
|||
const DECLARATIONS = [
|
||||
AppComponent,
|
||||
WorkbasketListComponent,
|
||||
CategorieslistComponent,
|
||||
CategoriestreeComponent,
|
||||
CategoryeditorComponent,
|
||||
CategoriesadministrationComponent,
|
||||
AccessItemsComponent,
|
||||
WorkbasketDetailsComponent,
|
||||
MasterAndDetailComponent,
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
<div class="col-md-3">
|
||||
<app-categoriestree (categorySelected)="onCategorySelected($event)"></app-categoriestree>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<app-categoryeditor [categorySelected]="categorySelected"></app-categoryeditor>
|
||||
</div>
|
|
@ -1,25 +0,0 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CategoriesadministrationComponent } from './categoriesadministration.component';
|
||||
|
||||
describe('CategoriesadministrattionComponent', () => {
|
||||
let component: CategoriesadministrationComponent;
|
||||
let fixture: ComponentFixture<CategoriesadministrationComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ CategoriesadministrationComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CategoriesadministrationComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
xit('should be created', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,23 +0,0 @@
|
|||
import { Component, OnInit, Input } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-categoriesadministration',
|
||||
templateUrl: './categoriesadministration.component.html',
|
||||
styleUrls: ['./categoriesadministration.component.css']
|
||||
})
|
||||
export class CategoriesadministrationComponent implements OnInit {
|
||||
|
||||
constructor() { }
|
||||
|
||||
ngOnInit() {
|
||||
}
|
||||
|
||||
@Input()
|
||||
categorySelected: any;
|
||||
|
||||
onCategorySelected(arg) {
|
||||
console.log("Event angekommen: ",arg);
|
||||
this.categorySelected = arg;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
export class Category {
|
||||
constructor(
|
||||
public id: string,
|
||||
public name: string,
|
||||
public owner: string,
|
||||
public description: string,
|
||||
public priority: number,
|
||||
public serviceLevel: string) { }
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
<table class="table table-hover">
|
||||
<thead>
|
||||
<th>ID</th>
|
||||
<th>Name</th>
|
||||
<th>Description</th>
|
||||
</thead>
|
||||
<tr *ngFor="let category of categories">
|
||||
<td>{{ category.id }}</td>
|
||||
<td>{{ category.name }}</td>
|
||||
<td>{{ category.description }}</td>
|
||||
</tr>
|
||||
</table>
|
|
@ -1,25 +0,0 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CategorieslistComponent } from './categorieslist.component';
|
||||
|
||||
describe('CategorieslistComponent', () => {
|
||||
let component: CategorieslistComponent;
|
||||
let fixture: ComponentFixture<CategorieslistComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ CategorieslistComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CategorieslistComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
xit('should be created', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,31 +0,0 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-categorieslist',
|
||||
templateUrl: './categorieslist.component.html',
|
||||
styleUrls: ['./categorieslist.component.css']
|
||||
})
|
||||
export class CategorieslistComponent implements OnInit {
|
||||
|
||||
categories = [ {
|
||||
"id": "1",
|
||||
"name": "Category 1",
|
||||
"description": "Das ist die erste Business Category."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "Category 2",
|
||||
"description": "Das ist die erste Business Category."
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"name": "Category 3",
|
||||
"description": "Das ist die erste Business Category."
|
||||
}
|
||||
];
|
||||
|
||||
constructor() { }
|
||||
|
||||
ngOnInit() {}
|
||||
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
<tree-root [nodes]="nodes"
|
||||
(onActivate)="onCategorySelected($event)">
|
||||
</tree-root>
|
|
@ -1,25 +0,0 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CategoriestreeComponent } from './categoriestree.component';
|
||||
|
||||
describe('CategoriestreeComponent', () => {
|
||||
let component: CategoriestreeComponent;
|
||||
let fixture: ComponentFixture<CategoriestreeComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ CategoriestreeComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CategoriestreeComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
xit('should be created', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,87 +0,0 @@
|
|||
import { Component, OnInit, EventEmitter, Output } from '@angular/core';
|
||||
import { Category } from '../categoriesadministration/category';
|
||||
import { CategoryService } from '../services/category.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-categoriestree',
|
||||
templateUrl: './categoriestree.component.html',
|
||||
styleUrls: ['./categoriestree.component.css'],
|
||||
providers: [CategoryService]
|
||||
})
|
||||
export class CategoriestreeComponent implements OnInit {
|
||||
|
||||
categories: Category[];
|
||||
errorMessage: string;
|
||||
|
||||
nodes = [];
|
||||
|
||||
/*
|
||||
nodes = [
|
||||
{
|
||||
id: '1',
|
||||
name: 'Category 1',
|
||||
children: [
|
||||
{ id: '2', name: 'Category 2' },
|
||||
{ id: '3', name: 'Category 3' }
|
||||
]
|
||||
},
|
||||
{
|
||||
id: '4',
|
||||
name: 'Category 4',
|
||||
children: [
|
||||
{ id: '5', name: 'Category 5' },
|
||||
{
|
||||
id: '6',
|
||||
name: 'Category 6',
|
||||
children: [
|
||||
{ id: '7', name: 'Category 7' }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
*/
|
||||
|
||||
|
||||
constructor(private categoryService: CategoryService) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.getCategories();
|
||||
}
|
||||
|
||||
@Output()
|
||||
categorySelected = new EventEmitter<Category>();
|
||||
|
||||
onCategorySelected(arg) {
|
||||
console.log("Selected: ", arg);
|
||||
var category: Category = arg.node.data;
|
||||
this.categorySelected.next(category);
|
||||
}
|
||||
|
||||
getCategories() {
|
||||
console.log("Going to load categories...");
|
||||
this.categoryService.getCategories()
|
||||
.subscribe(c => {
|
||||
this.categories = c;
|
||||
console.log("RESPONSE: ", c);
|
||||
this.nodes = c;
|
||||
if (this.categories != null && this.categories.length > 0) {
|
||||
// this.nodes = [];
|
||||
this.categories.forEach(category => {
|
||||
console.log("Geladene Category: ", category);
|
||||
// let count = 1;
|
||||
// this.nodes.push({'1', 'NAME'});
|
||||
// count++;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
// this.autoCompleteData.push(workbasket.name);
|
||||
// categories => this.categories = heroes,
|
||||
// error => this.errorMessage = <any>error);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
<h3>Category Details of {{categorySelected?.name}} (ID: {{categorySelected?.id}})</h3>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="name">Name</label>
|
||||
<div class="col-sm-10">
|
||||
<input class="form-control" id="name" placeholder="Name" [(ngModel)]="categorySelected.name" name="name">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="descrption">Description</label>
|
||||
<div class="col-sm-10">
|
||||
<input class="form-control" id="description" placeholder="Description" [(ngModel)]="categorySelected.description" name="description">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="owner">Owner</label>
|
||||
<div class="col-sm-10">
|
||||
<input class="form-control" id="owner" placeholder="Owner" [(ngModel)]="categorySelected.owner" name="owner">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="priority">Priority</label>
|
||||
<div class="col-sm-10">
|
||||
<input class="form-control" id="priority" placeholder="Priority" [(ngModel)]="categorySelected.priority" name="priority">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="servicelevel">Service Level</label>
|
||||
<div class="col-sm-10">
|
||||
<input class="form-control" id="servicelevel" placeholder="Service Level" [(ngModel)]="categorySelected.serviceLevel" name="servicelevel">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="submit" class="btn btn-default btn-primary">Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
|
@ -1,25 +0,0 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CategoryeditorComponent } from './categoryeditor.component';
|
||||
|
||||
describe('CategoryeditorComponent', () => {
|
||||
let component: CategoryeditorComponent;
|
||||
let fixture: ComponentFixture<CategoryeditorComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ CategoryeditorComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CategoryeditorComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
xit('should be created', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,20 +0,0 @@
|
|||
import { Component, OnInit, Input } from '@angular/core';
|
||||
import { Category } from '../categoriesadministration/category';
|
||||
|
||||
@Component({
|
||||
selector: 'app-categoryeditor',
|
||||
templateUrl: './categoryeditor.component.html',
|
||||
styleUrls: ['./categoryeditor.component.css']
|
||||
})
|
||||
export class CategoryeditorComponent implements OnInit {
|
||||
|
||||
constructor() { }
|
||||
|
||||
ngOnInit() {
|
||||
this.categorySelected = new Category('', '', '', '', 0,'');
|
||||
}
|
||||
|
||||
@Input()
|
||||
categorySelected: Category;
|
||||
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
export class Links {
|
||||
constructor(
|
||||
public rel: string,
|
||||
public href: string,
|
||||
public self: {'href': string},
|
||||
public distributionTargets: {'href': string} = undefined,
|
||||
public accessItems: {'href': string} = undefined
|
||||
){}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
import { Links } from "./links";
|
||||
import { WorkbasketAccessItems } from "./workbasket-access-items";
|
||||
|
||||
export class WorkbasketAccessItemsResource {
|
||||
constructor(
|
||||
public _embedded: { 'accessItems': Array<WorkbasketAccessItems> } = { 'accessItems': [] },
|
||||
public _links: Links = undefined
|
||||
) { }
|
||||
}
|
|
@ -22,6 +22,6 @@ export class WorkbasketAccessItems {
|
|||
public permCustom10: boolean = false,
|
||||
public permCustom11: boolean = false,
|
||||
public permCustom12: boolean = false,
|
||||
public links: Array<Links> = undefined
|
||||
public _links: Links = undefined
|
||||
) { }
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { WorkbasketSummary } from './workbasket-summary';
|
||||
import { Links } from './links';
|
||||
|
||||
export class WorkbasketSummaryResource {
|
||||
constructor(public _embedded: {'workbaskets': Array<WorkbasketSummary> } = {'workbaskets': []}, public _links: Links = null) {
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
import {Links} from './links';
|
||||
|
||||
export class WorkbasketSummary {
|
||||
export class WorkbasketSummary{
|
||||
constructor(
|
||||
public workbasketId: string,
|
||||
public key: string,
|
||||
|
@ -14,5 +14,6 @@ export class WorkbasketSummary {
|
|||
public orgLevel2: string,
|
||||
public orgLevel3: string,
|
||||
public orgLevel4: string,
|
||||
public links: Array<Links> = undefined){}
|
||||
public _links: Links = undefined){
|
||||
}
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
import { WorkbasketSummary } from './workbasketSummary';
|
||||
import { Links } from './links';
|
||||
export class Workbasket {
|
||||
export class Workbasket{
|
||||
constructor(
|
||||
public workbasketId: string,
|
||||
public created: string = undefined,
|
||||
|
@ -19,7 +18,8 @@ export class Workbasket {
|
|||
public orgLevel2: string = undefined,
|
||||
public orgLevel3: string = undefined,
|
||||
public orgLevel4: string = undefined,
|
||||
public links: Array<Links> = undefined){}
|
||||
public _links:Links = undefined) {
|
||||
}
|
||||
|
||||
public static equals(org: Workbasket, comp: Workbasket): boolean {
|
||||
if (org.workbasketId !== comp.workbasketId) { return false; }
|
||||
|
|
|
@ -2,14 +2,15 @@ import { Pipe, PipeTransform } from '@angular/core';
|
|||
|
||||
@Pipe({ name: 'selectWorkbaskets' })
|
||||
export class SelectWorkBasketPipe implements PipeTransform {
|
||||
transform(originArray: any, arg0: any, arg1: any): Object[] {
|
||||
transform(originArray: any, selectionArray: any, arg1: any): Object[] {
|
||||
let returnArray = [];
|
||||
if (!originArray) {
|
||||
return returnArray;
|
||||
}
|
||||
|
||||
for (let index = originArray.length - 1; index >= 0; index--) {
|
||||
if ((arg1 && !arg0.some(elementToRemove => { return originArray[index].workbasketId === elementToRemove.workbasketId})) ||
|
||||
!arg1 && arg0.some(elementToRemove => { return originArray[index].workbasketId === elementToRemove.workbasketId})) {
|
||||
if ((arg1 && !selectionArray.some(elementToRemove => { return originArray[index].workbasketId === elementToRemove.workbasketId })) ||
|
||||
!arg1 && selectionArray.some(elementToRemove => { return originArray[index].workbasketId === elementToRemove.workbasketId })) {
|
||||
originArray.splice(index, 1);
|
||||
}
|
||||
}
|
||||
|
@ -17,5 +18,4 @@ export class SelectWorkBasketPipe implements PipeTransform {
|
|||
return returnArray;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
import { TestBed, inject } from '@angular/core/testing';
|
||||
|
||||
import { CategoryService } from './category.service';
|
||||
|
||||
describe('CategoryService', () => {
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
providers: [CategoryService]
|
||||
});
|
||||
});
|
||||
|
||||
xit('should be created', inject([CategoryService], (service: CategoryService) => {
|
||||
expect(service).toBeTruthy();
|
||||
}));
|
||||
});
|
|
@ -1,44 +0,0 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { RequestOptions, Headers, Http, Response } from '@angular/http';
|
||||
import { environment } from '../../environments/environment';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import 'rxjs/add/operator/catch';
|
||||
import 'rxjs/add/operator/map';
|
||||
|
||||
import { Category } from '../categoriesadministration/category';
|
||||
|
||||
@Injectable()
|
||||
export class CategoryService {
|
||||
private categoryServiceUrl = environment.taskanaRestUrl + '/v1/classifications'; // URL to web API
|
||||
constructor(private http: Http) { }
|
||||
getCategories(): Observable<Category[]> {
|
||||
return this.http.get(this.categoryServiceUrl, this.createAuthorizationHeader())
|
||||
.map(this.extractData)
|
||||
.catch(this.handleError);
|
||||
}
|
||||
private extractData(res: Response) {
|
||||
let body = res.json();
|
||||
console.log("Body: ", body);
|
||||
return body;
|
||||
}
|
||||
private handleError(error: Response | any) {
|
||||
// In a real world app, you might use a remote logging infrastructure
|
||||
let errMsg: string;
|
||||
if (error instanceof Response) {
|
||||
const body = error.json() || '';
|
||||
const err = body.error || JSON.stringify(body);
|
||||
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
|
||||
} else {
|
||||
errMsg = error.message ? error.message : error.toString();
|
||||
}
|
||||
console.error(errMsg);
|
||||
return Observable.throw(errMsg);
|
||||
}
|
||||
|
||||
private createAuthorizationHeader() {
|
||||
let headers: Headers = new Headers();
|
||||
headers.append("Authorization", "Basic dXNlcl8xXzE6dXNlcl8xXzE=");
|
||||
|
||||
return new RequestOptions({ headers: headers });
|
||||
}
|
||||
}
|
|
@ -1,12 +1,15 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { HttpClientModule, HttpClient, HttpHeaders, HttpResponse, HttpErrorResponse } from '@angular/common/http';
|
||||
import { WorkbasketSummary } from '../model/workbasketSummary';
|
||||
import { WorkbasketSummary } from '../model/workbasket-summary';
|
||||
import { Workbasket } from '../model/workbasket';
|
||||
import { WorkbasketAccessItems } from '../model/workbasket-access-items';
|
||||
import { environment } from '../../environments/environment';
|
||||
import { Direction } from '../shared/sort/sort.component';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Subject } from 'rxjs/Subject';
|
||||
import { map } from 'rxjs/operator/map';
|
||||
import { WorkbasketSummaryResource } from '../model/workbasket-summary-resource';
|
||||
import { WorkbasketAccessItemsResource } from '../model/workbasket-access-items-resource';
|
||||
|
||||
@Injectable()
|
||||
export class WorkbasketService {
|
||||
|
@ -35,12 +38,12 @@ export class WorkbasketService {
|
|||
|
||||
httpOptions = {
|
||||
headers: new HttpHeaders({
|
||||
'Content-Type': 'application/json',
|
||||
'Content-Type': 'application/hal+json',
|
||||
'Authorization': 'Basic VEVBTUxFQURfMTpURUFNTEVBRF8x'
|
||||
})
|
||||
};
|
||||
|
||||
private workbasketSummaryRef: Observable<WorkbasketSummary[]>;
|
||||
private workbasketSummaryRef: Observable<WorkbasketSummaryResource>;
|
||||
|
||||
//#region "REST calls"
|
||||
// GET
|
||||
|
@ -55,11 +58,11 @@ export class WorkbasketService {
|
|||
type: string = undefined,
|
||||
key: string = undefined,
|
||||
keyLike: string = undefined,
|
||||
requiredPermission: string = undefined): Observable<WorkbasketSummary[]> {
|
||||
requiredPermission: string = undefined): Observable<WorkbasketSummaryResource> {
|
||||
if (this.workbasketSummaryRef && !forceRequest) {
|
||||
return this.workbasketSummaryRef;
|
||||
}
|
||||
return this.httpClient.get<WorkbasketSummary[]>(`${environment.taskanaRestUrl}/v1/workbaskets/${this.getWorkbasketSummaryQueryParameters(sortBy, order, name,
|
||||
return this.workbasketSummaryRef = this.httpClient.get<WorkbasketSummaryResource>(`${environment.taskanaRestUrl}/v1/workbaskets/${this.getWorkbasketSummaryQueryParameters(sortBy, order, name,
|
||||
nameLike, descLike, owner, ownerLike, type, key, keyLike, requiredPermission)}`, this.httpOptions);
|
||||
|
||||
}
|
||||
|
@ -79,16 +82,16 @@ export class WorkbasketService {
|
|||
.catch(this.handleError);
|
||||
}
|
||||
// DELETE
|
||||
deleteWorkbasket(id: string) {
|
||||
return this.httpClient.delete(environment.taskanaRestUrl + '/v1/workbaskets/' + id, this.httpOptions);
|
||||
deleteWorkbasket(url: string) {
|
||||
return this.httpClient.delete(url, this.httpOptions);
|
||||
}
|
||||
// GET
|
||||
getWorkBasketAccessItems(id: String): Observable<WorkbasketAccessItems[]> {
|
||||
return this.httpClient.get<WorkbasketAccessItems[]>(environment.taskanaRestUrl + '/v1/workbaskets/' + id + '/workbasketAccessItems', this.httpOptions);
|
||||
getWorkBasketAccessItems(url: string): Observable<WorkbasketAccessItemsResource> {
|
||||
return this.httpClient.get<WorkbasketAccessItemsResource>(url, this.httpOptions);
|
||||
}
|
||||
// POST
|
||||
createWorkBasketAccessItem(workbasketAccessItem: WorkbasketAccessItems): Observable<WorkbasketAccessItems> {
|
||||
return this.httpClient.post<WorkbasketAccessItems>(environment.taskanaRestUrl + '/v1/workbaskets/workbasketAccessItems', workbasketAccessItem, this.httpOptions);
|
||||
createWorkBasketAccessItem(url: string, workbasketAccessItem: WorkbasketAccessItems): Observable<WorkbasketAccessItems> {
|
||||
return this.httpClient.post<WorkbasketAccessItems>(url , workbasketAccessItem, this.httpOptions);
|
||||
}
|
||||
// PUT
|
||||
updateWorkBasketAccessItem(url: string, workbasketAccessItem: Array<WorkbasketAccessItems>): Observable<string> {
|
||||
|
@ -97,29 +100,29 @@ export class WorkbasketService {
|
|||
this.httpOptions);
|
||||
}
|
||||
// GET
|
||||
getWorkBasketsDistributionTargets(id: String): Observable<WorkbasketSummary[]> {
|
||||
return this.httpClient.get<WorkbasketSummary[]>(environment.taskanaRestUrl + '/v1/workbaskets/' + id + '/distributiontargets', this.httpOptions);
|
||||
getWorkBasketsDistributionTargets(url: string): Observable<WorkbasketSummaryResource> {
|
||||
return this.httpClient.get<WorkbasketSummaryResource>(url, this.httpOptions);
|
||||
}
|
||||
|
||||
|
||||
//#endregion
|
||||
//#endregion
|
||||
|
||||
//#region "Service extras"
|
||||
selectWorkBasket(id: string) {
|
||||
//#region "Service extras"
|
||||
selectWorkBasket(id: string) {
|
||||
this.workBasketSelected.next(id);
|
||||
}
|
||||
}
|
||||
|
||||
getSelectedWorkBasket(): Observable < string > {
|
||||
getSelectedWorkBasket(): Observable<string> {
|
||||
return this.workBasketSelected.asObservable();
|
||||
}
|
||||
}
|
||||
|
||||
triggerWorkBasketSaved() {
|
||||
triggerWorkBasketSaved() {
|
||||
this.workBasketSaved.next(Date.now());
|
||||
}
|
||||
}
|
||||
|
||||
workbasketSavedTriggered(): Observable < number > {
|
||||
workbasketSavedTriggered(): Observable<number> {
|
||||
return this.workBasketSaved.asObservable();
|
||||
}
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//#region private
|
||||
|
@ -151,7 +154,7 @@ workbasketSavedTriggered(): Observable < number > {
|
|||
query = query.slice(0, query.lastIndexOf('&'))
|
||||
}
|
||||
return query;
|
||||
}
|
||||
}
|
||||
|
||||
private handleError(error: Response | any) {
|
||||
// In a real world app, you might use a remote logging infrastructure
|
||||
|
@ -165,7 +168,7 @@ workbasketSavedTriggered(): Observable < number > {
|
|||
}
|
||||
console.error(errMsg);
|
||||
return Observable.throw(errMsg);
|
||||
}
|
||||
}
|
||||
|
||||
//#endregion
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ export class SpinnerComponent {
|
|||
isDelayedRunning: boolean = false;
|
||||
|
||||
@Input()
|
||||
delay: number = 300;
|
||||
delay: number = 100;
|
||||
|
||||
@Input()
|
||||
set isRunning(value: boolean) {
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
import { Links} from '../../model/links';
|
||||
|
||||
export class Utils {
|
||||
static getSelfRef(links: Array<Links>) {
|
||||
return links.find(l => l.rel === 'self');
|
||||
}
|
||||
|
||||
static getTagLinkRef(links: Array<Links>, tag: string) {
|
||||
return links.find(l => l.rel === tag );
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@ import { Links } from '../../../model/links';
|
|||
import { Observable } from 'rxjs/Observable';
|
||||
import { AccessItemsComponent } from './access-items.component';
|
||||
import { WorkbasketAccessItems } from '../../../model/workbasket-access-items';
|
||||
import { WorkbasketAccessItemsResource } from '../../../model/workbasket-access-items-resource';
|
||||
|
||||
describe('AccessItemsComponent', () => {
|
||||
let component: AccessItemsComponent;
|
||||
|
@ -31,11 +32,14 @@ describe('AccessItemsComponent', () => {
|
|||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(AccessItemsComponent);
|
||||
component = fixture.componentInstance;
|
||||
component.workbasket = new Workbasket('1')
|
||||
component.workbasket = new Workbasket('1','','','','','','','','','','','','','','','', '', new Links(undefined,undefined, {'href': 'someurl' }));
|
||||
workbasketService = TestBed.get(WorkbasketService);
|
||||
alertService = TestBed.get(AlertService);
|
||||
spyOn(workbasketService, 'getWorkBasketAccessItems').and.returnValue(Observable.of(new Array<WorkbasketAccessItems>(new WorkbasketAccessItems('id1', '1', 'accessID1', false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, new Array<Links>(new Links('setWorkbasketAccessItems', ''))),
|
||||
new WorkbasketAccessItems('id2', '1', 'accessID2'))));
|
||||
spyOn(workbasketService, 'getWorkBasketAccessItems').and.returnValue(Observable.of(new WorkbasketAccessItemsResource(
|
||||
{'accessItems': new Array<WorkbasketAccessItems>(
|
||||
new WorkbasketAccessItems('id1', '1', 'accessID1', false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
||||
new WorkbasketAccessItems('id2', '1', 'accessID2')) }, new Links({ 'href': 'someurl' })
|
||||
)));
|
||||
spyOn(workbasketService, 'updateWorkBasketAccessItem').and.returnValue(Observable.of(true)),
|
||||
spyOn(alertService, 'triggerAlert').and.returnValue(Observable.of(true)),
|
||||
debugElement = fixture.debugElement.nativeElement;
|
||||
|
@ -61,23 +65,6 @@ describe('AccessItemsComponent', () => {
|
|||
expect(debugElement.querySelector('#button-add-access-item')).toBeTruthy;
|
||||
});
|
||||
|
||||
xit('should highlight modified input', () => {
|
||||
expect(debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelectorAll('td')[5].querySelector('div').getAttribute('class')).toBeNull();
|
||||
debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelectorAll('td')[5].querySelector('input').click();
|
||||
fixture.detectChanges();
|
||||
expect(debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelectorAll('td')[5].querySelector('div').getAttribute('class')).toBe('has-changes');
|
||||
|
||||
});
|
||||
|
||||
xit('should undo changes if undo changes button is clicked', () => {
|
||||
debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelectorAll('td')[5].querySelector('input').click();
|
||||
expect(debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelectorAll('td')[5].getAttribute('class')).toBe('has-changes');
|
||||
expect(debugElement.querySelectorAll('#wb-information > div > div')[0].querySelectorAll('button').length).toBe(2);
|
||||
debugElement.querySelectorAll('#wb-information > div > div')[0].querySelectorAll('button')[1].click();
|
||||
fixture.detectChanges();
|
||||
expect(debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelectorAll('td')[5].getAttribute('class')).toBeNull();
|
||||
});
|
||||
|
||||
it('should remove an access item if remove button is clicked', () => {
|
||||
expect(debugElement.querySelectorAll('#table-access-items > tbody > tr').length).toBe(2);
|
||||
debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelector('td > button').click();
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import { Component, OnInit, Input, AfterViewInit } from '@angular/core';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { Utils } from '../../../shared/utils/utils';
|
||||
|
||||
import { Workbasket } from '../../../model/workbasket';
|
||||
import { WorkbasketAccessItems } from '../../../model/workbasket-access-items';
|
||||
|
||||
import { WorkbasketService } from '../../../services/workbasket.service';
|
||||
import { AlertService, AlertModel, AlertType } from '../../../services/alert.service';
|
||||
import { WorkbasketAccessItemsResource } from '../../../model/workbasket-access-items-resource';
|
||||
|
||||
declare var $: any;
|
||||
|
||||
|
@ -20,6 +20,7 @@ export class AccessItemsComponent implements OnInit {
|
|||
@Input()
|
||||
workbasket: Workbasket;
|
||||
|
||||
accessItemsResource: WorkbasketAccessItemsResource;
|
||||
accessItems: Array<WorkbasketAccessItems>;
|
||||
accessItemsClone: Array<WorkbasketAccessItems>;
|
||||
accessItemsResetClone: Array<WorkbasketAccessItems>;
|
||||
|
@ -33,8 +34,9 @@ export class AccessItemsComponent implements OnInit {
|
|||
constructor(private workbasketService: WorkbasketService, private alertService: AlertService) { }
|
||||
|
||||
ngOnInit() {
|
||||
this.accessItemsubscription = this.workbasketService.getWorkBasketAccessItems(this.workbasket.workbasketId).subscribe( (accessItems: Array<WorkbasketAccessItems>) =>{
|
||||
this.accessItems = accessItems;
|
||||
this.accessItemsubscription = this.workbasketService.getWorkBasketAccessItems(this.workbasket._links.accessItems.href).subscribe( (accessItemsResource: WorkbasketAccessItemsResource) =>{
|
||||
this.accessItemsResource = accessItemsResource;
|
||||
this.accessItems = accessItemsResource._embedded.accessItems;
|
||||
this.accessItemsClone = this.cloneAccessItems(this.accessItems);
|
||||
this.accessItemsResetClone = this.cloneAccessItems(this.accessItems);
|
||||
})
|
||||
|
@ -59,11 +61,7 @@ export class AccessItemsComponent implements OnInit {
|
|||
|
||||
onSave(): boolean {
|
||||
this.requestInProgress = true;
|
||||
if(!this.accessItems[0].links){
|
||||
return;
|
||||
}
|
||||
|
||||
this.workbasketService.updateWorkBasketAccessItem(Utils.getTagLinkRef(this.accessItems[0].links, 'setWorkbasketAccessItems').href, this.accessItems).subscribe(response =>{
|
||||
this.workbasketService.updateWorkBasketAccessItem(this.accessItemsResource._links.self.href + '/', this.accessItems).subscribe(response =>{
|
||||
this.accessItemsClone = this.cloneAccessItems(this.accessItems);
|
||||
this.accessItemsResetClone = this.cloneAccessItems(this.accessItems);
|
||||
this.alertService.triggerAlert(new AlertModel(AlertType.SUCCESS, `Workbasket ${this.workbasket.name} Access items were saved successfully`));
|
||||
|
@ -72,8 +70,10 @@ export class AccessItemsComponent implements OnInit {
|
|||
},
|
||||
error => {
|
||||
this.modalErrorMessage = error.message;
|
||||
this.requestInProgress = false;
|
||||
return false;
|
||||
})
|
||||
return false;
|
||||
}
|
||||
|
||||
setValue() { debugger; }
|
||||
|
|
|
@ -80,7 +80,7 @@
|
|||
<taskana-spinner [isRunning]="requestInProgressRight" [isModal]="modalSpinner" positionClass="centered-spinner" class="centered-horizontally floating"></taskana-spinner>
|
||||
<ul class="list-group dual-list-group">
|
||||
<li class="list-group-item" *ngFor="let distributionTarget of distributionTargetsRight | selectWorkbaskets: distributionTargetsSelected: 1"
|
||||
[class.selected]="distributionTarget.selected" type="text" (click)="distributionTarget.selected = !distributionTarget.selected">
|
||||
[class.selected]="distributionTarget.select" type="text" (click)="distributionTarget.select = !distributionTarget.select">
|
||||
<div class="row">
|
||||
<dl class="col-xs-1">
|
||||
<dt>
|
||||
|
|
|
@ -1,14 +1,48 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { AngularSvgIconModule } from 'angular-svg-icon';
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { HttpModule, JsonpModule } from '@angular/http';
|
||||
|
||||
import { DistributionTargetsComponent } from './distribution-targets.component';
|
||||
import { SpinnerComponent } from '../../../shared/spinner/spinner.component';
|
||||
import { GeneralMessageModalComponent } from '../../../shared/general-message-modal/general-message-modal.component';
|
||||
import { IconTypeComponent } from '../../../shared/type-icon/icon-type.component';
|
||||
import { SelectWorkBasketPipe } from '../../../pipes/seleted-workbasket.pipe';
|
||||
import { WorkbasketSummaryResource } from '../../../model/workbasket-summary-resource';
|
||||
import { WorkbasketSummary } from '../../../model/workbasket-summary';
|
||||
import { Links } from '../../../model/links';
|
||||
import { Component } from '@angular/core';
|
||||
import { WorkbasketService } from '../../../services/workbasket.service';
|
||||
import { AlertService } from '../../../services/alert.service';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Workbasket } from '../../../model/workbasket';
|
||||
|
||||
const workbasketSummaryResource: WorkbasketSummaryResource = new WorkbasketSummaryResource({
|
||||
'workbaskets': new Array<WorkbasketSummary>(
|
||||
new WorkbasketSummary("1", "key1", "NAME1", "description 1", "owner 1", "", "", "PERSONAL", "", "", "", ""),
|
||||
new WorkbasketSummary("2", "key2", "NAME2", "description 2", "owner 2", "", "", "GROUP", "", "", "", ""))
|
||||
}, new Links({ 'href': 'url' }));
|
||||
|
||||
@Component({
|
||||
selector: 'taskana-filter',
|
||||
template: ''
|
||||
})
|
||||
export class FilterComponent {
|
||||
|
||||
}
|
||||
|
||||
|
||||
describe('DistributionTargetsComponent', () => {
|
||||
let component: DistributionTargetsComponent;
|
||||
let fixture: ComponentFixture<DistributionTargetsComponent>;
|
||||
let workbasketService;
|
||||
let workbasket = new Workbasket('1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', new Links({ 'href': 'someurl' }, { 'href': 'someurl' }, { 'href': 'someurl' }));
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ DistributionTargetsComponent ]
|
||||
imports: [AngularSvgIconModule, HttpClientModule, HttpModule, JsonpModule],
|
||||
declarations: [DistributionTargetsComponent, SpinnerComponent, GeneralMessageModalComponent, FilterComponent, SelectWorkBasketPipe, IconTypeComponent],
|
||||
providers: [WorkbasketService, AlertService]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
@ -16,10 +50,21 @@ describe('DistributionTargetsComponent', () => {
|
|||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(DistributionTargetsComponent);
|
||||
component = fixture.componentInstance;
|
||||
component.workbasket = workbasket;
|
||||
workbasketService = TestBed.get(WorkbasketService);
|
||||
spyOn(workbasketService, 'getWorkBasketsSummary').and.callFake(() => {
|
||||
return Observable.of(new WorkbasketSummaryResource(
|
||||
{ 'workbaskets': new Array<WorkbasketSummary>(new WorkbasketSummary('id1', '', '', '', '', '', '', '', '', '', '', '', new Links({ 'href': 'someurl' }))) }, new Links({ 'href': 'someurl' })))
|
||||
})
|
||||
spyOn(workbasketService, 'getWorkBasketsDistributionTargets').and.callFake(() => {
|
||||
return Observable.of(new WorkbasketSummaryResource(
|
||||
{ 'workbaskets': new Array<WorkbasketSummary>(new WorkbasketSummary('id1', '', '', '', '', '', '', '', '', '', '', '', new Links({ 'href': 'someurl' }))) }, new Links({ 'href': 'someurl' })))
|
||||
})
|
||||
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
xit('should create', () => {
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { Component, OnInit, Input } from '@angular/core';
|
||||
import { Workbasket } from '../../../model/workbasket';
|
||||
import { WorkbasketSummary } from '../../../model/workbasketSummary';
|
||||
import { WorkbasketSummary } from '../../../model/workbasket-summary';
|
||||
import { WorkbasketAccessItems } from '../../../model/workbasket-access-items';
|
||||
import { FilterModel } from '../../../shared/filter/filter.component'
|
||||
|
||||
|
@ -9,6 +9,7 @@ import { AlertService, AlertModel, AlertType } from '../../../services/alert.ser
|
|||
|
||||
import { Subscription } from 'rxjs';
|
||||
import { element } from 'protractor';
|
||||
import { WorkbasketSummaryResource } from '../../../model/workbasket-summary-resource';
|
||||
|
||||
@Component({
|
||||
selector: 'taskana-workbaskets-distribution-targets',
|
||||
|
@ -23,9 +24,10 @@ export class DistributionTargetsComponent implements OnInit {
|
|||
distributionTargetsSubscription: Subscription;
|
||||
workbasketSubscription: Subscription;
|
||||
workbasketFilterSubscription: Subscription;
|
||||
distributionTargetsLeft: Array<WorkbasketSummary>;
|
||||
distributionTargetsRight: Array<WorkbasketSummary>;
|
||||
distributionTargetsSelected: Array<WorkbasketSummary>;
|
||||
distributionTargetsResource: WorkbasketSummaryResource;
|
||||
distributionTargetsLeft: Array<WorkbasketSummary> = [];
|
||||
distributionTargetsRight: Array<WorkbasketSummary> = [];
|
||||
distributionTargetsSelected: Array<WorkbasketSummary> = [];
|
||||
|
||||
|
||||
filterBy: FilterModel = new FilterModel();
|
||||
|
@ -38,11 +40,12 @@ export class DistributionTargetsComponent implements OnInit {
|
|||
ngOnInit() {
|
||||
this.requestInProgressLeft = true;
|
||||
this.requestInProgressRight = true;
|
||||
this.distributionTargetsSubscription = this.workbasketService.getWorkBasketsDistributionTargets(this.workbasket.workbasketId).subscribe((distributionTargetsSelected: Array<WorkbasketSummary>) => {
|
||||
this.distributionTargetsSelected = distributionTargetsSelected;
|
||||
this.workbasketSubscription = this.workbasketService.getWorkBasketsSummary().subscribe((distributionTargetsAvailable: Array<WorkbasketSummary>) => {
|
||||
this.distributionTargetsLeft = distributionTargetsAvailable;
|
||||
this.distributionTargetsRight = Object.assign([], distributionTargetsAvailable);
|
||||
this.distributionTargetsSubscription = this.workbasketService.getWorkBasketsDistributionTargets(this.workbasket._links.distributionTargets.href).subscribe((distributionTargetsSelectedResource: WorkbasketSummaryResource) => {
|
||||
this.distributionTargetsSelected = distributionTargetsSelectedResource._embedded ? distributionTargetsSelectedResource._embedded.workbaskets :[];
|
||||
this.workbasketSubscription = this.workbasketService.getWorkBasketsSummary().subscribe((distributionTargetsAvailable: WorkbasketSummaryResource) => {
|
||||
this.distributionTargetsResource = distributionTargetsAvailable;
|
||||
this.distributionTargetsLeft = Object.assign([], distributionTargetsAvailable._embedded.workbaskets);
|
||||
this.distributionTargetsRight = Object.assign([], distributionTargetsAvailable._embedded.workbaskets);
|
||||
this.requestInProgressLeft = false;
|
||||
this.requestInProgressRight = false;
|
||||
});
|
||||
|
@ -91,8 +94,8 @@ export class DistributionTargetsComponent implements OnInit {
|
|||
listType ? this.requestInProgressRight = true : this.requestInProgressLeft = true;
|
||||
this.workbasketFilterSubscription = this.workbasketService.getWorkBasketsSummary(true, undefined, undefined, undefined,
|
||||
this.filterBy.name, this.filterBy.description, undefined, this.filterBy.owner,
|
||||
this.filterBy.type, undefined, this.filterBy.key).subscribe(resultList => {
|
||||
listType ? this.distributionTargetsRight = resultList : this.distributionTargetsLeft = resultList;
|
||||
this.filterBy.type, undefined, this.filterBy.key).subscribe((resultList: WorkbasketSummaryResource) => {
|
||||
listType ? this.distributionTargetsRight = resultList._embedded.workbaskets : this.distributionTargetsLeft = resultList._embedded.workbaskets;
|
||||
listType ? this.requestInProgressRight = false : this.requestInProgressLeft = false;
|
||||
});
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ describe('InformationComponent', () => {
|
|||
it('should reset requestInProgress after saving request is done', fakeAsync(() => {
|
||||
component.workbasket = new Workbasket('id', 'created', 'keyModified', 'domain', 'type', 'modified', 'name', 'description',
|
||||
'owner', 'custom1', 'custom2', 'custom3', 'custom4', 'orgLevel1', 'orgLevel2',
|
||||
'orgLevel3', 'orgLevel4', new Array<Links>(new Links('self', 'someUrl')));
|
||||
'orgLevel3', 'orgLevel4', new Links({'href': 'someUrl'}));
|
||||
spyOn(workbasketService, 'updateWorkbasket').and.returnValue(Observable.of(component.workbasket));
|
||||
spyOn(workbasketService, 'triggerWorkBasketSaved').and.returnValue(Observable.of(component.workbasket));
|
||||
component.onSave();
|
||||
|
@ -89,7 +89,7 @@ describe('InformationComponent', () => {
|
|||
it('should trigger triggerWorkBasketSaved method after saving request is done', () => {
|
||||
component.workbasket = new Workbasket('id', 'created', 'keyModified', 'domain', 'type', 'modified', 'name', 'description',
|
||||
'owner', 'custom1', 'custom2', 'custom3', 'custom4', 'orgLevel1', 'orgLevel2',
|
||||
'orgLevel3', 'orgLevel4', new Array<Links>(new Links('self', 'someUrl')));
|
||||
'orgLevel3', 'orgLevel4', new Links({'href': 'someUrl'}));
|
||||
spyOn(workbasketService, 'updateWorkbasket').and.returnValue(Observable.of(component.workbasket));
|
||||
spyOn(workbasketService, 'triggerWorkBasketSaved').and.returnValue(Observable.of(component.workbasket));
|
||||
component.onSave();
|
||||
|
|
|
@ -3,7 +3,6 @@ import { Workbasket } from '../../../model/workbasket';
|
|||
import { WorkbasketService } from '../../../services/workbasket.service';
|
||||
import { IconTypeComponent, ICONTYPES } from '../../../shared/type-icon/icon-type.component';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { Utils } from '../../../shared/utils/utils';
|
||||
import { AlertService, AlertModel, AlertType } from '../../../services/alert.service';
|
||||
import { ActivatedRoute, Params, Router, NavigationStart } from '@angular/router';
|
||||
|
||||
|
@ -49,7 +48,7 @@ export class WorkbasketInformationComponent implements OnInit {
|
|||
|
||||
onSave() {
|
||||
this.beforeRequest();
|
||||
this.workbasketSubscription = (this.workbasketService.updateWorkbasket((Utils.getSelfRef(this.workbasket.links).href), this.workbasket).subscribe(
|
||||
this.workbasketSubscription = (this.workbasketService.updateWorkbasket(this.workbasket._links.self.href, this.workbasket).subscribe(
|
||||
workbasketUpdated => {
|
||||
this.afterRequest();
|
||||
this.workbasket = workbasketUpdated;
|
||||
|
|
|
@ -27,7 +27,9 @@ import { FormsModule } from '@angular/forms';
|
|||
import { AngularSvgIconModule } from 'angular-svg-icon';
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { HttpModule } from '@angular/http';
|
||||
import { WorkbasketSummary } from '../../model/workbasketSummary';
|
||||
import { WorkbasketSummary } from '../../model/workbasket-summary';
|
||||
import { WorkbasketSummaryResource } from '../../model/workbasket-summary-resource';
|
||||
import { WorkbasketAccessItemsResource } from '../../model/workbasket-access-items-resource';
|
||||
|
||||
@Component({
|
||||
selector: 'taskana-filter',
|
||||
|
@ -44,6 +46,7 @@ describe('WorkbasketDetailsComponent', () => {
|
|||
let debugElement;
|
||||
let masterAndDetailService;
|
||||
let workbasketService;
|
||||
let workbasket = new Workbasket('1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', new Links({ 'href': 'someurl' }, { 'href': 'someurl' }, { 'href': 'someurl' }));
|
||||
|
||||
|
||||
beforeEach(async(() => {
|
||||
|
@ -64,10 +67,14 @@ describe('WorkbasketDetailsComponent', () => {
|
|||
workbasketService = TestBed.get(WorkbasketService);
|
||||
spyOn(masterAndDetailService, 'getShowDetail').and.callFake(() => { return Observable.of(true) })
|
||||
spyOn(workbasketService, 'getSelectedWorkBasket').and.callFake(() => { return Observable.of('id1') })
|
||||
spyOn(workbasketService, 'getWorkBasketsSummary').and.callFake(() => { return Observable.of(new Array<WorkbasketSummary>(new WorkbasketSummary('id1', '', '', '', '', '', '', '', '', '', '', '', new Array<Links>(new Links('self', 'someurl'))))) })
|
||||
spyOn(workbasketService, 'getWorkBasket').and.callFake(() => { return Observable.of(new Workbasket('id1')) })
|
||||
spyOn(workbasketService, 'getWorkBasketAccessItems').and.callFake(() => { return Observable.of(new Array<WorkbasketAccessItems>()) })
|
||||
spyOn(workbasketService, 'getWorkBasketsDistributionTargets').and.callFake(() => { return Observable.of(new Array<WorkbasketSummary>()) })
|
||||
spyOn(workbasketService, 'getWorkBasketsSummary').and.callFake(() => {
|
||||
return Observable.of(new WorkbasketSummaryResource(
|
||||
{ 'workbaskets': new Array<WorkbasketSummary>(new WorkbasketSummary('id1', '', '', '', '', '', '', '', '', '', '', '', new Links({ 'href': 'someurl' }))) }, new Links({ 'href': 'someurl' })))
|
||||
})
|
||||
|
||||
spyOn(workbasketService, 'getWorkBasket').and.callFake(() => { return Observable.of(workbasket) })
|
||||
spyOn(workbasketService, 'getWorkBasketAccessItems').and.callFake(() => { return Observable.of(new WorkbasketAccessItemsResource( {'accessItems': new Array<WorkbasketAccessItems>()}, new Links({'href': 'url'})) )})
|
||||
spyOn(workbasketService, 'getWorkBasketsDistributionTargets').and.callFake(() => { return Observable.of(new WorkbasketSummaryResource( {'workbaskets': new Array<WorkbasketSummary>()}, new Links({'href': 'url'})) ) })
|
||||
|
||||
});
|
||||
|
||||
|
@ -88,7 +95,7 @@ describe('WorkbasketDetailsComponent', () => {
|
|||
expect(component.workbasket).toBeUndefined();
|
||||
expect(debugElement.querySelector('app-no-access')).toBeTruthy;
|
||||
|
||||
component.workbasket = new Workbasket('id1');
|
||||
component.workbasket = workbasket;
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(debugElement.querySelector('app-no-access')).toBeFalsy;
|
||||
|
@ -98,7 +105,7 @@ describe('WorkbasketDetailsComponent', () => {
|
|||
|
||||
it('should show back button with classes "visible-xs visible-sm hidden" when showDetail property is true', () => {
|
||||
|
||||
component.workbasket = new Workbasket('id1');
|
||||
component.workbasket = workbasket;
|
||||
component.ngOnInit();
|
||||
fixture.detectChanges();
|
||||
expect(debugElement.querySelector('.visible-xs.visible-sm.hidden > a').textContent).toBe('Back');
|
||||
|
|
|
@ -5,8 +5,8 @@ import { MasterAndDetailService } from '../../services/master-and-detail.service
|
|||
import { ActivatedRoute, Params, Router, NavigationStart } from '@angular/router';
|
||||
import { PermissionService } from '../../services/permission.service';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { WorkbasketSummary } from '../../model/workbasketSummary';
|
||||
import { Utils } from '../../shared/utils/utils';
|
||||
import { WorkbasketSummary } from '../../model/workbasket-summary';
|
||||
import { WorkbasketSummaryResource } from '../../model/workbasket-summary-resource';
|
||||
|
||||
@Component({
|
||||
selector: 'workbasket-details',
|
||||
|
@ -70,10 +70,10 @@ export class WorkbasketDetailsComponent implements OnInit {
|
|||
}
|
||||
|
||||
private getWorkbasketInformation(workbasketIdSelected: string) {
|
||||
this.service.getWorkBasketsSummary().subscribe((workbasketSummary: Array<WorkbasketSummary>) => {
|
||||
let workbasketSummarySelected = this.getWorkbasketSummaryById(workbasketSummary, workbasketIdSelected);
|
||||
if (workbasketSummarySelected && workbasketSummarySelected.links) {
|
||||
this.workbasketSubscription = this.service.getWorkBasket(Utils.getSelfRef(workbasketSummarySelected.links).href).subscribe(workbasket => {
|
||||
this.service.getWorkBasketsSummary().subscribe((workbasketSummary: WorkbasketSummaryResource) => {
|
||||
let workbasketSummarySelected = this.getWorkbasketSummaryById(workbasketSummary._embedded.workbaskets, workbasketIdSelected);
|
||||
if (workbasketSummarySelected && workbasketSummarySelected._links) {
|
||||
this.workbasketSubscription = this.service.getWorkBasket(workbasketSummarySelected._links.self.href).subscribe(workbasket => {
|
||||
this.workbasket = workbasket;
|
||||
this.requestInProgress = false;
|
||||
});
|
||||
|
@ -81,7 +81,7 @@ export class WorkbasketDetailsComponent implements OnInit {
|
|||
});
|
||||
}
|
||||
|
||||
private getWorkbasketSummaryById(workbasketSummary: Array<WorkbasketSummary>, selectedId: string) {
|
||||
private getWorkbasketSummaryById(workbasketSummary: Array<WorkbasketSummary>, selectedId: string): WorkbasketSummary {
|
||||
return workbasketSummary.find((summary => summary.workbasketId === selectedId));
|
||||
}
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
</div>
|
||||
</li>
|
||||
<taskana-spinner [isRunning]="requestInProgress" class="centered-horizontally"></taskana-spinner>
|
||||
|
||||
<li class="list-group-item" *ngFor="let workbasket of workbaskets" [class.active]="workbasket.workbasketId == selectedId"
|
||||
type="text" (click)="selectWorkbasket(workbasket.workbasketId)">
|
||||
<div class="row">
|
||||
|
|
|
@ -3,7 +3,7 @@ import { async, ComponentFixture, TestBed, tick, fakeAsync } from '@angular/core
|
|||
import { WorkbasketListComponent } from './workbasket-list.component';
|
||||
import { AngularSvgIconModule } from 'angular-svg-icon';
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { WorkbasketSummary } from '../../model/workbasketSummary';
|
||||
import { WorkbasketSummary } from '../../model/workbasket-summary';
|
||||
import { WorkbasketService } from '../../services/workbasket.service';
|
||||
import { HttpModule } from '@angular/http';
|
||||
import { Router, Routes } from '@angular/router';
|
||||
|
@ -15,6 +15,8 @@ import { SortComponent } from '../../shared/sort/sort.component';
|
|||
import { IconTypeComponent } from '../../shared/type-icon/icon-type.component';
|
||||
import { RemoveNoneTypePipe } from '../../pipes/remove-none-type';
|
||||
import { MapValuesPipe } from '../../pipes/map-values.pipe';
|
||||
import { WorkbasketSummaryResource } from '../../model/workbasket-summary-resource';
|
||||
import { Links } from '../../model/links';
|
||||
|
||||
|
||||
@Component({
|
||||
|
@ -33,9 +35,11 @@ export class FilterComponent {
|
|||
|
||||
}
|
||||
|
||||
const workbasketSummary: WorkbasketSummary[] = [new WorkbasketSummary("1", "key1", "NAME1", "description 1", "owner 1", "", "", "PERSONAL", "", "", "", ""),
|
||||
new WorkbasketSummary("2", "key2", "NAME2", "description 2", "owner 2", "", "", "GROUP", "", "", "", "")
|
||||
];
|
||||
const workbasketSummaryResource: WorkbasketSummaryResource = new WorkbasketSummaryResource({
|
||||
'workbaskets': new Array<WorkbasketSummary>(
|
||||
new WorkbasketSummary("1", "key1", "NAME1", "description 1", "owner 1", "", "", "PERSONAL", "", "", "", ""),
|
||||
new WorkbasketSummary("2", "key2", "NAME2", "description 2", "owner 2", "", "", "GROUP", "", "", "", ""))
|
||||
}, new Links({ 'href': 'url' }));
|
||||
|
||||
|
||||
describe('WorkbasketListComponent', () => {
|
||||
|
@ -67,7 +71,7 @@ describe('WorkbasketListComponent', () => {
|
|||
component = fixture.componentInstance;
|
||||
debugElement = fixture.debugElement.nativeElement;
|
||||
workbasketService = TestBed.get(WorkbasketService);
|
||||
spyOn(workbasketService, 'getWorkBasketsSummary').and.returnValue(Observable.of(workbasketSummary));
|
||||
spyOn(workbasketService, 'getWorkBasketsSummary').and.returnValue(Observable.of(workbasketSummaryResource));
|
||||
spyOn(workbasketService, 'getSelectedWorkBasket').and.returnValue(Observable.of('2'));
|
||||
|
||||
fixture.detectChanges();
|
||||
|
@ -85,7 +89,7 @@ describe('WorkbasketListComponent', () => {
|
|||
component.ngOnInit();
|
||||
expect(workbasketService.getWorkBasketsSummary).toHaveBeenCalled();
|
||||
workbasketService.getWorkBasketsSummary().subscribe(value => {
|
||||
expect(value).toBe(workbasketSummary);
|
||||
expect(value).toBe(workbasketSummaryResource);
|
||||
})
|
||||
});
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { Component, OnInit, EventEmitter } from '@angular/core';
|
||||
import { WorkbasketSummary } from '../../model/workbasketSummary';
|
||||
import { WorkbasketSummaryResource } from '../../model/workbasket-summary-resource';
|
||||
import { WorkbasketSummary } from '../../model/workbasket-summary';
|
||||
import { WorkbasketService } from '../../services/workbasket.service'
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
import { FilterModel } from '../../shared/filter/filter.component'
|
||||
|
@ -32,7 +33,7 @@ export class WorkbasketListComponent implements OnInit {
|
|||
ngOnInit() {
|
||||
this.requestInProgress = true;
|
||||
this.workBasketSummarySubscription = this.workbasketService.getWorkBasketsSummary().subscribe(resultList => {
|
||||
this.workbaskets = resultList;
|
||||
this.workbaskets = resultList._embedded.workbaskets;
|
||||
this.requestInProgress = false;
|
||||
});
|
||||
|
||||
|
@ -79,11 +80,11 @@ export class WorkbasketListComponent implements OnInit {
|
|||
|
||||
private performRequest(): void {
|
||||
this.requestInProgress = true;
|
||||
this.workbaskets = undefined;
|
||||
this.workbaskets = [];
|
||||
this.workbasketServiceSubscription.add(this.workbasketService.getWorkBasketsSummary(true, this.sort.sortBy, this.sort.sortDirection, undefined,
|
||||
this.filterBy.name, this.filterBy.description, undefined, this.filterBy.owner,
|
||||
this.filterBy.type, undefined, this.filterBy.key).subscribe(resultList => {
|
||||
this.workbaskets = resultList;
|
||||
this.workbaskets = resultList._embedded? resultList._embedded.workbaskets:[];
|
||||
this.requestInProgress = false;
|
||||
this.unSelectWorkbasket();
|
||||
}));
|
||||
|
|
Loading…
Reference in New Issue