From 50804a6f8a0a2749cde4f9c1037082a6f06852cf Mon Sep 17 00:00:00 2001
From: Yoan VALLET <ext.sopra.yvallet@grandlyon.com>
Date: Tue, 22 Sep 2020 21:38:36 +0200
Subject: [PATCH] feat: replace context from header

---
 src/atoms/modal.state.ts                      |   7 +
 ...TypeState.state.ts => screenType.state.ts} |   0
 src/components/App.jsx                        |   8 +-
 .../EcogesturesContainer.tsx                  |   6 +-
 .../FeedbackContainer/FeedbackContainer.tsx   |  20 ---
 .../ScrollToTop/ScrollToTop.tsx               |   2 +-
 ...AvailableChallengeDetailsViewContainer.tsx |   8 +-
 .../ViewContainer/ChallengesViewContainer.tsx |   6 +-
 .../ViewContainer/FAQViewContainer.tsx        |   6 +-
 .../FinishedChallengeDetailsViewContainer.tsx |   6 +-
 .../ViewContainer/HomeViewContainer.tsx       |   6 +-
 .../LegalNoticeViewContainer.tsx              |   6 +-
 .../LockedChallengeDetailsViewContainer.tsx   |   8 +-
 .../OngoingChallengeDetailsViewContainer.tsx  |   8 +-
 .../ViewContainer/ParametersViewContainer.tsx |   6 +-
 .../ViewContainer/ProfileViewContainer.tsx    |   6 +-
 .../SingleFluidViewContainer.tsx              |   6 +-
 .../ViewContainer/ViewContainer.tsx           | 139 ------------------
 .../Content/Content.tsx                       |  21 ++-
 .../Feedback/FeedbackModal.tsx                |   6 +-
 .../CozyBar => Header}/CozyBar.tsx            |  18 ++-
 .../Header/Header.tsx                         |  17 ++-
 .../Splash/SplashRoot.tsx                     |   0
 .../Splash/SplashScreen.tsx                   |   0
 .../Splash/SplashScreenError.tsx              |   0
 .../WelcomeModal.tsx}                         |  12 +-
 src/models/index.ts                           |   1 +
 src/models/modal.model.ts                     |   3 +
 28 files changed, 105 insertions(+), 227 deletions(-)
 create mode 100644 src/atoms/modal.state.ts
 rename src/atoms/{screenTypeState.state.ts => screenType.state.ts} (100%)
 delete mode 100644 src/components/ContainerComponents/FeedbackContainer/FeedbackContainer.tsx
 delete mode 100644 src/components/ContainerComponents/ViewContainer/ViewContainer.tsx
 rename src/components/{ContainerComponents => }/Content/Content.tsx (75%)
 rename src/components/{ContentComponents => }/Feedback/FeedbackModal.tsx (98%)
 rename src/components/{ContainerComponents/CozyBar => Header}/CozyBar.tsx (77%)
 rename src/components/{ContainerComponents => }/Header/Header.tsx (86%)
 rename src/components/{ContentComponents => }/Splash/SplashRoot.tsx (100%)
 rename src/components/{ContentComponents => }/Splash/SplashScreen.tsx (100%)
 rename src/components/{ContentComponents => }/Splash/SplashScreenError.tsx (100%)
 rename src/components/{ContainerComponents/WelcomeModalContainer/WelcomeModalContainer.tsx => Welcome/WelcomeModal.tsx} (88%)
 create mode 100644 src/models/modal.model.ts

