[SI-566 - SI-2801/2802] config column visibility main table / condensed table

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.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
index c5ef70a..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
@@ -420,12 +420,12 @@
   });
 
   it('should return true for detailFieldVisibility if config provides "show" string for a specified form field', () => {
-    component.visibilityConfiguration = { detailFieldVisibility: { description: 'show' } as any } as any;
+    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 = { detailFieldVisibility: { description: 'hide' } as any } as any;
+    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 4b521e5..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
@@ -27,6 +27,7 @@
 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',
@@ -188,11 +189,7 @@
   }
 
   public determineDetailFieldVisibility(field: string): boolean {
-    if (this.visibilityConfiguration && this.visibilityConfiguration.detailFieldVisibility) {
-      return this.visibilityConfiguration.detailFieldVisibility[field] === 'show';
-    } else {
-      return true;
-    }
+    return determineDetailFieldVisibility(this.visibilityConfiguration, 'fieldVisibility', field);
   }
 
   private _initialFailureLocationState() {
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
index 5c3785c..679e78d 100644
--- 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
@@ -11,7 +11,7 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 export interface VisibilityConfigurationInterface {
-  detailFieldVisibility: {
+  fieldVisibility: {
     description: string;
     failureClassification: string;
     internalRemark: string;
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;
+  }
+}