From 062d953e09bdbe583ce816cf632c69837fd3080f Mon Sep 17 00:00:00 2001 From: Bastien DUMONT <bdumont@grandlyon.com> Date: Thu, 7 Sep 2023 13:56:21 +0000 Subject: [PATCH] feat(ecogestures): rework selection --- .../EcogestureCard/EcogestureCard.tsx | 11 +- .../EcogestureCard.spec.tsx.snap | 25 --- .../EcogestureList/EcogestureList.tsx | 6 +- .../EcogestureList.spec.tsx.snap | 3 - .../Ecogesture/SingleEcogestureView.spec.tsx | 18 +- .../Ecogesture/SingleEcogestureView.tsx | 161 ++++++++---------- .../SingleEcogestureView.spec.tsx.snap | 61 ++++++- .../Ecogesture/singleEcogestureView.scss | 15 +- .../EcogestureSelectionDetail.spec.tsx | 15 ++ .../EcogestureSelectionDetail.tsx | 22 ++- .../EcogestureSelectionDetail.spec.tsx.snap | 109 +++++++++--- .../ecogestureSelectionDetail.scss | 33 ++-- src/components/Navbar/Navbar.tsx | 22 ++- src/locales/fr.json | 4 +- 14 files changed, 293 insertions(+), 212 deletions(-) diff --git a/src/components/Ecogesture/EcogestureCard/EcogestureCard.tsx b/src/components/Ecogesture/EcogestureCard/EcogestureCard.tsx index 749ca432d..cb5842537 100644 --- a/src/components/Ecogesture/EcogestureCard/EcogestureCard.tsx +++ b/src/components/Ecogesture/EcogestureCard/EcogestureCard.tsx @@ -9,15 +9,7 @@ import { importIconById } from 'utils/utils' import EfficiencyRating from '../EfficiencyRating/EfficiencyRating' import './ecogestureCard.scss' -interface EcogestureCardProps { - ecogesture: Ecogesture - selectionCompleted?: boolean -} - -const EcogestureCard = ({ - ecogesture, - selectionCompleted = false, -}: EcogestureCardProps) => { +const EcogestureCard = ({ ecogesture }: { ecogesture: Ecogesture }) => { const [ecogestureIcon, setEcogestureIcon] = useState<string>('') useEffect(() => { async function handleEcogestureIcon() { @@ -34,7 +26,6 @@ const EcogestureCard = ({ to={{ pathname: `/ecogesture/${ecogesture.id}`, }} - state={{ selectionCompleted }} component={RouterLink} className="ecogesture-list-item" > diff --git a/src/components/Ecogesture/EcogestureCard/__snapshots__/EcogestureCard.spec.tsx.snap b/src/components/Ecogesture/EcogestureCard/__snapshots__/EcogestureCard.spec.tsx.snap index 56a97459a..67ce554e7 100644 --- a/src/components/Ecogesture/EcogestureCard/__snapshots__/EcogestureCard.spec.tsx.snap +++ b/src/components/Ecogesture/EcogestureCard/__snapshots__/EcogestureCard.spec.tsx.snap @@ -76,11 +76,6 @@ exports[`EcogestureCard component should be rendered correctly 1`] = ` "render": [Function], } } - state={ - Object { - "selectionCompleted": false, - } - } to={ Object { "pathname": "/ecogesture/ECOGESTURE001", @@ -106,11 +101,6 @@ exports[`EcogestureCard component should be rendered correctly 1`] = ` "render": [Function], } } - state={ - Object { - "selectionCompleted": false, - } - } to={ Object { "pathname": "/ecogesture/ECOGESTURE001", @@ -129,11 +119,6 @@ exports[`EcogestureCard component should be rendered correctly 1`] = ` } onBlur={[Function]} onFocus={[Function]} - state={ - Object { - "selectionCompleted": false, - } - } to={ Object { "pathname": "/ecogesture/ECOGESTURE001", @@ -187,11 +172,6 @@ exports[`EcogestureCard component should be rendered correctly 1`] = ` } onBlur={[Function]} onFocus={[Function]} - state={ - Object { - "selectionCompleted": false, - } - } to={ Object { "pathname": "/ecogesture/ECOGESTURE001", @@ -203,11 +183,6 @@ exports[`EcogestureCard component should be rendered correctly 1`] = ` className="MuiTypography-root MuiLink-root MuiLink-underlineHover ecogesture-list-item MuiTypography-colorPrimary" onBlur={[Function]} onFocus={[Function]} - state={ - Object { - "selectionCompleted": false, - } - } to={ Object { "pathname": "/ecogesture/ECOGESTURE001", diff --git a/src/components/Ecogesture/EcogestureList/EcogestureList.tsx b/src/components/Ecogesture/EcogestureList/EcogestureList.tsx index 5bf7a7558..37818161e 100644 --- a/src/components/Ecogesture/EcogestureList/EcogestureList.tsx +++ b/src/components/Ecogesture/EcogestureList/EcogestureList.tsx @@ -56,11 +56,7 @@ const EcogestureList = ({ if (filteredEcogestures.length > 0) { return filteredEcogestures.map(ecogesture => ( - <EcogestureCard - key={ecogesture.id} - ecogesture={ecogesture} - selectionCompleted={selectionViewed === selectionTotal} - /> + <EcogestureCard key={ecogesture.id} ecogesture={ecogesture} /> )) } diff --git a/src/components/Ecogesture/EcogestureList/__snapshots__/EcogestureList.spec.tsx.snap b/src/components/Ecogesture/EcogestureList/__snapshots__/EcogestureList.spec.tsx.snap index f1b198089..e26cfd313 100644 --- a/src/components/Ecogesture/EcogestureList/__snapshots__/EcogestureList.spec.tsx.snap +++ b/src/components/Ecogesture/EcogestureList/__snapshots__/EcogestureList.spec.tsx.snap @@ -1872,7 +1872,6 @@ exports[`EcogesturesList component should be rendered correctly 1`] = ` } } key="ECOGESTURE001" - selectionCompleted={true} /> <mock-ecogesturecard ecogesture={ @@ -1910,7 +1909,6 @@ exports[`EcogesturesList component should be rendered correctly 1`] = ` } } key="ECOGESTURE002" - selectionCompleted={true} /> <mock-ecogesturecard ecogesture={ @@ -1951,7 +1949,6 @@ exports[`EcogesturesList component should be rendered correctly 1`] = ` } } key="ECOGESTURE0013" - selectionCompleted={true} /> <WithStyles(ForwardRef(Button)) classes={ diff --git a/src/components/Ecogesture/SingleEcogestureView.spec.tsx b/src/components/Ecogesture/SingleEcogestureView.spec.tsx index 3dca815a0..35e2ff90e 100644 --- a/src/components/Ecogesture/SingleEcogestureView.spec.tsx +++ b/src/components/Ecogesture/SingleEcogestureView.spec.tsx @@ -8,18 +8,6 @@ import { createMockEcolyoStore } from 'tests/__mocks__/store' import { waitForComponentToPaint } from 'tests/__mocks__/testUtils' import SingleEcogestureView from './SingleEcogestureView' -const mockedNavigate = jest.fn() - -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), - useNavigate: () => mockedNavigate, - useParams: () => - jest.fn().mockReturnValue({ ecogestureID: 'ECOGESTURE0001' }), - useLocation: jest.fn().mockReturnValue({ - state: { selectionCompleted: true }, - }), -})) - jest.mock( 'components/Ecogesture/EfficiencyRating/EfficiencyRating', () => 'mock-EfficiencyRating' @@ -91,11 +79,9 @@ describe('SingleEcogesture component', () => { ) await waitForComponentToPaint(wrapper) - wrapper.find('.toggle-text').first().simulate('click') + wrapper.find('.showMore').first().simulate('click') await waitForComponentToPaint(wrapper) - expect(wrapper.find('.toggle-text').text()).toBe( - 'ecogesture_modal.show_less' - ) + expect(wrapper.find('.showMore').text()).toBe('ecogesture_modal.show_less') }) }) diff --git a/src/components/Ecogesture/SingleEcogestureView.tsx b/src/components/Ecogesture/SingleEcogestureView.tsx index c0c18d95f..5a48c6e5f 100644 --- a/src/components/Ecogesture/SingleEcogestureView.tsx +++ b/src/components/Ecogesture/SingleEcogestureView.tsx @@ -1,10 +1,10 @@ +import { Collapse } from '@material-ui/core' import IconButton from '@material-ui/core/IconButton' import doingDisabledIcon from 'assets/icons/ico/doing-disabled.svg' import doingEnabledIcon from 'assets/icons/ico/doing-enabled.svg' import objectiveDisabledIcon from 'assets/icons/ico/objective-disabled.svg' import objectiveEnabledIcon from 'assets/icons/ico/objective-enabled.svg' import defaultIcon from 'assets/icons/visu/ecogesture/default.svg' -import classNames from 'classnames' import ErrorPage from 'components/CommonKit/ErrorPage/ErrorPage' import StyledIcon from 'components/CommonKit/Icon/StyledIcon' import Content from 'components/Content/Content' @@ -17,23 +17,16 @@ import { useI18n } from 'cozy-ui/transpiled/react/I18n' import Icon from 'cozy-ui/transpiled/react/Icon' import { Ecogesture } from 'models' import React, { useCallback, useEffect, useMemo, useState } from 'react' -import { Location, useLocation, useParams } from 'react-router-dom' +import { useParams } from 'react-router-dom' import EcogestureService from 'services/ecogesture.service' import { useAppSelector } from 'store/hooks' import { importIconById } from 'utils/utils' import EfficiencyRating from './EfficiencyRating/EfficiencyRating' import './singleEcogestureView.scss' -interface EcogestureLocation extends Location { - state: { - selectionCompleted: boolean - } -} - const SingleEcogestureView = () => { const { t } = useI18n() const client = useClient() - const location: EcogestureLocation = useLocation() const [ecogesture, setEcogesture] = useState<Ecogesture>() const [ecogestureIcon, setEcogestureIcon] = useState<string>('') const [isMoreDetail, setIsMoreDetail] = useState<boolean>(false) @@ -41,7 +34,6 @@ const SingleEcogestureView = () => { const [isObjective, setIsObjective] = useState<boolean>(false) const [isLoading, setIsLoading] = useState<boolean>(true) const { ecogestureID } = useParams<{ ecogestureID: string }>() - const selectionCompleted = location?.state?.selectionCompleted const ecogestureService = useMemo( () => new EcogestureService(client), @@ -50,34 +42,33 @@ const SingleEcogestureView = () => { const { currentChallenge } = useAppSelector(state => state.ecolyo.challenge) const [headerHeight, setHeaderHeight] = useState<number>(0) const [, setValidExploration] = useExploration() - const toggleMoreDetail = () => { - setIsMoreDetail(prev => !prev) - } - const toggleObjective = useCallback(async () => { - if (ecogesture) { - const toUpdate: Ecogesture = { ...ecogesture, objective: !isObjective } - const updatedEcogesture = await ecogestureService.updateEcogesture( - toUpdate - ) - if (updatedEcogesture) { - setIsObjective(prev => !prev) - setEcogesture(updatedEcogesture) - } - } - }, [ecogesture, ecogestureService, isObjective]) - const toggleDoing = useCallback(async () => { - if (ecogesture) { - const toUpdate: Ecogesture = { ...ecogesture, doing: !isDoing } - const updatedEcogesture = await ecogestureService.updateEcogesture( - toUpdate - ) - if (updatedEcogesture) { - setIsDoing(prev => !prev) - setEcogesture(updatedEcogesture) + const updateEcogesture = useCallback( + async (objective, doing) => { + if (ecogesture) { + const updates: Ecogesture = { + ...ecogesture, + objective: objective, + doing: doing, + } + const result = await ecogestureService.updateEcogesture(updates) + if (result) { + setIsObjective(result.objective) + setIsDoing(result.doing) + setEcogesture(result) + } } - } - }, [ecogesture, ecogestureService, isDoing]) + }, + [ecogesture, ecogestureService] + ) + + const toggleObjective = useCallback(() => { + updateEcogesture(!isObjective, false) + }, [isObjective, updateEcogesture]) + + const toggleDoing = useCallback(() => { + updateEcogesture(false, !isDoing) + }, [isDoing, updateEcogesture]) useEffect(() => { let subscribed = true @@ -160,62 +151,58 @@ const SingleEcogestureView = () => { {ecogesture.longName} </div> <div - className="toggle-text text-15-normal" - onClick={toggleMoreDetail} + className="showMore text-15-normal" + onClick={() => setIsMoreDetail(prev => !prev)} role="button" > - {isMoreDetail - ? t('ecogesture_modal.show_less') - : t('ecogesture_modal.show_more')} + {t(`ecogesture_modal.show_${isMoreDetail ? 'less' : 'more'}`)} </div> - <div - className={classNames('description text-16-normal-150', { - ['block']: isMoreDetail === true, - })} + + <Collapse in={isMoreDetail}> + <div className="longDescription text-16-normal-150"> + {ecogesture.longDescription} + </div> + </Collapse> + </div> + + <div className="buttons-selection"> + <IconButton + aria-label={t('ecogesture.objective')} + onClick={toggleObjective} + classes={{ + root: `btn-secondary-negative objective-btn ${ + isObjective && 'active' + }`, + label: 'text-15-normal', + }} > - {ecogesture.longDescription} - </div> + <Icon + className="status-icon" + icon={ + isObjective ? objectiveEnabledIcon : objectiveDisabledIcon + } + size={40} + /> + <span>{t('ecogesture.objective')}</span> + </IconButton> + <IconButton + aria-label={t('ecogesture.doing')} + onClick={toggleDoing} + classes={{ + root: `btn-secondary-negative doing-btn ${ + isDoing && 'active' + }`, + label: 'text-15-normal', + }} + > + <Icon + className="status-icon" + icon={isDoing ? doingEnabledIcon : doingDisabledIcon} + size={40} + /> + <span>{t('ecogesture.doing')}</span> + </IconButton> </div> - {selectionCompleted && ( - <div className="buttons-selection"> - <IconButton - aria-label={t('ecogesture.objective')} - onClick={toggleObjective} - classes={{ - root: `btn-secondary-negative objective-btn ${ - isObjective && 'active' - }`, - label: 'text-15-normal', - }} - > - <Icon - className="status-icon" - icon={ - isObjective ? objectiveEnabledIcon : objectiveDisabledIcon - } - size={40} - /> - <span>{t('ecogesture.objective')}</span> - </IconButton> - <IconButton - aria-label={t('ecogesture.doing')} - onClick={toggleDoing} - classes={{ - root: `btn-secondary-negative doing-btn ${ - isDoing && 'active' - }`, - label: 'text-15-normal', - }} - > - <Icon - className="status-icon" - icon={isDoing ? doingEnabledIcon : doingDisabledIcon} - size={40} - /> - <span>{t('ecogesture.doing')}</span> - </IconButton> - </div> - )} </div> )} </Content> diff --git a/src/components/Ecogesture/__snapshots__/SingleEcogestureView.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/SingleEcogestureView.spec.tsx.snap index 80927a48f..49280df12 100644 --- a/src/components/Ecogesture/__snapshots__/SingleEcogestureView.spec.tsx.snap +++ b/src/components/Ecogesture/__snapshots__/SingleEcogestureView.spec.tsx.snap @@ -96,17 +96,68 @@ exports[`SingleEcogesture component should be rendered correctly 1`] = ` Je baisse le chauffage en mode hors gel lorsque je m'absente plus de 2 jours. </div> <div - className="toggle-text text-15-normal" + className="showMore text-15-normal" onClick={[Function]} role="button" > ecogesture_modal.show_more </div> - <div - className="description text-16-normal-150" + <WithStyles(ForwardRef(Collapse)) + in={false} > - On se demande parfois si cela vaut le coup de "couper le chauffage" quand on s’absente… dès qu’il s’agit d’un week-end la réponse est « oui sûrement » ! Attention cependant au retour à ne pas faire de la surchauffe ! L’idéal est bien évidemment de régler sa programmation pour que le chauffage se relance quelques heures avant votre retour… - </div> + <ForwardRef(Collapse) + classes={ + Object { + "entered": "MuiCollapse-entered", + "hidden": "MuiCollapse-hidden", + "root": "MuiCollapse-root", + "wrapper": "MuiCollapse-wrapper", + "wrapperInner": "MuiCollapse-wrapperInner", + } + } + in={false} + > + <Transition + addEndListener={[Function]} + appear={false} + enter={true} + exit={true} + in={false} + mountOnEnter={false} + onEnter={[Function]} + onEntered={[Function]} + onEntering={[Function]} + onExit={[Function]} + onExited={[Function]} + onExiting={[Function]} + timeout={300} + unmountOnExit={false} + > + <div + className="MuiCollapse-root MuiCollapse-hidden" + style={ + Object { + "minHeight": "0px", + } + } + > + <div + className="MuiCollapse-wrapper" + > + <div + className="MuiCollapse-wrapperInner" + > + <div + className="longDescription text-16-normal-150" + > + On se demande parfois si cela vaut le coup de "couper le chauffage" quand on s’absente… dès qu’il s’agit d’un week-end la réponse est « oui sûrement » ! Attention cependant au retour à ne pas faire de la surchauffe ! L’idéal est bien évidemment de régler sa programmation pour que le chauffage se relance quelques heures avant votre retour… + </div> + </div> + </div> + </div> + </Transition> + </ForwardRef(Collapse)> + </WithStyles(ForwardRef(Collapse))> </div> <div className="buttons-selection" diff --git a/src/components/Ecogesture/singleEcogestureView.scss b/src/components/Ecogesture/singleEcogestureView.scss index 862a5d290..c8c6d61f9 100644 --- a/src/components/Ecogesture/singleEcogestureView.scss +++ b/src/components/Ecogesture/singleEcogestureView.scss @@ -41,20 +41,17 @@ text-align: center; color: white; } - .description { - display: none; - margin: 1.5rem 0.5rem 0.5rem 0.5rem; - text-align: left; - } - .block { - display: block !important; - } - .toggle-text { + + .showMore { text-align: center; text-decoration: underline; margin-top: 1.5rem; cursor: pointer; } + .longDescription { + margin: 1em 0.5rem; + text-align: left; + } } .buttons-selection { width: 100%; diff --git a/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.spec.tsx b/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.spec.tsx index 0ccba339a..33640fbcc 100644 --- a/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.spec.tsx +++ b/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.spec.tsx @@ -21,6 +21,21 @@ describe('EcogestureSelectionDetail component', () => { expect(toJson(wrapper)).toMatchSnapshot() }) + it('should toggle more details', async () => { + const wrapper = mount( + <EcogestureSelectionDetail + ecogesture={mockedEcogesturesData[0]} + validate={mockValidate} + title={mockedEcogesturesData[0].shortName} + /> + ) + await waitForComponentToPaint(wrapper) + + wrapper.find('.showMore').first().simulate('click') + await waitForComponentToPaint(wrapper) + + expect(wrapper.find('.showMore').text()).toBe('ecogesture_modal.show_less') + }) it('should call validate with objective to true', async () => { const wrapper = mount( <EcogestureSelectionDetail diff --git a/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.tsx b/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.tsx index 8fea0b04e..cf50f528d 100644 --- a/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.tsx +++ b/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.tsx @@ -1,4 +1,4 @@ -import { Button } from '@material-ui/core' +import { Button, Collapse } from '@material-ui/core' import doingIcon from 'assets/icons/ico/doing-enabled.svg' import objectiveIcon from 'assets/icons/ico/objective-enabled.svg' import skipIcon from 'assets/icons/ico/skip-enabled.svg' @@ -23,6 +23,7 @@ const EcogestureSelectionDetail = ({ }: EcogestureSelectionDetailProps) => { const { t } = useI18n() const [ecogestureIcon, setEcogestureIcon] = useState<string>('') + const [showDetails, setShowDetails] = useState(false) useEffect(() => { let subscribed = true @@ -33,6 +34,7 @@ const EcogestureSelectionDetail = ({ } } getIcon() + setShowDetails(false) return () => { subscribed = false } @@ -41,9 +43,25 @@ const EcogestureSelectionDetail = ({ return ( <div className="eg-selection-detail-container"> <div className="content"> - <StyledIcon className="icon" icon={ecogestureIcon} size={240} /> + <div className="iconContainer"> + <StyledIcon className="icon" icon={ecogestureIcon} size={240} /> + </div> <div className="text-22 title">{title}</div> <div className="text text-18-bold">{ecogesture.longName}</div> + + <div + className="showMore text-15-normal" + onClick={() => setShowDetails(prev => !prev)} + role="button" + > + {t(`ecogesture_modal.show_${showDetails ? 'less' : 'more'}`)} + </div> + + <Collapse in={showDetails} exit={false}> + <div className="longDescription text-16-normal-150"> + {ecogesture.longDescription} + </div> + </Collapse> </div> <div className="buttons"> <Button diff --git a/src/components/EcogestureSelection/EcogestureSelectionDetail/__snapshots__/EcogestureSelectionDetail.spec.tsx.snap b/src/components/EcogestureSelection/EcogestureSelectionDetail/__snapshots__/EcogestureSelectionDetail.spec.tsx.snap index a25ce5445..0b56a7a8e 100644 --- a/src/components/EcogestureSelection/EcogestureSelectionDetail/__snapshots__/EcogestureSelectionDetail.spec.tsx.snap +++ b/src/components/EcogestureSelection/EcogestureSelectionDetail/__snapshots__/EcogestureSelectionDetail.spec.tsx.snap @@ -44,39 +44,43 @@ exports[`EcogestureSelectionDetail component should be rendered correctly 1`] = <div className="content" > - <StyledIcon - className="icon" - icon="test-file-stub" - size={240} + <div + className="iconContainer" > - <Icon - aria-hidden={true} + <StyledIcon className="icon" icon="test-file-stub" size={240} - spin={false} > - <Component + <Icon aria-hidden={true} - className="icon styles__icon___23x3R" - height={240} - style={Object {}} - width={240} + className="icon" + icon="test-file-stub" + size={240} + spin={false} > - <svg + <Component aria-hidden={true} className="icon styles__icon___23x3R" height={240} style={Object {}} width={240} > - <use - xlinkHref="#test-file-stub" - /> - </svg> - </Component> - </Icon> - </StyledIcon> + <svg + aria-hidden={true} + className="icon styles__icon___23x3R" + height={240} + style={Object {}} + width={240} + > + <use + xlinkHref="#test-file-stub" + /> + </svg> + </Component> + </Icon> + </StyledIcon> + </div> <div className="text-22 title" > @@ -87,6 +91,71 @@ exports[`EcogestureSelectionDetail component should be rendered correctly 1`] = > Je baisse le chauffage en mode hors gel lorsque je m'absente plus de 2 jours. </div> + <div + className="showMore text-15-normal" + onClick={[Function]} + role="button" + > + ecogesture_modal.show_more + </div> + <WithStyles(ForwardRef(Collapse)) + exit={false} + in={false} + > + <ForwardRef(Collapse) + classes={ + Object { + "entered": "MuiCollapse-entered", + "hidden": "MuiCollapse-hidden", + "root": "MuiCollapse-root", + "wrapper": "MuiCollapse-wrapper", + "wrapperInner": "MuiCollapse-wrapperInner", + } + } + exit={false} + in={false} + > + <Transition + addEndListener={[Function]} + appear={false} + enter={true} + exit={false} + in={false} + mountOnEnter={false} + onEnter={[Function]} + onEntered={[Function]} + onEntering={[Function]} + onExit={[Function]} + onExited={[Function]} + onExiting={[Function]} + timeout={300} + unmountOnExit={false} + > + <div + className="MuiCollapse-root MuiCollapse-hidden" + style={ + Object { + "minHeight": "0px", + } + } + > + <div + className="MuiCollapse-wrapper" + > + <div + className="MuiCollapse-wrapperInner" + > + <div + className="longDescription text-16-normal-150" + > + On se demande parfois si cela vaut le coup de "couper le chauffage" quand on s’absente… dès qu’il s’agit d’un week-end la réponse est « oui sûrement » ! Attention cependant au retour à ne pas faire de la surchauffe ! L’idéal est bien évidemment de régler sa programmation pour que le chauffage se relance quelques heures avant votre retour… + </div> + </div> + </div> + </div> + </Transition> + </ForwardRef(Collapse)> + </WithStyles(ForwardRef(Collapse))> </div> <div className="buttons" diff --git a/src/components/EcogestureSelection/EcogestureSelectionDetail/ecogestureSelectionDetail.scss b/src/components/EcogestureSelection/EcogestureSelectionDetail/ecogestureSelectionDetail.scss index 89e0f95a4..2bdb65ed0 100644 --- a/src/components/EcogestureSelection/EcogestureSelectionDetail/ecogestureSelectionDetail.scss +++ b/src/components/EcogestureSelection/EcogestureSelectionDetail/ecogestureSelectionDetail.scss @@ -2,41 +2,42 @@ @import 'src/styles/base/breakpoint'; .eg-selection-detail-container { - min-height: inherit; display: flex; flex-direction: column; text-align: center; color: $grey-bright; padding: 0 1.5rem; + flex: 1; + max-height: calc(100vh - 60px - 72px - 0px); + .content { display: flex; gap: 0.5rem; flex-direction: column; flex: 1; - justify-content: center; + justify-content: flex-start; align-items: center; + overflow-y: auto; .title { color: $soft-grey; font-weight: 700; } - .icon { - @media #{$phone} { - width: 50%; - height: 50%; - } - @media #{$small-phone} { - width: 30%; - height: 30%; - } + .iconContainer { + height: 240px; + } + + .showMore { + text-align: center; + text-decoration: underline; + margin-top: 1rem; + cursor: pointer; } - .text { - min-height: 4.875rem; - display: flex; - align-items: center; - margin: 0 1rem; + .longDescription { + margin: 1rem 0.5rem; + text-align: left; } } .buttons { diff --git a/src/components/Navbar/Navbar.tsx b/src/components/Navbar/Navbar.tsx index 14d423b66..36095b762 100644 --- a/src/components/Navbar/Navbar.tsx +++ b/src/components/Navbar/Navbar.tsx @@ -40,6 +40,12 @@ const Navbar = () => { }, [client] ) + + /** Return class "is-active" if pathname includes matcher */ + const isActive = (matcher: string) => { + return pathname.includes(matcher) ? 'is-active' : '' + } + return ( <aside className="o-sidebar"> <nav role="navigation" aria-label="navigation"> @@ -51,9 +57,7 @@ const Navbar = () => { <Link component={NavLink} to="/consumption" - className={`c-nav-link ${ - pathname.includes('/consumption') ? 'is-active' : '' - }`} + className={`c-nav-link ${isActive('/consumption')}`} > <StyledIcon className="c-nav-icon off" icon={ConsoIconOff} /> <StyledIcon className="c-nav-icon on" icon={ConsoIconOn} /> @@ -64,9 +68,7 @@ const Navbar = () => { <Link component={NavLink} to="/challenges" - className={`c-nav-link ${ - pathname.includes('/challenges') ? 'is-active' : '' - }`} + className={`c-nav-link ${isActive('/challenges')}`} > {(challengeExplorationNotification || challengeActionNotification || @@ -83,9 +85,7 @@ const Navbar = () => { <Link component={NavLink} to="/ecogestures" - className={`c-nav-link ${ - pathname.includes('/ecogestures') ? 'is-active' : '' - }`} + className={`c-nav-link ${isActive('/ecogesture')}`} > <StyledIcon className="c-nav-icon off" icon={BulbIconOff} /> <StyledIcon className="c-nav-icon on" icon={BulbIconOn} /> @@ -110,9 +110,7 @@ const Navbar = () => { <Link component={NavLink} to="/options" - className={`c-nav-link ${ - pathname.includes('/options') ? 'is-active' : '' - }`} + className={`c-nav-link ${isActive('/options')}`} > <StyledIcon className="c-nav-icon off" icon={ParameterIconOff} /> <StyledIcon className="c-nav-icon on" icon={ParameterIconOn} /> diff --git a/src/locales/fr.json b/src/locales/fr.json index c54d909a3..aaae141fb 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -484,8 +484,8 @@ "title_ecogesture": "Astuce", "title_action": "Action", "efficiency": "Efficacité", - "show_less": "Voir moins d’infos", - "show_more": "Voir plus d’infos", + "show_less": "Voir moins", + "show_more": "Voir plus", "select_action": "Je choisis cette action", "accessibility": { "window_title_ecogesture": "Fenêtre astuce", -- GitLab