diff --git a/.vscode/settings.json b/.vscode/settings.json index 7b04b7e9ef37d8f0dc2c9fdf2f3ce4221357a219..39ec8baa47db0e3468afef97fb5979776433607b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -80,9 +80,9 @@ "konnector", "konnectors", "lastname", + "legalnotice", "llle", "Lugdunum", - "legalnotice", "luxon", "matomo", "Matomo", @@ -98,6 +98,7 @@ "Reinit", "splashscreen", "testid", + "Tétris", "UNSTARTED" ] } diff --git a/src/components/ProfileType/ProfileTypeFormDateSelection.tsx b/src/components/ProfileType/ProfileTypeFormDateSelection.tsx index fcdebab17dacde7581fd5202857905db27993499..d8bd5306f469afc053ec6946b3e4e8e88bc8a862 100644 --- a/src/components/ProfileType/ProfileTypeFormDateSelection.tsx +++ b/src/components/ProfileType/ProfileTypeFormDateSelection.tsx @@ -1,16 +1,16 @@ -import React, { useCallback, useEffect, useState } from 'react' +import { MenuItem, Select } from '@material-ui/core' +import FormNavigation from 'components/FormGlobal/FormNavigation' +import FormProgress from 'components/FormGlobal/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import FormProgress from 'components/FormGlobal/FormProgress' -import FormNavigation from 'components/FormGlobal/FormNavigation' import { ProfileTypeStepForm } from 'enum/profileType.enum' +import { DateTime } from 'luxon' import { ProfileType, ProfileTypeAnswer, ProfileTypeAnswerChoices, } from 'models/profileType.model' -import { DateTime } from 'luxon' -import { MenuItem, Select } from '@material-ui/core' +import React, { useCallback, useEffect, useState } from 'react' interface ProfileTypeFormDateSelectionProps { step: ProfileTypeStepForm @@ -18,7 +18,7 @@ interface ProfileTypeFormDateSelectionProps { profileType: ProfileType answerType: ProfileTypeAnswer setNextStep: Function - setPrevioustStep: Function + setPreviousStep: Function isProfileTypeComplete: boolean } @@ -35,7 +35,7 @@ const ProfileTypeFormDateSelection: React.FC< profileType, answerType, setNextStep, - setPrevioustStep, + setPreviousStep, isProfileTypeComplete, }: ProfileTypeFormDateSelectionProps) => { const { t } = useI18n() @@ -137,8 +137,8 @@ const ProfileTypeFormDateSelection: React.FC< } const handlePrevious = useCallback(() => { - setPrevioustStep(profileType) - }, [profileType, setPrevioustStep]) + setPreviousStep(profileType) + }, [profileType, setPreviousStep]) const handleNext = useCallback(() => { profileType[answerType.attribute] = answer diff --git a/src/components/ProfileType/ProfileTypeFormMultiChoice.spec.tsx b/src/components/ProfileType/ProfileTypeFormMultiChoice.spec.tsx index fee5fae4054652398245d4e02d550dd615c5207b..fa0cf9261f2850f80be78811727d5f873fae2f17 100644 --- a/src/components/ProfileType/ProfileTypeFormMultiChoice.spec.tsx +++ b/src/components/ProfileType/ProfileTypeFormMultiChoice.spec.tsx @@ -46,7 +46,7 @@ describe('ProfileTypeFormMultiChoice component', () => { profileType={mockProfileType} answerType={mockProfileTypeAnswers[1]} setNextStep={mockhandlePrevious} - setPrevioustStep={mockhandleNext} + setPreviousStep={mockhandleNext} isProfileTypeComplete={false} /> </Provider> diff --git a/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx b/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx index 1df12766cb42d6b4a3b1b95dd6d8711e87df24ca..ecfac832dd8004cf46fa9366cd7661528c48f067 100644 --- a/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx +++ b/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx @@ -1,19 +1,19 @@ -import React, { useCallback, useEffect, useState } from 'react' -import 'components/ProfileType/profileTypeForm.scss' -import { useI18n } from 'cozy-ui/transpiled/react/I18n' import classNames from 'classnames' -import FormProgress from 'components/FormGlobal/FormProgress' import FormNavigation from 'components/FormGlobal/FormNavigation' -import { remove } from 'lodash' +import FormProgress from 'components/FormGlobal/FormProgress' +import 'components/ProfileType/profileTypeForm.scss' +import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { IndividualInsulationWork, ProfileTypeStepForm, } from 'enum/profileType.enum' +import { remove } from 'lodash' import { ProfileType, ProfileTypeAnswer, ProfileTypeAnswerChoices, } from 'models/profileType.model' +import React, { useCallback, useEffect, useState } from 'react' interface ProfileTypeFormMultiChoiceProps { step: ProfileTypeStepForm @@ -21,7 +21,7 @@ interface ProfileTypeFormMultiChoiceProps { profileType: ProfileType answerType: ProfileTypeAnswer setNextStep: Function - setPrevioustStep: Function + setPreviousStep: Function isProfileTypeComplete: boolean } @@ -31,7 +31,7 @@ const ProfileTypeFormMultiChoice: React.FC<ProfileTypeFormMultiChoiceProps> = ({ profileType, answerType, setNextStep, - setPrevioustStep, + setPreviousStep, isProfileTypeComplete, }: ProfileTypeFormMultiChoiceProps) => { const { t } = useI18n() @@ -63,8 +63,8 @@ const ProfileTypeFormMultiChoice: React.FC<ProfileTypeFormMultiChoiceProps> = ({ } const handlePrevious = useCallback(() => { - setPrevioustStep(profileType) - }, [profileType, setPrevioustStep]) + setPreviousStep(profileType) + }, [profileType, setPreviousStep]) const handleNext = useCallback(() => { profileType[answerType.attribute] = answer as IndividualInsulationWork[] diff --git a/src/components/ProfileType/ProfileTypeFormNumber.spec.tsx b/src/components/ProfileType/ProfileTypeFormNumber.spec.tsx index 4dd96a015ffc470b5d7505eedca889a597408594..8ddd81010f7c8cdad3d7bcab502533e582ee963b 100644 --- a/src/components/ProfileType/ProfileTypeFormNumber.spec.tsx +++ b/src/components/ProfileType/ProfileTypeFormNumber.spec.tsx @@ -45,7 +45,7 @@ describe('ProfileTypeFormNumber component', () => { profileType={mockProfileType} answerType={mockProfileTypeAnswers[1]} setNextStep={mockhandlePrevious} - setPrevioustStep={mockhandleNext} + setPreviousStep={mockhandleNext} isProfileTypeComplete={false} /> </Provider> diff --git a/src/components/ProfileType/ProfileTypeFormNumber.tsx b/src/components/ProfileType/ProfileTypeFormNumber.tsx index cdb31f505c0486f66038d2f306191fa189fb69ad..21ee84d9d2716e884a4805971546be7d3f2bdb9c 100644 --- a/src/components/ProfileType/ProfileTypeFormNumber.tsx +++ b/src/components/ProfileType/ProfileTypeFormNumber.tsx @@ -1,14 +1,14 @@ -import React, { useCallback, useEffect, useState } from 'react' +import FormNavigation from 'components/FormGlobal/FormNavigation' +import FormProgress from 'components/FormGlobal/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import FormProgress from 'components/FormGlobal/FormProgress' -import FormNavigation from 'components/FormGlobal/FormNavigation' import { ProfileTypeStepForm } from 'enum/profileType.enum' import { ProfileType, ProfileTypeAnswer, ProfileTypeAnswerChoices, } from 'models/profileType.model' +import React, { useCallback, useEffect, useState } from 'react' interface ProfileTypeFormNumberProps { step: ProfileTypeStepForm @@ -16,7 +16,7 @@ interface ProfileTypeFormNumberProps { profileType: ProfileType answerType: ProfileTypeAnswer setNextStep: Function - setPrevioustStep: Function + setPreviousStep: Function isProfileTypeComplete: boolean } @@ -26,15 +26,15 @@ const ProfileTypeFormNumber: React.FC<ProfileTypeFormNumberProps> = ({ profileType, answerType, setNextStep, - setPrevioustStep, + setPreviousStep, isProfileTypeComplete, }: ProfileTypeFormNumberProps) => { const { t } = useI18n() const [answer, setAnswer] = useState<ProfileTypeAnswerChoices>('') const handlePrevious = useCallback(() => { - setPrevioustStep(profileType) - }, [profileType, setPrevioustStep]) + setPreviousStep(profileType) + }, [profileType, setPreviousStep]) const handleNext = useCallback(() => { profileType[answerType.attribute] = answer diff --git a/src/components/ProfileType/ProfileTypeFormNumberSelection.spec.tsx b/src/components/ProfileType/ProfileTypeFormNumberSelection.spec.tsx index ec9c8ed8485569a643ec56ffcf0f1680d5e622d2..b4182cdffe3ccd291da8d480c8edb0b61fb1aef9 100644 --- a/src/components/ProfileType/ProfileTypeFormNumberSelection.spec.tsx +++ b/src/components/ProfileType/ProfileTypeFormNumberSelection.spec.tsx @@ -45,7 +45,7 @@ describe('ProfileTypeFormNumberSelection component', () => { profileType={mockProfileType} answerType={mockProfileTypeAnswers[3]} setNextStep={mockhandlePrevious} - setPrevioustStep={mockhandleNext} + setPreviousStep={mockhandleNext} isProfileTypeComplete={false} /> </Provider> diff --git a/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx b/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx index 8996894ac4a871f2d4d3b3a7653edbe4f4dd07a2..2e3dff0c83fe16508bbca270b0910a702a6e95aa 100644 --- a/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx +++ b/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx @@ -1,14 +1,14 @@ -import React, { useCallback, useEffect, useState } from 'react' +import FormNavigation from 'components/FormGlobal/FormNavigation' +import FormProgress from 'components/FormGlobal/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import FormProgress from 'components/FormGlobal/FormProgress' -import FormNavigation from 'components/FormGlobal/FormNavigation' import { ProfileTypeStepForm } from 'enum/profileType.enum' import { ProfileType, ProfileTypeAnswer, ProfileTypeAnswerChoices, } from 'models/profileType.model' +import React, { useCallback, useEffect, useState } from 'react' interface ProfileTypeFormNumberSelectionProps { step: ProfileTypeStepForm @@ -16,7 +16,7 @@ interface ProfileTypeFormNumberSelectionProps { profileType: ProfileType answerType: ProfileTypeAnswer setNextStep: Function - setPrevioustStep: Function + setPreviousStep: Function isProfileTypeComplete: boolean } @@ -28,7 +28,7 @@ const ProfileTypeFormNumberSelection: React.FC< profileType, answerType, setNextStep, - setPrevioustStep, + setPreviousStep, isProfileTypeComplete, }: ProfileTypeFormNumberSelectionProps) => { const { t } = useI18n() @@ -46,8 +46,8 @@ const ProfileTypeFormNumberSelection: React.FC< } const handlePrevious = useCallback(() => { - setPrevioustStep(profileType) - }, [profileType, setPrevioustStep]) + setPreviousStep(profileType) + }, [profileType, setPreviousStep]) const handleNext = useCallback(() => { profileType[answerType.attribute] = answer diff --git a/src/components/ProfileType/ProfileTypeFormSingleChoice.spec.tsx b/src/components/ProfileType/ProfileTypeFormSingleChoice.spec.tsx index 97decd124a48b76dc4f16f5aeec1d663351079f5..9cd981c5abf8b0e0511dc0cb3412beab17f64ef7 100644 --- a/src/components/ProfileType/ProfileTypeFormSingleChoice.spec.tsx +++ b/src/components/ProfileType/ProfileTypeFormSingleChoice.spec.tsx @@ -45,7 +45,7 @@ describe('ProfileTypeFormSingleChoice component', () => { profileType={mockProfileType} answerType={mockProfileTypeAnswers[1]} setNextStep={mockhandlePrevious} - setPrevioustStep={mockhandleNext} + setPreviousStep={mockhandleNext} isProfileTypeComplete={false} /> </Provider> diff --git a/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx b/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx index f1ddbe33c72c1367d83a46cc5ea65404655176fa..a436afe8191a23b5e7e05a8bcec4d9ba22fffa77 100644 --- a/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx +++ b/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx @@ -1,15 +1,15 @@ -import React, { useCallback, useEffect, useState } from 'react' -import 'components/ProfileType/profileTypeForm.scss' -import { useI18n } from 'cozy-ui/transpiled/react/I18n' import classNames from 'classnames' -import FormProgress from 'components/FormGlobal/FormProgress' import FormNavigation from 'components/FormGlobal/FormNavigation' +import FormProgress from 'components/FormGlobal/FormProgress' +import 'components/ProfileType/profileTypeForm.scss' +import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { ProfileTypeStepForm } from 'enum/profileType.enum' import { ProfileType, ProfileTypeAnswer, ProfileTypeAnswerChoices, } from 'models/profileType.model' +import React, { useCallback, useEffect, useState } from 'react' interface ProfileTypeFormSingleChoiceProps { step: ProfileTypeStepForm @@ -17,7 +17,7 @@ interface ProfileTypeFormSingleChoiceProps { profileType: ProfileType answerType: ProfileTypeAnswer setNextStep: Function - setPrevioustStep: Function + setPreviousStep: Function isProfileTypeComplete: boolean } @@ -29,15 +29,15 @@ const ProfileTypeFormSingleChoice: React.FC< profileType, answerType, setNextStep, - setPrevioustStep, + setPreviousStep, isProfileTypeComplete, }: ProfileTypeFormSingleChoiceProps) => { const { t } = useI18n() const [answer, setAnswer] = useState<ProfileTypeAnswerChoices>('') const handlePrevious = useCallback(() => { - setPrevioustStep(profileType) - }, [profileType, setPrevioustStep]) + setPreviousStep(profileType) + }, [profileType, setPreviousStep]) const handleNext = useCallback(() => { profileType[answerType.attribute] = answer diff --git a/src/components/ProfileType/ProfileTypeView.tsx b/src/components/ProfileType/ProfileTypeView.tsx index 88d58c2300888537e741dcf5dec2d40b8d5d4fee..f4f01a7f67017e02119a10983c3db5055d6aae3e 100644 --- a/src/components/ProfileType/ProfileTypeView.tsx +++ b/src/components/ProfileType/ProfileTypeView.tsx @@ -15,6 +15,7 @@ import { ConstructionYear, Floor, HotWaterEquipment, + HotWaterFluid, HousingType, IndividualInsulationWork, IndividualOrCollective, @@ -62,7 +63,7 @@ const ProfileTypeView: React.FC = () => { hotWater: IndividualOrCollective.INDIVIDUAL, hotWaterEquipment: HotWaterEquipment.OTHER, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.ELECTRICITY, + hotWaterFluid: HotWaterFluid.ELECTRICITY, cookingFluid: FluidType.ELECTRICITY, equipments: [], }) @@ -139,7 +140,7 @@ const ProfileTypeView: React.FC = () => { answerType={answerType} setNextStep={setNextStep} isProfileTypeComplete={profile.isProfileTypeCompleted} - setPrevioustStep={setPreviousStep} + setPreviousStep={setPreviousStep} /> ) } else if (answerType.type === ProfileTypeFormType.MULTI_CHOICE) { @@ -150,7 +151,7 @@ const ProfileTypeView: React.FC = () => { profileType={profileType} answerType={answerType} setNextStep={setNextStep} - setPrevioustStep={setPreviousStep} + setPreviousStep={setPreviousStep} isProfileTypeComplete={profile.isProfileTypeCompleted} /> ) @@ -163,7 +164,7 @@ const ProfileTypeView: React.FC = () => { answerType={answerType} setNextStep={setNextStep} isProfileTypeComplete={profile.isProfileTypeCompleted} - setPrevioustStep={setPreviousStep} + setPreviousStep={setPreviousStep} /> ) } else if (answerType.type === ProfileTypeFormType.NUMBER_SELECTION) { @@ -175,7 +176,7 @@ const ProfileTypeView: React.FC = () => { answerType={answerType} setNextStep={setNextStep} isProfileTypeComplete={profile.isProfileTypeCompleted} - setPrevioustStep={setPreviousStep} + setPreviousStep={setPreviousStep} /> ) } else if (answerType.type === ProfileTypeFormType.DATE_SELECTION) { @@ -187,7 +188,7 @@ const ProfileTypeView: React.FC = () => { answerType={answerType} setNextStep={setNextStep} isProfileTypeComplete={profile.isProfileTypeCompleted} - setPrevioustStep={setPreviousStep} + setPreviousStep={setPreviousStep} /> ) } else if (answerType.type === ProfileTypeFormType.EQUIPMENT_SELECTION) { diff --git a/src/db/ecogestureData.json b/src/db/ecogestureData.json index 6b12e829f327334b360d5000b230040f7d081b2f..50fe93026ab4d7d4c519c012a5fe1f811bb55122 100644 --- a/src/db/ecogestureData.json +++ b/src/db/ecogestureData.json @@ -28,7 +28,7 @@ "fluidTypes": [0], "shortName": "Portique thermique", "longName": "Je ferme mes fenêtres quand la climatisation est en marche", - "longDescription": "Cela permet de garder la fraicheur à l'intérieur. Le climatiseur n'est pas là pour refroidir la rue mais bien la pièce.", + "longDescription": "Cela permet de garder la fraîcheur à l'intérieur. Le climatiseur n'est pas là pour refroidir la rue mais bien la pièce.", "impactLevel": 8, "efficiency": 4, "difficulty": 1, @@ -279,7 +279,7 @@ "_id": "ECOGESTURE0013", "usage": 5, "fluidTypes": [0], - "shortName": "Accelerateur de particules", + "shortName": "Accélérateur de particules", "longName": "J’utilise le plus souvent les cycles courts à basse température pour laver le linge et la vaisselle.", "longDescription": "Utilisez la température la plus basse possible : de nombreux produits nettoyants sont efficaces à froid et un cycle à 90 °C consomme 3 fois plus d'énergie qu'un lavage à 40 °C. En effet, 80 % de l'énergie consommée par un lave-linge ou un lave-vaisselle sert au chauffage de l'eau ! Que ce soit pour la vaisselle ou le linge, les programmes de lavage intensif consomment jusqu'à 40 % de plus. Si possible, rincez à l'eau froide : la température de rinçage n'a pas d'effet sur le nettoyage du linge ou de la vaisselle. Attention cependant avec les tissus qui peuvent rétrécir : ce qui fait rétrécir, c'est le passage d'une température à une autre. Mieux vaut alors faire le cycle complet à l'eau froide pour les premiers lavages de tissus sensibles. Pour du linge ou de la vaisselle peu sales, utilisez la touche \"Eco\". Elle réduit la température de lavage et allonge sa durée (c’est le chauffage de l’eau qui consomme le plus). Vous économiserez jusqu’à 45 % par rapport aux cycles longs. Néanmoins, pour vous prémunir contre les bouchons de graisse dans les canalisations, faites quand même un cycle à chaud une fois par mois environ.", "impactLevel": 2, @@ -465,7 +465,7 @@ "fluidTypes": [0], "shortName": "Boules de linge", "longName": "Si j’ai un sèche linge, je sèche mon linge en petits paquets et j’adapte la durée de séchage de mon sèche-linge.", - "longDescription": "Le sèche-linge représente 5% des consommations moyenne d'électrcité spécifique (d'après EDF). Il est important au préalable d’essorer à une vitesse supérieure, jusqu’à 1 000 tours/minutes, si la nature du linge le permet. Le séchage sera alors plus rapide et vous consommerez moins d’énergie pour le sécher", + "longDescription": "Le sèche-linge représente 5% des consommations moyenne d’électricité spécifique (d'après EDF). Il est important au préalable d’essorer à une vitesse supérieure, jusqu’à 1 000 tours/minutes, si la nature du linge le permet. Le séchage sera alors plus rapide et vous consommerez moins d’énergie pour le sécher", "impactLevel": 1, "efficiency": 0.5, "difficulty": 1, @@ -601,7 +601,7 @@ "_id": "ECOGESTURE0027", "usage": 5, "fluidTypes": [0], - "shortName": "Marionnetiste", + "shortName": "Marionnettiste", "longName": "Je débranche mes chargeurs quand ils ne sont pas en fonctionnement.", "longDescription": "Certains chargeurs continuent de consommer de l’énergie quand ils restent branchés, même si l’appareil n’est pas connecté. De plus, certaines technologies de batteries supportent mal de rester branchées une fois la charge terminée. Les débrancher dès que l’appareil est chargé permet des économies d’énergie et prolonge la durée de vie de votre appareil.", "impactLevel": 1, @@ -672,7 +672,7 @@ "fluidTypes": [0], "shortName": "Roi du Puzzle", "longName": "J’optimise le rangement dans mon réfrigérateur et/ou congélateur.", - "longDescription": "La partie la plus froide ne se situe pas toujours au même endroit selon l’appareil : dans le haut des réfrigérateurs traditionnels, dans le bas des combinés 2 portes. Dans les réfrigérateurs à froid ventilé, les températures sont plus homogènes. Regardez la notice de votre réfrigérateur pour identifier les différentes zones de température et ainsi ranger chaque aliment à sa place. Enlevez les produits de leur emballage d'origine (film plastique, carton, etc.) qui filtrent le froid. Rangez les denrées de façon rationnelle pour y accéder plus rapidement et aussi pour pouvoir refermer plus rapidement la porte. Surtout, n’obstruez pas le thermostat car s’il est recouvert de givre ou de produits, il ne détectera pas la température correctement et l’abaissera plus que nécessaire. Evitez de mettre trop de poids dans les portes. Une porte qui fonctionne mal provoque des pertes d'énergie. Conseils pour ranger votre réfrigérateur : placez les oeufs sur l'étage le plus haut ; les laitages et le beurre sur l'étage du dessous ; puis les plats cuisinés, les pâtisseries fraîches et charcuteries sur l'étage du milieu ; sur les parties basses, placez les poissons ; et réservez le bac à légumes pour les légumes et les fruits.", + "longDescription": "La partie la plus froide ne se situe pas toujours au même endroit selon l’appareil : dans le haut des réfrigérateurs traditionnels, dans le bas des combinés 2 portes. Dans les réfrigérateurs à froid ventilé, les températures sont plus homogènes. Regardez la notice de votre réfrigérateur pour identifier les différentes zones de température et ainsi ranger chaque aliment à sa place. Enlevez les produits de leur emballage d'origine (film plastique, carton, etc.) qui filtrent le froid. Rangez les denrées de façon rationnelle pour y accéder plus rapidement et aussi pour pouvoir refermer plus rapidement la porte. Surtout, n’obstruez pas le thermostat car s’il est recouvert de givre ou de produits, il ne détectera pas la température correctement et l’abaissera plus que nécessaire. Évitez de mettre trop de poids dans les portes. Une porte qui fonctionne mal provoque des pertes d'énergie. Conseils pour ranger votre réfrigérateur : placez les oeufs sur l'étage le plus haut ; les laitages et le beurre sur l'étage du dessous ; puis les plats cuisinés, les pâtisseries fraîches et charcuteries sur l'étage du milieu ; sur les parties basses, placez les poissons ; et réservez le bac à légumes pour les légumes et les fruits.", "impactLevel": 1, "efficiency": 0.5, "difficulty": 1, @@ -764,7 +764,7 @@ "fluidTypes": [0], "shortName": "Bulles-à-part", "longName": "Je ne fais pas fonctionner mon ventilateur ou la climatisation dans les pièces non occupées", - "longDescription": "Cela permet d'évite des consommations inutiles. Le froid ne restera pas dans la pièce. Donc il est préférable d'allumer le ventilateru ou climatiseur seulement quand des personnes sont présentes dans la pièce.", + "longDescription": "Cela permet d'évite des consommations inutiles. Le froid ne restera pas dans la pièce. Donc il est préférable d'allumer le ventilateur ou climatiseur seulement quand des personnes sont présentes dans la pièce.", "impactLevel": 8, "efficiency": 4, "difficulty": 2, @@ -970,7 +970,7 @@ "usage": 1, "fluidTypes": [0, 2], "shortName": "Thermos-Logis", - "longName": "Je conserve au maximum la fraicheur de mon logement en fermant les volets et fenêtres quand je m’absente pendant la journée.", + "longName": "Je conserve au maximum la fraîcheur de mon logement en fermant les volets et fenêtres quand je m’absente pendant la journée.", "longDescription": "En laissant les fenêtres ouvertes aux heures chaudes, vous faites entrer la chaleur dans le logement. Une chaleur qui sera difficile à évacuer une fois les pièces réchauffées. L’idéal est de fermer les fenêtres dès que la température extérieure dépasse la température du logement. En revanche, laissez-les bien ouvertes la nuit afin que l’air frais rafraîchisse votre intérieur. ", "impactLevel": 7, "efficiency": 3.5, @@ -982,7 +982,7 @@ "equipmentInstallation": true, "investment": null, "action": true, - "actionName": "Je conserve au maximum la fraicheur de mon logement en fermant les volets et fenêtres quand je m’absente pendant la journée.", + "actionName": "Je conserve au maximum la fraîcheur de mon logement en fermant les volets et fenêtres quand je m’absente pendant la journée.", "actionDuration": 3, "doing": false, "objective": false, @@ -1086,7 +1086,7 @@ "fluidTypes": [0], "shortName": "Cape d'invisibilité", "longName": "Je branche ma \"box\" internet sur une multi-prise ou sur une minuterie pour l'éteindre quand je n'en n'ai pas besoin.", - "longDescription": "La consommation des box internet est loin d’être négligeable : autour de 200 kWh par an pour un usage moyen et avec des variations du simple au double selon votre fournisseur et votre équipement. Face à cela, une solution s’impose : la débrancher tout simplement ! Pour faciliter les bonnes habitudes nous vous conseillons de la brancher sur une minuterie qui s’éteindra toute seule pendant la nuit par exemple selon les réglages que vous aurez prévus. Sinon, une simple muli-prise fait l'affaire si vous pensez à l'éteindre !", + "longDescription": "La consommation des box internet est loin d’être négligeable : autour de 200 kWh par an pour un usage moyen et avec des variations du simple au double selon votre fournisseur et votre équipement. Face à cela, une solution s’impose : la débrancher tout simplement ! Pour faciliter les bonnes habitudes nous vous conseillons de la brancher sur une minuterie qui s’éteindra toute seule pendant la nuit par exemple selon les réglages que vous aurez prévus. Sinon, une simple multi-prise fait l'affaire si vous pensez à l'éteindre !", "impactLevel": 3, "efficiency": 1.5, "difficulty": 2, @@ -1187,7 +1187,7 @@ "equipment": false, "equipmentType": ["DRYER"], "equipmentInstallation": false, - "investment": "Etendage", + "investment": "Étendage", "action": false, "actionName": null, "actionDuration": 3, @@ -1270,7 +1270,7 @@ "fluidTypes": [1], "shortName": "Pisciniste", "longName": "Si j'ai un grand évier, j'utilise un bac pour faire la vaisselle.", - "longDescription": "C’est mieux que de laisser le robinet ouvert pendant toute la vaisselle : même si celui-ci est équipé d’un \"écomousseur\" ! En plus, ça mousse mieux et vous économisez aussi du liquide vaisselle, astucieux, non ?", + "longDescription": "C’est mieux que de laisser le robinet ouvert pendant toute la vaisselle : même si celui-ci est équipé d’un \"éco-mousseur\" ! En plus, ça mousse mieux et vous économisez aussi du liquide vaisselle, astucieux, non ?", "impactLevel": 3, "efficiency": 1.5, "difficulty": 2, @@ -1279,7 +1279,7 @@ "equipment": false, "equipmentType": [], "equipmentInstallation": false, - "investment": "un bac à vaiselle", + "investment": "un bac à vaisselle", "action": false, "actionName": null, "actionDuration": 3, @@ -1499,7 +1499,7 @@ "usage": 1, "fluidTypes": [2], "shortName": "Brûleur Expert", - "longName": "Je nettoie et je régle la combustion de ma chaudière tous les ans.", + "longName": "Je nettoie et je règle la combustion de ma chaudière tous les ans.", "longDescription": "Le mauvais entretien ou réglage d’une chaudière peut réduire son efficacité. Pour obtenir un rendement maximal, faites vérifier votre équipement de chauffage tous les ans. L’entretien régulier permet d’éviter les sur-consommations.Indispensable pour votre sécurité, la révision annuelle des chaudières à combustion (gaz, fioul, bois) est obligatoire ", "impactLevel": 7, "efficiency": 3.5, @@ -1592,7 +1592,7 @@ "fluidTypes": [2], "shortName": "Passage au stand", "longName": "Si mon circuit de chauffage a plus de 10 ans, je le fait désembouer.", - "longDescription": "Au fil du temps, la tuyauterie s’oxyde, entraînant la formation de boues et autres sédiments dans le circuit. L’embouage de l’installation nuit à la diffusion de chaleur : cela peut entraîner une perte de la performance allant jusqu’à 40 %. Vous pouvez désembouer votre radiateur vous-même ou faire appel à un pro. Etape 1 : Eteindre sa chaudière puis laissez l’eau redescendre à température ambiante. Fermez tous vos radiateurs. Etape 2 : Le désembouage doit commencer par le premier radiateur, c’est-à-dire le plus proche du chauffage central. Fermez les vannes de ce radiateur. Dévissez son purgeur avec la clé à molette puis versez le produit désembouant directement dans le radiateur à l’aide de votre entonnoir. Revissez le purgeur puis remettez le chauffage central en marche. Laissez agir le produit le temps indiqué sur la notice, soit 2 à 5 jours en moyenne, voire davantage (voir notice produit désembouant). Étape n°3 : La vidange du circuit de chauffage. Patientez le temps nécessaire pour bien laisser le temps au produit d’agir en profondeur. Ce temps lui permet de bien décoller les boues et de les mettre en suspension afin de les évacuer plus facilement. Une fois ce délai passé, vous pouvez procéder à la vidange. Pour cela, coupez le chauffage à nouveau. Vidangez la totalité du circuit de chauffage en permettant un débit suffisamment fort pour évacuer les boues en suspension par le robinet de vidange du radiateur. Lorsque la vidange est effectuée, rincez le radiateur et remplissez-le à nouveau. Vous pouvez aussi faire appel à un plombier, comptez 350 à 450 euros HT pour un circuit comprenant moins de 10 radiateurs.", + "longDescription": "Au fil du temps, la tuyauterie s’oxyde, entraînant la formation de boues et autres sédiments dans le circuit. L’embouage de l’installation nuit à la diffusion de chaleur : cela peut entraîner une perte de la performance allant jusqu’à 40 %. Vous pouvez désembouer votre radiateur vous-même ou faire appel à un pro. Etape 1 : Éteindre sa chaudière puis laissez l’eau redescendre à température ambiante. Fermez tous vos radiateurs. Etape 2 : Le désembouage doit commencer par le premier radiateur, c’est-à-dire le plus proche du chauffage central. Fermez les vannes de ce radiateur. Dévissez son purgeur avec la clé à molette puis versez le produit désembouant directement dans le radiateur à l’aide de votre entonnoir. Revissez le purgeur puis remettez le chauffage central en marche. Laissez agir le produit le temps indiqué sur la notice, soit 2 à 5 jours en moyenne, voire davantage (voir notice produit désembouant). Étape n°3 : La vidange du circuit de chauffage. Patientez le temps nécessaire pour bien laisser le temps au produit d’agir en profondeur. Ce temps lui permet de bien décoller les boues et de les mettre en suspension afin de les évacuer plus facilement. Une fois ce délai passé, vous pouvez procéder à la vidange. Pour cela, coupez le chauffage à nouveau. Vidangez la totalité du circuit de chauffage en permettant un débit suffisamment fort pour évacuer les boues en suspension par le robinet de vidange du radiateur. Lorsque la vidange est effectuée, rincez le radiateur et remplissez-le à nouveau. Vous pouvez aussi faire appel à un plombier, comptez 350 à 450 euros HT pour un circuit comprenant moins de 10 radiateurs.", "impactLevel": 6, "efficiency": 3, "difficulty": 3, @@ -1661,7 +1661,7 @@ "fluidTypes": [0, 2], "shortName": "Le Grand Nettoyage", "longName": "Je purge mes radiateurs hydrauliques tous les ans.", - "longDescription": "Lorsque les radiateurs sont froids en haut mais chauds en bas, c'est qu'ils contiennent de l'air qui diminue nettement leur rendement. Ils ont donc besoin d'être purgés : 1. Coupez l'alimentation d'eau au niveau de votre chaudière pour ne pas avoir de l'eau sous pression, fermez les vannes thermostatiques des radiateurs et prévoyez un récipient pour recueillir l'eau ; 2. Commencez par le radiateur situé au plus bas de la maison : ouvrez le purgeur dans le sens inverse des aiguilles d'une montre jusqu'à entendre un sifflement, signe que l'air s'échappe. En général, le purgeur se trouve en partie haute du radiateur, du côté opposé au robinet d'alimentation. Sur certains modèles anciens, une clé spéciale est nécessaire pour le dévisser (trouvable en quincailleries et magasins de bricolage). Attention, ne dévissez jamais la molette complètement, vous risqueriez de ne jamais réussir à la remettre en place ; 3; Quand l'eau se met à couler, refermez la molette ; 4. Resserez la vis de purge. 5 Vérifiez au manomètre de la chaudière que la pression d'eau dans l'installation est suffisante (entre 1,5 et 2 bars). Dans le cas contraire, ajoutez de l'eau.", + "longDescription": "Lorsque les radiateurs sont froids en haut mais chauds en bas, c'est qu'ils contiennent de l'air qui diminue nettement leur rendement. Ils ont donc besoin d'être purgés : 1. Coupez l'alimentation d'eau au niveau de votre chaudière pour ne pas avoir de l'eau sous pression, fermez les vannes thermostatiques des radiateurs et prévoyez un récipient pour recueillir l'eau ; 2. Commencez par le radiateur situé au plus bas de la maison : ouvrez le purgeur dans le sens inverse des aiguilles d'une montre jusqu'à entendre un sifflement, signe que l'air s'échappe. En général, le purgeur se trouve en partie haute du radiateur, du côté opposé au robinet d'alimentation. Sur certains modèles anciens, une clé spéciale est nécessaire pour le dévisser (trouvable en quincailleries et magasins de bricolage). Attention, ne dévissez jamais la molette complètement, vous risqueriez de ne jamais réussir à la remettre en place ; 3; Quand l'eau se met à couler, refermez la molette ; 4. Resserrez la vis de purge. 5 Vérifiez au manomètre de la chaudière que la pression d'eau dans l'installation est suffisante (entre 1,5 et 2 bars). Dans le cas contraire, ajoutez de l'eau.", "impactLevel": 5, "efficiency": 2.5, "difficulty": 3, diff --git a/src/enum/profileType.enum.ts b/src/enum/profileType.enum.ts index 01c2b20a5521cd6ab42731f8f6518ee3469e9ce4..942f672449451020c1fb8bbdd6c17b1145a815a0 100644 --- a/src/enum/profileType.enum.ts +++ b/src/enum/profileType.enum.ts @@ -54,6 +54,13 @@ export enum WarmingType { GAS = 2, WOOD = 3, FUEL = 4, + OTHER = 5, +} + +export enum HotWaterFluid { + ELECTRICITY = 0, + GAS = 2, + OTHER = 3, } export enum ProfileTypeStepForm { diff --git a/src/locales/fr.json b/src/locales/fr.json index 17060aa0bc21209e06e27ac4234b59130026464d..ad282f24bb11badd7a0e1487980dc607c2d654b0 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -1094,20 +1094,24 @@ "2": "Gaz", "3": "Bois", "4": "Fioul", + "5": "Autre", "no_fluid_text": "Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel", "0_text": "Produit grâce à de l'électricité", "2_text": "Produit grâce au gaz", "3_text": "Produit grâce au bois", - "4_text": "Produit grâce au fioul" + "4_text": "Produit grâce au fioul", + "5_text": "Produit grâce à un autre moyen" }, "hot_water_fluid": { "title": "Source eau chaude", "question": "Avec quelle source d’énergie votre eau chaude est-elle produite\u00a0?", "0": "Électricité", "2": "Gaz", + "3": "Fioul, bois, autre", "no_fluid_text": "Produite ni par de l'électricité, ni par du gaz", "0_text": "Produite grâce à de l'électricité", - "2_text": "Produite grâce au gaz" + "2_text": "Produite grâce au gaz", + "3_text": "Produite grâce au fioul, bois ou autre" }, "cooking_fluid": { "title": "Source cuisson", diff --git a/src/models/profileType.model.ts b/src/models/profileType.model.ts index a4e6a7fdfacf1b6eda4524a434653242877771c3..f1f0b97959607348f2dd977fe8994fe65ad8ce91 100644 --- a/src/models/profileType.model.ts +++ b/src/models/profileType.model.ts @@ -1,18 +1,19 @@ +import { EquipmentType } from 'enum/ecogesture.enum' +import { FluidType } from 'enum/fluid.enum' import { - HousingType, - Floor, ConstructionYear, - IndividualInsulationWork, + Floor, HotWaterEquipment, - OutsideFacingWalls, + HotWaterFluid, + HousingType, + IndividualInsulationWork, IndividualOrCollective, + OutsideFacingWalls, ProfileTypeFormType, ThreeChoicesAnswer, WarmingType, } from 'enum/profileType.enum' -import { FluidType } from 'enum/fluid.enum' import { DateTime } from 'luxon' -import { EquipmentType } from 'enum/ecogesture.enum' interface ProfileTypeIndexableTypes { [key: string]: @@ -47,7 +48,7 @@ export interface ProfileType extends ProfileTypeIndexableTypes { hasReplacedHeater: ThreeChoicesAnswer hotWaterEquipment: HotWaterEquipment warmingFluid: WarmingType | null - hotWaterFluid: FluidType | null + hotWaterFluid: HotWaterFluid | null cookingFluid: FluidType updateDate: DateTime equipments: EquipmentType[] diff --git a/src/services/profileType.service.ts b/src/services/profileType.service.ts index 5dafc811a2b4aba27376f9452a1a9179ee3c7148..3be40613c9320935813f50316feede5ba062488c 100644 --- a/src/services/profileType.service.ts +++ b/src/services/profileType.service.ts @@ -373,7 +373,7 @@ export default class ProfileTypeService { * getDetailsMonthlyForecast * @param {FluidType} fluidType * @param {number} month - * @returns {numeber} DetailsMnthlyForecast + * @returns {number} DetailsMonthlyForecast */ public async getDetailsMonthlyForecast( fluidType: FluidType, @@ -394,7 +394,8 @@ export default class ProfileTypeService { ecsConsumption: this.profileType.heating === IndividualOrCollective.COLLECTIVE ? null - : fluidType === hotWaterFluid + : hotWaterFluid !== null && + (fluidType as number) === (hotWaterFluid as number) ? this.getMonthEcs(month) : null, cookingConsumption: diff --git a/src/services/profileTypeForm.service.ts b/src/services/profileTypeForm.service.ts index 1a4b3339529baf5a41c347c22a99f962ecc6bdb1..14e2bcd30ffeac698edfb303a551b2023e181f0b 100644 --- a/src/services/profileTypeForm.service.ts +++ b/src/services/profileTypeForm.service.ts @@ -4,6 +4,7 @@ import { ConstructionYear, Floor, HotWaterEquipment, + HotWaterFluid, HousingType, IndividualInsulationWork, IndividualOrCollective, @@ -199,6 +200,7 @@ export default class ProfileTypeFormService { WarmingType.GAS, WarmingType.WOOD, WarmingType.FUEL, + WarmingType.OTHER, ], } case ProfileTypeStepForm.INDIVIDUAL_INSULATION_WORK: @@ -241,7 +243,11 @@ export default class ProfileTypeFormService { return { type: ProfileTypeFormType.SINGLE_CHOICE, attribute: 'hotWaterFluid', - choices: [FluidType.ELECTRICITY, FluidType.GAS], + choices: [ + HotWaterFluid.ELECTRICITY, + HotWaterFluid.GAS, + HotWaterFluid.OTHER, + ], } case ProfileTypeStepForm.COOKING_FLUID: return { diff --git a/tests/__mocks__/profileType.mock.ts b/tests/__mocks__/profileType.mock.ts index 053abe45a2c98527349079023bf15af26b70a2a3..45f6ee36032fdcbe4a4f8bba2c6eda0720e7ba83 100644 --- a/tests/__mocks__/profileType.mock.ts +++ b/tests/__mocks__/profileType.mock.ts @@ -3,6 +3,7 @@ import { ConstructionYear, Floor, HotWaterEquipment, + HotWaterFluid, HousingType, IndividualInsulationWork, IndividualOrCollective, @@ -60,7 +61,7 @@ export const mockProfileType: ProfileType = { hasReplacedHeater: ThreeChoicesAnswer.NO, hotWaterEquipment: HotWaterEquipment.THERMODYNAMIC, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.ELECTRICITY, + hotWaterFluid: HotWaterFluid.ELECTRICITY, cookingFluid: FluidType.ELECTRICITY, updateDate: DateTime.fromISO('2021-01-01T00:00:00.000Z', { zone: 'utc', @@ -69,7 +70,7 @@ export const mockProfileType: ProfileType = { } export const mockEstimatedConsumption = 3182 export const mockCorrectedConsumption = 3500 -//For the month of march +// For the month of march export const mockMonthConsumption = 439 export const mockMonthCookingConsumption = 17 @@ -97,7 +98,7 @@ export const mockProfileType1: ProfileType = { hasReplacedHeater: ThreeChoicesAnswer.NO, hotWaterEquipment: HotWaterEquipment.SOLAR, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.ELECTRICITY, + hotWaterFluid: HotWaterFluid.ELECTRICITY, cookingFluid: FluidType.ELECTRICITY, updateDate: DateTime.fromISO('2021-01-01T00:00:00.000Z', { zone: 'utc', @@ -106,7 +107,7 @@ export const mockProfileType1: ProfileType = { } export const mockEstimatedConsumption1 = 6450 export const mockCorrectedConsumption1 = 6450 -//For the month of February +// For the month of February export const mockMonthConsumption1 = 1174 export const mockMonthEcsConsumption1Solar = 134 @@ -126,7 +127,7 @@ export const mockProfileType2: ProfileType = { hasReplacedHeater: ThreeChoicesAnswer.YES, hotWaterEquipment: HotWaterEquipment.SOLAR, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.ELECTRICITY, + hotWaterFluid: HotWaterFluid.ELECTRICITY, cookingFluid: FluidType.ELECTRICITY, updateDate: DateTime.fromISO('2021-01-01T00:00:00.000Z', { zone: 'utc', @@ -135,7 +136,7 @@ export const mockProfileType2: ProfileType = { } export const mockEstimatedConsumption2 = 16560 export const mockCorrectedConsumption2 = 15411 -//For the month of January +// For the month of January export const mockMonthConsumption2 = 3000 export const mockTestProfile1: ProfileType = { @@ -153,7 +154,7 @@ export const mockTestProfile1: ProfileType = { hasReplacedHeater: ThreeChoicesAnswer.NO, hotWaterEquipment: HotWaterEquipment.SOLAR, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.GAS, + hotWaterFluid: HotWaterFluid.GAS, cookingFluid: FluidType.GAS, updateDate: DateTime.fromISO('2021-01-01T00:00:00.000Z', { zone: 'utc', @@ -218,7 +219,7 @@ export const mockTestProfile2: ProfileType = { hasReplacedHeater: ThreeChoicesAnswer.NO, hotWaterEquipment: HotWaterEquipment.OTHER, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.ELECTRICITY, + hotWaterFluid: HotWaterFluid.ELECTRICITY, cookingFluid: FluidType.ELECTRICITY, updateDate: DateTime.fromISO('2021-01-01T00:00:00.000Z', { zone: 'utc', @@ -379,6 +380,7 @@ export const mockProfileTypeAnswers: ProfileTypeAnswer[] = [ WarmingType.GAS, WarmingType.WOOD, WarmingType.FUEL, + WarmingType.OTHER, ], }, { @@ -409,7 +411,11 @@ export const mockProfileTypeAnswers: ProfileTypeAnswer[] = [ { type: ProfileTypeFormType.SINGLE_CHOICE, attribute: 'hotWaterFluid', - choices: [FluidType.ELECTRICITY, FluidType.GAS], + choices: [ + HotWaterFluid.ELECTRICITY, + HotWaterFluid.GAS, + HotWaterFluid.OTHER, + ], }, { type: ProfileTypeFormType.SINGLE_CHOICE,