From bcee4ce2ebe28537486bd6eb4941a38e9bac40dd Mon Sep 17 00:00:00 2001
From: Yoan VALLET <ext.sopra.yvallet@grandlyon.com>
Date: Tue, 1 Dec 2020 16:01:50 +0100
Subject: [PATCH] feat: set userSeasonList on init

---
 src/components/Splash/SplashRoot.tsx   | 12 +++++++++---
 src/services/initialization.service.ts | 24 ++++++++++++++++++++++++
 src/services/season.service.ts         | 11 +++--------
 3 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/src/components/Splash/SplashRoot.tsx b/src/components/Splash/SplashRoot.tsx
index d2db9dd99..e3b5b1b88 100644
--- a/src/components/Splash/SplashRoot.tsx
+++ b/src/components/Splash/SplashRoot.tsx
@@ -7,6 +7,7 @@ import {
   setFluidStatus,
 } from 'store/global/global.actions'
 import { updateProfile } from 'store/profile/profile.actions'
+import { setUserSeasonList } from 'store/season/season.actions'
 import InitializationService from 'services/initialization.service'
 
 interface SplashRootProps {
@@ -65,14 +66,12 @@ const SplashRoot = ({
           ) {
             profile = resultEcogesture.profile
           }
-          // TODO add initSeasons
           const resultBoss = await initializationService.initBossEntity(
             profile.bossHash
           )
           if (subscribed && resultBoss.result && resultBoss.profile) {
             profile = resultBoss.profile
           }
-
           const resultSeasonEntity = await initializationService.initSeasonEntity(
             profile.seasonHash
           )
@@ -92,7 +91,14 @@ const SplashRoot = ({
         }
         // Init Fluid status
         const fluidStatus = await initializationService.initFluidStatus()
-        dispatch(setFluidStatus(fluidStatus))
+        if (subscribed) {
+          dispatch(setFluidStatus(fluidStatus))
+        }
+        // Init Season
+        const userSeasonList = await initializationService.initUserSeasons()
+        if (subscribed) {
+          dispatch(setUserSeasonList(userSeasonList))
+        }
         // Update state
         setState(prev => ({
           ...prev,
diff --git a/src/services/initialization.service.ts b/src/services/initialization.service.ts
index ce0a6c2e4..bbc452881 100644
--- a/src/services/initialization.service.ts
+++ b/src/services/initialization.service.ts
@@ -564,6 +564,30 @@ export default class InitializationService {
     }
   }
 
+  /*
+   * Build the userSeasonList
+   * sucess return: UserSeason[]
+   * failure throw error
+   */
+  public async initUserSeasons(): Promise<UserSeason[]> {
+    const seasonService = new SeasonService(this._client)
+    try {
+      const userSeasonList = await seasonService.buildUserSeasonList()
+      if (userSeasonList) {
+        console.log(
+          '%c Initialization: Seasons loaded',
+          'background: #222; color: white'
+        )
+        return userSeasonList
+      } else {
+        throw new Error('initUserSeasons: userSeasonList not found')
+      }
+    } catch (error) {
+      console.log('Initialization error: ', error)
+      throw error
+    }
+  }
+
   /*
    * For each fluid get the trigger status and the last data date
    * sucess return: FluidStatus[]
diff --git a/src/services/season.service.ts b/src/services/season.service.ts
index 393ebac12..64289d4d0 100644
--- a/src/services/season.service.ts
+++ b/src/services/season.service.ts
@@ -25,7 +25,7 @@ export default class SeasonService {
   public formatToUserSeason(season: SeasonEntity): UserSeason {
     const bossService = new BossService(this._client)
 
-    const userBoss = bossService.formatToUserBoss(season.boss)
+    const userBoss: Boss = bossService.formatToUserBoss(season.boss)
     const userSeason: UserSeason = {
       id: season.id,
       title: season.title,
@@ -61,19 +61,14 @@ export default class SeasonService {
     }: QueryResult<UserSeason[]> = await this._client.query(queryUserSeason)
 
     let buildList: UserSeason[] = []
-    if (!userSeason && seasonEntity) {
+    if (seasonEntity.length > 0 && userSeason.length === 0) {
       seasonEntity.forEach(season => {
         buildList.push(this.formatToUserSeason(season))
       })
       buildList = this.isAllSeasonLocked(buildList)
       return buildList
     }
-    if (
-      userSeason &&
-      userSeason.length !== 0 &&
-      seasonEntity &&
-      seasonEntity.length !== 0
-    ) {
+    if (userSeason.length !== 0 && seasonEntity.length !== 0) {
       seasonEntity.forEach(season => {
         if (userSeason.some(found => found.id === season.id)) {
           const foundSeason = userSeason.find(s => s.id === season.id)
-- 
GitLab