Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.frontend into SI-566-config-detail
Signed-off-by: Peter Buschmann <peter.buschmann@pta.de>
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
index 7b1cf09..504a3cb 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
@@ -149,7 +149,7 @@
<label header>{{ 'GridFailure.GridFailureInformation' | translate }}</label>
<div class="expandable-content" body>
<!-- failureClassification -->
- <div class="form-group row">
+ <div *ngIf="determineDetailFieldVisibility('failureClassification')" class="form-group row">
<label for="failureClassification" class="col-sm-2 col-form-label">{{ 'GridFailure.FailureClassification' | translate }}</label>
<div class="col-sm-4">
<select type="text" class="form-control" [ngrxFormControlState]="formState.controls['failureClassificationId']">
@@ -236,7 +236,7 @@
<label header>{{ 'GridFailure.GridFailureIDetails' | translate }}</label>
<div class="expandable-content" body>
<!-- responsibility -->
- <div class="form-group row">
+ <div *ngIf="determineDetailFieldVisibility('responsibility')" class="form-group row">
<label for="responsibility" class="col-sm-2 col-form-label">{{ 'GridFailure.Responsibility' | translate }}</label>
<div class="col-sm-4">
<input
@@ -354,7 +354,7 @@
</div>
<!-- description -->
- <div class="form-group row">
+ <div *ngIf="determineDetailFieldVisibility('description')" class="form-group row">
<label for="description" class="col-sm-2 col-form-label">{{ 'GridFailure.Description' | translate }}</label>
<div class="col-sm-4">
<input
@@ -369,7 +369,7 @@
</div>
<!-- internalRemark -->
- <div class="form-group row">
+ <div *ngIf="determineDetailFieldVisibility('internalRemark')" class="form-group row">
<label for="internalRemark" class="col-sm-2 col-form-label">{{ 'GridFailure.InternalRemark' | translate }}</label>
<div class="col-sm-4">
<input
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
index 7d2765a..32808e9 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
@@ -406,10 +406,26 @@
component.setLocationRegionToMap();
expect(spy).toHaveBeenCalled();
});
+
it('should not call setViewStateForReqProps() after setLocationRegionToMap() with same failureLocationView', () => {
component.failureLocationView = Globals.FAILURE_LOCATION_MAP;
const spy = spyOn(component, 'setViewStateForReqProps').and.callThrough();
component.setLocationRegionToMap();
expect(spy).not.toHaveBeenCalled();
});
+
+ it('should return true for detailFieldVisibility in case no config is provided', () => {
+ component.visibilityConfiguration = null;
+ expect(component.determineDetailFieldVisibility('description')).toBeTruthy();
+ });
+
+ it('should return true for detailFieldVisibility if config provides "show" string for a specified form field', () => {
+ component.visibilityConfiguration = { fieldVisibility: { description: 'show' } as any } as any;
+ expect(component.determineDetailFieldVisibility('description')).toBeTruthy();
+ });
+
+ it('should return false for detailFieldVisibility if config does not provides "show" string for a specified form field', () => {
+ component.visibilityConfiguration = { fieldVisibility: { description: 'hide' } as any } as any;
+ expect(component.determineDetailFieldVisibility('description')).toBeFalsy();
+ });
});
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts
index cb67509..da6d6f8 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts
@@ -26,6 +26,8 @@
import { take, skipWhile, takeUntil, find, map } from 'rxjs/operators';
import { unboxProperties } from '@grid-failure-information-app/shared/utility/form-utils';
import { unbox } from 'ngrx-forms';
+import { VisibilityConfigurationInterface } from '@grid-failure-information-app/shared/interfaces/visibility-configuration.interface';
+import { determineDetailFieldVisibility } from '@grid-failure-information-app/shared/utility';
@Component({
selector: 'app-grid-failure-details',
@@ -56,6 +58,7 @@
}
public stationsColumnDefinition: any = STATION_COLDEF;
public frameworkComponents: any;
+ public visibilityConfiguration: VisibilityConfigurationInterface;
private _subscription: Subscription;
private _modeEnum = ModeEnum;
@@ -70,7 +73,10 @@
this.gridFailureDetailsSandbox.registerEvents();
this._initialFailureLocationState();
this.appState$.select(store.getPreConfiguration).subscribe(preConfig => {
- this.mapOptions = new MapOptions(preConfig);
+ if (preConfig) {
+ this.mapOptions = new MapOptions(preConfig);
+ this.visibilityConfiguration = preConfig.visibilityConfiguration;
+ }
});
this.gridFailureDetailsSandbox.gridFailureDetailsFormState$.subscribe(formState => {
this.gridOptions.context = {
@@ -182,6 +188,10 @@
}
}
+ public determineDetailFieldVisibility(field: string): boolean {
+ return determineDetailFieldVisibility(this.visibilityConfiguration, 'fieldVisibility', field);
+ }
+
private _initialFailureLocationState() {
this.failureLocationView = Globals.FAILURE_LOCATION_NS;
this.setLocation();
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
index a507cfb..95bc44c 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
@@ -50,8 +50,6 @@
} from 'ngrx-forms';
import { combineLatest, Observable } from 'rxjs';
import { debounceTime, distinctUntilChanged, map, skipWhile, take, takeUntil, tap } from 'rxjs/operators';
-import { FailureStation, GridFailure } from '@grid-failure-information-app/shared/models';
-import { environment } from '@grid-failure-information-app/environments/environment';
import { StateEnum } from '@grid-failure-information-app/shared/constants/enums';
@Injectable()
@@ -134,7 +132,7 @@
public showCompleteButton: boolean = false;
public showDeleteButton: boolean = false;
public gridFailureAddress: models.FailureAddress;
- public gridFailureStations: FailureStation[] = [];
+ public gridFailureStations: models.FailureStation[] = [];
public gridFailureDistributionGroups$: Observable<models.DistributionGroup[]> = this.appState$.select(store.getGridFailureDistributionGroupsData);
public gridFailureDistributionGroupsLoading$: Observable<boolean> = this.appState$.select(store.getGridFailureDistributionGroupsLoading);
@@ -144,13 +142,14 @@
public disablePublishButton: boolean;
public oldVersion = false;
public selectedPublicationChannels: Array<string>;
+ public branches: models.FailureBranch[];
+ public branch: models.FailureBranch;
private _gridFailureId: string;
private _selectedStation: models.FailureStation;
private _stations: Array<models.FailureStation> = new Array<models.FailureStation>();
private _assignedDistributionGroups: Array<models.DistributionGroup>;
- public branches: models.FailureBranch[];
- public branch: models.FailureBranch;
+
constructor(
protected appState$: Store<store.State>,
protected actionsSubject: ActionsSubject,
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.spec.ts
index 2584a18..8fb8236 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.spec.ts
@@ -28,6 +28,7 @@
let appState$: any;
let _gridApi: any;
let filterInstance: any;
+ let preConfig$: any;
beforeEach(() => {
router = { navigate() {} } as any;
@@ -48,6 +49,7 @@
displayNotification() {},
} as any;
appState$ = { dispatch: () => {}, pipe: () => of(true), select: () => of(true) } as any;
+ preConfig$ = of({ visibilityConfiguration: { fieldVisibility: {} } });
subscription = { unsubscribe() {} } as any;
_gridApi = { onFilterChanged() {}, setFilterModel(model: any) {} } as any;
component = new GridFailureListComponent(sandbox, appState$, router, utilService);
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.ts
index 6b9c3f0..d42744b 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.ts
@@ -38,8 +38,8 @@
export class GridFailureListComponent extends BaseList implements OnInit, OnDestroy {
public Globals = Globals;
public RolesEnum = RolesEnum;
- public overviewColumnDefinition: any = GRID_FAILURE_COLDEF;
- public condensationColumnDefinition: any = GRID_FAILURE_FOR_CONDENSATION_COLDEF;
+ public overviewColumnDefinition: any;
+ public condensationColumnDefinition: any;
public mapOptions: MapOptions = new MapOptions();
public frameworkComponents: any;
public view: any = 'list';
@@ -53,6 +53,7 @@
suppressLoadingOverlay: true,
localeText: Globals.LOCALE_TEXT,
};
+ public preConfig$ = this.appState$.select(store.getPreConfiguration);
private _gridApi: GridApi;
private _modeEnum = ModeEnum;
@@ -61,6 +62,19 @@
constructor(public sandbox: GridFailureSandbox, private appState$: Store<store.State>, private _router: Router, private _utilService: UtilService) {
super();
this.frameworkComponents = { setFilterComponent: SetFilterComponent, headerCellRendererComponent: HeaderCellRendererComponent };
+
+ this.preConfig$.pipe(takeUntil(this._endSubscriptions$)).subscribe(config => {
+ if (config && config.visibilityConfiguration) {
+ GRID_FAILURE_COLDEF.forEach((column: any) => {
+ column['hide'] = config.visibilityConfiguration.fieldVisibility[column['field']] === 'hide';
+ });
+ this.overviewColumnDefinition = GRID_FAILURE_COLDEF;
+ GRID_FAILURE_FOR_CONDENSATION_COLDEF.forEach((column: any) => {
+ column['hide'] = config.visibilityConfiguration.fieldVisibility[column['field']] === 'hide';
+ });
+ this.condensationColumnDefinition = GRID_FAILURE_FOR_CONDENSATION_COLDEF;
+ }
+ });
}
ngOnInit(): void {
diff --git a/projects/grid-failure-information-app/src/app/shared/directives/agGrid/translate-column-definitions.directive.ts b/projects/grid-failure-information-app/src/app/shared/directives/agGrid/translate-column-definitions.directive.ts
index b9dad8b..ec05e2e 100644
--- a/projects/grid-failure-information-app/src/app/shared/directives/agGrid/translate-column-definitions.directive.ts
+++ b/projects/grid-failure-information-app/src/app/shared/directives/agGrid/translate-column-definitions.directive.ts
@@ -42,11 +42,13 @@
}
private _getTranslatedColumnDefinitions(columnDefs: any): any {
- return columnDefs.map((columnDefinition: any) => {
- return {
- ...columnDefinition,
- headerName: this._translationService.instant(columnDefinition.headerName),
- };
- });
+ if (columnDefs) {
+ return columnDefs.map((columnDefinition: any) => {
+ return {
+ ...columnDefinition,
+ headerName: this._translationService.instant(columnDefinition.headerName),
+ };
+ });
+ }
}
}
diff --git a/projects/grid-failure-information-app/src/app/shared/interfaces/visibility-configuration.interface.ts b/projects/grid-failure-information-app/src/app/shared/interfaces/visibility-configuration.interface.ts
new file mode 100644
index 0000000..679e78d
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/interfaces/visibility-configuration.interface.ts
@@ -0,0 +1,55 @@
+/********************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ ********************************************************************************/
+export interface VisibilityConfigurationInterface {
+ fieldVisibility: {
+ description: string;
+ failureClassification: string;
+ internalRemark: string;
+ responsibility: string;
+ };
+ tableExternColumnVisibility: {
+ branch: string;
+ city: string;
+ description: string;
+ district: string;
+ expectedReasonText: string;
+ failureBegin: string;
+ failureClassification: string;
+ failureEndPlanned: string;
+ postcode: string;
+ street: string;
+ };
+ tableInternColumnVisibility: {
+ branch: string;
+ city: string;
+ description: string;
+ district: string;
+ expectedReasonText: string;
+ failureBegin: string;
+ failureClassification: string;
+ failureEndPlanned: string;
+ failureEndResupplied: string;
+ housenumber: string;
+ internalRemark: string;
+ postcode: string;
+ pressureLevel: string;
+ publicationStatus: string;
+ radius: string;
+ responsibility: string;
+ stationIds: string;
+ statusExtern: string;
+ statusIntern: string;
+ street: string;
+ voltageLevel: string;
+ };
+}
diff --git a/projects/grid-failure-information-app/src/app/shared/models/settings.model.ts b/projects/grid-failure-information-app/src/app/shared/models/settings.model.ts
index 87356d9..282dc18 100644
--- a/projects/grid-failure-information-app/src/app/shared/models/settings.model.ts
+++ b/projects/grid-failure-information-app/src/app/shared/models/settings.model.ts
@@ -10,12 +10,15 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
+import { VisibilityConfigurationInterface } from '@grid-failure-information-app/shared/interfaces/visibility-configuration.interface';
+
export class Settings {
public overviewMapInitialZoom: number = null;
public detailMapInitialZoom: number = null;
public exportChannels: string[] = [];
public overviewMapInitialLatitude: string = null;
public overviewMapInitialLongitude: string = null;
+ public visibilityConfiguration: VisibilityConfigurationInterface = null;
public constructor(data: any = null) {
Object.keys(data || {})
diff --git a/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.ts b/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.ts
index be0acda..534b7a1 100644
--- a/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.ts
+++ b/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.ts
@@ -15,6 +15,7 @@
import { DateTimeModel } from '@grid-failure-information-app/shared/models/date-time.model';
import { NgrxValueConverter, NgrxValueConverters } from 'ngrx-forms';
import { FailureHousenumber } from '@grid-failure-information-app/shared/models';
+import { VisibilityConfigurationInterface } from '@grid-failure-information-app/shared/interfaces/visibility-configuration.interface';
/**
* Returns formated date based on given culture
@@ -142,3 +143,11 @@
actionPayload = { ...actionPayload, payload: sortedItems };
return actionPayload;
}
+
+export function determineDetailFieldVisibility(config: VisibilityConfigurationInterface, config_prop: string, field: string): boolean {
+ if (config && config[config_prop]) {
+ return config[config_prop][field] === 'show';
+ } else {
+ return true;
+ }
+}