diff --git a/src/components/Analysis/AnalysisConsumptionRow.tsx b/src/components/Analysis/AnalysisConsumptionRow.tsx index 64e667d5824689ad63ff765383ea7b1f5f505067..ee96f105dc44a1cb6510efdaf87bb46717b771f9 100644 --- a/src/components/Analysis/AnalysisConsumptionRow.tsx +++ b/src/components/Analysis/AnalysisConsumptionRow.tsx @@ -104,7 +104,9 @@ const AnalysisConsumptionRow: React.FC<AnalysisConsumptionRowProps> = ({ } } return ( - <div className={`consumption-${FluidType[fluid].toLowerCase()}`}> + <div + className={`consumption-${FluidType[fluid].toLowerCase()} analysisRow`} + > <div className="user-graph"> <div className={classNames('price', 'text-15-bold', { diff --git a/src/components/Analysis/analysisConsumptionRow.scss b/src/components/Analysis/analysisConsumptionRow.scss index 460c2c58fa955f442f0e35791607781fc3b74556..2079dd10bcb6a4e410822290a0603ced17ab7d36 100644 --- a/src/components/Analysis/analysisConsumptionRow.scss +++ b/src/components/Analysis/analysisConsumptionRow.scss @@ -90,15 +90,18 @@ } } } -.icon-container { - flex-basis: 10%; - display: flex; - justify-content: center; - svg { - align-self: center; - width: 40px; +.analysisRow { + .icon-container { + flex-basis: 10%; + display: flex; + justify-content: center; + svg { + align-self: center; + width: 40px; + } } } + .container-graph { flex-basis: 50%; display: flex; diff --git a/src/components/Ecogesture/EcogestureCard.tsx b/src/components/Ecogesture/EcogestureCard.tsx index 082e2727d97993fba473cfe580ef7fb9f51a1b21..a462309dc1ac2cd66d7cf9a8605804537f756576 100644 --- a/src/components/Ecogesture/EcogestureCard.tsx +++ b/src/components/Ecogesture/EcogestureCard.tsx @@ -8,13 +8,16 @@ import EfficientyRating from './EfficientyRating' import defaultIcon from 'assets/icons/visu/ecogesture/default.svg' import { Link as RouterLink } from 'react-router-dom' import { Link } from '@material-ui/core/' +import { EcogestureStatus } from 'enum/ecogesture.enum' interface EcogestureCardProps { ecogesture: Ecogesture + currentTab: EcogestureStatus } const EcogestureCard: React.FC<EcogestureCardProps> = ({ ecogesture, + currentTab, }: EcogestureCardProps) => { const [ecogestureIcon, setEcogestureIcon] = useState<string>('') useEffect(() => { @@ -33,7 +36,7 @@ const EcogestureCard: React.FC<EcogestureCardProps> = ({ return ( <Link - to={`/ecogestures/${ecogesture.id}`} + to={`/ecogesture/${ecogesture.id}/${currentTab}`} component={RouterLink} className="ecogesture-list-item" > diff --git a/src/components/Ecogesture/EcogestureEmptyList.tsx b/src/components/Ecogesture/EcogestureEmptyList.tsx new file mode 100644 index 0000000000000000000000000000000000000000..a8468b47f72e09cd8b16ee07af55376cea16020f --- /dev/null +++ b/src/components/Ecogesture/EcogestureEmptyList.tsx @@ -0,0 +1,67 @@ +import React from 'react' +import { useI18n } from 'cozy-ui/transpiled/react/I18n' +import Button from '@material-ui/core/Button' +import StyledIcon from 'components/CommonKit/Icon/StyledIcon' +import doingIcon from 'assets/icons/ico/doing-enabled.svg' +import objectiveIcon from 'assets/icons/ico/objective-enabled.svg' + +import './ecogestureEmptyList.scss' + +interface EcogestureEmptyListProps { + setTab: React.Dispatch<React.SetStateAction<number>> + isObjective: boolean +} +const EcogestureEmptyList: React.FC<EcogestureEmptyListProps> = ({ + setTab, + isObjective, +}: EcogestureEmptyListProps) => { + const { t } = useI18n() + + return ( + <div className="ec-empty-container"> + <div className="ec-empty-content"> + <StyledIcon + className="icon-big" + icon={isObjective ? objectiveIcon : doingIcon} + size={150} + /> + <div className="text-16-normal text"> + {isObjective + ? t('ecogesture.emptyList.obj1') + : t('ecogesture.emptyList.doing1')} + </div> + <div className="text-16-normal text"> + {isObjective + ? t('ecogesture.emptyList.obj2') + : t('ecogesture.emptyList.doing2')} + </div> + <div className="btn-container"> + <Button + aria-label={t('ecogesture.emptyList.btn1')} + onClick={() => setTab(3)} + classes={{ + root: 'btn-secondary-negative btn1', + label: 'text-16-bold', + }} + > + {t('ecogesture.emptyList.btn1')} + </Button> + <Button + aria-label={t('ecogesture.emptyList.btn2')} + onClick={() => { + console.log('tinder') + }} + classes={{ + root: 'btn-highlight', + label: 'text-16-bold', + }} + > + {t('ecogesture.emptyList.btn2')} + </Button> + </div> + </div> + </div> + ) +} + +export default EcogestureEmptyList diff --git a/src/components/Ecogesture/EcogestureError.spec.tsx b/src/components/Ecogesture/EcogestureError.spec.tsx index 810c48e44d2a1d9730401002edb515f2a455fa86..906a5407fdf306b27410cdf77cfaffabe58252b6 100644 --- a/src/components/Ecogesture/EcogestureError.spec.tsx +++ b/src/components/Ecogesture/EcogestureError.spec.tsx @@ -5,7 +5,7 @@ import { profileData } from '../../../tests/__mocks__/profile.mock' import { globalStateData } from '../../../tests/__mocks__/globalStateData.mock' import { Provider } from 'react-redux' import Button from '@material-ui/core/Button' -import EcogestureError from './EcogestureError' +import EcogestureError from './EcogestureEmptyList' jest.mock('cozy-ui/transpiled/react/I18n', () => { return { diff --git a/src/components/Ecogesture/EcogestureError.tsx b/src/components/Ecogesture/EcogestureError.tsx deleted file mode 100644 index 8dc6110cc007442dbe4f91e3884d29f70487fcc1..0000000000000000000000000000000000000000 --- a/src/components/Ecogesture/EcogestureError.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react' -import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import { useHistory } from 'react-router-dom' -import Button from '@material-ui/core/Button' -import './ecogestureError.scss' - -const EcogestureError: React.FC = () => { - const { t } = useI18n() - const history = useHistory() - const goToForm = () => { - history.push('/profileType') - } - return ( - <div className="ec-error-container"> - <div className="ec-error-content"> - <div className="ec-error-title text-16-normal"> - {t('ecogesture.adjust_profil.description')} - </div> - <Button - aria-label={t('ecogesture.accessibility.button_go_to_profil')} - onClick={goToForm} - classes={{ - root: 'btn-highlight', - label: 'text-16-bold', - }} - > - {t('ecogesture.adjust_profil.button_go_to_profil')} - </Button> - </div> - </div> - ) -} - -export default EcogestureError diff --git a/src/components/Ecogesture/EcogestureInfoModal.spec.tsx b/src/components/Ecogesture/EcogestureInfoModal.spec.tsx deleted file mode 100644 index aa58956ee7579e83a06c2193f67edfb489a7224c..0000000000000000000000000000000000000000 --- a/src/components/Ecogesture/EcogestureInfoModal.spec.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react' -import { mount } from 'enzyme' -import EcogestureInfoModal from './EcogestureInfoModal' -import Button from '@material-ui/core/Button' -import toJson from 'enzyme-to-json' - -jest.mock('cozy-ui/transpiled/react/I18n', () => { - return { - useI18n: jest.fn(() => { - return { - t: (str: string) => str, - } - }), - } -}) - -const mockHandleCloseClick = jest.fn() - -describe('EcogestureInfoModal component', () => { - it('should be rendered correctly', () => { - const wrapper = mount( - <EcogestureInfoModal - open={true} - handleCloseClick={mockHandleCloseClick} - /> - ) - expect(toJson(wrapper)).toMatchSnapshot() - expect(wrapper.find('.info-header').exists()).toBeTruthy() - expect(wrapper.find('.info-title').exists()).toBeTruthy() - expect(wrapper.find('.info-detail').exists()).toBeTruthy() - expect(wrapper.find(Button).exists()).toBeTruthy() - }) - - it('should be call handleCloseClick when click on button', () => { - const wrapper = mount( - <EcogestureInfoModal - open={true} - handleCloseClick={mockHandleCloseClick} - /> - ) - wrapper - .find(Button) - .first() - .simulate('click') - expect(mockHandleCloseClick).toHaveBeenCalled() - }) -}) diff --git a/src/components/Ecogesture/EcogestureInfoModal.tsx b/src/components/Ecogesture/EcogestureInfoModal.tsx deleted file mode 100644 index f346c70f6fe42f6f72181a7effa826f9b233e771..0000000000000000000000000000000000000000 --- a/src/components/Ecogesture/EcogestureInfoModal.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react' -import './ecogestureInfoModal.scss' -import { useI18n } from 'cozy-ui/transpiled/react/I18n' - -import Icon from 'cozy-ui/transpiled/react/Icon' -import Button from '@material-ui/core/Button' -import Dialog from '@material-ui/core/Dialog' -import HeaderQuestion from 'assets/icons/ico/header-question.svg' - -interface EcogestureInfoModalProps { - open: boolean - handleCloseClick: () => void -} - -const EcogestureInfoModal: React.FC<EcogestureInfoModalProps> = ({ - open, - handleCloseClick, -}: EcogestureInfoModalProps) => { - const { t } = useI18n() - return ( - <Dialog - open={open} - onClose={handleCloseClick} - aria-labelledby={'accessibility-title'} - classes={{ - root: 'modal-root', - paper: 'modal-paper', - }} - > - <div id={'accessibility-title'}> - {t('ecogesture_info_modal.accessibility.window_title')} - </div> - <div className="info-header"> - <Icon icon={HeaderQuestion} size={80} /> - </div> - <div className="info-content"> - <div className="info-title text-20-bold"> - {t('ecogesture_info_modal.header')} - </div> - <div className="info-detail text-16-normal"> - {t('ecogesture_info_modal.text')} - </div> - <Button - aria-label={t('ecogesture_info_modal.accessibility.button_close')} - onClick={handleCloseClick} - classes={{ - root: 'btn-secondary-negative', - label: 'text-14-normal', - }} - > - {t('ecogesture_info_modal.button_close')} - </Button> - </div> - </Dialog> - ) -} - -export default EcogestureInfoModal diff --git a/src/components/Ecogesture/EcogestureList.tsx b/src/components/Ecogesture/EcogestureList.tsx index 94e9a62855499a070d229742e21a5f75ea055333..c5f4551a22e283eb6fddb5f9678ab4a95d162b40 100644 --- a/src/components/Ecogesture/EcogestureList.tsx +++ b/src/components/Ecogesture/EcogestureList.tsx @@ -1,49 +1,31 @@ -import React, { useState, useEffect } from 'react' +import React, { useState } from 'react' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import { useClient } from 'cozy-client' - import { Ecogesture } from 'models' -import EcogestureService from 'services/ecogesture.service' + import { Menu, MenuItem, ListItemIcon } from '@material-ui/core/' import SortIcon from 'assets/icons/ico/sort.svg' import CheckIcon from 'assets/icons/ico/check.svg' -import QuestionIcon from 'assets/icons/ico/efficiency-question.svg' -import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner' import EcogestureCard from 'components/Ecogesture/EcogestureCard' import StyledIcon from 'components/CommonKit/Icon/StyledIcon' import Button from '@material-ui/core/Button' import './ecogestureList.scss' -import { ProfileType } from 'models/profileType.model' -import { Usage } from 'enum/ecogesture.enum' -import EcogestureInfoModal from './EcogestureInfoModal' -import { getSeason } from 'utils/utils' -import { FluidType } from 'enum/fluid.enum' +import { EcogestureStatus, Usage } from 'enum/ecogesture.enum' interface EcogestureListProps { - filteredByProfile: boolean - profileType?: ProfileType + list: Ecogesture[] + currentTab: EcogestureStatus } const EcogestureList: React.FC<EcogestureListProps> = ({ - filteredByProfile, - profileType, + list, + currentTab, }: EcogestureListProps) => { const { t } = useI18n() - const client = useClient() - - const [ecogestures, setEcogestures] = useState<Ecogesture[] | null>(null) - const [isLoaded, setisLoaded] = useState(false) const [activeFilter, setactiveFilter] = useState<string>(Usage[Usage.ALL]) const [openDropDown, setopenDropDown] = useState<boolean>(false) - const [openInfoModal, setOpenInfoModal] = useState<boolean>(false) - const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null) - const toggleInfoModal = () => { - setOpenInfoModal(prev => !prev) - } - const toggleDropDown = () => { setopenDropDown(prev => !prev) } @@ -61,7 +43,7 @@ const EcogestureList: React.FC<EcogestureListProps> = ({ .filter(ecogesture => Usage[ecogesture.usage] === activeFilter) .map((ecogesture, index) => ( <div key={index} className="ecogesture-list-item"> - <EcogestureCard ecogesture={ecogesture} /> + <EcogestureCard ecogesture={ecogesture} currentTab={currentTab} /> </div> )) if (filtered.length > 0) { @@ -80,29 +62,6 @@ const EcogestureList: React.FC<EcogestureListProps> = ({ } } - useEffect(() => { - let subscribed = true - async function loadEcogestures() { - const ecogestureService = new EcogestureService(client) - const dataAll = await ecogestureService.getAllEcogestures(getSeason()) - if (subscribed && dataAll) { - setEcogestures(dataAll) - if (filteredByProfile && profileType) { - setEcogestures( - EcogestureService.getEcogestureListByProfile(dataAll, profileType) - ) - } else { - setEcogestures(dataAll) - } - } - setisLoaded(true) - } - loadEcogestures() - return () => { - subscribed = false - } - }, [client, filteredByProfile, profileType]) - return ( <div className="ecogesture-root"> <> @@ -175,32 +134,18 @@ const EcogestureList: React.FC<EcogestureListProps> = ({ </Menu> </div> </div> - {filteredByProfile && ( - <Button - classes={{ - root: 'btn-secondary-negative btn-info', - label: 'text-14-normal', - }} - aria-controls="ecogesture-info" - aria-haspopup="true" - onClick={toggleInfoModal} - variant="contained" - > - <StyledIcon icon={QuestionIcon} size={40} /> - </Button> - )} </div> <div className="ecogesture-content"> - {!ecogestures || !isLoaded ? ( - <div className="ecogesture-content-loading"> - <StyledSpinner size="5em" fluidType={FluidType.MULTIFLUID} /> - </div> - ) : ecogestures && activeFilter === Usage[Usage.ALL] ? ( - ecogestures.map((ecogesture, index) => ( - <EcogestureCard ecogesture={ecogesture} key={index} /> + {list && activeFilter === Usage[Usage.ALL] ? ( + list.map((ecogesture, index) => ( + <EcogestureCard + ecogesture={ecogesture} + key={index} + currentTab={currentTab} + /> )) - ) : ecogestures && activeFilter !== Usage[Usage.ALL] ? ( - filterEcogesture(ecogestures) + ) : list && activeFilter !== Usage[Usage.ALL] ? ( + filterEcogesture(list) ) : ( <div className="ec-filter-error"> <div className="text-16-normal"> @@ -210,10 +155,6 @@ const EcogestureList: React.FC<EcogestureListProps> = ({ )} </div> </> - <EcogestureInfoModal - open={openInfoModal} - handleCloseClick={toggleInfoModal} - /> </div> ) } diff --git a/src/components/Ecogesture/EcogestureView.tsx b/src/components/Ecogesture/EcogestureView.tsx index 160f7c9733bfac26169401901b1debea80838a66..25bc0f1e6d2a96d165345c5e6fed75044650ddbc 100644 --- a/src/components/Ecogesture/EcogestureView.tsx +++ b/src/components/Ecogesture/EcogestureView.tsx @@ -1,4 +1,5 @@ -import React, { useState } from 'react' +import React, { useEffect, useState } from 'react' +import { useClient } from 'cozy-client' import EcogestureList from 'components/Ecogesture/EcogestureList' import CozyBar from 'components/Header/CozyBar' import Header from 'components/Header/Header' @@ -7,9 +8,19 @@ import { Tabs, Tab } from '@material-ui/core' import './ecogestureView.scss' import classNames from 'classnames' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import EcogestureError from './EcogestureError' import { useSelector } from 'react-redux' import { AppStore } from 'store' +import { Ecogesture } from 'models' +import EcogestureService from 'services/ecogesture.service' +import { getSeason } from 'utils/utils' +import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner' +import { FluidType } from 'enum/fluid.enum' +import EcogestureEmptyList from './EcogestureEmptyList' +import { EcogestureStatus } from 'enum/ecogesture.enum' + +interface EcogestureViewProps { + match: { params: { tab: string } } +} interface TabPanelProps { children?: React.ReactNode @@ -33,18 +44,30 @@ const TabPanel: React.FC<TabPanelProps> = ({ ) } -const EcogestureView: React.FC = () => { +const EcogestureView: React.FC<EcogestureViewProps> = ({ + match, +}: EcogestureViewProps) => { const [headerHeight, setHeaderHeight] = useState<number>(0) const defineHeaderHeight = (height: number) => { setHeaderHeight(height) } const { t } = useI18n() - const profile = useSelector((state: AppStore) => state.ecolyo.profile) + const client = useClient() const profileType = useSelector((state: AppStore) => state.ecolyo.profileType) - const [value, setValue] = useState<number>(0) + const [value, setValue] = useState<EcogestureStatus>( + match.params.tab ? parseInt(match.params.tab) : EcogestureStatus.ALL + ) + const [isLoaded, setIsLoaded] = useState<boolean>(false) + const [allEcogestureList, setAllEcogestureList] = useState<Ecogesture[]>([]) + const [doingEcogestureList, setDoingEcogestureList] = useState<Ecogesture[]>( + [] + ) + const [objectiveEcogestureList, setObjectiveEcogestureList] = useState< + Ecogesture[] + >([]) - const handleChange = () => { - value === 0 ? setValue(1) : setValue(0) + const handleChange = (event: React.ChangeEvent<{}>, newValue: any) => { + setValue(newValue) } const tabProps = (index: number) => { @@ -53,53 +76,127 @@ const EcogestureView: React.FC = () => { 'aria-controls': `simple-tabpanel-${index}`, } } + const getLabel = (tab: number) => { + return ( + <> + {t(`ecogesture.title_tab_${tab}`)} + <br></br> + {tab === EcogestureStatus.OBJECTIVE && + `(${objectiveEcogestureList.length})`} + {tab === EcogestureStatus.DOING && `(${doingEcogestureList.length})`} + {tab === EcogestureStatus.ALL && `(${allEcogestureList.length})`} + </> + ) + } + + useEffect(() => { + let subscribed = true + async function loadEcogestures() { + const ecogestureService = new EcogestureService(client) + const dataAll = await ecogestureService.getAllEcogestures(getSeason()) + if (subscribed && dataAll) { + setAllEcogestureList(dataAll) + const doing = dataAll.filter(ecogesture => ecogesture.doing === true) + const objective = dataAll.filter( + ecogesture => ecogesture.objective === true + ) + setObjectiveEcogestureList(objective) + setDoingEcogestureList(doing) + // if (profileType) { + // setAllEcogestureList( + // EcogestureService.getEcogestureListByProfile(dataAll, profileType) + // ) + // } else { + // setAllEcogestureList(dataAll) + // } + } + setIsLoaded(true) + } + loadEcogestures() + return () => { + subscribed = false + } + }, [client, profileType]) return ( <> <CozyBar titleKey={'common.title_ecogestures'} /> - <Header - setHeaderHeight={defineHeaderHeight} - desktopTitleKey={'common.title_ecogestures'} - > - <Tabs - value={value} - className="ecogestures-tabs" - aria-label="ecogestures-tabs" - onChange={handleChange} - TabIndicatorProps={{ className: 'indicator-tab' }} - centered={true} - > - <Tab - label={t('ecogesture.title_tab_1')} - className={classNames('single-tab', { - ['active']: value === 0, - })} - {...tabProps(0)} - ></Tab> - <Tab - label={t('ecogesture.title_tab_2')} - className={classNames('single-tab', { - ['active']: value === 1, - })} - {...tabProps(1)} - ></Tab> - </Tabs> - </Header> - <Content height={headerHeight}> - <TabPanel value={value} index={0}> - <EcogestureList filteredByProfile={false} /> - </TabPanel> - <TabPanel value={value} index={1}> - {profile.isProfileTypeCompleted ? ( - <EcogestureList - filteredByProfile={true} - profileType={profileType} - /> - ) : ( - <EcogestureError /> - )} - </TabPanel> - </Content> + {!isLoaded ? ( + <Content height={headerHeight}> + <div className="ecogesture-spinner" aria-busy="true"> + <StyledSpinner size="5em" fluidType={FluidType.MULTIFLUID} /> + </div> + </Content> + ) : ( + <> + <Header + setHeaderHeight={defineHeaderHeight} + desktopTitleKey={'common.title_ecogestures'} + > + <Tabs + value={value} + className="ecogestures-tabs" + aria-label="ecogestures-tabs" + onChange={handleChange} + TabIndicatorProps={{ className: 'indicator-tab' }} + centered={true} + > + <Tab + label={getLabel(EcogestureStatus.OBJECTIVE)} + className={classNames('single-tab', { + ['active']: value === EcogestureStatus.OBJECTIVE, + })} + {...tabProps(EcogestureStatus.OBJECTIVE)} + ></Tab> + <Tab + label={getLabel(EcogestureStatus.DOING)} + className={classNames('single-tab', { + ['active']: value === EcogestureStatus.DOING, + })} + {...tabProps(EcogestureStatus.DOING)} + ></Tab> + <Tab + label={getLabel(EcogestureStatus.ALL)} + className={classNames('single-tab', { + ['active']: value === EcogestureStatus.ALL, + })} + {...tabProps(EcogestureStatus.ALL)} + ></Tab> + </Tabs> + </Header> + <Content height={headerHeight}> + <TabPanel value={value} index={EcogestureStatus.OBJECTIVE}> + {objectiveEcogestureList.length ? ( + <EcogestureList + list={objectiveEcogestureList} + currentTab={EcogestureStatus.OBJECTIVE} + /> + ) : ( + <EcogestureEmptyList setTab={setValue} isObjective={true} /> + )} + </TabPanel> + + <TabPanel value={value} index={EcogestureStatus.DOING}> + {doingEcogestureList.length ? ( + <EcogestureList + list={doingEcogestureList} + currentTab={EcogestureStatus.DOING} + /> + ) : ( + <EcogestureEmptyList setTab={setValue} isObjective={false} /> + )} + </TabPanel> + <TabPanel value={value} index={EcogestureStatus.ALL}> + {allEcogestureList.length && ( + <EcogestureList + list={allEcogestureList} + currentTab={EcogestureStatus.ALL} + /> + )} + </TabPanel> + </Content> + </> + )} </> ) } diff --git a/src/components/Ecogesture/SingleEcogesture.tsx b/src/components/Ecogesture/SingleEcogesture.tsx index 4b1236c285ff69ff1f19014a2632b278e8f5d22e..40a36c89de28150d7ca8fde13b96e68dd0f85244 100644 --- a/src/components/Ecogesture/SingleEcogesture.tsx +++ b/src/components/Ecogesture/SingleEcogesture.tsx @@ -24,9 +24,10 @@ import { useClient } from 'cozy-client' import ErrorPage from 'components/CommonKit/ErrorPage/ErrorPage' import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner' import { FluidType } from 'enum/fluid.enum' +import { EcogestureStatus } from 'enum/ecogesture.enum' interface SingleEcogestureProps { - match: { params: { id: string } } + match: { params: { id: string; tab: EcogestureStatus } } } const SingleEcogesture: React.FC<SingleEcogestureProps> = ({ @@ -133,12 +134,14 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({ titleKey={ecogesture && ecogesture.shortName} isNotKey={true} displayBackArrow={true} + tab={match.params.tab} /> <Header setHeaderHeight={defineHeaderHeight} desktopTitleKey={ecogesture && ecogesture.shortName} displayBackArrow={true} isNotKey={true} + tab={match.params.tab} ></Header> <Content height={headerHeight}> <div className="single-ecogesture"> diff --git a/src/components/Ecogesture/ecogestureError.scss b/src/components/Ecogesture/ecogestureEmptyList.scss similarity index 64% rename from src/components/Ecogesture/ecogestureError.scss rename to src/components/Ecogesture/ecogestureEmptyList.scss index c89ffaf796a6b7d8602260cea1c5e0f76be76487..1326c2218c7732de283dd89296326555b3de8ee0 100644 --- a/src/components/Ecogesture/ecogestureError.scss +++ b/src/components/Ecogesture/ecogestureEmptyList.scss @@ -1,12 +1,10 @@ @import '../../styles/base/color'; @import '../../styles/base/breakpoint'; -.ec-error-container { +.ec-empty-container { margin-top: 6rem; - @media (min-width: $width-phone) { - margin-top: 2rem; - } - .ec-error-content { + + .ec-empty-content { color: $grey-bright; text-align: center; padding: 0 0.5rem; @@ -18,8 +16,14 @@ @media (min-width: $width-desktop) { max-width: 35%; } - } - .ec-error-title { - padding: 0 1.5rem; + .text { + margin: 1rem 0; + } + .btn-container { + display: flex; + button.btn1 { + margin-right: 1rem; + } + } } } diff --git a/src/components/Ecogesture/ecogestureInfoModal.scss b/src/components/Ecogesture/ecogestureInfoModal.scss deleted file mode 100644 index dd1033c0e872746bf451d18993b06493b6fd9f13..0000000000000000000000000000000000000000 --- a/src/components/Ecogesture/ecogestureInfoModal.scss +++ /dev/null @@ -1,23 +0,0 @@ -@import 'src/styles/base/breakpoint'; -@import 'src/styles/base/color'; - -.info-header { - margin: 1rem; -} - -.info-content { - margin: 0 1.25rem 2.125rem; - text-align: center; - .info-title { - color: $white; - text-indent: -10px; - } - .info-detail { - margin: 1rem 0; - color: $grey-bright; - } -} - -#accessibility-title { - display: none; -} diff --git a/src/components/Ecogesture/ecogestureView.scss b/src/components/Ecogesture/ecogestureView.scss index 4752507bd50e2272c66694025864d32b80368ade..048a4fc2dc699f97f56575fa67bf073335b58de8 100644 --- a/src/components/Ecogesture/ecogestureView.scss +++ b/src/components/Ecogesture/ecogestureView.scss @@ -1,5 +1,12 @@ @import 'src/styles/base/color'; +.ecogesture-spinner { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + min-height: inherit; +} .ecogestures-tabs { background: transparent; color: $soft-grey; @@ -8,7 +15,7 @@ margin: 0 1rem; box-sizing: border-box; .single-tab { - width: 50%; + width: 32%; text-transform: initial; font-size: 1rem; font-weight: 400; diff --git a/src/components/Header/CozyBar.tsx b/src/components/Header/CozyBar.tsx index fa14912e2d9559517ef9ce6ed659cce759c4aa9e..8bb8ff265adf2d110e7cb8a7760493483db0b028 100644 --- a/src/components/Header/CozyBar.tsx +++ b/src/components/Header/CozyBar.tsx @@ -12,12 +12,14 @@ import HammerRight from 'assets/icons/ico/hammer-right.svg' import BackArrowIcon from 'assets/icons/ico/back-arrow.svg' import FeedbacksIcon from 'assets/icons/ico/feedbacks.svg' import StyledIconButton from 'components/CommonKit/IconButton/StyledIconButton' +import { EcogestureStatus } from 'enum/ecogesture.enum' interface CozyBarProps { titleKey?: string displayBackArrow?: boolean isBuilding?: boolean isNotKey?: boolean + tab?: EcogestureStatus } const CozyBar = ({ @@ -25,6 +27,7 @@ const CozyBar = ({ displayBackArrow = false, isBuilding, isNotKey, + tab, }: CozyBarProps) => { const { t } = useI18n() const history = useHistory() @@ -33,7 +36,8 @@ const CozyBar = ({ const { screenType } = useSelector((state: AppStore) => state.ecolyo.global) const handleClickBack = () => { - history.goBack() + console.log('tab', tab) + tab ? history.push(`/ecogestures/${tab}`) : history.goBack() } const handleClickFeedbacks = () => { diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx index 85bdd9e7cd7afd0372b5ed083e87c3c2b9befb57..c5cb38086284f955e40a86fb5c5de0b50ac2c81d 100644 --- a/src/components/Header/Header.tsx +++ b/src/components/Header/Header.tsx @@ -14,6 +14,7 @@ import BackArrowIcon from 'assets/icons/ico/back-arrow.svg' import FeedbacksIcon from 'assets/icons/ico/feedbacks.svg' import HammerLeft from 'assets/icons/ico/hammer-left.svg' import HammerRight from 'assets/icons/ico/hammer-right.svg' +import { EcogestureStatus } from 'enum/ecogesture.enum' interface HeaderProps { textKey?: string @@ -23,6 +24,7 @@ interface HeaderProps { setHeaderHeight(height: number): void isBuilding?: boolean isNotKey?: boolean + tab?: EcogestureStatus } const Header: React.FC<HeaderProps> = ({ @@ -33,6 +35,7 @@ const Header: React.FC<HeaderProps> = ({ setHeaderHeight, isBuilding, isNotKey, + tab, }: HeaderProps) => { const { t } = useI18n() const history = useHistory() @@ -44,8 +47,9 @@ const Header: React.FC<HeaderProps> = ({ const headerBottomHeight = 8 const handleClickBack = useCallback(() => { - history.goBack() - }, [history]) + console.log('tab', tab) + tab ? history.push(`/ecogestures/${tab}`) : history.goBack() + }, [history, tab]) const handleClickFeedbacks = () => { dispatch(updateModalIsFeedbacksOpen(true)) diff --git a/src/components/Routes/Routes.tsx b/src/components/Routes/Routes.tsx index 76ce704b67bd22b59be4853190110ea818df6ef9..4bb0ae74d41dc26bf00ab385d73036f60edcca1d 100644 --- a/src/components/Routes/Routes.tsx +++ b/src/components/Routes/Routes.tsx @@ -9,6 +9,7 @@ import ActionView from 'components/Action/ActionView' import UnSubscribe from 'components/Options/UnSubscribe' import TermsView from 'components/Terms/TermsView' import { TermsStatus } from 'models' +import { EcogestureStatus } from 'enum/ecogesture.enum' const ConsumptionView = lazy(() => import('components/Home/ConsumptionView')) @@ -63,8 +64,10 @@ const Routes: React.FC<RouteProps> = ({ termsStatus }: RouteProps) => { <Route path={`/challenges/action`} exact component={ActionView} /> <Route path={`/challenges/`} component={ChallengeView} exact /> - <Route path="/ecogestures/:id" component={SingleEcogesture} /> - <Route path="/ecogestures" component={EcogestureView} /> + <Route path="/ecogesture/:id/:tab" component={SingleEcogesture} /> + <Route path="/ecogesture/:id" component={SingleEcogesture} /> + <Route path={`/ecogestures/:tab`} component={EcogestureView} /> + <Route path={`/ecogestures`} component={EcogestureView} /> <Route path={'/options/FAQ'} component={FAQView} /> <Route path={`/options/legalnotice`} component={LegalNoticeView} /> <Route path={`/options/gcu`} component={GCUView} /> diff --git a/src/enum/ecogesture.enum.ts b/src/enum/ecogesture.enum.ts index 7cb2f7c697701f193fde6e3c1bf170819448f85a..4ea5854e53f7a2591949440cee0991260b281071 100644 --- a/src/enum/ecogesture.enum.ts +++ b/src/enum/ecogesture.enum.ts @@ -42,3 +42,9 @@ export enum EquipmentType { BOILER = 16, HYDRAULIC_HEATING = 17, } + +export enum EcogestureStatus { + OBJECTIVE = 0, + DOING = 1, + ALL = 2, +} diff --git a/src/locales/fr.json b/src/locales/fr.json index 3ebb61e7f2a2e803824a22da93dda5cdf39160bc..cf440a0ba531e44686b4ae657572671d06389f6e 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -341,8 +341,9 @@ } }, "ecogesture": { - "title_tab_1": "Tous les écogestes", - "title_tab_2": "Écogestes adaptés à votre profil", + "title_tab_0": "Objectifs", + "title_tab_1": "Je fais déjà", + "title_tab_2": "Tous", "MENU_TITLE": "Filtrer", "ALL": "Tous les usages", "HEATING": "Chauffage", @@ -364,7 +365,15 @@ "button_go_to_profil": "Aller à la page de profil" }, "doing": "Je fais déjà", - "objective": "Objectif" + "objective": "Objectif", + "emptyList": { + "obj1": "Les écogestes sont des actions qui vous permettent de réduire vos consommations et donc vos factures.", + "obj2": "Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà.", + "doing1": "Aucun écogeste n’est indiqué comme déjà appliqué actuellement.", + "doing2": "Vous pouvez consulter tous les écogestes et ajouter les gestes que vous mettez déjà en pratique dans cette section.", + "btn1": "Voir tous les écogestes", + "btn2": "Sélectionner" + } }, "ecogesture_modal": { "title_ecogesture": "Écogeste",