diff --git a/src/atoms/modal.state.ts b/src/atoms/modal.state.ts
new file mode 100644
index 000000000..8bf6adf56
--- /dev/null
+++ b/src/atoms/modal.state.ts
@@ -0,0 +1,7 @@
+import { ModalState } from 'models/modal.model'
+import { atom } from 'recoil'
+
+export const modalState = atom<ModalState>({
+  key: 'modalState',
+  default: { feedbackModal: false },
+})
diff --git a/src/atoms/screenTypeState.state.ts b/src/atoms/screenType.state.ts
similarity index 100%
rename from src/atoms/screenTypeState.state.ts
rename to src/atoms/screenType.state.ts
diff --git a/src/components/App.jsx b/src/components/App.jsx
index 61bcd4be5..4f6552540 100644
--- a/src/components/App.jsx
+++ b/src/components/App.jsx
@@ -9,10 +9,9 @@ import { Sprite as IconSprite } from 'cozy-ui/transpiled/react/Icon'
 import Routes from 'components/Routes/Routes'
 import Navbar from 'components/ContentComponents/Navbar/Navbar'
 import ScrollToTop from 'components/ContainerComponents/ScrollToTop/ScrollToTop'
-import FeedbackContainer from 'components/ContainerComponents/FeedbackContainer/FeedbackContainer'
-import SplashRoot from './ContentComponents/Splash/SplashRoot'
-import SplashScreen from 'components/ContentComponents/Splash/SplashScreen'
-import SplashScreenError from 'components/ContentComponents/Splash/SplashScreenError'
+import SplashRoot from './Splash/SplashRoot'
+import SplashScreen from 'components/Splash/SplashScreen'
+import SplashScreenError from 'components/Splash/SplashScreenError'
 
 export const history = createBrowserHistory()
 
