From 684bbd0ec49c85cc95bf32757688a17077207288 Mon Sep 17 00:00:00 2001
From: Florent POITTEVIN <poittevin.florent@gmail.com>
Date: Tue, 26 May 2020 11:51:19 +0200
Subject: [PATCH] fix: notification remove from pending list after update
 status

---
 ...vation-space-notification-list.routable.ts | 22 ++++++++++++++++++-
 .../preservation-space-notification.state.ts  | 15 ++++++++-----
 2 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/src/app/features/preservation-space/notification/components/routables/preservation-space-notification-list/preservation-space-notification-list.routable.ts b/src/app/features/preservation-space/notification/components/routables/preservation-space-notification-list/preservation-space-notification-list.routable.ts
index ba363a496..5321f1887 100644
--- a/src/app/features/preservation-space/notification/components/routables/preservation-space-notification-list/preservation-space-notification-list.routable.ts
+++ b/src/app/features/preservation-space/notification/components/routables/preservation-space-notification-list/preservation-space-notification-list.routable.ts
@@ -16,6 +16,7 @@ import {NotificationDlcm} from "@models";
 import {Navigate} from "@ngxs/router-plugin";
 import {
   Actions,
+  ofActionCompleted,
   Store,
 } from "@ngxs/store";
 import {SharedAbstractListRoutable} from "@shared/components/routables/shared-abstract-list/shared-abstract-list.routable";
@@ -36,9 +37,14 @@ import {RouterExtService} from "@shared/services/router-ext.service";
 import {SecurityService} from "@shared/services/security.service";
 import {sharedOrgUnitActionNameSpace} from "@shared/stores/organizational-unit/shared-organizational-unit.action";
 import {SharedOrganizationalUnitState} from "@shared/stores/organizational-unit/shared-organizational-unit.state";
-import {Observable} from "rxjs";
+import {
+  merge,
+  Observable,
+} from "rxjs";
+import {tap} from "rxjs/operators";
 import {
   isNullOrUndefined,
+  isTrue,
   MARK_AS_TRANSLATABLE,
   MemoizedUtil,
   OrderEnum,
@@ -104,6 +110,20 @@ export class PreservationSpaceNotificationListRoutable extends SharedAbstractLis
     const mode = NotificationHelper.getMode(this._route);
     if (mode === NotificationModeEnum.inbox) {
       this.listNewId = SessionStorageHelper.getListItem(SessionStorageEnum.notificationInboxPending);
+
+      this.subscribe(
+        merge(
+          this._actions$.pipe(ofActionCompleted(PreservationSpaceNotificationAction.AcceptSuccess)),
+          this._actions$.pipe(ofActionCompleted(PreservationSpaceNotificationAction.WaitSuccess)),
+          this._actions$.pipe(ofActionCompleted(PreservationSpaceNotificationAction.RefuseSuccess)),
+        ).pipe(
+          tap((result) => {
+            if (isTrue(result.result.successful)) {
+              this.listNewId = SessionStorageHelper.getListItem(SessionStorageEnum.notificationInboxPending);
+            }
+          }),
+        ),
+      );
     }
     this._store.dispatch(new PreservationSpaceNotificationAction.SetMode(mode, orgUnitId));
   }
diff --git a/src/app/features/preservation-space/notification/stores/preservation-space-notification.state.ts b/src/app/features/preservation-space/notification/stores/preservation-space-notification.state.ts
index 051e9c3c2..cd65a60cc 100644
--- a/src/app/features/preservation-space/notification/stores/preservation-space-notification.state.ts
+++ b/src/app/features/preservation-space/notification/stores/preservation-space-notification.state.ts
@@ -22,7 +22,9 @@ import {ApiActionEnum} from "@shared/enums/api-action.enum";
 import {AdminResourceApiEnum} from "@shared/enums/api.enum";
 import {LocalStateEnum} from "@shared/enums/local-state.enum";
 import {RoutesEnum} from "@shared/enums/routes.enum";
