From 9ef887eb273f268e5fcdc2566408d0a1f69a39b7 Mon Sep 17 00:00:00 2001
From: Florent Poittevin <florent.poittevin@unige.ch>
Date: Wed, 10 Jul 2019 16:52:02 +0200
Subject: [PATCH] Fix relation 2 tiers Add parent action inheritance for
 relation 2 tiers

---
 .../core/helpers/resource-action.helper.ts    | 12 ++---
 .../relation-2-tiers.action.ts                | 15 +++---
 .../relation-2-tiers.state.ts                 |  8 ++-
 .../core/stores/resource/resource.action.ts   | 53 +++++++++++--------
 .../core/stores/resource/resource.state.ts    | 34 ++++++------
 src/app/deposit/stores/deposit.action.ts      | 12 ++---
 src/app/deposit/stores/deposit.state.ts       |  2 +-
 .../shared/stores/language/language.action.ts | 12 ++---
 .../shared/stores/license/license.action.ts   | 12 ++---
 .../organizational-unit.action.ts             | 16 +++---
 .../organizational-unit.state.ts              |  2 +-
 .../preservation-policy.action.ts             | 12 ++---
 .../submission-policy.action.ts               | 12 ++---
 src/app/stores/app.action.ts                  |  9 ++--
 src/app/stores/app.state.ts                   |  4 +-
 15 files changed, 115 insertions(+), 100 deletions(-)

diff --git a/src/app/core/helpers/resource-action.helper.ts b/src/app/core/helpers/resource-action.helper.ts
index 6a139a897..da05c6e1b 100644
--- a/src/app/core/helpers/resource-action.helper.ts
+++ b/src/app/core/helpers/resource-action.helper.ts
@@ -26,7 +26,7 @@ export class ResourceActionHelper {
     return new resourceNameSpace.GetAllSuccess(...args);
   }
 