@@ -27,7 +26,6 @@ export const App = () => {
           >
             <Navbar />
             <Main>
-              <FeedbackContainer />
               <Content className="app-content">
                 <ScrollToTop>
                   <Routes />
diff --git a/src/components/ContainerComponents/EcogestureContainer/EcogesturesContainer.tsx b/src/components/ContainerComponents/EcogestureContainer/EcogesturesContainer.tsx
index 8b9f6b9ca..412805709 100644
--- a/src/components/ContainerComponents/EcogestureContainer/EcogesturesContainer.tsx
+++ b/src/components/ContainerComponents/EcogestureContainer/EcogesturesContainer.tsx
@@ -1,8 +1,8 @@
 import React, { useEffect, useState } from 'react'
 import EcogesturesList from 'components/ContentComponents/EcogestureList/EcogestureList'
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
 
 const EcogesturesContainer: React.FC = () => {
   useEffect(() => {
diff --git a/src/components/ContainerComponents/FeedbackContainer/FeedbackContainer.tsx b/src/components/ContainerComponents/FeedbackContainer/FeedbackContainer.tsx
deleted file mode 100644
index cbe81713b..000000000
--- a/src/components/ContainerComponents/FeedbackContainer/FeedbackContainer.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React, { useContext } from 'react'
-import { AppContext } from 'components/Contexts/AppContextProvider'
-import FeedbackModal from 'components/ContentComponents/Feedback/FeedbackModal'
-
-const FeedbackContainer: React.FC = () => {
-  const { feedbackIsOpened, setFeedbackOpened } = useContext(AppContext)
-
-  const handleCloseClick = () => {
-    setFeedbackOpened(false)
-  }
-
-  return (
-    <FeedbackModal
-      opened={feedbackIsOpened}
-      handleCloseClick={handleCloseClick}
-    />
-  )
-}
-
-export default FeedbackContainer
diff --git a/src/components/ContainerComponents/ScrollToTop/ScrollToTop.tsx b/src/components/ContainerComponents/ScrollToTop/ScrollToTop.tsx
index 210526ff6..546818da1 100644
--- a/src/components/ContainerComponents/ScrollToTop/ScrollToTop.tsx
+++ b/src/components/ContainerComponents/ScrollToTop/ScrollToTop.tsx
@@ -1,6 +1,6 @@
 import React, { useEffect, Fragment } from 'react'
 import { withRouter } from 'react-router-dom'
-import { history } from 'components/ContainerComponents/ViewContainer/ViewContainer'
+import { history } from 'components/App'
 
 interface ScrollToTopProps {
   children?: React.ReactNode
diff --git a/src/components/ContainerComponents/ViewContainer/AvailableChallengeDetailsViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/AvailableChallengeDetailsViewContainer.tsx
index 2b0277187..59ffb0184 100644
--- a/src/components/ContainerComponents/ViewContainer/AvailableChallengeDetailsViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/AvailableChallengeDetailsViewContainer.tsx
@@ -10,10 +10,10 @@ import { ChallengeType, UserChallenge } from 'models'
 import ChallengeService from 'services/challenge.service'
 import ConsumptionService from 'services/consumption.service'
 
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
-import { history } from 'components/ContainerComponents/ViewContainer/ViewContainer'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
+import { history } from 'components/App'
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
 import StyledButtonValid from 'components/CommonKit/Button/StyledButtonValid'
 import AvailableChallengeIcon from 'assets/png/badges/available-big.png'
diff --git a/src/components/ContainerComponents/ViewContainer/ChallengesViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/ChallengesViewContainer.tsx
index 63e5d2b4a..136f998f0 100644
--- a/src/components/ContainerComponents/ViewContainer/ChallengesViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/ChallengesViewContainer.tsx
@@ -1,7 +1,7 @@
 import React, { useState } from 'react'
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
 import BadgesContainer from 'components/ContainerComponents/BadgesContainer/BadgesContainer'
 
 const ChallengesViewContainer: React.FC = () => {
diff --git a/src/components/ContainerComponents/ViewContainer/FAQViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/FAQViewContainer.tsx
index 2ea4bfe13..75fda62e4 100644
--- a/src/components/ContainerComponents/ViewContainer/FAQViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/FAQViewContainer.tsx
@@ -1,7 +1,7 @@
 import React, { useState } from 'react'
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
 import FAQ from 'components/ContentComponents/FAQ/FAQ'
 
 const EcoGesturesViewContainer: React.FC = () => {
diff --git a/src/components/ContainerComponents/ViewContainer/FinishedChallengeDetailsViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/FinishedChallengeDetailsViewContainer.tsx
index 70cc776d2..c208d3a8e 100644
--- a/src/components/ContainerComponents/ViewContainer/FinishedChallengeDetailsViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/FinishedChallengeDetailsViewContainer.tsx
@@ -8,9 +8,9 @@ import { ScreenType } from 'enum/screen.enum'
 import { UserChallenge } from 'models'
 import { formatNumberValues } from 'utils/utils'
 
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
 import StarIcon from 'assets/png/challenge/star.png'
 import EcogestureModal from 'components/ContentComponents/EcogestureModal/EcogestureModal'
diff --git a/src/components/ContainerComponents/ViewContainer/HomeViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/HomeViewContainer.tsx
index 24065c100..48094fe48 100644
--- a/src/components/ContainerComponents/ViewContainer/HomeViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/HomeViewContainer.tsx
@@ -3,9 +3,9 @@ import React, { useState, useContext, useEffect } from 'react'
 import { TimeStep } from 'enum/timeStep.enum'
 
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
 import FluidContainer from 'components/ContainerComponents/FluidChartContainer/FluidChartContainer'
 import ConsumptionNavigator from 'components/ContentComponents/ConsumptionNavigator/ConsumptionNavigator'
 import { AppContext } from 'components/Contexts/AppContextProvider'
diff --git a/src/components/ContainerComponents/ViewContainer/LegalNoticeViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/LegalNoticeViewContainer.tsx
index ac17fa31b..398bba123 100644
--- a/src/components/ContainerComponents/ViewContainer/LegalNoticeViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/LegalNoticeViewContainer.tsx
@@ -1,7 +1,7 @@
 import React, { useState } from 'react'
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
 
 const LegalNoticeViewContainer: React.FC = () => {
   const [headerHeight, setHeaderHeight] = useState<number>(0)
diff --git a/src/components/ContainerComponents/ViewContainer/LockedChallengeDetailsViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/LockedChallengeDetailsViewContainer.tsx
index 1352a5308..71b37689e 100644
--- a/src/components/ContainerComponents/ViewContainer/LockedChallengeDetailsViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/LockedChallengeDetailsViewContainer.tsx
@@ -6,10 +6,10 @@ import { Client, withClient } from 'cozy-client'
 import { ScreenType } from 'enum/screen.enum'
 import { ChallengeType } from 'models'
 
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
-import { history } from 'components/ContainerComponents/ViewContainer/ViewContainer'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
+import { history } from 'components/App'
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
 import StyledButtonValid from 'components/CommonKit/Button/StyledButtonValid'
 import { AppContext } from 'components/Contexts/AppContextProvider'
diff --git a/src/components/ContainerComponents/ViewContainer/OngoingChallengeDetailsViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/OngoingChallengeDetailsViewContainer.tsx
index 96fbdb402..b659cbd89 100644
--- a/src/components/ContainerComponents/ViewContainer/OngoingChallengeDetailsViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/OngoingChallengeDetailsViewContainer.tsx
@@ -9,10 +9,10 @@ import { UserChallenge } from 'models'
 import ChallengeService from 'services/challenge.service'
 import { formatCompareChallengeDate } from 'utils/date'
 
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
-import { history } from 'components/ContainerComponents/ViewContainer/ViewContainer'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
+import { history } from 'components/App'
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
 import EcogestureModal from 'components/ContentComponents/EcogestureModal/EcogestureModal'
 import EcogestureCard from 'components/ContentComponents/EcogestureCard/EcogestureCard'
diff --git a/src/components/ContainerComponents/ViewContainer/ParametersViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/ParametersViewContainer.tsx
index a8cb1fc4e..64bc7b508 100644
--- a/src/components/ContainerComponents/ViewContainer/ParametersViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/ParametersViewContainer.tsx
@@ -1,7 +1,7 @@
 import React, { useState } from 'react'
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
 import FAQContainer from 'components/ContainerComponents/FAQContainer/FAQContainer'
 import LegalNoticeContainer from 'components/ContainerComponents/LegalNoticeContainer/LegalNoticeContainer'
 import Version from 'components/ContentComponents/Version/Version'
diff --git a/src/components/ContainerComponents/ViewContainer/ProfileViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/ProfileViewContainer.tsx
index e6aceefc3..7ee82f137 100644
--- a/src/components/ContainerComponents/ViewContainer/ProfileViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/ProfileViewContainer.tsx
@@ -1,7 +1,7 @@
 import React, { useState } from 'react'
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
 import KonnectorViewerContainer from 'components/ContainerComponents/KonnectorViewerContainer/KonnectorViewerContainer'
 import Report from 'components/ContentComponents/Report/Report'
 
diff --git a/src/components/ContainerComponents/ViewContainer/SingleFluidViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/SingleFluidViewContainer.tsx
index bec27b6b6..ecf3eb73a 100644
--- a/src/components/ContainerComponents/ViewContainer/SingleFluidViewContainer.tsx
+++ b/src/components/ContainerComponents/ViewContainer/SingleFluidViewContainer.tsx
@@ -1,8 +1,8 @@
 import React, { useState, useContext } from 'react'
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
-import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar'
-import Header from 'components/ContainerComponents/Header/Header'
-import Content from 'components/ContainerComponents/Content/Content'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
 import FluidChartContainer from 'components/ContainerComponents/FluidChartContainer/FluidChartContainer'
 import { FluidType } from 'enum/fluid.enum'
 import { TimeStep } from 'enum/timeStep.enum'
diff --git a/src/components/ContainerComponents/ViewContainer/ViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/ViewContainer.tsx
deleted file mode 100644
index 989be9fe4..000000000
--- a/src/components/ContainerComponents/ViewContainer/ViewContainer.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-import React from 'react'
-import { Route, Switch, Redirect, HashRouter } from 'react-router-dom'
-import { createBrowserHistory } from 'history'
-import { Layout, Main, Content } from 'cozy-ui/transpiled/react/Layout'
-import { Sprite as IconSprite } from 'cozy-ui/transpiled/react/Icon'
-import { FluidType } from 'enum/fluid.enum'
-
-import AppContextProvider from 'components/Contexts/AppContextProvider'
-import Navbar from 'components/ContentComponents/Navbar/Navbar'
-import ScrollToTop from 'components/ContainerComponents/ScrollToTop/ScrollToTop'
-import HomeViewContainer from 'components/ContainerComponents/ViewContainer/HomeViewContainer'
-import ChallengesViewContainer from 'components/ContainerComponents/ViewContainer/ChallengesViewContainer'
-import SingleFluidViewContainer from './SingleFluidViewContainer'
-import ParametersViewContainer from 'components/ContainerComponents/ViewContainer/ParametersViewContainer'
-import FAQViewContainer from 'components/ContainerComponents/ViewContainer/FAQViewContainer'
-import FinishedChallengeDetailsViewContainer from './FinishedChallengeDetailsViewContainer'
-import OngoingChallengeDetailsViewContainer from './OngoingChallengeDetailsViewContainer'
-import LockedChallengeDetailsViewContainer from './LockedChallengeDetailsViewContainer'
-import AvailableChallengeDetailsViewContainer from './AvailableChallengeDetailsViewContainer'
-import SplashContainer from 'components/ContainerComponents/SplashContainer/SplashContainer'
-import LegalNoticeViewContainer from './LegalNoticeViewContainer'
-import FeedbackContainer from 'components/ContainerComponents/FeedbackContainer/FeedbackContainer'
-import EcogesturesContainer from 'components/ContainerComponents/EcogestureContainer/EcogesturesContainer'
-import ProfileViewContainer from './ProfileViewContainer'
-
-export const history = createBrowserHistory()
-
-export const ViewContainer = () => {
-  return (
-    <HashRouter {...history}>
-      <Layout>
-        <AppContextProvider>
-          <Navbar />
-          <Main>
-            <FeedbackContainer />
-            <Content className="app-content">
-              <ScrollToTop>
-                <Switch>
-                  <Route
-                    path="/consumption"
-                    render={({ match: { url } }) => (
-                      <>
-                        <Route
-                          path={`${url}/electricité`}
-                          component={() => (
-                            <SingleFluidViewContainer
-                              fluidTypes={[FluidType.ELECTRICITY]}
-                            />
-                          )}
-                        />
-                        <Route
-                          path={`${url}/eau`}
-                          component={() => (
-                            <SingleFluidViewContainer
-                              fluidTypes={[FluidType.WATER]}
-                            />
-                          )}
-                        />
-                        <Route
-                          path={`${url}/gaz`}
-                          component={() => (
-                            <SingleFluidViewContainer
-                              fluidTypes={[FluidType.GAS]}
-                            />
-                          )}
-                        />
-                        <Route
-                          path={`${url}/`}
-                          component={HomeViewContainer}
-                          exact
-                        />
-                      </>
-                    )}
-                  />
-                  <Route
-                    path="/challenges"
-                    render={({ match: { url } }) => (
-                      <>
-                        <Route
-                          path={`${url}/locked`}
-                          component={LockedChallengeDetailsViewContainer}
-                        />
-                        <Route
-                          path={`${url}/available`}
-                          component={AvailableChallengeDetailsViewContainer}
-                        />
-                        <Route
-                          path={`${url}/ongoing`}
-                          component={OngoingChallengeDetailsViewContainer}
-                        />
-                        <Route
-                          path={`${url}/finished`}
-                          component={FinishedChallengeDetailsViewContainer}
-                        />
-                        <Route
-                          path={`${url}/`}
-                          component={ChallengesViewContainer}
-                          exact
-                        />
-                      </>
-                    )}
-                  />
-                  <Route
-                    path="/parameters"
-                    render={({ match: { url } }) => (
-                      <>
-                        <Route
-                          path={`${url}/FAQ`}
-                          component={FAQViewContainer}
-                        />
-                        <Route
-                          path={`${url}/legalnotice`}
-                          component={LegalNoticeViewContainer}
-                        />
-                        <Route
-                          path={`${url}/`}
-                          component={ParametersViewContainer}
-                          exact
-                        />
-                      </>
-                    )}
-                  />
-                  <Route path="/ecogestures" component={EcogesturesContainer} />
-                  <Route path="/profile" component={ProfileViewContainer} />
-                  <Route path="/splash" component={SplashContainer} />
-                  <Redirect from="/" to="/consumption" />
-                  <Redirect from="*" to="/consumption" />
-                </Switch>
-              </ScrollToTop>
-            </Content>
-          </Main>
-          <IconSprite />
-        </AppContextProvider>
-      </Layout>
-    </HashRouter>
-  )
-}
-
-export default ViewContainer
diff --git a/src/components/ContainerComponents/Content/Content.tsx b/src/components/Content/Content.tsx
similarity index 75%
rename from src/components/ContainerComponents/Content/Content.tsx
rename to src/components/Content/Content.tsx
index 3a9b90d33..4f7723c99 100644
--- a/src/components/ContainerComponents/Content/Content.tsx
+++ b/src/components/Content/Content.tsx
@@ -3,12 +3,14 @@ import { useClient } from 'cozy-client'
 import { useRecoilState } from 'recoil'
 
 import { ScreenType } from 'enum/screen.enum'
-import { UserProfile } from 'models'
+import { ModalState, UserProfile } from 'models'
 import { userProfileState } from 'atoms/userProfile.state'
-import { screenTypeState } from 'atoms/screenTypeState.state'
+import { screenTypeState } from 'atoms/screenType.state'
+import { modalState } from 'atoms/modal.state'
 import UserProfileService from 'services/userProfile.service'
 
-import WelcomeModalContainer from '../WelcomeModalContainer/WelcomeModalContainer'
+import WelcomeModal from 'components/Welcome/WelcomeModal'
+import FeedbackModal from 'components/Feedback/FeedbackModal'
 
 interface ContentProps {
   children?: React.ReactNode
@@ -31,6 +33,7 @@ const Content: React.FC<ContentProps> = ({
   const [userProfile, setUserProfile] = useRecoilState<UserProfile>(
     userProfileState
   )
+  const [modal, setModalState] = useRecoilState<ModalState>(modalState)
 
   const setWelcomeModalViewed = useCallback(() => {
     const userProfileService = new UserProfileService(client)
@@ -41,6 +44,10 @@ const Content: React.FC<ContentProps> = ({
       })
   }, [setUserProfile])
 
+  const handleFeedbackModalClose = () => {
+    setModalState((prev: ModalState) => ({ ...prev, feedbackModal: false }))
+  }
+
   useEffect(() => {
     function handleResize() {
       if (innerWidth <= 768) {
@@ -60,9 +67,13 @@ const Content: React.FC<ContentProps> = ({
 
   return (
     <>
-      <WelcomeModalContainer
+      <WelcomeModal
         open={!userProfile.haveSeenWelcomeModal}
-        handleClose={setWelcomeModalViewed}
+        handleCloseClick={setWelcomeModalViewed}
+      />
+      <FeedbackModal
+        open={modal.feedbackModal}
+        handleCloseClick={handleFeedbackModalClose}
       />
       <div
         className="content-view"
diff --git a/src/components/ContentComponents/Feedback/FeedbackModal.tsx b/src/components/Feedback/FeedbackModal.tsx
similarity index 98%
rename from src/components/ContentComponents/Feedback/FeedbackModal.tsx
rename to src/components/Feedback/FeedbackModal.tsx
index 191bb7e9c..1e9b47bbd 100644
--- a/src/components/ContentComponents/Feedback/FeedbackModal.tsx
+++ b/src/components/Feedback/FeedbackModal.tsx
@@ -21,14 +21,14 @@ const FEEDBACK_EMAIL = 'ecolyo@grandlyon.com'
 const browser = detect()
 
 interface FeedbackModalProps {
-  opened: boolean
+  open: boolean
   handleCloseClick: () => void
   t: Function
   client: Client
 }
 
 const FeedbackModal: React.FC<FeedbackModalProps> = ({
-  opened,
+  open,
   handleCloseClick,
   t,
   client,
@@ -159,7 +159,7 @@ const FeedbackModal: React.FC<FeedbackModalProps> = ({
   }
 
   return (
-    <Modal open={opened} yellowBorder={true} handleCloseClick={closeModal}>
+    <Modal open={open} yellowBorder={true} handleCloseClick={closeModal}>
       {sent ? (
         <div className="fb-root">
           <div className="fb-content">
diff --git a/src/components/ContainerComponents/CozyBar/CozyBar.tsx b/src/components/Header/CozyBar.tsx
similarity index 77%
rename from src/components/ContainerComponents/CozyBar/CozyBar.tsx
rename to src/components/Header/CozyBar.tsx
index 4a4769f71..0254fcc3b 100644
--- a/src/components/ContainerComponents/CozyBar/CozyBar.tsx
+++ b/src/components/Header/CozyBar.tsx
@@ -1,10 +1,15 @@
-import React, { useContext } from 'react'
-import { ScreenType } from 'enum/screen.enum'
-import { history } from 'components/ContainerComponents/ViewContainer/ViewContainer'
+import React from 'react'
+import { history } from 'components/App'
 import { translate } from 'cozy-ui/react/I18n'
+import { useRecoilValue, useSetRecoilState } from 'recoil'
+
+import { ScreenType } from 'enum/screen.enum'
+import { ModalState } from 'models'
+import { modalState } from 'atoms/modal.state'
+import { screenTypeState } from 'atoms/screenType.state'
+
 import BackArrowIcon from 'assets/icons/ico/back-arrow.svg'
 import FeedbacksIcon from 'assets/icons/ico/feedbacks.svg'
-import { AppContext } from 'components/Contexts/AppContextProvider'
 import StyledIconButton from 'components/CommonKit/IconButton/StyledIconButton'
 
 interface CozyBarProps {
@@ -19,14 +24,15 @@ const CozyBar = ({
   t,
 }: CozyBarProps) => {
   const { BarLeft, BarCenter, BarRight } = cozy.bar
-  const { screenType, setFeedbackOpened } = useContext(AppContext)
+  const screenType = useRecoilValue(screenTypeState)
+  const setModalState = useSetRecoilState(modalState)
 
   const handleClickBack = () => {
     history.goBack()
   }
 
   const handleClickFeedbacks = () => {
-    setFeedbackOpened(true)
+    setModalState((prev: ModalState) => ({ ...prev, feedbackModal: true }))
   }
 
   const cozyBarCustom = (screen?: ScreenType) => {
diff --git a/src/components/ContainerComponents/Header/Header.tsx b/src/components/Header/Header.tsx
similarity index 86%
rename from src/components/ContainerComponents/Header/Header.tsx
rename to src/components/Header/Header.tsx
index 748daf599..c157becb8 100644
--- a/src/components/ContainerComponents/Header/Header.tsx
+++ b/src/components/Header/Header.tsx
@@ -1,8 +1,13 @@
-import React, { useEffect, useRef, useContext } from 'react'
+import React, { useEffect, useRef } from 'react'
 import { translate } from 'cozy-ui/react/I18n'
-import { history } from 'components/ContainerComponents/ViewContainer/ViewContainer'
+import { useRecoilValue, useSetRecoilState } from 'recoil'
+import { history } from 'components/App'
+
 import { ScreenType } from 'enum/screen.enum'
-import { AppContext } from 'components/Contexts/AppContextProvider'
+import { ModalState } from 'models'
+import { modalState } from 'atoms/modal.state'
+import { screenTypeState } from 'atoms/screenType.state'
+
 import BackArrowIcon from 'assets/icons/ico/back-arrow.svg'
 import FeedbacksIcon from 'assets/icons/ico/feedbacks.svg'
 import StyledIconButton from 'components/CommonKit/IconButton/StyledIconButton'
@@ -25,7 +30,9 @@ const Header: React.FC<HeaderProps> = ({
   t,
 }: HeaderProps) => {
   const header = useRef(null)
-  const { screenType, setFeedbackOpened } = useContext(AppContext)
+  const screenType = useRecoilValue(screenTypeState)
+  const setModalState = useSetRecoilState(modalState)
+
   const cozyBarHeight = 48
   const headerBottomHeight = 8
 
@@ -34,7 +41,7 @@ const Header: React.FC<HeaderProps> = ({
   }
 
   const handleClickFeedbacks = () => {
-    setFeedbackOpened(true)
+    setModalState((prev: ModalState) => ({ ...prev, feedbackModal: true }))
   }
 
   useEffect(() => {
diff --git a/src/components/ContentComponents/Splash/SplashRoot.tsx b/src/components/Splash/SplashRoot.tsx
similarity index 100%
rename from src/components/ContentComponents/Splash/SplashRoot.tsx
rename to src/components/Splash/SplashRoot.tsx
diff --git a/src/components/ContentComponents/Splash/SplashScreen.tsx b/src/components/Splash/SplashScreen.tsx
similarity index 100%
rename from src/components/ContentComponents/Splash/SplashScreen.tsx
rename to src/components/Splash/SplashScreen.tsx
diff --git a/src/components/ContentComponents/Splash/SplashScreenError.tsx b/src/components/Splash/SplashScreenError.tsx
similarity index 100%
rename from src/components/ContentComponents/Splash/SplashScreenError.tsx
rename to src/components/Splash/SplashScreenError.tsx
diff --git a/src/components/ContainerComponents/WelcomeModalContainer/WelcomeModalContainer.tsx b/src/components/Welcome/WelcomeModal.tsx
similarity index 88%
rename from src/components/ContainerComponents/WelcomeModalContainer/WelcomeModalContainer.tsx
rename to src/components/Welcome/WelcomeModal.tsx
index 7764d0850..7196a53c8 100644
--- a/src/components/ContainerComponents/WelcomeModalContainer/WelcomeModalContainer.tsx
+++ b/src/components/Welcome/WelcomeModal.tsx
@@ -7,14 +7,14 @@ import userInstanceSettings from 'components/Hooks/userInstanceSettings'
 
 interface WelcomeModalContainerProps {
   open: boolean
-  handleClose: () => void
+  handleCloseClick: () => void
   t: Function
   client: Client
 }
 
 const WelcomeModalContainer: React.FC<WelcomeModalContainerProps> = ({
   open,
-  handleClose,
+  handleCloseClick,
   t,
   client,
 }: WelcomeModalContainerProps) => {
@@ -22,7 +22,11 @@ const WelcomeModalContainer: React.FC<WelcomeModalContainerProps> = ({
 
   return (
     <React.Fragment>
-      <Modal open={open} handleCloseClick={handleClose} yellowBorder={true}>
+      <Modal
+        open={open}
+        handleCloseClick={handleCloseClick}
+        yellowBorder={true}
+      >
         <div className="wm-header text-24-bold">
           {t('COMMON.WELCOME_MODAL_TITLE')}
         </div>
@@ -38,7 +42,7 @@ const WelcomeModalContainer: React.FC<WelcomeModalContainerProps> = ({
         <div className="wm-connect text-18-bold">
           {t('COMMON.WELCOME_MODAL_CONNECT')}
         </div>
-        <StyledButton className="button-ok" onClick={handleClose}>
+        <StyledButton className="button-ok" onClick={handleCloseClick}>
           {t('COMMON.WELCOME_MODAL_OK')}
         </StyledButton>
       </Modal>
diff --git a/src/models/index.ts b/src/models/index.ts
index 913cdf4da..88c73990f 100644
--- a/src/models/index.ts
+++ b/src/models/index.ts
@@ -7,6 +7,7 @@ export * from './ecogesture.model'
 export * from './fluid.model'
 export * from './indicator.model'
 export * from './konnector.model'
+export * from './modal.model'
 export * from './timePeriod.model'
 export * from './trigger.model'
 export * from './userProfile.model'
diff --git a/src/models/modal.model.ts b/src/models/modal.model.ts
new file mode 100644
index 000000000..9eb06e785
--- /dev/null
+++ b/src/models/modal.model.ts
@@ -0,0 +1,3 @@
+export interface ModalState {
+  feedbackModal: boolean
+}
-- 
GitLab