Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.frontend into DEVELOP
diff --git a/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-list/distribution-group-list.component.html b/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-list/distribution-group-list.component.html
index df52e22..7472b7b 100644
--- a/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-list/distribution-group-list.component.html
+++ b/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-list/distribution-group-list.component.html
@@ -34,8 +34,8 @@
       </ag-grid-angular>
       <app-spinner [isRunning]="sandbox.distributionGroupLoading$ | async"></app-spinner>
       <div class="distribution-group-member-container">
-        <app-distribution-group-members class="distribution-group-member"></app-distribution-group-members>
-        <app-distribution-group-member-postcodes class="distribution-group-member-postcodes"></app-distribution-group-member-postcodes>
+        <app-distribution-group-members (rowSelectionChanged)="plzValueId = $event" class="distribution-group-member"></app-distribution-group-members>
+        <app-distribution-group-member-postcodes [plzValueId]="plzValueId" class="distribution-group-member-postcodes"></app-distribution-group-member-postcodes>
       </div>
     </div>
     <app-distribution-group-details class="distribution-group-form"></app-distribution-group-details>
diff --git a/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-list/distribution-group-list.component.ts b/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-list/distribution-group-list.component.ts
index a3703c2..7047eb0 100644
--- a/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-list/distribution-group-list.component.ts
+++ b/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-list/distribution-group-list.component.ts
@@ -28,6 +28,7 @@
   public frameworkComponents: { setFilterComponent: any };
   public api: GridApi | null | undefined;
   public RolesEnum = RolesEnum;
