diff --git a/admin/.angular-cli.json b/admin/.angular-cli.json
index 8142d9edb..b1b0e4625 100644
--- a/admin/.angular-cli.json
+++ b/admin/.angular-cli.json
@@ -20,7 +20,8 @@
"prefix": "app",
"styles": [
"../node_modules/bootstrap-sass/assets/stylesheets/_bootstrap.scss",
- "./assets/_site.scss"
+ "./assets/_site.scss",
+ "./assets/_forms.scss"
],
"scripts": ["../node_modules/jquery/dist/jquery.min.js","../node_modules/bootstrap/dist/js/bootstrap.min.js"],
"environmentSource": "environments/environment.ts",
diff --git a/admin/src/app/app.module.ts b/admin/src/app/app.module.ts
index f11334366..8578aad20 100644
--- a/admin/src/app/app.module.ts
+++ b/admin/src/app/app.module.ts
@@ -3,7 +3,7 @@
*/
import { BrowserModule } from '@angular/platform-browser';
import { NgModule, } from '@angular/core';
-import { FormsModule } from '@angular/forms';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module';
import { AlertModule } from 'ngx-bootstrap';
@@ -61,7 +61,8 @@ const MODULES = [
AlertModule.forRoot(),
AngularSvgIconModule,
HttpClientModule,
- BrowserAnimationsModule
+ BrowserAnimationsModule,
+ ReactiveFormsModule
];
const DECLARATIONS = [
diff --git a/admin/src/app/workbasket/details/access-items/access-items.component.html b/admin/src/app/workbasket/details/access-items/access-items.component.html
index 9b2294cc0..85758f04f 100644
--- a/admin/src/app/workbasket/details/access-items/access-items.component.html
+++ b/admin/src/app/workbasket/details/access-items/access-items.component.html
@@ -3,108 +3,112 @@
\ No newline at end of file
diff --git a/admin/src/app/workbasket/details/access-items/access-items.component.scss b/admin/src/app/workbasket/details/access-items/access-items.component.scss
index 9e1f1888b..333bcdc1f 100644
--- a/admin/src/app/workbasket/details/access-items/access-items.component.scss
+++ b/admin/src/app/workbasket/details/access-items/access-items.component.scss
@@ -5,7 +5,7 @@ td > input[type="checkbox"] {
overflow-x: auto;
}
.text-width{
- min-width: 150px;
+ min-width: 180px;
}
.required-header:after {
content:" *";
diff --git a/admin/src/app/workbasket/details/access-items/access-items.component.spec.ts b/admin/src/app/workbasket/details/access-items/access-items.component.spec.ts
index dc0ddd0ab..ee36fed1d 100644
--- a/admin/src/app/workbasket/details/access-items/access-items.component.spec.ts
+++ b/admin/src/app/workbasket/details/access-items/access-items.component.spec.ts
@@ -1,12 +1,12 @@
import { async, ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing';
import { WorkbasketService } from '../../../services/workbasket.service';
-import { FormsModule } from '@angular/forms';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { AngularSvgIconModule } from 'angular-svg-icon';
import { HttpClientModule } from '@angular/common/http';
import { HttpModule, JsonpModule } from '@angular/http';
import { Workbasket } from 'app/model/workbasket';
import { SpinnerComponent } from '../../../shared/spinner/spinner.component';
-import { AlertService, AlertModel , AlertType } from '../../../services/alert.service';
+import { AlertService, AlertModel, AlertType } from '../../../services/alert.service';
import { GeneralMessageModalComponent } from '../../../shared/general-message-modal/general-message-modal.component';
import { Links } from '../../../model/links';
import { Observable } from 'rxjs/Observable';
@@ -21,7 +21,7 @@ describe('AccessItemsComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [SpinnerComponent, AccessItemsComponent, GeneralMessageModalComponent],
- imports: [FormsModule, AngularSvgIconModule, HttpClientModule, HttpModule],
+ imports: [FormsModule, AngularSvgIconModule, HttpClientModule, HttpModule, ReactiveFormsModule],
providers: [WorkbasketService, AlertService]
})
@@ -34,11 +34,11 @@ describe('AccessItemsComponent', () => {
component.workbasket = new Workbasket('1')
workbasketService = TestBed.get(WorkbasketService);
alertService = TestBed.get(AlertService);
- spyOn(workbasketService, 'getWorkBasketAccessItems').and.returnValue(Observable.of(new Array(new WorkbasketAccessItems('id1', '1', 'accessID1', false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, new Array(new Links('setWorkbasketAccessItems',''))),
- new WorkbasketAccessItems('id2', '1', 'accessID2'))));
+ spyOn(workbasketService, 'getWorkBasketAccessItems').and.returnValue(Observable.of(new Array(new WorkbasketAccessItems('id1', '1', 'accessID1', false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, new Array(new Links('setWorkbasketAccessItems', ''))),
+ new WorkbasketAccessItems('id2', '1', 'accessID2'))));
spyOn(workbasketService, 'updateWorkBasketAccessItem').and.returnValue(Observable.of(true)),
- spyOn(alertService, 'triggerAlert').and.returnValue(Observable.of(true)),
- debugElement = fixture.debugElement.nativeElement;
+ spyOn(alertService, 'triggerAlert').and.returnValue(Observable.of(true)),
+ debugElement = fixture.debugElement.nativeElement;
fixture.detectChanges();
});
@@ -65,18 +65,21 @@ describe('AccessItemsComponent', () => {
expect(debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelectorAll('td')[5].getAttribute('class')).toBeNull();
debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelectorAll('td')[5].querySelector('input').click();
fixture.detectChanges();
- component
- expect(debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelectorAll('td')[5].getAttribute('class')).toBe('has-changes');
+ fixture.whenStable().then(() => {
+ expect(debugElement.querySelectorAll('#table-access-items > tbody > tr')[0].querySelectorAll('td')[5].getAttribute('class')).toBe('has-changes');
+ });
+
});
it('should undo changes if undo changes button is clicked', () => {
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].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();
+ fixture.whenStable().then(() => {
+ 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', () => {
@@ -86,16 +89,6 @@ describe('AccessItemsComponent', () => {
expect(debugElement.querySelectorAll('#table-access-items > tbody > tr').length).toBe(1);
});
- it('should validate access-items before saving', () => {
- debugElement.querySelector('#button-add-access-item').click();
- fixture.detectChanges();
- expect(component.onSave()).toBeUndefined();
- component.accessItems[2].accessId = 'someText';
- component.onSave();
- expect(workbasketService.updateWorkBasketAccessItem).toHaveBeenCalled();
- });
-
-
it('should show alert successfull after saving', () => {
component.onSave();
expect(alertService.triggerAlert).toHaveBeenCalledWith(new AlertModel(AlertType.SUCCESS, `Workbasket ${component.workbasket.key} Access items were saved successfully`));
diff --git a/admin/src/app/workbasket/details/access-items/access-items.component.ts b/admin/src/app/workbasket/details/access-items/access-items.component.ts
index 00e5b0a2f..a28a233b3 100644
--- a/admin/src/app/workbasket/details/access-items/access-items.component.ts
+++ b/admin/src/app/workbasket/details/access-items/access-items.component.ts
@@ -35,8 +35,8 @@ export class AccessItemsComponent implements OnInit {
ngOnInit() {
this.accessItemsubscription = this.workbasketService.getWorkBasketAccessItems(this.workbasket.workbasketId).subscribe( (accessItems: Array) =>{
this.accessItems = accessItems;
- this.accessItemsClone = this.cloneaccessItems(this.accessItems);
- this.accessItemsResetClone = this.cloneaccessItems(this.accessItems);
+ this.accessItemsClone = this.cloneAccessItems(this.accessItems);
+ this.accessItemsResetClone = this.cloneAccessItems(this.accessItems);
})
}
@@ -47,8 +47,9 @@ export class AccessItemsComponent implements OnInit {
}
clear() {
- this.accessItems = this.cloneaccessItems(this.accessItemsResetClone);
- this.accessItemsClone = this.cloneaccessItems(this.accessItemsResetClone);
+ this.alertService.triggerAlert(new AlertModel(AlertType.INFO, 'Reset edited fields'))
+ this.accessItems = this.cloneAccessItems(this.accessItemsResetClone);
+ this.accessItemsClone = this.cloneAccessItems(this.accessItemsResetClone);
}
remove(index: number) {
@@ -57,17 +58,14 @@ export class AccessItemsComponent implements OnInit {
}
onSave(): boolean {
- if(this.validateAccessItems()){
- return;
- }
if(!this.accessItems[0].links){
return;
}
this.workbasketService.updateWorkBasketAccessItem(Utils.getTagLinkRef(this.accessItems[0].links, 'setWorkbasketAccessItems').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.key} Access items were saved successfully`));
+ 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`));
return true;
},
error => {
@@ -76,25 +74,14 @@ export class AccessItemsComponent implements OnInit {
})
}
- private validateAccessItems(): boolean {
- return this.accessItems.some(element => {
- if(!element.accessId || element.accessId === '') {
- this.showValidationError();
- return true;
- }
- });
- }
+ setValue() { debugger; }
- private showValidationError() {
- this.alertService.triggerAlert(new AlertModel(AlertType.DANGER, "AccessId must not be empty", false));
- }
-
- private cloneaccessItems(inputAuthorization): Array{
- let authorizationClone = new Array();
- inputAuthorization.forEach(authorization => {
- authorizationClone.push({... authorization});
+ private cloneAccessItems(inputaccessItem): Array{
+ let accessItemClone = new Array();
+ inputaccessItem.forEach(accessItem => {
+ accessItemClone.push({... accessItem});
});
- return authorizationClone;
+ return accessItemClone;
}
private ngOnDestroy(): void {
diff --git a/admin/src/app/workbasket/details/information/workbasket-information.component.html b/admin/src/app/workbasket/details/information/workbasket-information.component.html
index ae4d7bea8..e4b334717 100644
--- a/admin/src/app/workbasket/details/information/workbasket-information.component.html
+++ b/admin/src/app/workbasket/details/information/workbasket-information.component.html
@@ -1,87 +1,103 @@
-
-
-