diff --git a/package.json b/package.json index 4484c8f6ccec779e13fb4e00d22afeaa15d38af1..185c02638ea36c04302c32e9e579fc16d2f4f5ce 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "build": "yarn run build:css && yarn run build:browser", "release": "standard-version --no-verify", "winstack": "start powershell -command docker run --rm -it -p 8080:8080 -p 5984:5984 -p 8025:8025 -v $PWD/build:/data/cozy-app/ecolyo -v $PWD/data/konnectors_sources/:/data/cozy_konnectors/ -v $PWD/data:/usr/local/couchdb/data -v $PWD/docker/disableCSP.yaml:/etc/cozy/cozy.yaml registry.forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/cozy-env", - "linuxstack": "docker run --rm -it -p 8080:8080 -p 5984:5984 -p 8025:8025 -v $(pwd)/build:/data/cozy-app/ecolyo -v ~/cozy/data/db/konnectors_sources/:/data/cozy_konnectors/ -v ~/cozy/data/db:/usr/local/couchdb/data -v ~/cozy/data/storage:/data/cozy-storage -v $(pwd)/docker/disableCSP.yaml:/etc/cozy/cozy.yaml registry.forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/cozy-env", + "linuxstack": "docker run --rm -it -p 8080:8080 -p 5984:5984 -p 8025:8025 -v $(pwd)/build:/data/cozy-app/ecolyo -v ~/cozy/data/db/konnectors_sources/:/data/cozy_konnectors/ -v ~/cozy/data/db:/usr/local/couchdb/data -v ~/cozy/data/storage:/data/cozy-storage -v $(pwd)/docker/disableCSP.yaml:/etc/cozy/cozy.yaml 5fdc0725024f", "load-data": "cd test && importData.bat" }, "repository": { diff --git a/src/components/CommonKit/Modal/Modal.tsx b/src/components/CommonKit/Modal/Modal.tsx index ae0432779c7c0f019e123de0f2564be1bdd8db89..8a8fa49da4ac2e5d5f30897ef9cbb3313f9ba1e2 100644 --- a/src/components/CommonKit/Modal/Modal.tsx +++ b/src/components/CommonKit/Modal/Modal.tsx @@ -7,6 +7,7 @@ interface ModalProps { border?: boolean handleCloseClick: () => void children: ReactNode + yellowBorder?: string } const Modal: React.FC<ModalProps> = ({ @@ -14,10 +15,15 @@ const Modal: React.FC<ModalProps> = ({ border, handleCloseClick, children, + yellowBorder, }: ModalProps) => { return ( <div className={`modal-overlay ${open ? 'modal-opened' : ''}`}> - <div className={`modal-box ${border ? 'modal-box-bordered' : ''}`}> + <div + className={`modal-box ${ + border ? 'modal-box-bordered' : '' + }${yellowBorder}`} + > <StyledIconButton className="modal-close-button" icon={CloseIcon} diff --git a/src/components/ContainerComponents/ViewContainer/HomeViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/HomeViewContainer.tsx index faf1c232e716552d6db757bb2ae9a73c575346d1..daef70947a8b16fe7287479df7b3cd94ecff7e54 100644 --- a/src/components/ContainerComponents/ViewContainer/HomeViewContainer.tsx +++ b/src/components/ContainerComponents/ViewContainer/HomeViewContainer.tsx @@ -1,4 +1,4 @@ -import React, { useState, useContext } from 'react' +import React, { useState, useContext, useEffect } from 'react' import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner' import CozyBar from 'components/ContainerComponents/CozyBar/CozyBar' import Header from 'components/ContainerComponents/Header/Header' @@ -10,16 +10,38 @@ import { AppContext } from 'components/Contexts/AppContextProvider' import MultliFluidIndicatorsContainer from 'components/ContainerComponents/IndicatorsContainer/MultiFluidIndicatorsContainer' import ChallengeCardContainer from 'components/ContainerComponents/ChallengeCardContainer/ChallengeCardContainer' import KonnectorViewerContainer from 'components/ContainerComponents/KonnectorViewerContainer/KonnectorViewerContainer' +import Modal from 'components/CommonKit/Modal/Modal' +import StyledButton from 'components/CommonKit/Button/StyledButton' +import { translate } from 'cozy-ui/react/I18n' +import { withClient, Client } from 'cozy-client' +import { USERPROFILE_DOCTYPE } from 'doctypes' -const HomeViewContainer: React.FC = () => { +interface HomeViewContainerProps { + t: Function + client: Client +} + +const HomeViewContainer: React.FC = ({ t, client }: HomeViewContainerProps) => { const [timeStep, setTimeStep] = useState<TimeStep>(20) const [resetRefenceDate, setResetReferenceDate] = useState<boolean>(false) const { fluidTypes } = useContext(AppContext) const [headerHeight, setHeaderHeight] = useState<number>(0) - + const [modalOpen, setModalOpen] = useState<boolean>(true) const [isChartLoading, setChartLoading] = useState<boolean>(true) const [isIndicatorsLoading, setIndicatorsLoading] = useState<boolean>(true) + async function updateWelcomeModalState() { + await client + .query(client.find(USERPROFILE_DOCTYPE).limitBy(1)) + .then(async ({ data }) => { + const doc = data[0] + await client.save({ + ...doc, + haveSeenWelcomeModal: true, + }) + }) + } + const setChartLoaded = () => { setChartLoading(false) } @@ -42,8 +64,43 @@ const HomeViewContainer: React.FC = () => { setHeaderHeight(height) } + const handleCloseClick = () => { + setModalOpen(false) + updateWelcomeModalState() + } + + useEffect(() => { + async function getWelcomeModalState() { + await client + .query(client.find(USERPROFILE_DOCTYPE).limitBy(1)) + .then(async ({ data }) => { + const welcomeModalState = data[0].haveSeenWelcomeModal + setModalOpen(!welcomeModalState) + }) + } + getWelcomeModalState() + }, []) + return ( <React.Fragment> + <Modal + open={modalOpen} + handleCloseClick={handleCloseClick} + yellowBorder="yellow-border" + > + <div className="wm-header text-24-bold"> + {t('COMMON.WELCOME_MODAL_TITLE')} + </div> + <div className="wm-txt text-18-bold"> + {t('COMMON.WELCOME_MODAL_PERSO')} + </div> + <div className="wm-txt text-18-bold"> + {t('COMMON.WELCOME_MODAL_CONNECT')} + </div> + <StyledButton className="button-ok" onClick={handleCloseClick}> + {t('COMMON.WELCOME_MODAL_OK')} + </StyledButton> + </Modal> <CozyBar /> {fluidTypes && fluidTypes.length > 0 ? ( <> @@ -91,4 +148,4 @@ const HomeViewContainer: React.FC = () => { ) } -export default HomeViewContainer +export default translate()(withClient(HomeViewContainer)) diff --git a/src/db/userProfileData.json b/src/db/userProfileData.json index 0f70e192add0bb98384bbc7886b428eb2e06f2c1..c6c09dabefa0f1c01399fb3da6cfffae6d935b62 100644 --- a/src/db/userProfileData.json +++ b/src/db/userProfileData.json @@ -2,6 +2,7 @@ { "level": 1, "challengeTypeHash": "", - "ecogestureHash": "" + "ecogestureHash": "", + "haveSeenWelcomeModal": false } ] diff --git a/src/locales/en.json b/src/locales/en.json index eef1f870d1cf69daabef174c011661872d67c4e5..e102dff97f08065dc2417a029ab93a7cbd4f96a9 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -34,7 +34,11 @@ "APP_NEW_CHALLENGE_TITLE": "Nouveau défi", "APP_LOCKED_CHALLENGE_TITLE": "Défi à débloquer", "APP_ONGOING_CHALLENGE_TITLE": "Défi en cours", - "APP_FINISHED_CHALLENGE_TITLE": "Défi terminé" + "APP_FINISHED_CHALLENGE_TITLE": "Défi terminé", + "WELCOME_MODAL_TITLE": "Félicitations", + "WELCOME_MODAL_PERSO": "Votre espace personnel a bien été créé.", + "WELCOME_MODAL_CONNECT": "Vous pouvez maintenant connecter vos compteurs d’énergie à Ecolyo en toute sécurité.", + "WELCOME_MODAL_OK": "Ok" }, "LOADING":{ "INDEX": "Vérification des données", diff --git a/src/styles/base/_color.scss b/src/styles/base/_color.scss index bb06be05a3e2f0b3875808a3aa1c978bdf0719ac..3fd5c7ad2066febce2af07814c9633e94a268fc9 100644 --- a/src/styles/base/_color.scss +++ b/src/styles/base/_color.scss @@ -33,6 +33,7 @@ $red-no-data: #d24444; /** YELLOW **/ $gold: #b2901b; +$gold-40: rgba(227, 184, 42, 0.4); $gold-light: #deaf0e; $gold-shadow: #e3b82a; diff --git a/src/styles/components/_modal.scss b/src/styles/components/_modal.scss index 49cae038dd39a9ad0f76c4fed1563dc9d0bf0d7e..323ef0d13c6e62f56a579e34b7e91021ce977b40 100644 --- a/src/styles/components/_modal.scss +++ b/src/styles/components/_modal.scss @@ -36,7 +36,10 @@ box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55); border-radius: 4px; &.modal-box-bordered { - border: 1px solid $blue-40 + border: 1px solid $blue-40; + } + &.yellow-border { + border: 1px solid $gold-40; } .modal-close-button { position: absolute; @@ -50,5 +53,21 @@ align-items: center; color: $text-white; } + .wm-header { + background: $multi-color-radial-gradient; + background-clip: 'text'; + -webkit-background-clip: text; + color: transparent; + margin: 2rem 0 1rem; + } + .button-ok { + width: 90%; + margin-bottom: 2rem; + } + .wm-txt { + text-align: center; + width: 88%; + margin: 1rem; + } } }