+  public plzValueId: string;
 
   constructor(public sandbox: DistributionGroupSandbox) {
     super();
diff --git a/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-member-postcodes/distribution-group-member-postcodes.component.ts b/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-member-postcodes/distribution-group-member-postcodes.component.ts
index 22c8666..c77ab40 100644
--- a/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-member-postcodes/distribution-group-member-postcodes.component.ts
+++ b/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-member-postcodes/distribution-group-member-postcodes.component.ts
@@ -11,7 +11,7 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 import { DistributionGroupSandbox, PostcodeInterface } from '@grid-failure-information-app/app/pages/distribution-group/distribution-group.sandbox';
-import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
+import { Component, OnInit, ViewChild, ElementRef, Input } from '@angular/core';
 import { BaseList } from '@grid-failure-information-app/shared/components/base-components/base.list';
 import { Subscription } from 'rxjs';
 import { DISTRIBUTION_GROUP_MEMBER_POSTCODES_COLDEF } from '@grid-failure-information-app/app/pages/distribution-group/distribution-group-member-postcodes/distribution-group-member-postcodes-col-def';
@@ -31,6 +31,14 @@
   public columnDefinition: any = DISTRIBUTION_GROUP_MEMBER_POSTCODES_COLDEF;
   public frameworkComponents: { setFilterComponent: any };
 
+  @Input() set plzValueId(value: string) {
+    if (!this._currentPlzValueId || this._currentPlzValueId !== value) {
+      this._currentPlzValueId = value;
+      this.postcodeInput.nativeElement.value = '';
+    }
+  }
+  private _currentPlzValueId: string;
+
   constructor(public sandbox: DistributionGroupSandbox, private _utilService: UtilService) {
     super();
     this.frameworkComponents = { setFilterComponent: SetFilterComponent };
diff --git a/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-members/distribution-group-members.component.ts b/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-members/distribution-group-members.component.ts
index 6526266..eace185 100644
--- a/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-members/distribution-group-members.component.ts
+++ b/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group-members/distribution-group-members.component.ts
@@ -11,7 +11,7 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 import { DistributionGroupSandbox } from '@grid-failure-information-app/app/pages/distribution-group/distribution-group.sandbox';
-import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
+import { Component, OnInit, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';
 import { BaseList } from '@grid-failure-information-app/shared/components/base-components/base.list';
 import { DISTRIBUTION_GROUP_MEMBER_COLDEF } from '@grid-failure-information-app/app/pages/distribution-group/distribution-group-members/distribution-group-members-col-def';
 import { SetFilterComponent } from '@grid-failure-information-app/shared/filters/ag-grid/set-filter/set-filter.component';
@@ -27,6 +27,7 @@
 })
 export class DistributionGroupMembersComponent extends BaseList implements OnInit {
   @ViewChild('searchInput', { static: true }) searchInput: ElementRef;
+  @Output() rowSelectionChanged: EventEmitter<any> = new EventEmitter();
   public columnDefinition: any = DISTRIBUTION_GROUP_MEMBER_COLDEF;
   public frameworkComponents: { setFilterComponent: any };
 
@@ -41,9 +42,11 @@
     (this.gridOptions = {
       ...this.gridOptions,
       onRowClicked: event => {
+        const rowChanged: boolean = this.sandbox.selectedMemberRowIndex !== event.rowIndex;
         this.sandbox.selectedMemberRowIndex = event.rowIndex;
         this.sandbox.setSelectedDistributionGroupMember(event.data);
         this.sandbox.transformPostcodes();
+        if  (rowChanged)  this.rowSelectionChanged.emit(event.data.id);
       },
       onModelUpdated: event => {
         if (event.api.getDisplayedRowAtIndex(this.sandbox.selectedMemberRowIndex)) {
diff --git a/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group.sandbox.ts b/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group.sandbox.ts
index 4c048c8..db8e28f 100644
--- a/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group.sandbox.ts
+++ b/projects/grid-failure-information-app/src/app/pages/distribution-group/distribution-group.sandbox.ts
@@ -160,6 +160,7 @@
   }
 
   public deleteDistributionGroupMember(groupId: string, memberId: string): void {
+    this.actionsSubject.pipe(ofType(distributionGroupActions.deleteDistributionGroupMemberSuccess), take(1)).subscribe(() => this.selectedMemberRowIndex = 0);
     this.appState$.dispatch(distributionGroupActions.deleteDistributionGroupMember({ groupId: groupId, memberId: memberId }));
   }
 
@@ -294,16 +295,22 @@
       this._utilService.displayNotification('SelectedContactAlreadyAssigned', 'alert');
       this.setSelectedContact(undefined);
     } else {
-      let newGroupMember = {
+      let newGroupMemberData = {
         contactId: this._selectedContact.uuid,
         distributionGroupUuid: this.selectedDistributionGroup.id,
       };
+      const newGroupMember = new DistributionGroupMember(newGroupMemberData);
+      this.actionsSubject.pipe(ofType(distributionGroupActions.createDistributionGroupMemberSuccess), take(1)).subscribe(payload => {
+        this.selectedMemberRowIndex = 0;
+      });
       this.appState$.dispatch(
         distributionGroupActions.createDistributionGroupMember({
           groupId: this.selectedDistributionGroup.id,
-          newMember: new DistributionGroupMember(newGroupMember),
+          newMember: newGroupMember,
         })
       );
+      this.postcodes = [];
+      this._selectedDistributionGroupMember = newGroupMember;
       this.setSelectedContact(undefined);
     }
   }
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-column-definition.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-column-definition.ts
index 4102866..d9ff356 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-column-definition.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-column-definition.ts
@@ -214,7 +214,7 @@
     colId: 'radius',
     headerName: 'GridFailure.RadiusInM',
     sortable: true,
-    comparator: stringInsensitiveComparator,
+    comparator: sortAlphaNum,
     suppressMovable: true,
     filter: 'setFilterComponent',
   },
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 3345c1f..3c72fd9 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
@@ -127,9 +127,14 @@
     firstInput = firstInput.housenumber;
     secondInput = secondInput.housenumber;
   }
+
+  if (firstInput === secondInput) return 0;
+  if (firstInput === null || (firstInput === '' && !!secondInput)) return -1; // handle ascending sorting with NULL values
+  if (secondInput === null || (secondInput === '' && !!firstInput)) return 1; // handle decending sorting with NULL values
+
   // NULL or UNDEFINED handling
-  firstInput = !firstInput ? '0' : firstInput;
-  secondInput = !secondInput ? '0' : secondInput;
+  firstInput = !firstInput ? '0' : String(firstInput);
+  secondInput = !secondInput ? '0' : String(secondInput);
 
   const removeA = /[^a-zA-Z]/g;
   const removeNumber = /[^0-9]/g;