From f914b98cf730fdd4374eff2bf0f3de90f09f86e2 Mon Sep 17 00:00:00 2001
From: Florent Poittevin <florent.poittevin@unige.ch>
Date: Mon, 8 Jul 2019 11:33:41 +0200
Subject: [PATCH] Add default value for state

---
 src/app/deposit/deposit.state.ts                  | 15 ++++-----------
 src/app/resource.state.ts                         |  1 +
 src/app/shared/crud-two-tiers.state.ts            |  8 +++++++-
 src/app/shared/crud.state.ts                      | 10 +++++++++-
 src/app/shared/language.state.ts                  |  8 ++------
 src/app/shared/license.state.ts                   |  8 ++------
 ...organizational-unit-submission-policy.state.ts |  7 ++-----
 src/app/shared/organizational-unit.state.ts       |  8 ++------
 src/app/shared/preservation-policy.state.ts       |  8 ++------
 src/app/shared/submission-policy.state.ts         |  8 ++------
 10 files changed, 33 insertions(+), 48 deletions(-)

diff --git a/src/app/deposit/deposit.state.ts b/src/app/deposit/deposit.state.ts
index 4779992f9..1963f56f8 100644
--- a/src/app/deposit/deposit.state.ts
+++ b/src/app/deposit/deposit.state.ts
@@ -1,11 +1,13 @@
 import {HttpEventType} from "@angular/common/http";
+import {ApiService} from "@app/core/http/api.service";
+import {NotificationService} from "@app/core/services/notification.service";
 import {DepositAction, depositActionNameSpace} from "@app/deposit/deposit.action";
 import {DepositDataFileModel} from "@app/deposit/models/deposit-data-file.model";
 import {UploadFileStatusModel} from "@app/deposit/models/upload-file-status.model";
 import {DepositsModel} from "@app/generated-api";
 import {CrudTwoTiersAction} from "@app/shared/crud-two-tiers.action";
 import {CrudNameSpace} from "@app/shared/crud.namespace";
-import {CrudState, CrudStateModel} from "@app/shared/crud.state";
+import {CrudState, CrudStateModel, defaultCrudStateInitValue} from "@app/shared/crud.state";
 import {ApiActionEnum} from "@app/shared/enums/api-action.enum";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {PreIngestResourceApiEnum, ResourceApiEnum, SubResourceApiEnum} from "@app/shared/enums/api.enum";
@@ -14,11 +16,8 @@ import {StateEnum} from "@app/shared/enums/state.enum";
 import {LanguageAction} from "@app/shared/language.action";
 import {LicenseAction} from "@app/shared/license.action";
 import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
-import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
 import {PreservationPolicyAction} from "@app/shared/preservation-policy.action";
-import {ApiService} from "@app/core/http/api.service";
 import {SubmissionPolicyAction} from "@app/shared/submission-policy.action";
-import {NotificationService} from "@app/core/services/notification.service";
 import {CrudHelperUtil} from "@app/shared/utils/crud-helper.util";
 import {Action, State, StateContext, Store} from "@ngxs/store";
 import {Observable} from "rxjs";
@@ -27,7 +26,6 @@ import {tap} from "rxjs/internal/operators/tap";
 import {map} from "rxjs/operators";
 
 export interface DepositStateModel extends CrudStateModel<DepositsModel> {
-  resourceIsLoading: boolean;
   listDataFile: DepositDataFileModel[];
   isLoadingDataFile: boolean;
   uploadStatus: UploadFileStatusModel;
@@ -36,12 +34,7 @@ export interface DepositStateModel extends CrudStateModel<DepositsModel> {
 @State<DepositStateModel>({
   name: StateEnum.deposit,
   defaults: {
-    total: 0,
-    isLoading: false,
-    list: [],
-    current: null,
-    queryParameters: new QueryParametersModel(),
-    resourceIsLoading: false,
+    ...defaultCrudStateInitValue,
     listDataFile: [],
     isLoadingDataFile: false,
     uploadStatus: null,
diff --git a/src/app/resource.state.ts b/src/app/resource.state.ts
index 156262cc1..a6e932513 100644
--- a/src/app/resource.state.ts
+++ b/src/app/resource.state.ts
@@ -3,5 +3,6 @@ import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
 
 
 export interface ResourceStateModel extends BaseStateModel {
+  total: number;
   queryParameters: QueryParametersModel;
 }
diff --git a/src/app/shared/crud-two-tiers.state.ts b/src/app/shared/crud-two-tiers.state.ts
index dbc49d468..c8d746950 100644
--- a/src/app/shared/crud-two-tiers.state.ts
+++ b/src/app/shared/crud-two-tiers.state.ts
@@ -9,6 +9,7 @@ import {ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {urlSeparator} from "@app/shared/enums/routes.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
 import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
+import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
 import {SubResourceUpdateModel} from "@app/shared/models/sub-resource-update.model";
 import {CrudHelperUtil} from "@app/shared/utils/crud-helper.util";
 import {CrudTwoTiersActionHelper} from "@app/shared/utils/crud-two-tiers-action.helper";
@@ -20,10 +21,15 @@ import {catchError} from "rxjs/internal/operators/catchError";
 import {tap} from "rxjs/internal/operators/tap";
 
 export interface CrudTwoTiersStateModel<T> extends ResourceStateModel {
-  total: number;
   selected: T[];
 }
 
+export const defaultCrudTwoTiersStateInitValue: CrudTwoTiersStateModel<any> = {
+  total: 0,
+  isLoading: false,
+  selected: [],
+  queryParameters: new QueryParametersModel(),
+};
 export abstract class CrudTwoTiersState<T> {
   protected readonly state: StateEnum;
   protected readonly crudTwoTiersNameSpace: CrudTwoTiersNameSpace;
diff --git a/src/app/shared/crud.state.ts b/src/app/shared/crud.state.ts
index d4fe2294a..db962337a 100644
--- a/src/app/shared/crud.state.ts
+++ b/src/app/shared/crud.state.ts
@@ -8,6 +8,7 @@ import {ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {ModelAttributeEnum} from "@app/shared/enums/model-attribute.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
 import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
+import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
 import {CrudActionHelper} from "@app/shared/utils/crud-action.helper";
 import {CrudHelperUtil} from "@app/shared/utils/crud-helper.util";
 import {CrudRouteUtil} from "@app/shared/utils/crud-route.util";
@@ -20,11 +21,18 @@ import {catchError} from "rxjs/internal/operators/catchError";
 import {tap} from "rxjs/operators";
 
 export interface CrudStateModel<T> extends ResourceStateModel {
-  total: number;
   list: T[];
   current: T;
 }
 
+export const defaultCrudStateInitValue: CrudStateModel<any> = {
+  total: 0,
+  isLoading: false,
+  list: [],
+  current: null,
+  queryParameters: new QueryParametersModel(),
+};
+
 export abstract class CrudState<T> {
   protected readonly state: StateEnum;
   protected readonly crudNameSpace: CrudNameSpace;
diff --git a/src/app/shared/language.state.ts b/src/app/shared/language.state.ts
index 7ccaacac3..78ccdd322 100644
--- a/src/app/shared/language.state.ts
+++ b/src/app/shared/language.state.ts
@@ -1,6 +1,6 @@
 import {LanguagesModel} from "@app/generated-api";
 import {CrudNameSpace} from "@app/shared/crud.namespace";
-import {CrudState, CrudStateModel} from "@app/shared/crud.state";
+import {CrudState, CrudStateModel, defaultCrudStateInitValue} from "@app/shared/crud.state";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
@@ -16,11 +16,7 @@ export interface LanguageStateModel extends CrudStateModel<LanguagesModel> {
 @State<LanguageStateModel>({
   name: StateEnum.language,
   defaults: {
-    total: 0,
-    isLoading: false,
-    list: [],
-    current: null,
-    queryParameters: new QueryParametersModel(),
+    ...defaultCrudStateInitValue,
   },
 })
 export class LanguageState extends CrudState<LanguagesModel> {
diff --git a/src/app/shared/license.state.ts b/src/app/shared/license.state.ts
index 1d436f959..f14f63093 100644
--- a/src/app/shared/license.state.ts
+++ b/src/app/shared/license.state.ts
@@ -1,6 +1,6 @@
 import {LicensesModel} from "@app/generated-api";
 import {CrudNameSpace} from "@app/shared/crud.namespace";
-import {CrudState, CrudStateModel} from "@app/shared/crud.state";
+import {CrudState, CrudStateModel, defaultCrudStateInitValue} from "@app/shared/crud.state";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
@@ -17,11 +17,7 @@ export interface LicenseStateModel extends CrudStateModel<LicensesModel> {
 @State<LicenseStateModel>({
   name: StateEnum.license,
   defaults: {
-    total: 0,
-    isLoading: false,
-    list: [],
-    current: null,
-    queryParameters: new QueryParametersModel(),
+    ...defaultCrudStateInitValue,
   },
 })
 export class LicenseState extends CrudState<LicensesModel> {
diff --git a/src/app/shared/organizational-unit-submission-policy.state.ts b/src/app/shared/organizational-unit-submission-policy.state.ts
index b3abfba1d..e549169ed 100644
--- a/src/app/shared/organizational-unit-submission-policy.state.ts
+++ b/src/app/shared/organizational-unit-submission-policy.state.ts
@@ -2,7 +2,7 @@ import {AppStateModel} from "@app/app.state";
 import {ApiService} from "@app/core/http/api.service";
 import {NotificationService} from "@app/core/services/notification.service";
 import {OrganizationalUnitsModel, SubmissionPoliciesModel} from "@app/generated-api";
-import {CrudTwoTiersState, CrudTwoTiersStateModel} from "@app/shared/crud-two-tiers.state";
+import {CrudTwoTiersState, CrudTwoTiersStateModel, defaultCrudTwoTiersStateInitValue} from "@app/shared/crud-two-tiers.state";
 import {CrudTwoTiersNameSpace} from "@app/shared/crud.namespace";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {AccessResourceApiEnum, AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
@@ -23,10 +23,7 @@ export interface OrganizationalUnitSubmissionPolicyStateModel extends CrudTwoTie
 @State<OrganizationalUnitSubmissionPolicyStateModel>({
   name: StateEnum.organizationalUnitSubResourceSubmissionPolicy,
   defaults: {
-    total: 0,
-    isLoading: false,
-    selected: [],
-    queryParameters: new QueryParametersModel(),
+    ...defaultCrudTwoTiersStateInitValue,
   },
 })
 export class OrganizationalUnitSubmissionPolicyState extends CrudTwoTiersState<OrganizationalUnitsModel> {
diff --git a/src/app/shared/organizational-unit.state.ts b/src/app/shared/organizational-unit.state.ts
index 4434ab0a3..2876b16aa 100644
--- a/src/app/shared/organizational-unit.state.ts
+++ b/src/app/shared/organizational-unit.state.ts
@@ -5,7 +5,7 @@ import {NotificationService} from "@app/core/services/notification.service";
 import {DepositStateModel} from "@app/deposit/deposit.state";
 import {OrganizationalUnitsModel} from "@app/generated-api";
 import {CrudNameSpace} from "@app/shared/crud.namespace";
-import {CrudState, CrudStateModel} from "@app/shared/crud.state";
+import {CrudState, CrudStateModel, defaultCrudStateInitValue} from "@app/shared/crud.state";
 import {OverrideCrudAction} from "@app/shared/decorators/crud.decorator";
 import {AccessResourceApiEnum, AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {ModelAttributeEnum} from "@app/shared/enums/model-attribute.enum";
@@ -33,11 +33,7 @@ export interface OrganizationalUnitStateModel extends CrudStateModel<Organizatio
 @State<OrganizationalUnitStateModel>({
   name: StateEnum.organizationalUnit,
   defaults: {
-    total: 0,
-    isLoading: false,
-    list: [],
-    current: null,
-    queryParameters: new QueryParametersModel(),
+    ...defaultCrudStateInitValue,
   },
   children: [
     OrganizationalUnitSubmissionPolicyState,
diff --git a/src/app/shared/preservation-policy.state.ts b/src/app/shared/preservation-policy.state.ts
index 7786ef9a1..b1250f579 100644
--- a/src/app/shared/preservation-policy.state.ts
+++ b/src/app/shared/preservation-policy.state.ts
@@ -1,6 +1,6 @@
 import {PreservationPoliciesModel} from "@app/generated-api";
 import {CrudNameSpace} from "@app/shared/crud.namespace";
-import {CrudState, CrudStateModel} from "@app/shared/crud.state";
+import {CrudState, CrudStateModel, defaultCrudStateInitValue} from "@app/shared/crud.state";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
@@ -16,11 +16,7 @@ export interface PreservationPolicyStateModel extends CrudStateModel<Preservatio
 @State<PreservationPolicyStateModel>({
   name: StateEnum.preservationPolicy,
   defaults: {
-    total: 0,
-    isLoading: false,
-    list: [],
-    current: null,
-    queryParameters: new QueryParametersModel(),
+    ...defaultCrudStateInitValue,
   },
 })
 export class PreservationPolicyState extends CrudState<PreservationPoliciesModel> {
diff --git a/src/app/shared/submission-policy.state.ts b/src/app/shared/submission-policy.state.ts
index e7c2c3b03..3bd896a16 100644
--- a/src/app/shared/submission-policy.state.ts
+++ b/src/app/shared/submission-policy.state.ts
@@ -1,6 +1,6 @@
 import {SubmissionPoliciesModel} from "@app/generated-api";
 import {CrudNameSpace} from "@app/shared/crud.namespace";
-import {CrudState, CrudStateModel} from "@app/shared/crud.state";
+import {CrudState, CrudStateModel, defaultCrudStateInitValue} from "@app/shared/crud.state";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
@@ -16,11 +16,7 @@ export interface SubmissionPolicyStateModel extends CrudStateModel<SubmissionPol
 @State<SubmissionPolicyStateModel>({
   name: StateEnum.submissionPolicy,
   defaults: {
-    total: 0,
-    isLoading: false,
-    list: [],
-    current: null,
-    queryParameters: new QueryParametersModel(),
+    ...defaultCrudStateInitValue,
   },
 })
 export class SubmissionPolicyState extends CrudState<SubmissionPoliciesModel> {
-- 
GitLab