+import {SessionStorageEnum} from "@shared/enums/session-storage.enum";
 import {ViewModeEnum} from "@shared/enums/view-mode.enum";
+import {SessionStorageHelper} from "@shared/helpers/session-storage.helper";
 import {Result} from "@shared/models/business/result.model";
 import {defaultStatusHistoryInitValue} from "@shared/stores/status-history/status-history.state";
 import {
@@ -208,7 +210,7 @@ export class PreservationSpaceNotificationState extends ResourceState<Preservati
 
   @Action(PreservationSpaceNotificationAction.AcceptSuccess)
   acceptSuccess(ctx: StateContext<PreservationSpaceNotificationStateModel>, action: PreservationSpaceNotificationAction.AcceptSuccess): void {
-    this.refresh(ctx, (action.parentAction as PreservationSpaceNotificationAction.Refuse).notificationId, (action.parentAction as PreservationSpaceNotificationAction.Refuse).mode);
+    this.removeNotificationPendingListAndRefresh(ctx, (action.parentAction as PreservationSpaceNotificationAction.Refuse).notificationId, (action.parentAction as PreservationSpaceNotificationAction.Refuse).mode);
     this.notificationService.showSuccess(MARK_AS_TRANSLATABLE("preservationSpace.notifications.accept.success"));
   }
 
@@ -231,7 +233,7 @@ export class PreservationSpaceNotificationState extends ResourceState<Preservati
 
   @Action(PreservationSpaceNotificationAction.RefuseSuccess)
   refuseSuccess(ctx: StateContext<PreservationSpaceNotificationStateModel>, action: PreservationSpaceNotificationAction.RefuseSuccess): void {
-    this.refresh(ctx, (action.parentAction as PreservationSpaceNotificationAction.Refuse).notificationId, (action.parentAction as PreservationSpaceNotificationAction.Refuse).mode);
+    this.removeNotificationPendingListAndRefresh(ctx, (action.parentAction as PreservationSpaceNotificationAction.Refuse).notificationId, (action.parentAction as PreservationSpaceNotificationAction.Refuse).mode);
     this.notificationService.showSuccess(MARK_AS_TRANSLATABLE("preservationSpace.notifications.refuse.success"));
   }
 
@@ -254,13 +256,14 @@ export class PreservationSpaceNotificationState extends ResourceState<Preservati
 
   @Action(PreservationSpaceNotificationAction.WaitSuccess)
   waitSuccess(ctx: StateContext<PreservationSpaceNotificationStateModel>, action: PreservationSpaceNotificationAction.WaitSuccess): void {
-    this.refresh(ctx, (action.parentAction as PreservationSpaceNotificationAction.Wait).notificationId, (action.parentAction as PreservationSpaceNotificationAction.Wait).mode);
+    this.removeNotificationPendingListAndRefresh(ctx, (action.parentAction as PreservationSpaceNotificationAction.Wait).notificationId, (action.parentAction as PreservationSpaceNotificationAction.Wait).mode);
     this.notificationService.showSuccess(MARK_AS_TRANSLATABLE("preservationSpace.notifications.wait.success"));
   }
 
-  private refresh(ctx: StateContext<PreservationSpaceNotificationStateModel>,
-                  notificationId: string,
-                  mode: ViewModeEnum): void {
+  private removeNotificationPendingListAndRefresh(ctx: StateContext<PreservationSpaceNotificationStateModel>,
+                                                  notificationId: string,
+                                                  mode: ViewModeEnum): void {
+    SessionStorageHelper.removeItemInList(SessionStorageEnum.notificationInboxPending, notificationId);
     if (mode === ViewModeEnum.detail) {
       ctx.dispatch(new PreservationSpaceNotificationAction.GetById(notificationId));
     } else if (mode === ViewModeEnum.list) {
-- 
GitLab