From 6b041e88ec5357a7f71a0b4b52b0d09186cc287b Mon Sep 17 00:00:00 2001
From: Florent Poittevin <florent.poittevin@unige.ch>
Date: Tue, 25 Jun 2019 09:19:22 +0200
Subject: [PATCH] Get shared resource only when needed

---
 src/app/app.component.ts                    |  2 --
 src/app/deposit/deposit.action.ts           | 21 +++++++++++++++++++
 src/app/deposit/deposit.state.ts            | 23 +++++++++++++++++++++
 src/app/deposit/views/create/create.view.ts |  6 ++++--
 src/app/deposit/views/detail/detail.view.ts |  2 ++
 src/app/deposit/views/edit/edit.view.ts     |  2 ++
 6 files changed, 52 insertions(+), 4 deletions(-)

diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index d5cf845df..2bb65000b 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -41,8 +41,6 @@ export class AppComponent extends BaseDirective implements OnInit {
   }
 
   ngOnInit(): void {
-    // TO FIX Should be in app.state init action but it's not detected in shared state...
-    this.store.dispatch(new GetAllResources());
   }
 
   useLanguage(language: LanguagesEnum): void {
diff --git a/src/app/deposit/deposit.action.ts b/src/app/deposit/deposit.action.ts
index 115ebfe99..f6f13e14c 100644
--- a/src/app/deposit/deposit.action.ts
+++ b/src/app/deposit/deposit.action.ts
@@ -24,6 +24,27 @@ import {StringUtil} from "@app/shared/utils/string.util";
 
 const state = StateEnum.deposit;
 
+export class DepositLoadResource {
+  static readonly type = StringUtil.format("[{0}] Load resource", state);
+
+  constructor() {
+  }
+}
+
+export class DepositLoadResourceSuccess {
+  static readonly type = StringUtil.format("[{0}] Load resource Success", state);
+
+  constructor() {
+  }
+}
+
+export class DepositLoadResourceFail {
+  static readonly type = StringUtil.format("[{0}] Load resource Fail", state);
+
+  constructor() {
+  }
+}
+
 export class DepositChangeQueryParameters extends ChangeQueryParametersCrud {
   static readonly type = StringUtil.format(ChangeQueryParametersCrud.abstractType, state);
 
diff --git a/src/app/deposit/deposit.state.ts b/src/app/deposit/deposit.state.ts
index e1cbca23f..c8b4501d0 100644
--- a/src/app/deposit/deposit.state.ts
+++ b/src/app/deposit/deposit.state.ts
@@ -12,6 +12,8 @@ import {
   DepositGetById,
   DepositGetByIdFail,
   DepositGetByIdSuccess,
+  DepositLoadResource,
+  DepositLoadResourceSuccess,
   DepositUpdate,
   DepositUpdateFail,
   DepositUpdateSuccess,
@@ -20,13 +22,18 @@ import {DepositsModel} from "@app/generated-api";
 import {CrudState, CrudStateModel} from "@app/shared/crud.state";
 import {PreIngestResourceApiEnum} from "@app/shared/enums/api.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
+import {LanguageGetAll} from "@app/shared/language.action";
+import {LicenseGetAll} from "@app/shared/license.action";
 import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
+import {PreservationPolicyGetAll} from "@app/shared/preservation-policy.action";
 import {ApiService} from "@app/shared/services/api.service";
+import {SubmissionPolicyGetAll} from "@app/shared/submission-policy.action";
 import {Action, State, StateContext} from "@ngxs/store";
 import {Observable} from "rxjs";
 
 export interface DepositStateModel extends CrudStateModel<DepositsModel> {
+  resourceIsLoading: boolean;
 }
 
 @State<DepositStateModel>({
@@ -37,6 +44,7 @@ export interface DepositStateModel extends CrudStateModel<DepositsModel> {
     list: [],
     current: null,
     queryParameters: new QueryParametersModel(),
+    resourceIsLoading: false,
   },
 })
 export class DepositState extends CrudState<DepositsModel> {
@@ -49,6 +57,21 @@ export class DepositState extends CrudState<DepositsModel> {
     this.urlResource = PreIngestResourceApiEnum.deposits;
   }
 
+  @Action(DepositLoadResource)
+  loadResource(ctx: StateContext<DepositStateModel>, action: DepositLoadResource): void {
+    ctx.patchState({
+      isLoading: true,
+    });
+
+    ctx.dispatch([
+      new LanguageGetAll(),
+      new LicenseGetAll(),
+      new PreservationPolicyGetAll(),
+      new SubmissionPolicyGetAll(),
+      new DepositLoadResourceSuccess(),
+    ]);
+  }
+
   @Action(DepositChangeQueryParameters)
   changeQueryParameters(ctx: StateContext<DepositStateModel>, action: DepositChangeQueryParameters): void {
     super.changeQueryParameters(ctx, action);
diff --git a/src/app/deposit/views/create/create.view.ts b/src/app/deposit/views/create/create.view.ts
index 7f1776314..93c7bf28a 100644
--- a/src/app/deposit/views/create/create.view.ts
+++ b/src/app/deposit/views/create/create.view.ts
@@ -1,12 +1,13 @@
 import {ChangeDetectionStrategy, Component, OnInit} from "@angular/core";
+import {DepositLoadResource} from "@app/deposit/deposit.action";
 import {DepositStateModel} from "@app/deposit/deposit.state";
 import {DepositsModel, LanguagesModel, LicensesModel, PreservationPoliciesModel, SubmissionPoliciesModel} from "@app/generated-api";
-import {OrgUnitGetAll} from "@app/shared/organizational-unit.action";
 import {OrganizationalUnitModule} from "@app/organizational-unit/organizational-unit.module";
-import {OrganizationalUnitStateModel} from "@app/shared/organizational-unit.state";
 import {StateEnum} from "@app/shared/enums/state.enum";
 import {LanguageStateModel} from "@app/shared/language.state";
 import {LicenseStateModel} from "@app/shared/license.state";
+import {OrgUnitGetAll} from "@app/shared/organizational-unit.action";
+import {OrganizationalUnitStateModel} from "@app/shared/organizational-unit.state";
 import {PreservationPolicyStateModel} from "@app/shared/preservation-policy.state";
 import {SharedStateModel} from "@app/shared/shared.state";
 import {SubmissionPolicyStateModel} from "@app/shared/submission-policy.state";
@@ -33,5 +34,6 @@ export class CreateView extends AbstractCreateView<DepositsModel, DepositStateMo
 
   ngOnInit() {
     this.store.dispatch(new OrgUnitGetAll());
+    this.store.dispatch(new DepositLoadResource());
   }
 }
diff --git a/src/app/deposit/views/detail/detail.view.ts b/src/app/deposit/views/detail/detail.view.ts
index 6714dc959..cbc71d25d 100644
--- a/src/app/deposit/views/detail/detail.view.ts
+++ b/src/app/deposit/views/detail/detail.view.ts
@@ -1,6 +1,7 @@
 import {ChangeDetectionStrategy, Component, OnInit} from "@angular/core";
 import {MatDialog} from "@angular/material";
 import {ActivatedRoute} from "@angular/router";
+import {DepositLoadResource} from "@app/deposit/deposit.action";
 import {DepositStateModel} from "@app/deposit/deposit.state";
 import {
   DepositsModel,
@@ -50,5 +51,6 @@ export class DetailView extends AbstractDetailView<DepositsModel, DepositStateMo
   ngOnInit() {
     super.ngOnInit();
     this.store.dispatch(new OrgUnitGetAll());
+    this.store.dispatch(new DepositLoadResource());
   }
 }
diff --git a/src/app/deposit/views/edit/edit.view.ts b/src/app/deposit/views/edit/edit.view.ts
index f9e570d41..ae89c4db0 100644
--- a/src/app/deposit/views/edit/edit.view.ts
+++ b/src/app/deposit/views/edit/edit.view.ts
@@ -1,5 +1,6 @@
 import {ChangeDetectionStrategy, Component, OnInit} from "@angular/core";
 import {ActivatedRoute} from "@angular/router";
+import {DepositLoadResource} from "@app/deposit/deposit.action";
 import {DepositStateModel} from "@app/deposit/deposit.state";
 import {DepositsModel, LanguagesModel, LicensesModel, PreservationPoliciesModel, SubmissionPoliciesModel} from "@app/generated-api";
 import {OrgUnitGetAll} from "@app/shared/organizational-unit.action";
@@ -36,5 +37,6 @@ export class EditView extends AbstractEditView<DepositsModel, DepositStateModel>
   ngOnInit() {
     super.ngOnInit();
     this.store.dispatch(new OrgUnitGetAll());
+    this.store.dispatch(new DepositLoadResource());
   }
 }
-- 
GitLab