TSK-622 Add query parameters to classification list service
- Add query parameters to classification list service in order to order by key instead of Id
This commit is contained in:
parent
b1d78b5544
commit
f47a3cfdd5
|
@ -66,7 +66,7 @@ export class ClassificationListComponent implements OnInit, OnDestroy {
|
|||
this.classifications = [];
|
||||
this.requestInProgress = true;
|
||||
this.classificationTypeService.selectClassificationType(classificationTypeSelected);
|
||||
this.classificationService.getClassifications(true)
|
||||
this.classificationService.getClassifications()
|
||||
.subscribe((classifications: Array<TreeNodeModel>) => {
|
||||
this.classifications = classifications;
|
||||
this.requestInProgress = false;
|
||||
|
@ -101,7 +101,7 @@ export class ClassificationListComponent implements OnInit, OnDestroy {
|
|||
|
||||
this.requestInProgress = true;
|
||||
this.classifications = [];
|
||||
this.classificationServiceSubscription = this.classificationService.getClassifications(true)
|
||||
this.classificationServiceSubscription = this.classificationService.getClassifications()
|
||||
.subscribe((classifications: Array<TreeNodeModel>) => {
|
||||
this.requestInProgress = false;
|
||||
this.classifications = classifications;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';
|
||||
import { IconTypeComponent } from '../type-icon/icon-type.component'
|
||||
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
||||
import { ICONTYPES } from 'app/models/type';
|
||||
import { FilterModel } from 'app/models/filter';
|
||||
|
||||
|
@ -23,7 +22,7 @@ export class FilterComponent {
|
|||
toggleDropDown = false;
|
||||
|
||||
constructor() {
|
||||
this.allTypes = new Map([['ALL', 'All'], ['PERSONAL', 'Personal'], ['GROUP', 'Group'],
|
||||
this.allTypes = new Map([['', 'All'], ['PERSONAL', 'Personal'], ['GROUP', 'Group'],
|
||||
['CLEARANCE', 'Clearance'], ['TOPIC', 'Topic']]);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,29 +1,26 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
||||
import { environment } from 'environments/environment';
|
||||
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Subject } from 'rxjs/Subject';
|
||||
import 'rxjs/add/observable/combineLatest';
|
||||
import 'rxjs/add/operator/map'
|
||||
|
||||
import { Classification } from 'app/models/classification';
|
||||
import { TreeNodeModel } from 'app/models/tree-node';
|
||||
import { ClassificationDefinition } from 'app/models/classification-definition';
|
||||
|
||||
import { ClassificationResource } from 'app/models/classification-resource';
|
||||
import { ClassificationTypesService } from '../classification-types/classification-types.service';
|
||||
import { DomainService } from 'app/services/domain/domain.service';
|
||||
import { TaskanaQueryParameters } from 'app/shared/util/query-parameters';
|
||||
import { Direction } from 'app/models/sorting';
|
||||
|
||||
@Injectable()
|
||||
export class ClassificationsService {
|
||||
|
||||
private url = environment.taskanaRestUrl + '/v1/classifications/';
|
||||
private classificationSelected = new Subject<string>();
|
||||
private classificationSaved = new Subject<number>();
|
||||
|
||||
private classificationTypes: Array<string>;
|
||||
|
||||
constructor(
|
||||
private httpClient: HttpClient,
|
||||
private classificationTypeService: ClassificationTypesService,
|
||||
|
@ -31,17 +28,32 @@ export class ClassificationsService {
|
|||
}
|
||||
|
||||
// GET
|
||||
getClassifications(forceRequest = false): Observable<any> {
|
||||
getClassifications(sortBy: string = TaskanaQueryParameters.KEY,
|
||||
order: string = Direction.ASC,
|
||||
name: string = undefined,
|
||||
nameLike: string = undefined,
|
||||
descLike: string = undefined,
|
||||
owner: string = undefined,
|
||||
ownerLike: string = undefined,
|
||||
type: string = undefined,
|
||||
key: string = undefined,
|
||||
keyLike: string = undefined,
|
||||
requiredPermission: string = undefined,
|
||||
allPages: boolean = true): Observable<any> {
|
||||
return this.domainService.getSelectedDomain().mergeMap(domain => {
|
||||
const classificationTypes = this.classificationTypeService.getSelectedClassificationType();
|
||||
this.classificationTypeService.getSelectedClassificationType();
|
||||
return this.getClassificationObservable(this.httpClient.get<ClassificationResource>(
|
||||
`${environment.taskanaRestUrl}/v1/classifications/?domain=${domain}`));
|
||||
`${environment.taskanaRestUrl}/v1/classifications/${TaskanaQueryParameters.getQueryParameters(
|
||||
sortBy, order, name,
|
||||
nameLike, descLike, owner, ownerLike, type, key, keyLike, requiredPermission,
|
||||
!allPages ? TaskanaQueryParameters.page : undefined, !allPages ? TaskanaQueryParameters.pageSize : undefined, domain)}`));
|
||||
|
||||
}).do(() => {
|
||||
this.domainService.domainChangedComplete();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// GET
|
||||
getClassification(id: string): Observable<ClassificationDefinition> {
|
||||
return this.httpClient.get<ClassificationDefinition>(`${environment.taskanaRestUrl}/v1/classifications/${id}`)
|
||||
|
@ -130,16 +142,5 @@ export class ClassificationsService {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private map2Array(map: Map<string, string>): Array<string> {
|
||||
const returnArray = [];
|
||||
|
||||
map.forEach((entryVal, entryKey) => {
|
||||
returnArray.push(entryKey);
|
||||
});
|
||||
|
||||
return returnArray;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import {
|
||||
Component, OnInit, EventEmitter, OnDestroy,
|
||||
HostListener, ViewChild, ElementRef, AfterViewChecked, ChangeDetectorRef
|
||||
Component, OnInit, OnDestroy,
|
||||
ViewChild, ElementRef, ChangeDetectorRef
|
||||
} from '@angular/core';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
|
@ -13,6 +13,7 @@ import { Orientation } from 'app/models/orientation';
|
|||
|
||||
import { WorkbasketService } from 'app/services/workbasket/workbasket.service'
|
||||
import { OrientationService } from 'app/services/orientation/orientation.service';
|
||||
import { TaskanaQueryParameters } from 'app/shared/util/query-parameters';
|
||||
|
||||
@Component({
|
||||
selector: 'taskana-workbasket-list',
|
||||
|
@ -74,7 +75,7 @@ export class WorkbasketListComponent implements OnInit, OnDestroy {
|
|||
}
|
||||
|
||||
changePage(page) {
|
||||
this.workbasketService.page = page;
|
||||
TaskanaQueryParameters.page = page;
|
||||
this.performRequest();
|
||||
}
|
||||
|
||||
|
@ -84,7 +85,7 @@ export class WorkbasketListComponent implements OnInit, OnDestroy {
|
|||
const unusedHeight = 145
|
||||
const totalHeight = window.innerHeight;
|
||||
const cards = Math.round((totalHeight - (unusedHeight + toolbarSize)) / cardHeight);
|
||||
this.workbasketService.pageSize = cards;
|
||||
TaskanaQueryParameters.pageSize = cards;
|
||||
this.performRequest();
|
||||
}
|
||||
|
||||
|
|
|
@ -11,55 +11,25 @@ import { WorkbasketDistributionTargetsResource } from 'app/models/workbasket-dis
|
|||
import { Direction } from 'app/models/sorting';
|
||||
|
||||
import { DomainService } from 'app/services/domain/domain.service';
|
||||
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
|
||||
import {WorkbasketResource} from '../../models/workbasket-resource';
|
||||
import { WorkbasketResource } from '../../models/workbasket-resource';
|
||||
import { TaskanaQueryParameters } from 'app/shared/util/query-parameters';
|
||||
|
||||
@Injectable()
|
||||
export class WorkbasketService {
|
||||
|
||||
public workBasketSelected = new Subject<string>();
|
||||
public workBasketSaved = new Subject<number>();
|
||||
|
||||
// Sorting
|
||||
readonly SORTBY = 'sort-by';
|
||||
readonly ORDER = 'order';
|
||||
|
||||
// Filtering
|
||||
readonly NAME = 'name';
|
||||
readonly NAMELIKE = 'name-like';
|
||||
readonly DESCLIKE = 'description-like';
|
||||
readonly OWNER = 'owner';
|
||||
readonly OWNERLIKE = 'owner-like';
|
||||
readonly TYPE = 'type';
|
||||
readonly KEY = 'key';
|
||||
readonly KEYLIKE = 'key-like';
|
||||
|
||||
// Access
|
||||
readonly REQUIREDPERMISSION = 'required-permission';
|
||||
|
||||
// Pagination
|
||||
readonly PAGE = 'page';
|
||||
readonly PAGESIZE = 'page-size';
|
||||
|
||||
// Domain
|
||||
readonly DOMAIN = 'domain';
|
||||
|
||||
|
||||
page = 1;
|
||||
pageSize = 9;
|
||||
|
||||
private workbasketSummaryRef: Observable<WorkbasketSummaryResource> = new Observable();
|
||||
|
||||
constructor(
|
||||
private httpClient: HttpClient,
|
||||
private domainService: DomainService,
|
||||
private requestInProgressService: RequestInProgressService
|
||||
private domainService: DomainService
|
||||
) { }
|
||||
|
||||
// #region "REST calls"
|
||||
// GET
|
||||
getWorkBasketsSummary(forceRequest: boolean = false,
|
||||
sortBy: string = this.KEY,
|
||||
sortBy: string = TaskanaQueryParameters.KEY,
|
||||
order: string = Direction.ASC,
|
||||
name: string = undefined,
|
||||
nameLike: string = undefined,
|
||||
|
@ -78,10 +48,10 @@ export class WorkbasketService {
|
|||
|
||||
return this.domainService.getSelectedDomain().mergeMap(domain => {
|
||||
return this.workbasketSummaryRef = this.httpClient.get<WorkbasketSummaryResource>(
|
||||
`${environment.taskanaRestUrl}/v1/workbaskets/${this.getWorkbasketSummaryQueryParameters(
|
||||
`${environment.taskanaRestUrl}/v1/workbaskets/${TaskanaQueryParameters.getQueryParameters(
|
||||
sortBy, order, name,
|
||||
nameLike, descLike, owner, ownerLike, type, key, keyLike, requiredPermission,
|
||||
!allPages ? this.page : undefined, !allPages ? this.pageSize : undefined, domain)}`)
|
||||
!allPages ? TaskanaQueryParameters.page : undefined, !allPages ? TaskanaQueryParameters.pageSize : undefined, domain)}`)
|
||||
.do(workbaskets => {
|
||||
return workbaskets;
|
||||
});
|
||||
|
@ -95,9 +65,9 @@ export class WorkbasketService {
|
|||
}
|
||||
|
||||
// GET
|
||||
getAllWorkBaskets(): Observable<WorkbasketResource> {
|
||||
return this.httpClient.get<WorkbasketResource>(`${environment.taskanaRestUrl}/v1/workbaskets?required-permission=OPEN`);
|
||||
}
|
||||
getAllWorkBaskets(): Observable<WorkbasketResource> {
|
||||
return this.httpClient.get<WorkbasketResource>(`${environment.taskanaRestUrl}/v1/workbaskets?required-permission=OPEN`);
|
||||
}
|
||||
|
||||
// POST
|
||||
createWorkbasket(workbasket: Workbasket): Observable<Workbasket> {
|
||||
|
@ -165,41 +135,6 @@ export class WorkbasketService {
|
|||
// #endregion
|
||||
|
||||
// #region private
|
||||
private getWorkbasketSummaryQueryParameters(sortBy: string,
|
||||
order: string,
|
||||
name: string,
|
||||
nameLike: string,
|
||||
descLike: string,
|
||||
owner: string,
|
||||
ownerLike: string,
|
||||
type: string,
|
||||
key: string,
|
||||
keyLike: string,
|
||||
requiredPermission: string,
|
||||
page: number,
|
||||
pageSize: number,
|
||||
domain: string): string {
|
||||
let query = '?';
|
||||
query += sortBy ? `${this.SORTBY}=${sortBy}&` : '';
|
||||
query += order ? `${this.ORDER}=${order}&` : '';
|
||||
query += name ? `${this.NAME}=${name}&` : '';
|
||||
query += nameLike ? `${this.NAMELIKE}=${nameLike}&` : '';
|
||||
query += descLike ? `${this.DESCLIKE}=${descLike}&` : '';
|
||||
query += owner ? `${this.OWNER}=${owner}&` : '';
|
||||
query += ownerLike ? `${this.OWNERLIKE}=${ownerLike}&` : '';
|
||||
query += type ? `${this.TYPE}=${type}&` : '';
|
||||
query += key ? `${this.KEY}=${key}&` : '';
|
||||
query += keyLike ? `${this.KEYLIKE}=${keyLike}&` : '';
|
||||
query += requiredPermission ? `${this.REQUIREDPERMISSION}=${requiredPermission}&` : '';
|
||||
query += page ? `${this.PAGE}=${page}&` : '';
|
||||
query += pageSize ? `${this.PAGESIZE}=${pageSize}&` : '';
|
||||
query += domain !== undefined ? `${this.DOMAIN}=${domain}&` : '';
|
||||
|
||||
if (query.lastIndexOf('&') === query.length - 1) {
|
||||
query = query.slice(0, query.lastIndexOf('&'))
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
private handleError(error: Response | any) {
|
||||
let errMsg: string;
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
import { TaskanaQueryParameters } from './query-parameters';
|
||||
import { Direction } from 'app/models/sorting';
|
||||
|
||||
describe('TaskanaQueryParameters', () => {
|
||||
|
||||
it('should create a empty query', () => {
|
||||
expect(TaskanaQueryParameters.getQueryParameters()).toBe('');
|
||||
});
|
||||
|
||||
it('should create a query separated with &', () => {
|
||||
expect(TaskanaQueryParameters.getQueryParameters(TaskanaQueryParameters.KEY,
|
||||
Direction.ASC).split('&').length).toBe(2);
|
||||
});
|
||||
|
||||
it('should remove last & from query', () => {
|
||||
expect(TaskanaQueryParameters.getQueryParameters(TaskanaQueryParameters.KEY,
|
||||
Direction.ASC).endsWith('?')).toBeFalsy();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,65 @@
|
|||
|
||||
export class TaskanaQueryParameters {
|
||||
// Sorting
|
||||
static SORTBY = 'sort-by';
|
||||
static ORDER = 'order';
|
||||
|
||||
// Filtering
|
||||
static NAME = 'name';
|
||||
static NAMELIKE = 'name-like';
|
||||
static DESCLIKE = 'description-like';
|
||||
static OWNER = 'owner';
|
||||
static OWNERLIKE = 'owner-like';
|
||||
static TYPE = 'type';
|
||||
static KEY = 'key';
|
||||
static KEYLIKE = 'key-like';
|
||||
|
||||
// Access
|
||||
static REQUIREDPERMISSION = 'required-permission';
|
||||
|
||||
// Pagination
|
||||
static PAGE = 'page';
|
||||
static PAGESIZE = 'page-size';
|
||||
static page = 1;
|
||||
static pageSize = 9;
|
||||
|
||||
// Domain
|
||||
static DOMAIN = 'domain';
|
||||
|
||||
|
||||
public static getQueryParameters(sortBy: string = undefined,
|
||||
order: string = undefined,
|
||||
name: string = undefined,
|
||||
nameLike: string = undefined,
|
||||
descLike: string = undefined,
|
||||
owner: string = undefined,
|
||||
ownerLike: string = undefined,
|
||||
type: string = undefined,
|
||||
key: string = undefined,
|
||||
keyLike: string = undefined,
|
||||
requiredPermission: string = undefined,
|
||||
page: number = undefined,
|
||||
pageSize: number = undefined,
|
||||
domain: string = undefined): string {
|
||||
let query = '?';
|
||||
query += sortBy ? `${this.SORTBY}=${sortBy}&` : '';
|
||||
query += order ? `${this.ORDER}=${order}&` : '';
|
||||
query += name ? `${this.NAME}=${name}&` : '';
|
||||
query += nameLike ? `${this.NAMELIKE}=${nameLike}&` : '';
|
||||
query += descLike ? `${this.DESCLIKE}=${descLike}&` : '';
|
||||
query += owner ? `${this.OWNER}=${owner}&` : '';
|
||||
query += ownerLike ? `${this.OWNERLIKE}=${ownerLike}&` : '';
|
||||
query += type ? `${this.TYPE}=${type}&` : '';
|
||||
query += key ? `${this.KEY}=${key}&` : '';
|
||||
query += keyLike ? `${this.KEYLIKE}=${keyLike}&` : '';
|
||||
query += requiredPermission ? `${this.REQUIREDPERMISSION}=${requiredPermission}&` : '';
|
||||
query += page ? `${this.PAGE}=${page}&` : '';
|
||||
query += pageSize ? `${this.PAGESIZE}=${pageSize}&` : '';
|
||||
query += domain !== undefined ? `${this.DOMAIN}=${domain}&` : '';
|
||||
|
||||
if (query.lastIndexOf('&') === query.length - 1) {
|
||||
query = query.slice(0, query.lastIndexOf('&'))
|
||||
}
|
||||
return query === '?' ? '' : query;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue