diff --git a/src/components/CommonKit/FormNavigation/FormNavigation.spec.tsx b/src/components/CommonKit/FormNavigation/FormNavigation.spec.tsx index c28c8322612668f9fbbf3e0637f934beb1fa87ff..b9be78286030fbeb9deedf9ac78ed3b28526f7e6 100644 --- a/src/components/CommonKit/FormNavigation/FormNavigation.spec.tsx +++ b/src/components/CommonKit/FormNavigation/FormNavigation.spec.tsx @@ -1,6 +1,5 @@ import { render, screen } from '@testing-library/react' import { userEvent } from '@testing-library/user-event' -import { ProfileTypeStepForm } from 'enums' import React from 'react' import FormNavigation from './FormNavigation' @@ -10,10 +9,10 @@ describe('FormNavigation component', () => { const mockHandleNext = jest.fn() render( <FormNavigation - step={ProfileTypeStepForm.COOKING_FLUID} handlePrevious={mockHandlePrevious} handleNext={mockHandleNext} disableNextButton={false} + disablePrevButton={false} /> ) const [prevButton, nextButton] = screen.getAllByRole('button') diff --git a/src/components/CommonKit/FormNavigation/FormNavigation.tsx b/src/components/CommonKit/FormNavigation/FormNavigation.tsx index be6e49794736fb118e6d1215b314976f231b4c62..cd13d77ef248aa7df3649c9b6f22ab9497fcb9ef 100644 --- a/src/components/CommonKit/FormNavigation/FormNavigation.tsx +++ b/src/components/CommonKit/FormNavigation/FormNavigation.tsx @@ -1,78 +1,50 @@ import Button from '@material-ui/core/Button' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import { EcogestureStepForm, ProfileTypeStepForm, SgeStep } from 'enums' import React, { useCallback } from 'react' -import { useNavigate } from 'react-router-dom' import './formNavigation.scss' interface FormNavigationProps { - step: ProfileTypeStepForm | EcogestureStepForm | SgeStep handlePrevious: () => void handleNext: () => void - disableNextButton: boolean disablePrevButton?: boolean - isEcogesture?: boolean - isLastConnectStep?: boolean + disableNextButton: boolean + isLastStep?: boolean isLoading?: boolean } const FormNavigation = ({ - step, handlePrevious, handleNext, - disableNextButton, disablePrevButton, - isEcogesture, - isLastConnectStep, + disableNextButton, + isLastStep, isLoading, }: FormNavigationProps) => { const { t } = useI18n() - const navigate = useNavigate() - const handlePreviousClick = () => { - handlePrevious() - } - const handleNextClick = () => { - handleNext() - // handle go back to connect for SGE - if (isLastConnectStep) { - navigate('/consumption/electricity') - } - } const getSecondButtonLabel = useCallback(() => { - if (isLoading) { - return t('profile_type.form.button_loading') - } else if ( - isLastConnectStep || - step === ProfileTypeStepForm.UPDATE_DATE || - (step === EcogestureStepForm.EQUIPMENTS && isEcogesture) - ) { - return t('profile_type.form.button_end') - } else { - return t('profile_type.form.button_next') - } - }, [isEcogesture, isLastConnectStep, isLoading, step, t]) + if (isLoading) return t('profile_type.form.button_loading') + if (isLastStep) return t('profile_type.form.button_end') + return t('profile_type.form.button_next') + }, [isLastStep, isLoading, t]) return ( <div className="profile-navigation"> <Button aria-label={t('profile_type.accessibility.button_previous')} - onClick={handlePreviousClick} + onClick={handlePrevious} className="btnSecondary" - disabled={ - disablePrevButton || step === ProfileTypeStepForm.HOUSING_TYPE - } + disabled={disablePrevButton} > {t('profile_type.form.button_previous')} </Button> <Button aria-label={ - step === ProfileTypeStepForm.UPDATE_DATE || - (step === EcogestureStepForm.EQUIPMENTS && isEcogesture) + isLastStep ? t('profile_type.accessibility.button_end') : t('profile_type.accessibility.button_next') } - onClick={handleNextClick} + onClick={handleNext} className="btnPrimary" disabled={disableNextButton} > diff --git a/src/components/CommonKit/FormProgress/FormProgress.spec.tsx b/src/components/CommonKit/FormProgress/FormProgress.spec.tsx new file mode 100644 index 0000000000000000000000000000000000000000..988676204d9026082667229b6852b27b65eef867 --- /dev/null +++ b/src/components/CommonKit/FormProgress/FormProgress.spec.tsx @@ -0,0 +1,19 @@ +import { render, screen } from '@testing-library/react' +import React from 'react' +import FormProgress from './FormProgress' + +describe('FormProgress', () => { + it('should be rendered correctly with a progressbar', () => { + render(<FormProgress currentStep={5} totalSteps={10} />) + expect(screen.getByRole('progressbar')).toBeInTheDocument() + }) + + it('should min out to "1%"', () => { + render(<FormProgress currentStep={0} totalSteps={5} />) + expect(screen.getByText('1%')).toBeInTheDocument() + }) + it('should max out to "100%"', () => { + render(<FormProgress currentStep={5} totalSteps={0} />) + expect(screen.getByText('100%')).toBeInTheDocument() + }) +}) diff --git a/src/components/CommonKit/FormProgress/FormProgress.tsx b/src/components/CommonKit/FormProgress/FormProgress.tsx index 103e6305a72b80eee37158e5db0414c0c2d2ac49..d5c35a49f6b1bc29ccc4cff00337660d0cdbb52d 100644 --- a/src/components/CommonKit/FormProgress/FormProgress.tsx +++ b/src/components/CommonKit/FormProgress/FormProgress.tsx @@ -1,28 +1,25 @@ -import { ProfileTypeStepForm, SgeStep } from 'enums' +import { LinearProgress } from '@material-ui/core' import React from 'react' import './formProgress.scss' -interface FormProgressProps { - step: ProfileTypeStepForm | SgeStep - formType: 'sge' | 'profile' -} +const FormProgress = ({ + currentStep, + totalSteps, +}: { + currentStep: number + /** When working with numeric enums, divide the result by 2, because a reverse mapping is generated. */ + totalSteps: number +}) => { + const progress = Math.min( + Math.round((currentStep / totalSteps) * 100) || 1, + 100 + ) -const FormProgress = ({ step, formType }: FormProgressProps) => { - const getProgress = () => { - const total: number = - Object.values(formType === 'sge' ? SgeStep : ProfileTypeStepForm).length / - 2 - const progress: number = Math.round((step / total) * 100) || 1 - return progress - } return ( - <div className="profile-type-progress"> - <div className="profile-type-progress-label">{getProgress()}%</div> - <div className="profile-type-progress-bar-container"> - <div - className="profile-type-progress-bar-content" - style={{ width: `${getProgress()}%` }} - /> + <div className="formProgress"> + <span>{progress}%</span> + <div className="container"> + <LinearProgress variant="determinate" value={progress} /> </div> </div> ) diff --git a/src/components/CommonKit/FormProgress/formProgress.scss b/src/components/CommonKit/FormProgress/formProgress.scss index dd1f500a85c283e899f54be9a04d1b5963755057..7a70e0fde58da161995fe400ac9971fcf800fb03 100644 --- a/src/components/CommonKit/FormProgress/formProgress.scss +++ b/src/components/CommonKit/FormProgress/formProgress.scss @@ -1,26 +1,18 @@ @import 'src/styles/base/color'; -.profile-type-progress { +.formProgress { display: flex; flex-direction: row; justify-content: center; align-items: center; - .profile-type-progress-label { + gap: 8px; + span { font-size: 0.938rem; font-weight: 700; - width: 1.875rem; color: $gold-shadow; - text-align: right; } - .profile-type-progress-bar-container { - margin-left: 0.5rem; + .container { flex: 1; height: 6px; - background-color: $dark-light-2; - .profile-type-progress-bar-content { - height: 100%; - background-color: $gold-shadow; - border-radius: 12px; - } } } diff --git a/src/components/Connection/SGEConnect/SgeConnectView.spec.tsx b/src/components/Connection/SGEConnect/SgeConnectView.spec.tsx index 02d958a4e4a22cd6962b356a853e5ca3f4988234..d7c9af6ba030bc7974378d9cdb429050d76f1e0f 100644 --- a/src/components/Connection/SGEConnect/SgeConnectView.spec.tsx +++ b/src/components/Connection/SGEConnect/SgeConnectView.spec.tsx @@ -2,6 +2,7 @@ import { render, screen } from '@testing-library/react' import { userEvent } from '@testing-library/user-event' import React from 'react' import { Provider } from 'react-redux' +import { BrowserRouter } from 'react-router-dom' import * as storeHooks from 'store/hooks' import { createMockEcolyoStore } from 'tests/__mocks__/store' import SgeConnectView from './SgeConnectView' @@ -19,7 +20,9 @@ describe('SgeConnectView component', () => { it('should be rendered correctly', () => { const { container } = render( <Provider store={store}> - <SgeConnectView /> + <BrowserRouter> + <SgeConnectView /> + </BrowserRouter> </Provider> ) expect(container).toMatchSnapshot() @@ -29,7 +32,9 @@ describe('SgeConnectView component', () => { it('should call nextStep method', async () => { render( <Provider store={store}> - <SgeConnectView /> + <BrowserRouter> + <SgeConnectView /> + </BrowserRouter> </Provider> ) await userEvent.click(screen.getAllByRole('button')[1]) diff --git a/src/components/Connection/SGEConnect/SgeConnectView.tsx b/src/components/Connection/SGEConnect/SgeConnectView.tsx index d09bc8f7292733bea6dc556aee98b317007192a5..5a5df27cc2eb7d666ebcdfe02487f0d85a392311 100644 --- a/src/components/Connection/SGEConnect/SgeConnectView.tsx +++ b/src/components/Connection/SGEConnect/SgeConnectView.tsx @@ -6,6 +6,7 @@ import Header from 'components/Header/Header' import { SgeStep } from 'enums' import { SgeStore } from 'models' import React, { useCallback, useState } from 'react' +import { useNavigate } from 'react-router' import { updateSgeStore } from 'store/global/global.slice' import { useAppDispatch, useAppSelector } from 'store/hooks' import './SgeConnect.scss' @@ -24,6 +25,7 @@ export type SGEKeysForm = | 'pdlConfirm' const SgeConnectView = () => { + const navigate = useNavigate() const dispatch = useAppDispatch() const { sgeConnect } = useAppSelector(state => state.ecolyo.global) const [isLoading, setIsLoading] = useState(false) @@ -80,8 +82,9 @@ const SgeConnectView = () => { } setCurrentSgeState(updatedState) dispatch(updateSgeStore(updatedState)) + navigate('/consumption/electricity') } - }, [currentSgeState, currentStep, dispatch, isNextValid, isLoading]) + }, [currentStep, isNextValid, isLoading, dispatch, currentSgeState, navigate]) const handlePrev = useCallback(() => { if (currentStep !== SgeStep.IdentityAndPDL) { @@ -137,18 +140,19 @@ const SgeConnectView = () => { <Content heightOffset={headerHeight}> <div className="sge-view"> <div className="sge-container"> - <FormProgress step={currentStep} formType="sge" /> + <FormProgress + currentStep={currentStep} + totalSteps={Object.values(SgeStep).length / 2} + /> {renderStep(currentStep)} </div> <FormNavigation - step={currentStep} handlePrevious={handlePrev} handleNext={handleNext} isLoading={isLoading} - disableNextButton={!isNextValid() || isLoading} disablePrevButton={currentStep === SgeStep.IdentityAndPDL} - isLastConnectStep={currentStep === SgeStep.Consent} - isEcogesture={false} + disableNextButton={!isNextValid() || isLoading} + isLastStep={currentStep === SgeStep.Consent} /> </div> </Content> diff --git a/src/components/Connection/SGEConnect/__snapshots__/SgeConnectView.spec.tsx.snap b/src/components/Connection/SGEConnect/__snapshots__/SgeConnectView.spec.tsx.snap index cf6cc543090625581ccf1fe9e0e076b3689bdf2b..036c91711c4583892436719e7182be2c67610df0 100644 --- a/src/components/Connection/SGEConnect/__snapshots__/SgeConnectView.spec.tsx.snap +++ b/src/components/Connection/SGEConnect/__snapshots__/SgeConnectView.spec.tsx.snap @@ -86,21 +86,27 @@ exports[`SgeConnectView component should be rendered correctly 1`] = ` class="sge-container" > <div - class="profile-type-progress" + class="formProgress" > - <div - class="profile-type-progress-label" - > + <span> 1 % - </div> + </span> <div - class="profile-type-progress-bar-container" + class="container" > <div - class="profile-type-progress-bar-content" - style="width: 1%;" - /> + aria-valuemax="100" + aria-valuemin="0" + aria-valuenow="1" + class="MuiLinearProgress-root MuiLinearProgress-colorPrimary MuiLinearProgress-determinate" + role="progressbar" + > + <div + class="MuiLinearProgress-bar MuiLinearProgress-barColorPrimary MuiLinearProgress-bar1Determinate" + style="transform: translateX(-99%);" + /> + </div> </div> </div> <div diff --git a/src/components/EcogestureForm/EcogestureFormEquipment/EcogestureFormEquipment.spec.tsx b/src/components/EcogestureForm/EcogestureFormEquipment/EcogestureFormEquipment.spec.tsx index ca613d4b9f108a515628586dba9488af2d2dc903..59dfa2b6d36071b61298edabf1f48741dec0b365 100644 --- a/src/components/EcogestureForm/EcogestureFormEquipment/EcogestureFormEquipment.spec.tsx +++ b/src/components/EcogestureForm/EcogestureFormEquipment/EcogestureFormEquipment.spec.tsx @@ -17,7 +17,6 @@ describe('EcogestureFormEquipment component', () => { currentProfileEcogesture={mockProfileEcogesture} setPreviousStep={jest.fn()} setNextStepEcogestureForm={jest.fn()} - step={0} /> </Provider> ) @@ -31,7 +30,6 @@ describe('EcogestureFormEquipment component', () => { currentProfileEcogesture={mockProfileEcogesture} setPreviousStep={jest.fn()} setNextStepEcogestureForm={jest.fn()} - step={0} /> </Provider> ) @@ -50,7 +48,6 @@ describe('EcogestureFormEquipment component', () => { currentProfileEcogesture={mockProfileEcogesture} setPreviousStep={jest.fn()} setNextStepEcogestureForm={jest.fn()} - step={0} /> </Provider> ) @@ -60,7 +57,7 @@ describe('EcogestureFormEquipment component', () => { ).toBeTruthy() expect( screen.getByRole('button', { - name: 'profile_type.accessibility.button_next', + name: 'profile_type.accessibility.button_end', }) ).toBeDisabled() }) diff --git a/src/components/EcogestureForm/EcogestureFormEquipment/EcogestureFormEquipment.tsx b/src/components/EcogestureForm/EcogestureFormEquipment/EcogestureFormEquipment.tsx index eca4b0a774d14d728af91863186e0ee07704edab..4852439abc3a8be68c3a3f3a5ac3afb51c3a4008 100644 --- a/src/components/EcogestureForm/EcogestureFormEquipment/EcogestureFormEquipment.tsx +++ b/src/components/EcogestureForm/EcogestureFormEquipment/EcogestureFormEquipment.tsx @@ -2,7 +2,7 @@ import { IconButton } from '@material-ui/core' import FormNavigation from 'components/CommonKit/FormNavigation/FormNavigation' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import { EcogestureStepForm, EquipmentType, ProfileTypeStepForm } from 'enums' +import { EcogestureStepForm, EquipmentType } from 'enums' import { ProfileEcogesture, ProfileType } from 'models' import React, { useCallback, useState } from 'react' import { useAppSelector } from 'store/hooks' @@ -15,7 +15,6 @@ interface EcogestureFormEquipmentProps { setPreviousStep: () => void setNextStepEcogestureForm?: (_profileEcogesture: ProfileEcogesture) => void setNextStepProfileForm?: (_profileType: ProfileType) => void - step: ProfileTypeStepForm | EcogestureStepForm } const EcogestureFormEquipment = ({ @@ -24,7 +23,6 @@ const EcogestureFormEquipment = ({ setPreviousStep, setNextStepEcogestureForm, setNextStepProfileForm, - step, }: EcogestureFormEquipmentProps) => { const { t } = useI18n() const { isProfileEcogestureCompleted } = useAppSelector( @@ -111,11 +109,10 @@ const EcogestureFormEquipment = ({ </div> </div> <FormNavigation - step={step} handlePrevious={handlePrevious} handleNext={handleNext} disableNextButton={answer.length == 0} - isEcogesture={true} + isLastStep={true} /> </> ) diff --git a/src/components/EcogestureForm/EcogestureFormEquipment/__snapshots__/EcogestureFormEquipment.spec.tsx.snap b/src/components/EcogestureForm/EcogestureFormEquipment/__snapshots__/EcogestureFormEquipment.spec.tsx.snap index ed0bc90c23394c74c1afea2438180aa81028d0e0..61893059fa3c958e17c6ae4e4dc4d66c90fd1952 100644 --- a/src/components/EcogestureForm/EcogestureFormEquipment/__snapshots__/EcogestureFormEquipment.spec.tsx.snap +++ b/src/components/EcogestureForm/EcogestureFormEquipment/__snapshots__/EcogestureFormEquipment.spec.tsx.snap @@ -314,9 +314,8 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = ` > <button aria-label="profile_type.accessibility.button_previous" - class="MuiButtonBase-root MuiButton-root MuiButton-text btnSecondary Mui-disabled Mui-disabled" - disabled="" - tabindex="-1" + class="MuiButtonBase-root MuiButton-root MuiButton-text btnSecondary" + tabindex="0" type="button" > <span @@ -324,9 +323,12 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = ` > profile_type.form.button_previous </span> + <span + class="MuiTouchRipple-root" + /> </button> <button - aria-label="profile_type.accessibility.button_next" + aria-label="profile_type.accessibility.button_end" class="MuiButtonBase-root MuiButton-root MuiButton-text btnPrimary Mui-disabled Mui-disabled" disabled="" tabindex="-1" @@ -335,7 +337,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = ` <span class="MuiButton-label" > - profile_type.form.button_next + profile_type.form.button_end </span> </button> </div> diff --git a/src/components/EcogestureForm/EcogestureFormSingleChoice/EcogestureFormSingleChoice.spec.tsx b/src/components/EcogestureForm/EcogestureFormSingleChoice/EcogestureFormSingleChoice.spec.tsx index 57f1f6692161543435b8f01a802a5782a56e6b60..b7e89d07dbfa9cbc95c18262d2831f73c54d511e 100644 --- a/src/components/EcogestureForm/EcogestureFormSingleChoice/EcogestureFormSingleChoice.spec.tsx +++ b/src/components/EcogestureForm/EcogestureFormSingleChoice/EcogestureFormSingleChoice.spec.tsx @@ -34,22 +34,6 @@ describe('EcogestureFormSingleChoice component', () => { ) expect(container).toMatchSnapshot() }) - it('should render disabled prev button', async () => { - render( - <Provider store={store}> - <EcogestureFormSingleChoice - step={0} - viewedStep={1} - setNextStep={mockHandleNextStep} - setPreviousStep={mockHandlePreviousStep} - currentProfileEcogesture={mockProfileEcogesture} - answerType={mockEcogestureAnswer} - /> - </Provider> - ) - const [prev] = screen.getAllByRole('button') - expect(prev).toBeDisabled() - }) it('should pick a choice and go next', async () => { render( diff --git a/src/components/EcogestureForm/EcogestureFormSingleChoice/EcogestureFormSingleChoice.tsx b/src/components/EcogestureForm/EcogestureFormSingleChoice/EcogestureFormSingleChoice.tsx index e7efcf827da8c60189afcc7377ab04eccc9af595..21401195fa52659828157655c6669b9c9e41c349 100644 --- a/src/components/EcogestureForm/EcogestureFormSingleChoice/EcogestureFormSingleChoice.tsx +++ b/src/components/EcogestureForm/EcogestureFormSingleChoice/EcogestureFormSingleChoice.tsx @@ -83,11 +83,10 @@ const EcogestureFormSingleChoice = ({ })} </div> <FormNavigation - step={step} handlePrevious={handlePrevious} handleNext={handleNext} + disablePrevButton={step === EcogestureStepForm.HEATING_TYPE} disableNextButton={answer === null} - isEcogesture={true} /> </div> ) diff --git a/src/components/EcogestureForm/EcogestureFormView.spec.tsx b/src/components/EcogestureForm/EcogestureFormView.spec.tsx index a654c4bfe1631bcb422e5ca18244d7468cb89603..501a60176665575e4f897dc6c382aaefa39b5f99 100644 --- a/src/components/EcogestureForm/EcogestureFormView.spec.tsx +++ b/src/components/EcogestureForm/EcogestureFormView.spec.tsx @@ -105,4 +105,14 @@ describe('EcogestureFormView component', () => { ) expect(mockAppDispatch).toHaveBeenCalledTimes(2) }) + + it('should not be able to click previous on the first step', () => { + render( + <Provider store={store}> + <EcogestureFormView /> + </Provider> + ) + const [prev] = screen.getAllByRole('button') + expect(prev).toBeDisabled() + }) }) diff --git a/src/components/EcogestureForm/EcogestureFormView.tsx b/src/components/EcogestureForm/EcogestureFormView.tsx index b7aabd755eb5aba0310c41969783c5bc97b6f730..dc4e57379310b77bddf7fa3b1bf3f3f6011e298a 100644 --- a/src/components/EcogestureForm/EcogestureFormView.tsx +++ b/src/components/EcogestureForm/EcogestureFormView.tsx @@ -105,7 +105,6 @@ const EcogestureFormView = () => { <> {step === EcogestureStepForm.EQUIPMENTS && ( <EcogestureFormEquipment - step={EcogestureStepForm.EQUIPMENTS} currentProfileEcogesture={currentProfileEcogesture} setNextStepEcogestureForm={setNextStep} setPreviousStep={setPreviousStep} diff --git a/src/components/ProfileType/ProfileTypeFormDateSelection/ProfileTypeFormDateSelection.tsx b/src/components/ProfileType/ProfileTypeFormDateSelection/ProfileTypeFormDateSelection.tsx index cad6e9cd5bf3bbbc8667035c66386b49a4ecf5b4..42f247a432bcf8c1d8795cb3002b158919b76817 100644 --- a/src/components/ProfileType/ProfileTypeFormDateSelection/ProfileTypeFormDateSelection.tsx +++ b/src/components/ProfileType/ProfileTypeFormDateSelection/ProfileTypeFormDateSelection.tsx @@ -1,6 +1,5 @@ import { MenuItem, Select } from '@material-ui/core' import FormNavigation from 'components/CommonKit/FormNavigation/FormNavigation' -import FormProgress from 'components/CommonKit/FormProgress/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { ProfileTypeStepForm } from 'enums' @@ -131,7 +130,6 @@ const ProfileTypeFormDateSelection = ({ return ( <> <div className="profile-form-container"> - <FormProgress step={step} formType="profile" /> <div className="profile-question-label"> {t( `profile_type.${ProfileTypeStepForm[step].toLowerCase()}.question` @@ -177,10 +175,10 @@ const ProfileTypeFormDateSelection = ({ )} </div> <FormNavigation - step={step} handlePrevious={handlePrevious} handleNext={handleNext} disableNextButton={answer === ''} + isLastStep={true} /> </> ) diff --git a/src/components/ProfileType/ProfileTypeFormMultiChoice/ProfileTypeFormMultiChoice.tsx b/src/components/ProfileType/ProfileTypeFormMultiChoice/ProfileTypeFormMultiChoice.tsx index 6a58102c477facedfdd91c2b89d8c7469af56e59..2a3c9cfac0a6275e6c409c307dad16ed9ec734ad 100644 --- a/src/components/ProfileType/ProfileTypeFormMultiChoice/ProfileTypeFormMultiChoice.tsx +++ b/src/components/ProfileType/ProfileTypeFormMultiChoice/ProfileTypeFormMultiChoice.tsx @@ -1,6 +1,5 @@ import classNames from 'classnames' import FormNavigation from 'components/CommonKit/FormNavigation/FormNavigation' -import FormProgress from 'components/CommonKit/FormProgress/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { ProfileTypeStepForm } from 'enums' @@ -74,7 +73,6 @@ const ProfileTypeFormMultiChoice = ({ return ( <> <div className="profile-form-container"> - <FormProgress step={step} formType="profile" /> <div className="profile-question-label"> {t( `profile_type.${ProfileTypeStepForm[step].toLowerCase()}.question` @@ -110,7 +108,6 @@ const ProfileTypeFormMultiChoice = ({ })} </div> <FormNavigation - step={step} handlePrevious={handlePrevious} handleNext={handleNext} disableNextButton={answer.length < 1} diff --git a/src/components/ProfileType/ProfileTypeFormNumber/ProfileTypeFormNumber.tsx b/src/components/ProfileType/ProfileTypeFormNumber/ProfileTypeFormNumber.tsx index 918be75c334d086c3efd1485cd588e02c399133d..e4d1bf390873b9d92424d7b165886f722980295e 100644 --- a/src/components/ProfileType/ProfileTypeFormNumber/ProfileTypeFormNumber.tsx +++ b/src/components/ProfileType/ProfileTypeFormNumber/ProfileTypeFormNumber.tsx @@ -1,6 +1,5 @@ /* eslint-disable jsx-a11y/no-autofocus */ import FormNavigation from 'components/CommonKit/FormNavigation/FormNavigation' -import FormProgress from 'components/CommonKit/FormProgress/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { ProfileTypeStepForm } from 'enums' @@ -48,7 +47,6 @@ const ProfileTypeFormNumber = ({ return ( <> <div className="profile-form-container"> - <FormProgress step={step} formType="profile" /> <div className="profile-question-label"> {t( `profile_type.${ProfileTypeStepForm[step].toLowerCase()}.question` @@ -70,7 +68,6 @@ const ProfileTypeFormNumber = ({ )} </div> <FormNavigation - step={step} handlePrevious={handlePrevious} handleNext={handleNext} disableNextButton={answer === ''} diff --git a/src/components/ProfileType/ProfileTypeFormNumberSelection/ProfileTypeFormNumberSelection.tsx b/src/components/ProfileType/ProfileTypeFormNumberSelection/ProfileTypeFormNumberSelection.tsx index 10c5ca18bc0dcebac352cca988340ea10846c788..be39d086fade19dd51fb266d8d5f3d33838ead41 100644 --- a/src/components/ProfileType/ProfileTypeFormNumberSelection/ProfileTypeFormNumberSelection.tsx +++ b/src/components/ProfileType/ProfileTypeFormNumberSelection/ProfileTypeFormNumberSelection.tsx @@ -1,6 +1,5 @@ import { Button } from '@material-ui/core' import FormNavigation from 'components/CommonKit/FormNavigation/FormNavigation' -import FormProgress from 'components/CommonKit/FormProgress/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { ProfileTypeStepForm } from 'enums' @@ -66,7 +65,6 @@ const ProfileTypeFormNumberSelection = ({ return ( <> <div className="profile-form-container"> - <FormProgress step={step} formType="profile" /> <div className="profile-question-label"> {t( `profile_type.${ProfileTypeStepForm[step].toLowerCase()}.question` @@ -105,7 +103,6 @@ const ProfileTypeFormNumberSelection = ({ )} </div> <FormNavigation - step={step} handlePrevious={handlePrevious} handleNext={handleNext} disableNextButton={answer === ''} diff --git a/src/components/ProfileType/ProfileTypeFormSingleChoice/ProfileTypeFormSingleChoice.tsx b/src/components/ProfileType/ProfileTypeFormSingleChoice/ProfileTypeFormSingleChoice.tsx index 52f88be87c5fa774acbf08f7e881bc76a9b88ec6..2fc81aa25bc284c25999e7b688f108426f99bf75 100644 --- a/src/components/ProfileType/ProfileTypeFormSingleChoice/ProfileTypeFormSingleChoice.tsx +++ b/src/components/ProfileType/ProfileTypeFormSingleChoice/ProfileTypeFormSingleChoice.tsx @@ -1,6 +1,5 @@ import classNames from 'classnames' import FormNavigation from 'components/CommonKit/FormNavigation/FormNavigation' -import FormProgress from 'components/CommonKit/FormProgress/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { ProfileTypeStepForm } from 'enums' @@ -70,7 +69,6 @@ const ProfileTypeFormSingleChoice = ({ return ( <> <div className="profile-form-container"> - <FormProgress step={step} formType="profile" /> <div className="profile-question-label"> {t( `profile_type.${ProfileTypeStepForm[step].toLowerCase()}.question` @@ -105,9 +103,9 @@ const ProfileTypeFormSingleChoice = ({ })} </div> <FormNavigation - step={step} handlePrevious={handlePrevious} handleNext={handleNext} + disablePrevButton={step === ProfileTypeStepForm.HOUSING_TYPE} disableNextButton={answer === '' || answer === undefined} /> </> diff --git a/src/components/ProfileType/ProfileTypeView.spec.tsx b/src/components/ProfileType/ProfileTypeView.spec.tsx index c9bc054f90caf1450ffe2f3b6d9bdea50cd6be8a..77e2baebe8ea29e3184babe0745fed2a83d520ec 100644 --- a/src/components/ProfileType/ProfileTypeView.spec.tsx +++ b/src/components/ProfileType/ProfileTypeView.spec.tsx @@ -1,4 +1,4 @@ -import { render } from '@testing-library/react' +import { render, screen } from '@testing-library/react' import ProfileTypeView from 'components/ProfileType/ProfileTypeView' import React from 'react' import { Provider } from 'react-redux' @@ -28,4 +28,14 @@ describe('ProfileTypeView component', () => { container.getElementsByClassName('profile-type-container')[0] ).toBeInTheDocument() }) + + it('should not be able to click previous on the first step', () => { + render( + <Provider store={store}> + <ProfileTypeView /> + </Provider> + ) + const [prev] = screen.getAllByRole('button') + expect(prev).toBeDisabled() + }) }) diff --git a/src/components/ProfileType/ProfileTypeView.tsx b/src/components/ProfileType/ProfileTypeView.tsx index 6f619beb1e9c8c1372a0ad4602cb87174dffce58..2436c5bd0203f363949993fd39c456cb4f2e632a 100644 --- a/src/components/ProfileType/ProfileTypeView.tsx +++ b/src/components/ProfileType/ProfileTypeView.tsx @@ -1,3 +1,4 @@ +import FormProgress from 'components/CommonKit/FormProgress/FormProgress' import Content from 'components/Content/Content' import EcogestureFormEquipment from 'components/EcogestureForm/EcogestureFormEquipment/EcogestureFormEquipment' import CozyBar from 'components/Header/CozyBar' @@ -212,7 +213,6 @@ const ProfileTypeView = () => { } else if (answerType.type === ProfileTypeFormType.EQUIPMENT_SELECTION) { return ( <EcogestureFormEquipment - step={step} currentProfileType={currentProfileType} setNextStepProfileForm={setNextStep} setPreviousStep={setPreviousStep} @@ -230,16 +230,28 @@ const ProfileTypeView = () => { displayBackArrow={true} /> <Content heightOffset={headerHeight}> - <div className="profile-type-container"> - {isLoading && <Loader />} - {!isLoading && ( - <> - {step !== ProfileTypeStepForm.END && selectForm()} - {step === ProfileTypeStepForm.END && ( - <ProfileTypeFinished profileType={currentProfileType} /> - )} - </> - )} + <div className="profileType-view"> + <div className="progressContainer"> + <FormProgress + currentStep={step} + totalSteps={Object.keys(ProfileTypeStepForm).length / 2} + /> + </div> + <div className="profile-type-container"> + {isLoading && ( + <div className="loaderContainer"> + <Loader /> + </div> + )} + {!isLoading && ( + <> + {step !== ProfileTypeStepForm.END && selectForm()} + {step === ProfileTypeStepForm.END && ( + <ProfileTypeFinished profileType={currentProfileType} /> + )} + </> + )} + </div> </div> </Content> </> diff --git a/src/components/ProfileType/profileTypeForm.scss b/src/components/ProfileType/profileTypeForm.scss index 49f36d4ec7d6cc9e8897c9ee2f3e759f7470045d..9ebe653558a6026ed81aa611f69570526f0457c6 100644 --- a/src/components/ProfileType/profileTypeForm.scss +++ b/src/components/ProfileType/profileTypeForm.scss @@ -4,7 +4,7 @@ .profile-form-container { color: $white; - margin: 1rem 1rem 3.5rem; + margin: 0 1rem 1rem; max-width: 53rem; .text { font-size: 1.25rem; diff --git a/src/components/ProfileType/profileTypeView.scss b/src/components/ProfileType/profileTypeView.scss index 0a07966b1977394dd46fd3530552a55babc9d6bf..e8cd7e8470d27434c43af811ba609018503fa51a 100644 --- a/src/components/ProfileType/profileTypeView.scss +++ b/src/components/ProfileType/profileTypeView.scss @@ -1,11 +1,21 @@ -.profile-type-container { - position: relative; - min-height: inherit; +.profileType-view { display: flex; - flex: 1; flex-direction: column; - justify-content: space-between; - label { - cursor: pointer; + flex: 1; + padding-top: 1rem; + .progressContainer { + margin-inline: 1rem; + } + + .profile-type-container { + position: relative; + min-height: inherit; + display: flex; + flex: 1; + flex-direction: column; + justify-content: space-between; + label { + cursor: pointer; + } } } diff --git a/src/components/theme.ts b/src/components/theme.ts index e23010af8bab6529a2e279be850241191d9559f1..e1b9d32f0f4fe8779ed4cb7dde38eb4b572efb35 100644 --- a/src/components/theme.ts +++ b/src/components/theme.ts @@ -19,5 +19,15 @@ export const theme = createTheme({ height: 40, }, }, + MuiLinearProgress: { + determinate: { + height: 6, + borderRadius: 5, + backgroundColor: 'transparent', + }, + barColorPrimary: { + backgroundColor: '#e3b82a', + }, + }, }, })