-  static getAllFail(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.GetAllFail>): ResourceAction.GetAllFail {
+  static getAllFail<T>(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.GetAllFail>): ResourceAction.GetAllFail<T> {
     return new resourceNameSpace.GetAllFail(...args);
   }
 
@@ -38,7 +38,7 @@ export class ResourceActionHelper {
     return new resourceNameSpace.GetByIdSuccess(...args);
   }
 
-  static getByIdFail(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.GetByIdFail>): ResourceAction.GetByIdFail {
+  static getByIdFail<T>(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.GetByIdFail>): ResourceAction.GetByIdFail<T> {
     return new resourceNameSpace.GetByIdFail(...args);
   }
 
@@ -46,11 +46,11 @@ export class ResourceActionHelper {
     return new resourceNameSpace.Create(...args);
   }
 
-  static createSuccess(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.CreateSuccess>): ResourceAction.CreateSuccess {
+  static createSuccess<T>(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.CreateSuccess>): ResourceAction.CreateSuccess<T> {
     return new resourceNameSpace.CreateSuccess(...args);
   }
 
-  static createFail(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.CreateFail>): ResourceAction.CreateFail {
+  static createFail<T>(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.CreateFail>): ResourceAction.CreateFail<T> {
     return new resourceNameSpace.CreateFail(...args);
   }
 
@@ -58,11 +58,11 @@ export class ResourceActionHelper {
     return new resourceNameSpace.Update(...args);
   }
 
-  static updateSuccess(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.UpdateSuccess>): ResourceAction.UpdateSuccess {
+  static updateSuccess<T>(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.UpdateSuccess>): ResourceAction.UpdateSuccess<T> {
     return new resourceNameSpace.UpdateSuccess(...args);
   }
 
-  static updateFail(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.UpdateFail>): ResourceAction.UpdateFail {
+  static updateFail<T>(resourceNameSpace: ResourceNameSpace, ...args: ConstructorParameters<typeof ResourceAction.UpdateFail>): ResourceAction.UpdateFail<T> {
     return new resourceNameSpace.UpdateFail(...args);
   }
 
diff --git a/src/app/core/stores/relation-2-tiers/relation-2-tiers.action.ts b/src/app/core/stores/relation-2-tiers/relation-2-tiers.action.ts
index 14e9b9a4e..bb2018111 100644
--- a/src/app/core/stores/relation-2-tiers/relation-2-tiers.action.ts
+++ b/src/app/core/stores/relation-2-tiers/relation-2-tiers.action.ts
@@ -4,21 +4,23 @@ import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
 
 export namespace Relation2TiersAction {
-  export class GetAll {
+  export class GetAll extends BaseAction {
     static readonly type: string = "[{0}] Relation 2 Tiers : Get All";
 
     constructor(public parentId: string, public queryParameters?: QueryParametersModel) {
+      super();
     }
   }
 
-  export class GetAllSuccess<T> {
+  export class GetAllSuccess<T> extends BaseSubAction<GetAll> {
     static readonly type: string = "[{0}] Relation 2 Tiers : Get All Success";
 
-    constructor(public list: CollectionTypedModel<T>) {
+    constructor(public parentAction: GetAll, public list: CollectionTypedModel<T>) {
+      super(parentAction);
     }
   }
 
-  export class GetAllFail {
+  export class GetAllFail extends BaseSubAction<GetAll> {
     static readonly type: string = "[{0}] Relation 2 Tiers : Get All Fail";
   }
 
@@ -70,10 +72,11 @@ export namespace Relation2TiersAction {
     }
   }
 
-  export class UpdateFail {
+  export class UpdateFail extends BaseSubAction<Update> {
     static readonly type: string = "[{0}] Relation 2 Tiers : Update Fail";
 
-    constructor(public parentId: string) {
+    constructor(public parentAction: Update, public parentId: string) {
+      super(parentAction);
     }
   }
 }
diff --git a/src/app/core/stores/relation-2-tiers/relation-2-tiers.state.ts b/src/app/core/stores/relation-2-tiers/relation-2-tiers.state.ts
index 2643160c8..d4b347b05 100644
--- a/src/app/core/stores/relation-2-tiers/relation-2-tiers.state.ts
+++ b/src/app/core/stores/relation-2-tiers/relation-2-tiers.state.ts
@@ -70,10 +70,10 @@ export abstract class Relation2TiersState<T> {
     return this.apiService.get<U>(url, queryParameters)
       .pipe(
         tap((collection: CollectionTypedModel<U>) => {
-          ctx.dispatch(Relation2TiersActionHelper.getAllSubResourceSuccess<U>(this.relation2TiersNameSpace, collection));
+          ctx.dispatch(Relation2TiersActionHelper.getAllSubResourceSuccess<U>(this.relation2TiersNameSpace, action, collection));
         }),
         catchError(error => {
-          ctx.dispatch(Relation2TiersActionHelper.getAllSubResourceFail(this.relation2TiersNameSpace));
+          ctx.dispatch(Relation2TiersActionHelper.getAllSubResourceFail(this.relation2TiersNameSpace, action));
           throw error;
         }),
       );
@@ -97,6 +97,7 @@ export abstract class Relation2TiersState<T> {
   @RegisterDefaultAction((relation2TiersNameSpace: Relation2TiersNameSpace) => relation2TiersNameSpace.Create)
   create(ctx: StateContext<Relation2TiersStateModel<T>>, action: Relation2TiersAction.Create): Observable<string[]> {
     if (action.listResId.length === 0) {
+      ctx.dispatch(Relation2TiersActionHelper.createSubResourceSuccess(this.relation2TiersNameSpace, action));
       return;
     }
     const url = this.evaluateSubResourceUrl(action.parentId);
@@ -115,6 +116,7 @@ export abstract class Relation2TiersState<T> {
   @RegisterDefaultAction((relation2TiersNameSpace: Relation2TiersNameSpace) => relation2TiersNameSpace.Delete)
   delete(ctx: StateContext<Relation2TiersStateModel<T>>, action: Relation2TiersAction.Delete): Observable<string[]> {
     if (action.listResId.length === 0) {
+      ctx.dispatch(Relation2TiersActionHelper.deleteSubResourceSuccess(this.relation2TiersNameSpace, action));
       return;
     }
     const url = this.evaluateSubResourceUrl(action.parentId);
@@ -139,6 +141,8 @@ export abstract class Relation2TiersState<T> {
     ).subscribe(success => {
       if (success) {
         ctx.dispatch(Relation2TiersActionHelper.updateSubResourceSuccess(this.relation2TiersNameSpace, action, action.parentId));
+      } else {
+        ctx.dispatch(Relation2TiersActionHelper.updateSubResourceFail(this.relation2TiersNameSpace, action, action.parentId));
       }
     });
   }
diff --git a/src/app/core/stores/resource/resource.action.ts b/src/app/core/stores/resource/resource.action.ts
index b1836239a..c9b8a1743 100644
--- a/src/app/core/stores/resource/resource.action.ts
+++ b/src/app/core/stores/resource/resource.action.ts
@@ -1,105 +1,114 @@
-import {ResourceNameSpace} from "./resource.namespace";
+import {BaseAction, BaseSubAction} from "@app/core/models/stores/base.action";
 import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
+import {ResourceNameSpace} from "./resource.namespace";
 
 export namespace ResourceAction {
-  export class LoadResource {
+  export class LoadResource extends BaseAction {
     static readonly type: string = "[{0}] Load resource";
   }
 
-  export class LoadResourceSuccess {
+  export class LoadResourceSuccess extends BaseSubAction<LoadResource> {
     static readonly type: string = "[{0}] Load resource Success";
   }
 
-  export class LoadResourceFail {
+  export class LoadResourceFail extends BaseSubAction<LoadResource> {
     static readonly type: string = "[{0}] Load resource Fail";
   }
 
-  export class ChangeQueryParameters {
+  export class ChangeQueryParameters extends BaseAction {
     static readonly type: string = "[{0}] Change Query Parameters";
 
     constructor(public queryParameters: QueryParametersModel) {
+      super();
     }
   }
 
-  export class GetAll {
+  export class GetAll extends BaseAction {
     static readonly type: string = "[{0}] Get All";
 
     constructor(public queryParameters?: QueryParametersModel) {
+      super();
     }
   }
 
-  export class GetAllSuccess<T> {
+  export class GetAllSuccess<T> extends BaseSubAction<GetAll> {
     static readonly type: string = "[{0}] Get All Success";
 
-    constructor(public list: CollectionTypedModel<T>) {
+    constructor(public parentAction: GetAll, public list: CollectionTypedModel<T>) {
+      super(parentAction);
     }
   }
 
-  export class GetAllFail {
+  export class GetAllFail<T> extends BaseSubAction<GetAll> {
     static readonly type: string = "[{0}] Get All Fail";
   }
 
-  export class GetById {
+  export class GetById extends BaseAction {
     static readonly type: string = "[{0}] Get By Id";
 
     constructor(public id: string) {
+      super();
     }
   }
 
-  export class GetByIdSuccess<T> {
+  export class GetByIdSuccess<T> extends BaseSubAction<GetById> {
     static readonly type: string = "[{0}] Get By Id Success";
 
-    constructor(public model: T) {
+    constructor(public parentAction: GetById, public model: T) {
+      super(parentAction);
     }
   }
 
-  export class GetByIdFail {
+  export class GetByIdFail<T> extends BaseSubAction<GetById> {
     static readonly type: string = "[{0}] Get By Id Fail";
   }
 
-  export class Create<T> {
+  export class Create<T> extends BaseAction {
     static readonly type: string = "[{0}] Create";
 
     constructor(public model: T) {
+      super();
     }
   }
 
-  export class CreateSuccess {
+  export class CreateSuccess<T> extends BaseSubAction<Create<T>> {
     static readonly type: string = "[{0}] Create Success";
   }
 
-  export class CreateFail {
+  export class CreateFail<T> extends BaseSubAction<Create<T>> {
     static readonly type: string = "[{0}] Create Fail";
   }
 
-  export class Update<T> {
+  export class Update<T> extends BaseAction {
     static readonly type: string = "[{0}] Update";
 
     constructor(public model: T) {
+      super();
     }
   }
 
-  export class UpdateSuccess {
+  export class UpdateSuccess<T> extends BaseSubAction<Update<T>> {
     static readonly type: string = "[{0}] Update Success";
   }
 
-  export class UpdateFail {
+  export class UpdateFail<T> extends BaseSubAction<Update<T>> {
     static readonly type: string = "[{0}] Update Fail";
   }
 
-  export class Delete {
+  export class Delete extends BaseAction {
     static readonly type: string = "[{0}] Delete";
 
     constructor(public resId: string) {
+      super();
     }
   }
 
-  export class DeleteSuccess {
+  export class DeleteSuccess extends BaseSubAction<Delete> {
     static readonly type: string = "[{0}] Delete Success";
   }
 
-  export class DeleteFail {
+  export class DeleteFail extends BaseSubAction<Delete> {
     static readonly type: string = "[{0}] Delete Fail";
   }
 }
diff --git a/src/app/core/stores/resource/resource.state.ts b/src/app/core/stores/resource/resource.state.ts
index 1a8027a7a..4746a7fc8 100644
--- a/src/app/core/stores/resource/resource.state.ts
+++ b/src/app/core/stores/resource/resource.state.ts
@@ -63,20 +63,18 @@ export abstract class ResourceState<T> {
 
   @RegisterDefaultAction((resourceNameSpace: ResourceNameSpace) => resourceNameSpace.GetAll, {cancelUncompleted: true})
   getAll(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.GetAll): Observable<CollectionTypedModel<T>> {
-
     ctx.patchState({
       isLoadingCounter: ctx.getState().isLoadingCounter + 1,
     });
-
     const queryParameters = StoreUtil.getQueryParametersToApply(action.queryParameters, ctx);
 
     return this.apiService.get<T>(this._urlResource, queryParameters)
       .pipe(
         tap((collection: CollectionTypedModel<T>) => {
-          ctx.dispatch(ResourceActionHelper.getAllSuccess<T>(this.resourceNameSpace, collection));
+          ctx.dispatch(ResourceActionHelper.getAllSuccess<T>(this.resourceNameSpace, action, collection));
         }),
         catchError(error => {
-          ctx.dispatch(ResourceActionHelper.getAllFail(this.resourceNameSpace));
+          ctx.dispatch(ResourceActionHelper.getAllFail(this.resourceNameSpace, action));
           throw error;
         }),
       );
@@ -95,7 +93,7 @@ export abstract class ResourceState<T> {
   }
 
   @RegisterDefaultAction((resourceNameSpace: ResourceNameSpace) => resourceNameSpace.GetAllFail)
-  getAllFail(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.GetAllFail): void {
+  getAllFail(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.GetAllFail<T>): void {
     ctx.patchState({
       isLoadingCounter: ctx.getState().isLoadingCounter - 1,
     });
@@ -111,10 +109,10 @@ export abstract class ResourceState<T> {
     return this.apiService.getById<T>(this._urlResource, action.id)
       .pipe(
         tap((model: T) => {
-          ctx.dispatch(ResourceActionHelper.getByIdSuccess(this.resourceNameSpace, model));
+          ctx.dispatch(ResourceActionHelper.getByIdSuccess(this.resourceNameSpace, action, model));
         }),
         catchError(error => {
-          ctx.dispatch(ResourceActionHelper.getByIdFail(this.resourceNameSpace));
+          ctx.dispatch(ResourceActionHelper.getByIdFail(this.resourceNameSpace, action));
           throw error;
         }),
       );
@@ -129,7 +127,7 @@ export abstract class ResourceState<T> {
   }
 
   @RegisterDefaultAction((resourceNameSpace: ResourceNameSpace) => resourceNameSpace.GetByIdFail)
-  getByIdFail(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.GetByIdFail): void {
+  getByIdFail(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.GetByIdFail<T>): void {
     ctx.patchState({
       isLoadingCounter: ctx.getState().isLoadingCounter - 1,
     });
@@ -144,17 +142,17 @@ export abstract class ResourceState<T> {
     return this.apiService.post<T>(this._urlResource, action.model)
       .pipe(
         tap(() => {
-          ctx.dispatch(ResourceActionHelper.createSuccess(this.resourceNameSpace));
+          ctx.dispatch(ResourceActionHelper.createSuccess(this.resourceNameSpace, action));
         }),
         catchError(error => {
-          ctx.dispatch(ResourceActionHelper.createFail(this.resourceNameSpace));
+          ctx.dispatch(ResourceActionHelper.createFail(this.resourceNameSpace, action));
           throw error;
         }),
       );
   }
 
   @RegisterDefaultAction((resourceNameSpace: ResourceNameSpace) => resourceNameSpace.CreateSuccess)
-  createSuccess(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.CreateSuccess): void {
+  createSuccess(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.CreateSuccess<T>): void {
     ctx.patchState({
       isLoadingCounter: ctx.getState().isLoadingCounter - 1,
     });
@@ -165,7 +163,7 @@ export abstract class ResourceState<T> {
   }
 
   @RegisterDefaultAction((resourceNameSpace: ResourceNameSpace) => resourceNameSpace.CreateFail)
-  createFail(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.CreateFail): void {
+  createFail(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.CreateFail<T>): void {
     ctx.patchState({
       isLoadingCounter: ctx.getState().isLoadingCounter - 1,
     });
@@ -176,10 +174,10 @@ export abstract class ResourceState<T> {
     return this.internalUpdate(ctx, action)
       .pipe(
         tap(() => {
-          ctx.dispatch(ResourceActionHelper.updateSuccess(this.resourceNameSpace));
+          ctx.dispatch(ResourceActionHelper.updateSuccess(this.resourceNameSpace, action));
         }),
         catchError(error => {
-          ctx.dispatch(ResourceActionHelper.updateFail(this.resourceNameSpace));
+          ctx.dispatch(ResourceActionHelper.updateFail(this.resourceNameSpace, action));
           throw error;
         }),
       );
@@ -194,7 +192,7 @@ export abstract class ResourceState<T> {
   }
 
   @RegisterDefaultAction((resourceNameSpace: ResourceNameSpace) => resourceNameSpace.UpdateSuccess)
-  updateSuccess(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.UpdateSuccess): void {
+  updateSuccess(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.UpdateSuccess<T>): void {
     ctx.patchState({
       isLoadingCounter: ctx.getState().isLoadingCounter - 1,
     });
@@ -205,7 +203,7 @@ export abstract class ResourceState<T> {
   }
 
   @RegisterDefaultAction((resourceNameSpace: ResourceNameSpace) => resourceNameSpace.UpdateFail)
-  updateFail(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.UpdateFail): void {
+  updateFail(ctx: StateContext<ResourceStateModel<T>>, action: ResourceAction.UpdateFail<T>): void {
     ctx.patchState({
       isLoadingCounter: ctx.getState().isLoadingCounter - 1,
     });
@@ -220,10 +218,10 @@ export abstract class ResourceState<T> {
     return this.apiService.deleteById<T>(this._urlResource, action.resId)
       .pipe(
         tap(() => {
-          ctx.dispatch(ResourceActionHelper.deleteSuccess(this.resourceNameSpace));
+          ctx.dispatch(ResourceActionHelper.deleteSuccess(this.resourceNameSpace, action));
         }),
         catchError(error => {
-          ctx.dispatch(ResourceActionHelper.deleteFail(this.resourceNameSpace));
+          ctx.dispatch(ResourceActionHelper.deleteFail(this.resourceNameSpace, action));
           throw error;
         }),
       );
diff --git a/src/app/deposit/stores/deposit.action.ts b/src/app/deposit/stores/deposit.action.ts
index 43b18c585..6e6328d17 100644
--- a/src/app/deposit/stores/deposit.action.ts
+++ b/src/app/deposit/stores/deposit.action.ts
@@ -32,7 +32,7 @@ export namespace DepositAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetAllFail extends ResourceAction.GetAllFail {
+  export class GetAllFail extends ResourceAction.GetAllFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -44,7 +44,7 @@ export namespace DepositAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetByIdFail extends ResourceAction.GetByIdFail {
+  export class GetByIdFail extends ResourceAction.GetByIdFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -52,11 +52,11 @@ export namespace DepositAction {
   }
 
   @TypeDefaultAction(state)
-  export class CreateSuccess extends ResourceAction.CreateSuccess {
+  export class CreateSuccess extends ResourceAction.CreateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class CreateFail extends ResourceAction.CreateFail {
+  export class CreateFail extends ResourceAction.CreateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -64,11 +64,11 @@ export namespace DepositAction {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateSuccess extends ResourceAction.UpdateSuccess {
+  export class UpdateSuccess extends ResourceAction.UpdateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateFail extends ResourceAction.UpdateFail {
+  export class UpdateFail extends ResourceAction.UpdateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
diff --git a/src/app/deposit/stores/deposit.state.ts b/src/app/deposit/stores/deposit.state.ts
index 5e8310382..b00d5fbd4 100644
--- a/src/app/deposit/stores/deposit.state.ts
+++ b/src/app/deposit/stores/deposit.state.ts
@@ -72,7 +72,7 @@ export class DepositState extends ResourceState<DepositsModel> {
       new LicenseAction.GetAll(),
       new PreservationPolicyAction.GetAll(),
       new SubmissionPolicyAction.GetAll(),
-      new DepositAction.LoadResourceSuccess(),
+      new DepositAction.LoadResourceSuccess(action),
     ]);
   }
 
diff --git a/src/app/shared/stores/language/language.action.ts b/src/app/shared/stores/language/language.action.ts
index 6166812f4..1e25f679c 100644
--- a/src/app/shared/stores/language/language.action.ts
+++ b/src/app/shared/stores/language/language.action.ts
@@ -32,7 +32,7 @@ export namespace LanguageAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetAllFail extends ResourceAction.GetAllFail {
+  export class GetAllFail extends ResourceAction.GetAllFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -44,7 +44,7 @@ export namespace LanguageAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetByIdFail extends ResourceAction.GetByIdFail {
+  export class GetByIdFail extends ResourceAction.GetByIdFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -52,11 +52,11 @@ export namespace LanguageAction {
   }
 
   @TypeDefaultAction(state)
-  export class CreateSuccess extends ResourceAction.CreateSuccess {
+  export class CreateSuccess extends ResourceAction.CreateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class CreateFail extends ResourceAction.CreateFail {
+  export class CreateFail extends ResourceAction.CreateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -64,11 +64,11 @@ export namespace LanguageAction {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateSuccess extends ResourceAction.UpdateSuccess {
+  export class UpdateSuccess extends ResourceAction.UpdateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateFail extends ResourceAction.UpdateFail {
+  export class UpdateFail extends ResourceAction.UpdateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
diff --git a/src/app/shared/stores/license/license.action.ts b/src/app/shared/stores/license/license.action.ts
index d29dbe530..810565215 100644
--- a/src/app/shared/stores/license/license.action.ts
+++ b/src/app/shared/stores/license/license.action.ts
@@ -32,7 +32,7 @@ export namespace LicenseAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetAllFail extends ResourceAction.GetAllFail {
+  export class GetAllFail extends ResourceAction.GetAllFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -44,7 +44,7 @@ export namespace LicenseAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetByIdFail extends ResourceAction.GetByIdFail {
+  export class GetByIdFail extends ResourceAction.GetByIdFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -52,11 +52,11 @@ export namespace LicenseAction {
   }
 
   @TypeDefaultAction(state)
-  export class CreateSuccess extends ResourceAction.CreateSuccess {
+  export class CreateSuccess extends ResourceAction.CreateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class CreateFail extends ResourceAction.CreateFail {
+  export class CreateFail extends ResourceAction.CreateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -64,11 +64,11 @@ export namespace LicenseAction {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateSuccess extends ResourceAction.UpdateSuccess {
+  export class UpdateSuccess extends ResourceAction.UpdateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateFail extends ResourceAction.UpdateFail {
+  export class UpdateFail extends ResourceAction.UpdateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
diff --git a/src/app/shared/stores/organizational-unit/organizational-unit.action.ts b/src/app/shared/stores/organizational-unit/organizational-unit.action.ts
index 61b43d648..806ddff50 100644
--- a/src/app/shared/stores/organizational-unit/organizational-unit.action.ts
+++ b/src/app/shared/stores/organizational-unit/organizational-unit.action.ts
@@ -1,8 +1,8 @@
-import {DepositsModel} from "@app/generated-api";
 import {ResourceAction} from "@app/core/stores/resource/resource.action";
-import {ResourceNameSpace} from "../../../core/stores/resource/resource.namespace";
+import {DepositsModel} from "@app/generated-api";
 import {TypeDefaultAction} from "@app/shared/decorators/type-default-action.decorator";
 import {StateEnum} from "@app/shared/enums/state.enum";
+import {ResourceNameSpace} from "../../../core/stores/resource/resource.namespace";
 
 const state = StateEnum.organizationalUnit;
 
@@ -32,7 +32,7 @@ export namespace OrgUnitAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetAllFail extends ResourceAction.GetAllFail {
+  export class GetAllFail extends ResourceAction.GetAllFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -44,7 +44,7 @@ export namespace OrgUnitAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetByIdFail extends ResourceAction.GetByIdFail {
+  export class GetByIdFail extends ResourceAction.GetByIdFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -52,11 +52,11 @@ export namespace OrgUnitAction {
   }
 
   @TypeDefaultAction(state)
-  export class CreateSuccess extends ResourceAction.CreateSuccess {
+  export class CreateSuccess extends ResourceAction.CreateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class CreateFail extends ResourceAction.CreateFail {
+  export class CreateFail extends ResourceAction.CreateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -64,11 +64,11 @@ export namespace OrgUnitAction {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateSuccess extends ResourceAction.UpdateSuccess {
+  export class UpdateSuccess extends ResourceAction.UpdateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateFail extends ResourceAction.UpdateFail {
+  export class UpdateFail extends ResourceAction.UpdateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
diff --git a/src/app/shared/stores/organizational-unit/organizational-unit.state.ts b/src/app/shared/stores/organizational-unit/organizational-unit.state.ts
index a5e13df17..f775d86c1 100644
--- a/src/app/shared/stores/organizational-unit/organizational-unit.state.ts
+++ b/src/app/shared/stores/organizational-unit/organizational-unit.state.ts
@@ -72,7 +72,7 @@ export class OrganizationalUnitState extends ResourceState<OrganizationalUnitsMo
     ctx.dispatch([
       new PreservationPolicyAction.GetAll(),
       new SubmissionPolicyAction.GetAll(),
-      new OrgUnitAction.LoadResourceSuccess(),
+      new OrgUnitAction.LoadResourceSuccess(action),
     ]);
   }
 
diff --git a/src/app/shared/stores/preservation-policy/preservation-policy.action.ts b/src/app/shared/stores/preservation-policy/preservation-policy.action.ts
index 7770d0be9..e2d68f24d 100644
--- a/src/app/shared/stores/preservation-policy/preservation-policy.action.ts
+++ b/src/app/shared/stores/preservation-policy/preservation-policy.action.ts
@@ -32,7 +32,7 @@ export namespace PreservationPolicyAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetAllFail extends ResourceAction.GetAllFail {
+  export class GetAllFail extends ResourceAction.GetAllFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -44,7 +44,7 @@ export namespace PreservationPolicyAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetByIdFail extends ResourceAction.GetByIdFail {
+  export class GetByIdFail extends ResourceAction.GetByIdFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -52,11 +52,11 @@ export namespace PreservationPolicyAction {
   }
 
   @TypeDefaultAction(state)
-  export class CreateSuccess extends ResourceAction.CreateSuccess {
+  export class CreateSuccess extends ResourceAction.CreateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class CreateFail extends ResourceAction.CreateFail {
+  export class CreateFail extends ResourceAction.CreateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -64,11 +64,11 @@ export namespace PreservationPolicyAction {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateSuccess extends ResourceAction.UpdateSuccess {
+  export class UpdateSuccess extends ResourceAction.UpdateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateFail extends ResourceAction.UpdateFail {
+  export class UpdateFail extends ResourceAction.UpdateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
diff --git a/src/app/shared/stores/submission-policy/submission-policy.action.ts b/src/app/shared/stores/submission-policy/submission-policy.action.ts
index d20cbb787..b12529550 100644
--- a/src/app/shared/stores/submission-policy/submission-policy.action.ts
+++ b/src/app/shared/stores/submission-policy/submission-policy.action.ts
@@ -32,7 +32,7 @@ export namespace SubmissionPolicyAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetAllFail extends ResourceAction.GetAllFail {
+  export class GetAllFail extends ResourceAction.GetAllFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -44,7 +44,7 @@ export namespace SubmissionPolicyAction {
   }
 
   @TypeDefaultAction(state)
-  export class GetByIdFail extends ResourceAction.GetByIdFail {
+  export class GetByIdFail extends ResourceAction.GetByIdFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -52,11 +52,11 @@ export namespace SubmissionPolicyAction {
   }
 
   @TypeDefaultAction(state)
-  export class CreateSuccess extends ResourceAction.CreateSuccess {
+  export class CreateSuccess extends ResourceAction.CreateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class CreateFail extends ResourceAction.CreateFail {
+  export class CreateFail extends ResourceAction.CreateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
@@ -64,11 +64,11 @@ export namespace SubmissionPolicyAction {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateSuccess extends ResourceAction.UpdateSuccess {
+  export class UpdateSuccess extends ResourceAction.UpdateSuccess<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
-  export class UpdateFail extends ResourceAction.UpdateFail {
+  export class UpdateFail extends ResourceAction.UpdateFail<DepositsModel> {
   }
 
   @TypeDefaultAction(state)
diff --git a/src/app/stores/app.action.ts b/src/app/stores/app.action.ts
index 6f43a3153..2d53ed16c 100644
--- a/src/app/stores/app.action.ts
+++ b/src/app/stores/app.action.ts
@@ -1,11 +1,11 @@
 import {BaseAction, BaseSubAction} from "@app/core/models/stores/base.action";
 import {LanguagesEnum} from "@app/shared/enums/languages.enum";
 
-export class InitApplication {
+export class InitApplication extends BaseAction {
   static readonly type: string = "[App] Init Application";
 }
 
-export class InitApplicationSuccess {
+export class InitApplicationSuccess extends BaseSubAction<InitApplication> {
   static readonly type: string = "[App] Init Application Success";
 }
 
@@ -17,10 +17,11 @@ export class SetMomentLocal extends BaseAction {
   static readonly type: string = "[App] Set Moment Local";
 }
 
-export class ChangeAppLanguage {
+export class ChangeAppLanguage extends BaseAction {
   static readonly type: string = "[App] Change App Language";
 
   constructor(public language: LanguagesEnum) {
+    super();
   }
 }
 
@@ -36,6 +37,6 @@ export class LoginFail extends BaseSubAction<Login> {
   static readonly type: string = "[App] Login Fail";
 }
 
-export class Logout {
+export class Logout extends BaseAction {
   static readonly type: string = "[App] Logout";
 }
diff --git a/src/app/stores/app.state.ts b/src/app/stores/app.state.ts
index 0044913c2..9eeee7f02 100644
--- a/src/app/stores/app.state.ts
+++ b/src/app/stores/app.state.ts
@@ -48,7 +48,7 @@ export class AppState {
   }
 
   @Action(InitApplication)
-  initApplication(ctx: StateContext<AppStateModel>): void {
+  initApplication(ctx: StateContext<AppStateModel>, action: InitApplication): void {
     StoreUtil.dispatchActionAndWaitForSubActionsCompletion(
       ctx,
       [
@@ -64,7 +64,7 @@ export class AppState {
       ],
     ).subscribe(success => {
       if (success) {
-        ctx.dispatch(new InitApplicationSuccess());
+        ctx.dispatch(new InitApplicationSuccess(action));
       }
     });
   }
-- 
GitLab