TSK-404 allow workbasket list filtering while selection is applied.
This commit is contained in:
parent
a311a60301
commit
5864d70e0b
|
|
@ -54,6 +54,7 @@ public class WorkbasketMapper {
|
||||||
.withRel("distributionTargets"));
|
.withRel("distributionTargets"));
|
||||||
resource.add(linkTo(methodOn(WorkbasketController.class).getWorkbasketAccessItems(wb.getId()))
|
resource.add(linkTo(methodOn(WorkbasketController.class).getWorkbasketAccessItems(wb.getId()))
|
||||||
.withRel("accessItems"));
|
.withRel("accessItems"));
|
||||||
|
resource.add(linkTo(WorkbasketController.class).withRel("allWorkbaskets"));
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
||||||
|
|
||||||
import {ClassificationListComponent} from './classification-list.component';
|
import {ClassificationListComponent} from './classification-list.component';
|
||||||
import {ImportExportComponent} from '../../../import-export/import-export.component';
|
import {ImportExportComponent} from 'app/shared/import-export/import-export.component';
|
||||||
import {SpinnerComponent} from '../../../../shared/spinner/spinner.component';
|
import {SpinnerComponent} from 'app/shared/spinner/spinner.component';
|
||||||
import {WorkbasketService} from '../../../../services/workbasket/workbasket.service';
|
import {WorkbasketService} from 'app/services/workbasket/workbasket.service';
|
||||||
import {HttpClient, HttpClientModule} from '@angular/common/http';
|
import {HttpClient, HttpClientModule} from '@angular/common/http';
|
||||||
import {WorkbasketDefinitionService} from '../../../../services/workbasket/workbasketDefinition.service';
|
import {WorkbasketDefinitionService} from 'app/services/workbasket/workbasketDefinition.service';
|
||||||
import {AlertService} from '../../../../services/alert/alert.service';
|
import {AlertService} from 'app/services/alert/alert.service';
|
||||||
import {ClassificationService} from '../../../../services/classification/classification.service';
|
import {ClassificationService} from 'app/services/classification/classification.service';
|
||||||
import {DomainService} from '../../../../services/domains/domain.service';
|
import {DomainService} from 'app/services/domains/domain.service';
|
||||||
|
|
||||||
describe('ClassificationListComponent', () => {
|
describe('ClassificationListComponent', () => {
|
||||||
let component: ClassificationListComponent;
|
let component: ClassificationListComponent;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import {SelectionToImport} from '../../../enums/SelectionToImport';
|
import { ImportType } from 'app/models/import-type';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'taskana-classification-list',
|
selector: 'taskana-classification-list',
|
||||||
|
|
@ -8,7 +8,7 @@ import {SelectionToImport} from '../../../enums/SelectionToImport';
|
||||||
})
|
})
|
||||||
export class ClassificationListComponent implements OnInit {
|
export class ClassificationListComponent implements OnInit {
|
||||||
|
|
||||||
selectionToImport = SelectionToImport.CLASSIFICATIONS;
|
selectionToImport = ImportType.CLASSIFICATIONS;
|
||||||
requestInProgress = false;
|
requestInProgress = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
<!-- TODO: fix position of import button -->
|
|
||||||
<input #selectedFile type="file" (change)="onSelectFile($event)"
|
|
||||||
class="hide"/>
|
|
||||||
<button class="btn btn-default glyphicon glyphicon-upload" type="button" title="Import"
|
|
||||||
(click)="selectedFile.click()"></button>
|
|
||||||
|
|
||||||
<div class="dropdown" style="display: inline">
|
|
||||||
<button type="button" title="Export" class="btn btn-default dropdown-toggle"
|
|
||||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"
|
|
||||||
(click)="updateDomains()">
|
|
||||||
<span class="glyphicon glyphicon-download"></span>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" (click)="export()"><label>All Domains</label></a>
|
|
||||||
</li>
|
|
||||||
<div role="separator" class="divider"></div>
|
|
||||||
<li *ngFor="let domain of domains">
|
|
||||||
<a class="dropdown-item"
|
|
||||||
(click)="export(domain)"><label>{{domain === '' ? 'Master' : domain}}</label></a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
@ -51,7 +51,7 @@ export class AccessItemsComponent implements OnChanges, OnDestroy {
|
||||||
private savingWorkbaskets: SavingWorkbasketService) { }
|
private savingWorkbaskets: SavingWorkbasketService) { }
|
||||||
|
|
||||||
ngOnChanges(changes: SimpleChanges): void {
|
ngOnChanges(changes: SimpleChanges): void {
|
||||||
if (changes.active.currentValue === 'accessItems' && !this.initialized) {
|
if (!this.initialized && changes.active && changes.active.currentValue === 'accessItems') {
|
||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ export class DistributionTargetsComponent implements OnChanges, OnDestroy {
|
||||||
private errorModalService: ErrorModalService) { }
|
private errorModalService: ErrorModalService) { }
|
||||||
|
|
||||||
ngOnChanges(changes: SimpleChanges): void {
|
ngOnChanges(changes: SimpleChanges): void {
|
||||||
if (changes.active.currentValue === 'distributionTargets' && !this.initialized) {
|
if (!this.initialized && changes.active && changes.active.currentValue === 'distributionTargets' ) {
|
||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,9 @@ describe('InformationComponent', () => {
|
||||||
expect(component.workbasketClone).toBeUndefined();
|
expect(component.workbasketClone).toBeUndefined();
|
||||||
component.workbasket = new Workbasket('id', 'created', 'keyModified', 'domain', ICONTYPES.TOPIC, 'modified', 'name', 'description',
|
component.workbasket = new Workbasket('id', 'created', 'keyModified', 'domain', ICONTYPES.TOPIC, 'modified', 'name', 'description',
|
||||||
'owner', 'custom1', 'custom2', 'custom3', 'custom4', 'orgLevel1', 'orgLevel2', 'orgLevel3', 'orgLevel4', null);
|
'owner', 'custom1', 'custom2', 'custom3', 'custom4', 'orgLevel1', 'orgLevel2', 'orgLevel3', 'orgLevel4', null);
|
||||||
component.ngOnInit();
|
component.ngOnChanges(
|
||||||
|
undefined
|
||||||
|
);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
expect(component.workbasket.workbasketId).toEqual(component.workbasketClone.workbasketId);
|
expect(component.workbasket.workbasketId).toEqual(component.workbasketClone.workbasketId);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Component, OnInit, Input, Output, OnDestroy } from '@angular/core';
|
import { Component, OnInit, Input, Output, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';
|
||||||
import { DatePipe } from '@angular/common';
|
import { DatePipe } from '@angular/common';
|
||||||
import { ActivatedRoute, Params, Router, NavigationStart } from '@angular/router';
|
import { ActivatedRoute, Params, Router, NavigationStart } from '@angular/router';
|
||||||
import { Subscription } from 'rxjs/Subscription';
|
import { Subscription } from 'rxjs/Subscription';
|
||||||
|
|
@ -23,7 +23,7 @@ const dateLocale = 'en-US';
|
||||||
templateUrl: './workbasket-information.component.html',
|
templateUrl: './workbasket-information.component.html',
|
||||||
styleUrls: ['./workbasket-information.component.scss']
|
styleUrls: ['./workbasket-information.component.scss']
|
||||||
})
|
})
|
||||||
export class WorkbasketInformationComponent implements OnInit, OnDestroy {
|
export class WorkbasketInformationComponent implements OnChanges, OnDestroy {
|
||||||
|
|
||||||
@Input()
|
@Input()
|
||||||
workbasket: Workbasket;
|
workbasket: Workbasket;
|
||||||
|
|
@ -50,7 +50,7 @@ export class WorkbasketInformationComponent implements OnInit, OnDestroy {
|
||||||
this.allTypes = IconTypeComponent.allTypes;
|
this.allTypes = IconTypeComponent.allTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnChanges(changes: SimpleChanges): void {
|
||||||
this.workbasketClone = { ...this.workbasket };
|
this.workbasketClone = { ...this.workbasket };
|
||||||
if (this.action === ACTION.CREATE) {
|
if (this.action === ACTION.CREATE) {
|
||||||
this.badgeMessage = 'Creating new workbasket';
|
this.badgeMessage = 'Creating new workbasket';
|
||||||
|
|
|
||||||
|
|
@ -100,30 +100,23 @@ export class WorkbasketDetailsComponent implements OnInit, OnDestroy {
|
||||||
|
|
||||||
private getWorkbasketInformation(workbasketIdSelected: string, copyId: string = undefined) {
|
private getWorkbasketInformation(workbasketIdSelected: string, copyId: string = undefined) {
|
||||||
this.requestInProgress = true;
|
this.requestInProgress = true;
|
||||||
this.service.getWorkBasketsSummary().subscribe((workbasketSummary: WorkbasketSummaryResource) => {
|
|
||||||
if (!workbasketIdSelected && this.action === ACTION.CREATE) { // CREATE
|
if (!workbasketIdSelected && this.action === ACTION.CREATE) { // CREATE
|
||||||
this.workbasket = new Workbasket(undefined);
|
this.workbasket = new Workbasket(undefined);
|
||||||
this.workbasket._links.self = workbasketSummary._links.allWorkbaskets;
|
this.workbasket._links.self = this.workbasket._links.allWorkbasketUrl;
|
||||||
this.requestInProgress = false;
|
this.requestInProgress = false;
|
||||||
} else if (!workbasketIdSelected && this.action === ACTION.COPY) { // COPY
|
} else if (!workbasketIdSelected && this.action === ACTION.COPY) { // COPY
|
||||||
this.workbasket = { ...this.workbasketCopy };
|
this.workbasket = { ...this.workbasketCopy };
|
||||||
this.workbasket._links.self = workbasketSummary._links.allWorkbaskets;
|
this.workbasket._links.self = this.workbasket._links.allWorkbasketUrl;
|
||||||
this.workbasket.workbasketId = undefined;
|
this.workbasket.workbasketId = undefined;
|
||||||
this.requestInProgress = false;
|
this.requestInProgress = false;
|
||||||
}
|
}
|
||||||
|
if (workbasketIdSelected) {
|
||||||
const workbasketSummarySelected = this.getWorkbasketSummaryById(workbasketSummary._embedded.workbaskets, workbasketIdSelected);
|
this.workbasketSubscription = this.service.getWorkBasket(workbasketIdSelected).subscribe(workbasket => {
|
||||||
if (workbasketSummarySelected && workbasketSummarySelected._links) {
|
|
||||||
this.workbasketSubscription = this.service.getWorkBasket(workbasketSummarySelected._links.self.href).subscribe(workbasket => {
|
|
||||||
this.workbasket = workbasket;
|
this.workbasket = workbasket;
|
||||||
this.requestInProgress = false;
|
this.requestInProgress = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private getWorkbasketSummaryById(workbasketSummary: Array<WorkbasketSummary>, selectedId: string): WorkbasketSummary {
|
|
||||||
return workbasketSummary.find((summary => summary.workbasketId === selectedId));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy(): void {
|
ngOnDestroy(): void {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
<li id="wb-action-toolbar" class="list-group-item tab-align">
|
<li id="wb-action-toolbar" class="list-group-item tab-align">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-9">
|
<div class="col-xs-9">
|
||||||
<taskana-import-export-component [currentSelection]="selectionToImport"></taskana-import-export-component>
|
|
||||||
<button type="button" (click)="addWorkbasket()" data-toggle="tooltip" title="Add" class="btn btn-default">
|
<button type="button" (click)="addWorkbasket()" data-toggle="tooltip" title="Add" class="btn btn-default">
|
||||||
<span class="glyphicon glyphicon-plus green" aria-hidden="true"></span>
|
<span class="glyphicon glyphicon-plus green" aria-hidden="true"></span>
|
||||||
</button>
|
</button>
|
||||||
|
|
@ -18,12 +17,11 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="pull-right margin-right">
|
<div class="pull-right margin-right">
|
||||||
<taskana-sort (performSorting)="sorting($event)"></taskana-sort>
|
<taskana-sort (performSorting)="sorting($event)"></taskana-sort>
|
||||||
<div class="clearfix btn-group">
|
|
||||||
<button class="btn btn-default collapsed" type="button" id="collapsedMenufilterWb" aria-expanded="false" (click)="toolbarState=!toolbarState">
|
<button class="btn btn-default collapsed" type="button" id="collapsedMenufilterWb" aria-expanded="false" (click)="toolbarState=!toolbarState">
|
||||||
<span class="glyphicon glyphicon-filter blue"></span>
|
<span class="glyphicon glyphicon-filter blue"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div [@toggle]="toolbarState" *ngIf="toolbarState" class="row no-overflow">
|
<div [@toggle]="toolbarState" *ngIf="toolbarState" class="row no-overflow">
|
||||||
<taskana-filter (performFilter)="filtering($event)"></taskana-filter>
|
<taskana-filter (performFilter)="filtering($event)"></taskana-filter>
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ import { SortComponent } from 'app/shared/sort/sort.component';
|
||||||
import { FilterComponent } from 'app/shared/filter/filter.component';
|
import { FilterComponent } from 'app/shared/filter/filter.component';
|
||||||
import { IconTypeComponent } from 'app/shared/type-icon/icon-type.component';
|
import { IconTypeComponent } from 'app/shared/type-icon/icon-type.component';
|
||||||
import { WorkbasketListToolbarComponent } from './workbasket-list-toolbar.component';
|
import { WorkbasketListToolbarComponent } from './workbasket-list-toolbar.component';
|
||||||
|
import { ImportExportComponent } from 'app/shared/import-export/import-export.component';
|
||||||
|
|
||||||
import { MapValuesPipe } from 'app/pipes/mapValues/map-values.pipe';
|
import { MapValuesPipe } from 'app/pipes/mapValues/map-values.pipe';
|
||||||
|
|
||||||
|
|
@ -25,10 +26,9 @@ import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
|
||||||
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
|
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
|
||||||
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
|
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
|
||||||
import { AlertService } from 'app/services/alert/alert.service';
|
import { AlertService } from 'app/services/alert/alert.service';
|
||||||
import {ImportExportComponent} from '../../../../import-export/import-export.component';
|
import { ClassificationService } from 'app/services/classification/classification.service';
|
||||||
import {ClassificationService} from '../../../../../services/classification/classification.service';
|
import { WorkbasketDefinitionService } from 'app/services/workbasket/workbasketDefinition.service';
|
||||||
import {WorkbasketDefinitionService} from '../../../../../services/workbasket/workbasketDefinition.service';
|
import { DomainService } from 'app/services/domains/domain.service';
|
||||||
import {DomainService} from '../../../../../services/domains/domain.service';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'taskana-dummy-detail',
|
selector: 'taskana-dummy-detail',
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import {ErrorModalService} from 'app/services/errorModal/error-modal.service';
|
||||||
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
|
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
|
||||||
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
|
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
|
||||||
import { AlertService } from 'app/services/alert/alert.service';
|
import { AlertService } from 'app/services/alert/alert.service';
|
||||||
import {SelectionToImport} from '../../../../enums/SelectionToImport';
|
import { ImportType } from 'app/models/import-type';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'taskana-workbasket-list-toolbar',
|
selector: 'taskana-workbasket-list-toolbar',
|
||||||
|
|
@ -39,11 +39,11 @@ export class WorkbasketListToolbarComponent implements OnInit {
|
||||||
|
|
||||||
@Input() workbaskets: Array<WorkbasketSummary>;
|
@Input() workbaskets: Array<WorkbasketSummary>;
|
||||||
@Input() workbasketIdSelected: string;
|
@Input() workbasketIdSelected: string;
|
||||||
@Input() workbasketIdSelectedChanged: string;
|
@Output() workbasketIdSelectedChanged: string;
|
||||||
@Output() performSorting = new EventEmitter<SortingModel>();
|
@Output() performSorting = new EventEmitter<SortingModel>();
|
||||||
@Output() performFilter = new EventEmitter<FilterModel>();
|
@Output() performFilter = new EventEmitter<FilterModel>();
|
||||||
workbasketServiceSubscription: Subscription;
|
workbasketServiceSubscription: Subscription;
|
||||||
selectionToImport = SelectionToImport.WORKBASKETS;
|
selectionToImport = ImportType.WORKBASKETS;
|
||||||
toolbarState = false;
|
toolbarState = false;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
|
@ -66,6 +66,7 @@ export class WorkbasketListToolbarComponent implements OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
addWorkbasket() {
|
addWorkbasket() {
|
||||||
|
this.workbasketIdSelected = undefined;
|
||||||
this.router.navigate([{ outlets: { detail: ['new-workbasket'] } }], { relativeTo: this.route });
|
this.router.navigate([{ outlets: { detail: ['new-workbasket'] } }], { relativeTo: this.route });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -85,6 +86,7 @@ export class WorkbasketListToolbarComponent implements OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
copyWorkbasket() {
|
copyWorkbasket() {
|
||||||
|
this.workbasketIdSelected = undefined;
|
||||||
this.router.navigate([{ outlets: { detail: ['copy-workbasket'] } }], { relativeTo: this.route });
|
this.router.navigate([{ outlets: { detail: ['copy-workbasket'] } }], { relativeTo: this.route });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,9 @@
|
||||||
<taskana-spinner [isRunning]="requestInProgress" class="centered-horizontally"></taskana-spinner>
|
<taskana-spinner [isRunning]="requestInProgress" class="centered-horizontally"></taskana-spinner>
|
||||||
<div>
|
<div>
|
||||||
<ul #wbList id="wb-list-container" class="list-group">
|
<ul #wbList id="wb-list-container" class="list-group">
|
||||||
|
<li class="list-group-item no-border">
|
||||||
|
<div class="row"></div>
|
||||||
|
</li>
|
||||||
<li class="list-group-item" *ngFor="let workbasket of workbaskets" [class.active]="workbasket.workbasketId == selectedId"
|
<li class="list-group-item" *ngFor="let workbasket of workbaskets" [class.active]="workbasket.workbasketId == selectedId"
|
||||||
type="text" (click)="selectWorkbasket(workbasket.workbasketId)">
|
type="text" (click)="selectWorkbasket(workbasket.workbasketId)">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
|
||||||
|
|
@ -34,3 +34,7 @@ li > div.row > dl {
|
||||||
li > div.row > dl:first-child {
|
li > div.row > dl:first-child {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.no-border {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,13 +24,13 @@ import { WorkbasketListToolbarComponent } from './workbasket-list-toolbar/workba
|
||||||
import { IconTypeComponent } from 'app/shared/type-icon/icon-type.component';
|
import { IconTypeComponent } from 'app/shared/type-icon/icon-type.component';
|
||||||
import { SpinnerComponent } from 'app/shared/spinner/spinner.component';
|
import { SpinnerComponent } from 'app/shared/spinner/spinner.component';
|
||||||
import { SortComponent } from 'app/shared/sort/sort.component';
|
import { SortComponent } from 'app/shared/sort/sort.component';
|
||||||
import { ImportExportComponent } from '../../../import-export/import-export.component';
|
import { ImportExportComponent } from 'app/shared/import-export/import-export.component';
|
||||||
|
|
||||||
import { RemoveNoneTypePipe } from 'app/pipes/removeNoneType/remove-none-type.pipe';
|
import { RemoveNoneTypePipe } from 'app/pipes/removeNoneType/remove-none-type.pipe';
|
||||||
import { MapValuesPipe } from 'app/pipes/mapValues/map-values.pipe';
|
import { MapValuesPipe } from 'app/pipes/mapValues/map-values.pipe';
|
||||||
import { ClassificationService } from '../../../../services/classification/classification.service';
|
import { WorkbasketDefinitionService } from 'app/services/workbasket/workbasketDefinition.service';
|
||||||
import { WorkbasketDefinitionService } from '../../../../services/workbasket/workbasketDefinition.service';
|
import { ClassificationService } from 'app/services/classification/classification.service';
|
||||||
import { DomainService } from '../../../../services/domains/domain.service';
|
import { DomainService } from 'app/services/domains/domain.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'taskana-dummy-detail',
|
selector: 'taskana-dummy-detail',
|
||||||
|
|
@ -91,7 +91,7 @@ describe('WorkbasketListComponent', () => {
|
||||||
RouterTestingModule.withRoutes(routes)
|
RouterTestingModule.withRoutes(routes)
|
||||||
],
|
],
|
||||||
providers: [WorkbasketService, ErrorModalService, RequestInProgressService, AlertService,
|
providers: [WorkbasketService, ErrorModalService, RequestInProgressService, AlertService,
|
||||||
ClassificationService, WorkbasketDefinitionService, OrientationService, DomainService]
|
WorkbasketDefinitionService, OrientationService, DomainService, ClassificationService]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
|
||||||
|
|
@ -131,24 +131,24 @@ describe('WorkbasketListComponent', () => {
|
||||||
expect(debugElement.querySelector('#wb-list-container')).toBeDefined();
|
expect(debugElement.querySelector('#wb-list-container')).toBeDefined();
|
||||||
expect(debugElement.querySelector('#collapsedMenufilterWb')).toBeDefined();
|
expect(debugElement.querySelector('#collapsedMenufilterWb')).toBeDefined();
|
||||||
expect(debugElement.querySelector('taskana-filter')).toBeDefined();
|
expect(debugElement.querySelector('taskana-filter')).toBeDefined();
|
||||||
expect(debugElement.querySelectorAll('#wb-list-container > li').length).toBe(2);
|
expect(debugElement.querySelectorAll('#wb-list-container > li').length).toBe(3);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have two workbasketsummary rows created with the second one selected.', fakeAsync(() => {
|
it('should have two workbasketsummary rows created with the second one selected.', fakeAsync(() => {
|
||||||
tick(0);
|
tick(0);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
fixture.whenStable().then(() => {
|
fixture.whenStable().then(() => {
|
||||||
expect(debugElement.querySelectorAll('#wb-list-container > li').length).toBe(2);
|
expect(debugElement.querySelectorAll('#wb-list-container > li').length).toBe(3);
|
||||||
expect(debugElement.querySelectorAll('#wb-list-container > li')[0].getAttribute('class')).toBe('list-group-item');
|
expect(debugElement.querySelectorAll('#wb-list-container > li')[1].getAttribute('class')).toBe('list-group-item');
|
||||||
expect(debugElement.querySelectorAll('#wb-list-container > li')[1].getAttribute('class')).toBe('list-group-item active');
|
expect(debugElement.querySelectorAll('#wb-list-container > li')[2].getAttribute('class')).toBe('list-group-item active');
|
||||||
})
|
})
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should have two workbasketsummary rows created with two different icons: user and users', () => {
|
it('should have two workbasketsummary rows created with two different icons: user and users', () => {
|
||||||
expect(debugElement.querySelectorAll('#wb-list-container > li')[0]
|
|
||||||
.querySelector('svg-icon').getAttribute('ng-reflect-src')).toBe('./assets/icons/user.svg');
|
|
||||||
expect(debugElement.querySelectorAll('#wb-list-container > li')[1]
|
expect(debugElement.querySelectorAll('#wb-list-container > li')[1]
|
||||||
|
.querySelector('svg-icon').getAttribute('ng-reflect-src')).toBe('./assets/icons/user.svg');
|
||||||
|
expect(debugElement.querySelectorAll('#wb-list-container > li')[2]
|
||||||
.querySelector('svg-icon').getAttribute('ng-reflect-src')).toBe('./assets/icons/users.svg');
|
.querySelector('svg-icon').getAttribute('ng-reflect-src')).toBe('./assets/icons/users.svg');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import {
|
import {
|
||||||
Component, OnInit, EventEmitter, OnDestroy,
|
Component, OnInit, EventEmitter, OnDestroy,
|
||||||
HostListener, ViewChild, ElementRef, AfterViewChecked
|
HostListener, ViewChild, ElementRef, AfterViewChecked, ChangeDetectorRef
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
import { Router, ActivatedRoute } from '@angular/router';
|
import { Router, ActivatedRoute } from '@angular/router';
|
||||||
import { Subscription } from 'rxjs/Subscription';
|
import { Subscription } from 'rxjs/Subscription';
|
||||||
|
|
@ -40,7 +40,8 @@ export class WorkbasketListComponent implements OnInit, OnDestroy {
|
||||||
private workbasketService: WorkbasketService,
|
private workbasketService: WorkbasketService,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
private orientationService: OrientationService) { }
|
private orientationService: OrientationService,
|
||||||
|
private cd: ChangeDetectorRef) { }
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.requestInProgress = true;
|
this.requestInProgress = true;
|
||||||
|
|
@ -59,10 +60,6 @@ export class WorkbasketListComponent implements OnInit, OnDestroy {
|
||||||
|
|
||||||
selectWorkbasket(id: string) {
|
selectWorkbasket(id: string) {
|
||||||
this.selectedId = id;
|
this.selectedId = id;
|
||||||
if (!this.selectedId) {
|
|
||||||
this.router.navigate(['/workbaskets']);
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.router.navigate([{ outlets: { detail: [this.selectedId] } }], { relativeTo: this.route });
|
this.router.navigate([{ outlets: { detail: [this.selectedId] } }], { relativeTo: this.route });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -84,7 +81,7 @@ export class WorkbasketListComponent implements OnInit, OnDestroy {
|
||||||
private refreshWorkbasketList() {
|
private refreshWorkbasketList() {
|
||||||
const toolbarSize = this.toolbarElement.nativeElement.offsetHeight;
|
const toolbarSize = this.toolbarElement.nativeElement.offsetHeight;
|
||||||
const cardHeight = 75;
|
const cardHeight = 75;
|
||||||
const unusedHeight = 140
|
const unusedHeight = 145
|
||||||
const totalHeight = window.innerHeight;
|
const totalHeight = window.innerHeight;
|
||||||
const cards = Math.round((totalHeight - (unusedHeight + toolbarSize)) / cardHeight);
|
const cards = Math.round((totalHeight - (unusedHeight + toolbarSize)) / cardHeight);
|
||||||
this.workbasketService.pageSize = cards;
|
this.workbasketService.pageSize = cards;
|
||||||
|
|
@ -102,17 +99,9 @@ export class WorkbasketListComponent implements OnInit, OnDestroy {
|
||||||
this.workbasketsResource = resultList;
|
this.workbasketsResource = resultList;
|
||||||
this.workbaskets = resultList._embedded ? resultList._embedded.workbaskets : [];
|
this.workbaskets = resultList._embedded ? resultList._embedded.workbaskets : [];
|
||||||
this.requestInProgress = false;
|
this.requestInProgress = false;
|
||||||
this.unSelectWorkbasket();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private unSelectWorkbasket(): void {
|
|
||||||
if (!this.workbaskets.find(wb => wb.workbasketId === this.selectedId)) {
|
|
||||||
this.selectWorkbasket(undefined);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
if (this.workBasketSummarySubscription) { this.workBasketSummarySubscription.unsubscribe(); }
|
if (this.workBasketSummarySubscription) { this.workBasketSummarySubscription.unsubscribe(); }
|
||||||
if (this.workbasketServiceSubscription) { this.workbasketServiceSubscription.unsubscribe(); }
|
if (this.workbasketServiceSubscription) { this.workbasketServiceSubscription.unsubscribe(); }
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ import {SortComponent} from './shared/sort/sort.component';
|
||||||
import {GeneralMessageModalComponent} from './shared/general-message-modal/general-message-modal.component';
|
import {GeneralMessageModalComponent} from './shared/general-message-modal/general-message-modal.component';
|
||||||
import {PaginationComponent} from './administration/workbasket/master/list/pagination/pagination.component';
|
import {PaginationComponent} from './administration/workbasket/master/list/pagination/pagination.component';
|
||||||
import {ClassificationListComponent} from './administration/classification/master/list/classification-list.component';
|
import {ClassificationListComponent} from './administration/classification/master/list/classification-list.component';
|
||||||
import {ImportExportComponent} from './administration/import-export/import-export.component';
|
import {ImportExportComponent} from './shared/import-export/import-export.component';
|
||||||
// Shared
|
// Shared
|
||||||
import {MasterAndDetailComponent} from './shared/masterAndDetail/master-and-detail.component';
|
import {MasterAndDetailComponent} from './shared/masterAndDetail/master-and-detail.component';
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
export enum SelectionToImport {
|
export enum ImportType {
|
||||||
WORKBASKETS,
|
WORKBASKETS,
|
||||||
CLASSIFICATIONS
|
CLASSIFICATIONS
|
||||||
}
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ export class Links {
|
||||||
constructor(
|
constructor(
|
||||||
public self: { 'href': string } = undefined,
|
public self: { 'href': string } = undefined,
|
||||||
public distributionTargets: { 'href': string } = undefined,
|
public distributionTargets: { 'href': string } = undefined,
|
||||||
public accessItems: { 'href': string } = undefined
|
public accessItems: { 'href': string } = undefined,
|
||||||
|
public allWorkbasketUrl: { 'href': string } = undefined
|
||||||
) { }
|
) { }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,8 +77,8 @@ export class WorkbasketService {
|
||||||
|
|
||||||
}
|
}
|
||||||
// GET
|
// GET
|
||||||
getWorkBasket(url: string): Observable<Workbasket> {
|
getWorkBasket(id: string): Observable<Workbasket> {
|
||||||
return this.httpClient.get<Workbasket>(url, this.httpOptions);
|
return this.httpClient.get<Workbasket>(`${environment.taskanaRestUrl}/v1/workbaskets/${id}`, this.httpOptions);
|
||||||
}
|
}
|
||||||
// POST
|
// POST
|
||||||
createWorkbasket(url: string, workbasket: Workbasket): Observable<Workbasket> {
|
createWorkbasket(url: string, workbasket: Workbasket): Observable<Workbasket> {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
<input #selectedFile type="file" (change)="onSelectFile($event)" class="hide" />
|
||||||
|
<button class="btn btn-default glyphicon glyphicon-upload" type="button" title="Import" (click)="selectedFile.click()"></button>
|
||||||
|
|
||||||
|
<div class="dropdown" style="display: inline">
|
||||||
|
<button type="button" title="Export" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true"
|
||||||
|
aria-expanded="true" (click)="updateDomains()">
|
||||||
|
<span class="glyphicon glyphicon-download"></span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" (click)="export()">
|
||||||
|
<label>All Domains</label>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<div role="separator" class="divider"></div>
|
||||||
|
<li *ngFor="let domain of domains">
|
||||||
|
<a class="dropdown-item" (click)="export(domain)">
|
||||||
|
<label>{{domain === '' ? 'Master' : domain}}</label>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
@ -33,15 +33,4 @@ describe('ImportExportComponent', () => {
|
||||||
expect(component).toBeTruthy();
|
expect(component).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO add tests for inport/export
|
|
||||||
/*
|
|
||||||
it('should update domains', () => {
|
|
||||||
let domains = [];
|
|
||||||
domainService.getDomains().subscribe(
|
|
||||||
result => domains = result
|
|
||||||
);
|
|
||||||
component.updateDomains();
|
|
||||||
expect(component.domains).toEqual(domains);
|
|
||||||
})
|
|
||||||
*/
|
|
||||||
});
|
});
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { Component, Input, OnInit } from '@angular/core';
|
import { Component, Input, OnInit } from '@angular/core';
|
||||||
import { ClassificationService } from 'app/services/classification/classification.service';
|
import { ClassificationService } from 'app/services/classification/classification.service';
|
||||||
import { WorkbasketDefinitionService } from 'app/services/workbasket/workbasketDefinition.service';
|
import { WorkbasketDefinitionService } from 'app/services/workbasket/workbasketDefinition.service';
|
||||||
import {DomainService} from '../../services/domains/domain.service';
|
import { DomainService } from 'app/services/domains/domain.service';
|
||||||
import {SelectionToImport} from '../enums/SelectionToImport';
|
import { ImportType } from 'app/models/import-type';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'taskana-import-export-component',
|
selector: 'taskana-import-export-component',
|
||||||
|
|
@ -11,7 +11,7 @@ import {SelectionToImport} from '../enums/SelectionToImport';
|
||||||
})
|
})
|
||||||
export class ImportExportComponent implements OnInit {
|
export class ImportExportComponent implements OnInit {
|
||||||
|
|
||||||
@Input() currentSelection: SelectionToImport;
|
@Input() currentSelection: ImportType;
|
||||||
domains: string[] = [];
|
domains: string[] = [];
|
||||||
|
|
||||||
constructor(private domainService: DomainService, private workbasketDefinitionService: WorkbasketDefinitionService,
|
constructor(private domainService: DomainService, private workbasketDefinitionService: WorkbasketDefinitionService,
|
||||||
|
|
@ -30,7 +30,7 @@ export class ImportExportComponent implements OnInit {
|
||||||
onSelectFile(event) {
|
onSelectFile(event) {
|
||||||
const file = event.srcElement.files[0];
|
const file = event.srcElement.files[0];
|
||||||
const reader = new FileReader();
|
const reader = new FileReader();
|
||||||
if (this.currentSelection === SelectionToImport.WORKBASKETS) {
|
if (this.currentSelection === ImportType.WORKBASKETS) {
|
||||||
reader.onload = <Event>(e) => this.workbasketDefinitionService.importWorkbasketDefinitions(e.target.result);
|
reader.onload = <Event>(e) => this.workbasketDefinitionService.importWorkbasketDefinitions(e.target.result);
|
||||||
} else {
|
} else {
|
||||||
reader.onload = <Event>(e) => this.classificationService.importClassifications(e.target.result);
|
reader.onload = <Event>(e) => this.classificationService.importClassifications(e.target.result);
|
||||||
|
|
@ -39,7 +39,7 @@ export class ImportExportComponent implements OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
export(domain = '') {
|
export(domain = '') {
|
||||||
if (this.currentSelection === SelectionToImport.WORKBASKETS) {
|
if (this.currentSelection === ImportType.WORKBASKETS) {
|
||||||
this.workbasketDefinitionService.exportWorkbaskets(domain);
|
this.workbasketDefinitionService.exportWorkbaskets(domain);
|
||||||
} else {
|
} else {
|
||||||
this.classificationService.exportClassifications(domain);
|
this.classificationService.exportClassifications(domain);
|
||||||
|
|
@ -230,6 +230,11 @@
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar-inverse {
|
||||||
|
box-shadow: 0px 1px 10px -1px rgb(51, 93, 125);
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
taskana-workbasket-information, taskana-workbasket-access-items, taskana-workbaskets-distribution-targets {
|
taskana-workbasket-information, taskana-workbasket-access-items, taskana-workbaskets-distribution-targets {
|
||||||
&> .panel{
|
&> .panel{
|
||||||
border: none;
|
border: none;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue