From 686ff6351c96758ac5c373ac3d831da99e000af3 Mon Sep 17 00:00:00 2001 From: Yoan VALLET <ext.sopra.yvallet@grandlyon.com> Date: Tue, 30 Mar 2021 14:17:48 +0200 Subject: [PATCH] feat: update konnector labels and aria-labels --- .../Connection/ConnectionFormLogin.tsx | 6 +- .../Connection/ConnectionNotFound.tsx | 82 +++-- .../Connection/ConnectionResult.tsx | 302 +++++++++--------- src/components/Header/Header.tsx | 18 +- src/components/Konnector/KonnectorModal.tsx | 26 +- .../Konnector/KonnectorViewerCard.tsx | 31 +- .../Konnector/KonnectorViewerList.tsx | 84 ++--- src/enum/konnectorUpdate.enum.ts | 8 +- src/locales/fr.json | 83 +++-- 9 files changed, 338 insertions(+), 302 deletions(-) diff --git a/src/components/Connection/ConnectionFormLogin.tsx b/src/components/Connection/ConnectionFormLogin.tsx index 33ea3752a..5f1116848 100644 --- a/src/components/Connection/ConnectionFormLogin.tsx +++ b/src/components/Connection/ConnectionFormLogin.tsx @@ -82,7 +82,7 @@ const ConnectionFormLogin: React.FC<ConnectionFormLoginProps> = ({ trigger: _trigger, } = await connectionService.connectNewUser(konnectorSlug, login, password) if (!_trigger) { - setError(t('KONNECTORCONFIG.ERROR_ACCOUNT_CREATION')) + setError(t('konnector_form.error_account_creation')) return null } const updatedConnection: FluidConnection = { @@ -124,7 +124,7 @@ const ConnectionFormLogin: React.FC<ConnectionFormLoginProps> = ({ setError('') setLoading(true) if (!login || !password) { - setError(t('KONNECTORCONFIG.ERROR_NO_LOGIN_PASSWORD')) + setError(t('konnector_form.error_no_login_password')) setLoading(false) return null } @@ -145,7 +145,7 @@ const ConnectionFormLogin: React.FC<ConnectionFormLoginProps> = ({ if (authData.login) { setLogin(authData.login) } - setError(t('KONNECTORCONFIG.ERROR_LOGIN_FAILED')) + setError(t('konnector_form.error_login_failed')) } }, [account, t]) diff --git a/src/components/Connection/ConnectionNotFound.tsx b/src/components/Connection/ConnectionNotFound.tsx index 1019d1dad..9eee50aa1 100644 --- a/src/components/Connection/ConnectionNotFound.tsx +++ b/src/components/Connection/ConnectionNotFound.tsx @@ -1,42 +1,40 @@ -import React from 'react' -import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import MuiButton from '@material-ui/core/Button' -import './connectionNotFound.scss' -interface ConnectionNotFoundProps { - konnectorSlug: string -} - -const ConnectionNotFound: React.FC<ConnectionNotFoundProps> = ({ - konnectorSlug, -}: ConnectionNotFoundProps) => { - const { t } = useI18n() - - const openKonnectorURL = () => { - // TODO - Use getstoreinstallationurl from client - https://docs.cozy.io/en/cozy-client/api/cozy-client/#getstoreinstallationurl-string - const hostname = window.location.origin.replace('ecolyo', 'store') - const url = hostname + '/#/discover/' + konnectorSlug - window.open(url, '_blank') - } - - return ( - <div className="knotfound"> - <div className="knotfound-text"> - {' '} - {t('KONNECTORCONFIG.NOT_INSTALLED')} - </div> - <div className="knotfound-button"> - <MuiButton - onClick={openKonnectorURL} - classes={{ - root: 'btn-highlight', - label: 'text-16-bold', - }} - > - {t('KONNECTORCONFIG.BTN_INSTALL')} - </MuiButton> - </div> - </div> - ) -} - -export default ConnectionNotFound +import React from 'react' +import { useI18n } from 'cozy-ui/transpiled/react/I18n' +import Button from '@material-ui/core/Button' +import './connectionNotFound.scss' +interface ConnectionNotFoundProps { + konnectorSlug: string +} + +const ConnectionNotFound: React.FC<ConnectionNotFoundProps> = ({ + konnectorSlug, +}: ConnectionNotFoundProps) => { + const { t } = useI18n() + + const openKonnectorURL = () => { + // TODO - Use getstoreinstallationurl from client - https://docs.cozy.io/en/cozy-client/api/cozy-client/#getstoreinstallationurl-string + const hostname = window.location.origin.replace('ecolyo', 'store') + const url = hostname + '/#/discover/' + konnectorSlug + window.open(url, '_blank') + } + + return ( + <div className="knotfound"> + <div className="knotfound-text"> {t('konnector_form.not_installed')}</div> + <div className="knotfound-button"> + <Button + aria-label={t('konnector_form.accessibility.button_install')} + onClick={openKonnectorURL} + classes={{ + root: 'btn-highlight', + label: 'text-16-bold', + }} + > + {t('konnector_form.button_install')} + </Button> + </div> + </div> + ) +} + +export default ConnectionNotFound diff --git a/src/components/Connection/ConnectionResult.tsx b/src/components/Connection/ConnectionResult.tsx index c24126040..fdab666cb 100644 --- a/src/components/Connection/ConnectionResult.tsx +++ b/src/components/Connection/ConnectionResult.tsx @@ -1,150 +1,152 @@ -import React, { useState, useEffect } from 'react' -import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import { useClient } from 'cozy-client' -import { useDispatch } from 'react-redux' -import { updatedFluidConnection } from 'store/global/global.actions' - -import { Account, FluidConnection, FluidStatus } from 'models' -import AccountService from 'services/account.service' -import { getKonnectorUpdateError } from 'utils/utils' - -import StyledIcon from 'components/CommonKit/Icon/StyledIcon' -import warningWhite from 'assets/icons/ico/warning-white.svg' -import MuiButton from '@material-ui/core/Button' -import StyledBlackSpinner from 'components/CommonKit/Spinner/StyledBlackSpinner' - -import './connectionResult.scss' - -interface ConnectionResultProps { - fluidStatus: FluidStatus - handleAccountDeletion: Function -} - -const ConnectionResult: React.FC<ConnectionResultProps> = ({ - fluidStatus, - handleAccountDeletion, -}: ConnectionResultProps) => { - const { t } = useI18n() - const client = useClient() - const dispatch = useDispatch() - const account: Account | null = fluidStatus.connection.account - - const [updating, setUpdating] = useState<boolean>(false) - const [lastExecutionDate, setLastExecutionDate] = useState<string>('-') - const [konnectorError, setKonnectorError] = useState<string>('') - const [status, setStatus] = useState<string>('') - - const updateKonnector = async () => { - setUpdating(true) - setStatus('') - setLastExecutionDate('-') - setKonnectorError('') - const updatedConnection: FluidConnection = { - ...fluidStatus.connection, - shouldLaunchKonnector: true, - isUpdating: true, - } - dispatch(updatedFluidConnection(fluidStatus.fluidType, updatedConnection)) - setUpdating(false) - } - - const deleteAccount = async () => { - setUpdating(true) - try { - if (account) { - const accountService = new AccountService(client) - await accountService.deleteAccount(account) - await handleAccountDeletion() - } - } catch (error) { - setUpdating(false) - } - } - - useEffect(() => { - if ( - fluidStatus.connection.triggerState && - fluidStatus.connection.triggerState.last_success - ) { - setLastExecutionDate( - new Date( - fluidStatus.connection.triggerState.last_success - ).toLocaleString() - ) - } else { - setLastExecutionDate('-') - } - if ( - fluidStatus.connection.triggerState && - fluidStatus.connection.triggerState.status === 'errored' && - fluidStatus.connection.triggerState.last_error - ) { - setKonnectorError( - getKonnectorUpdateError(fluidStatus.connection.triggerState.last_error) - ) - } - }, [fluidStatus.connection.triggerState]) - - return ( - <div className="accordion-update-result"> - <div - className={ - status === 'errored' ? 'accordion-update-errored' : 'accordion-update' - } - > - {status === 'errored' && ( - <div className="accordion-caption-errored warning-white text-16-normal"> - <StyledIcon - icon={warningWhite} - size={36} - className="warning-icon" - /> - <div className="text-16-normal"> - {t(`KONNECTORCONFIG.${konnectorError}`)} - <div className="accordion-caption"> - {t('KONNECTORCONFIG.LABEL_UPDATEDAT')} - </div> - <div className="text-16-bold">{lastExecutionDate}</div> - </div> - </div> - )} - {status !== 'errored' && ( - <div> - <div className="accordion-caption text-16-normal"> - {t('KONNECTORCONFIG.LABEL_UPDATEDAT')} - </div> - <div className="text-16-bold">{lastExecutionDate}</div> - </div> - )} - </div> - <div className="inline-buttons"> - <MuiButton - onClick={deleteAccount} - disabled={updating} - classes={{ - root: 'btn-secondary-positive', - label: 'text-16-normal', - }} - > - {t('KONNECTORCONFIG.BTN_DELETE')} - </MuiButton> - <MuiButton - onClick={updateKonnector} - disabled={updating} - classes={{ - root: 'btn-highlight', - label: 'text-16-bold', - }} - > - {updating ? ( - <StyledBlackSpinner size="2em" /> - ) : ( - <div>{t('KONNECTORCONFIG.BTN_UPDATE')}</div> - )} - </MuiButton> - </div> - </div> - ) -} - -export default ConnectionResult +import React, { useState, useEffect } from 'react' +import { useI18n } from 'cozy-ui/transpiled/react/I18n' +import { useClient } from 'cozy-client' +import { useDispatch } from 'react-redux' +import { updatedFluidConnection } from 'store/global/global.actions' + +import { Account, FluidConnection, FluidStatus } from 'models' +import AccountService from 'services/account.service' +import { getKonnectorUpdateError } from 'utils/utils' + +import StyledIcon from 'components/CommonKit/Icon/StyledIcon' +import warningWhite from 'assets/icons/ico/warning-white.svg' +import Button from '@material-ui/core/Button' +import StyledBlackSpinner from 'components/CommonKit/Spinner/StyledBlackSpinner' + +import './connectionResult.scss' + +interface ConnectionResultProps { + fluidStatus: FluidStatus + handleAccountDeletion: Function +} + +const ConnectionResult: React.FC<ConnectionResultProps> = ({ + fluidStatus, + handleAccountDeletion, +}: ConnectionResultProps) => { + const { t } = useI18n() + const client = useClient() + const dispatch = useDispatch() + const account: Account | null = fluidStatus.connection.account + + const [updating, setUpdating] = useState<boolean>(false) + const [lastExecutionDate, setLastExecutionDate] = useState<string>('-') + const [konnectorError, setKonnectorError] = useState<string>('') + const [status, setStatus] = useState<string>('') + + const updateKonnector = async () => { + setUpdating(true) + setStatus('') + setLastExecutionDate('-') + setKonnectorError('') + const updatedConnection: FluidConnection = { + ...fluidStatus.connection, + shouldLaunchKonnector: true, + isUpdating: true, + } + dispatch(updatedFluidConnection(fluidStatus.fluidType, updatedConnection)) + setUpdating(false) + } + + const deleteAccount = async () => { + setUpdating(true) + try { + if (account) { + const accountService = new AccountService(client) + await accountService.deleteAccount(account) + await handleAccountDeletion() + } + } catch (error) { + setUpdating(false) + } + } + + useEffect(() => { + if ( + fluidStatus.connection.triggerState && + fluidStatus.connection.triggerState.last_success + ) { + setLastExecutionDate( + new Date( + fluidStatus.connection.triggerState.last_success + ).toLocaleString() + ) + } else { + setLastExecutionDate('-') + } + if ( + fluidStatus.connection.triggerState && + fluidStatus.connection.triggerState.status === 'errored' && + fluidStatus.connection.triggerState.last_error + ) { + setKonnectorError( + getKonnectorUpdateError(fluidStatus.connection.triggerState.last_error) + ) + } + }, [fluidStatus.connection.triggerState]) + + return ( + <div className="accordion-update-result"> + <div + className={ + status === 'errored' ? 'accordion-update-errored' : 'accordion-update' + } + > + {status === 'errored' && ( + <div className="accordion-caption-errored warning-white text-16-normal"> + <StyledIcon + icon={warningWhite} + size={36} + className="warning-icon" + /> + <div className="text-16-normal"> + {t(`konnector_form.${konnectorError}`)} + <div className="accordion-caption"> + {t('konnector_form.label_updated_at')} + </div> + <div className="text-16-bold">{lastExecutionDate}</div> + </div> + </div> + )} + {status !== 'errored' && ( + <div> + <div className="accordion-caption text-16-normal"> + {t('konnector_form.label_updated_at')} + </div> + <div className="text-16-bold">{lastExecutionDate}</div> + </div> + )} + </div> + <div className="inline-buttons"> + <Button + aria-label={t('konnector_form.accessibility.button_delete')} + onClick={deleteAccount} + disabled={updating} + classes={{ + root: 'btn-secondary-positive', + label: 'text-16-normal', + }} + > + {t('konnector_form.button_delete')} + </Button> + <Button + aria-label={t('konnector_form.accessibility.button_update')} + onClick={updateKonnector} + disabled={updating} + classes={{ + root: 'btn-highlight', + label: 'text-16-bold', + }} + > + {updating ? ( + <StyledBlackSpinner size="2em" /> + ) : ( + <div>{t('konnector_form.button_update')}</div> + )} + </Button> + </div> + </div> + ) +} + +export default ConnectionResult diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx index ed0434e2c..038b01789 100644 --- a/src/components/Header/Header.tsx +++ b/src/components/Header/Header.tsx @@ -7,9 +7,10 @@ import { useHistory } from 'react-router-dom' import { ScreenType } from 'enum/screen.enum' +import IconButton from '@material-ui/core/IconButton' +import Icon from 'cozy-ui/transpiled/react/Icon' import BackArrowIcon from 'assets/icons/ico/back-arrow.svg' import FeedbacksIcon from 'assets/icons/ico/feedbacks.svg' -import StyledIconButton from 'components/CommonKit/IconButton/StyledIconButton' interface HeaderProps { textKey?: string @@ -88,27 +89,28 @@ const Header: React.FC<HeaderProps> = ({ }`} > {displayBackArrow && ( - <StyledIconButton + <IconButton aria-label={t('header.accessibility.button_back')} className="header-back-button" - icon={BackArrowIcon} onClick={handleClickBack} - /> + > + <Icon icon={BackArrowIcon} size={16} /> + </IconButton> )} {t(desktopTitleKey)} </div> )} - <StyledIconButton + <IconButton aria-label={t('header.accessibility.button_open_feedbacks')} className={ !textKey && !desktopTitleKey ? 'header-feedbacks-button right' : 'header-feedbacks-button' } - icon={FeedbacksIcon} - size={40} onClick={handleClickFeedbacks} - /> + > + <Icon icon={FeedbacksIcon} size={40} /> + </IconButton> </div> {children} </div> diff --git a/src/components/Konnector/KonnectorModal.tsx b/src/components/Konnector/KonnectorModal.tsx index 8a93ab49f..999c156aa 100644 --- a/src/components/Konnector/KonnectorModal.tsx +++ b/src/components/Konnector/KonnectorModal.tsx @@ -61,7 +61,7 @@ const KonnectorModal: React.FC<KonnectorModalProps> = ({ disableBackdropClick disableEscapeKeyDown onClose={handleCloseClick} - aria-label={t('KONNECTORCONFIG.accessibility.window_title')} + aria-label={t('konnector_modal.accessibility.window_title')} classes={{ root: 'modal-root', paper: 'modal-paper', @@ -74,7 +74,7 @@ const KonnectorModal: React.FC<KonnectorModalProps> = ({ <div className="kmodal-content-text kmodal-content-text-center text-16-normal"> <div className="kc-wait text-16-bold"> {t( - `KONNECTORCONFIG.LOADING_DATA${isUpdating ? '_UPDATE' : ''}` + `konnector_modal.loading_data${isUpdating ? '_update' : ''}` )} </div> </div> @@ -116,39 +116,39 @@ const KonnectorModal: React.FC<KonnectorModalProps> = ({ <div className="konnector-config"> <Icon icon={errorIcon} size={48} /> <div className="kce-picto-txt text-20-bold"> - {t('KONNECTORCONFIG.ERROR_TXT')} + {t('konnector_modal.error_txt')} </div> <div> {t( - `KONNECTORCONFIG.ERROR_DATA_${ - isUpdating ? 'UPDATE_' : '' - }${fluidName}` + `konnector_modal.error_data_${ + isUpdating ? 'update_' : '' + }${fluidName.toLowerCase()}` )} </div> - <div>{t('KONNECTORCONFIG.ERROR_DATA_2')}</div> + <div>{t('konnector_modal.error_data_2')}</div> </div> ) : ( <div className="konnector-config"> <Icon icon={successIcon} size={48} /> <div className="kcs-picto-txt text-20-bold"> - {t('KONNECTORCONFIG.SUCCESS_TXT')} + {t('konnector_modal.success_txt')} </div> {t( - `KONNECTORCONFIG.SUCCESS_DATA_${ - isUpdating ? 'UPDATE_' : '' - }${fluidName}` + `konnector_modal.success_data_${ + isUpdating ? 'update_' : '' + }${fluidName.toLowerCase()}` )} </div> )} <Button - aria-label={t('KONNECTORCONFIG.accessibility.button_close')} + aria-label={t('konnector_modal.accessibility.button_close')} onClick={() => handleCloseClick()} classes={{ root: 'btn-highlight', label: 'text-16-bold', }} > - <div>{t('KONNECTORCONFIG.OK')}</div> + <div>{t('konnector_modal.button_validate')}</div> </Button> </div> </> diff --git a/src/components/Konnector/KonnectorViewerCard.tsx b/src/components/Konnector/KonnectorViewerCard.tsx index 857b96308..9020e296f 100644 --- a/src/components/Konnector/KonnectorViewerCard.tsx +++ b/src/components/Konnector/KonnectorViewerCard.tsx @@ -30,8 +30,8 @@ import ChallengeService from 'services/challenge.service' import chevronDown from 'assets/icons/ico/chevron-down.svg' import chevronUp from 'assets/icons/ico/chevron-up.svg' -import StyledIcon from 'components/CommonKit/Icon/StyledIcon' -import StyledIconButton from 'components/CommonKit/IconButton/StyledIconButton' +import Icon from 'cozy-ui/transpiled/react/Icon' +import IconButton from '@material-ui/core/IconButton' import failurePicto from 'assets/png/picto/picto-failure.png' import ConnectionNotFound from 'components/Connection/ConnectionNotFound' import ConnectionForm from 'components/Connection/ConnectionForm' @@ -272,9 +272,9 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({ <div className="accordion-icon"> {fluidStatus.connection.account && fluidStatus.status !== FluidState.ERROR_LOGIN_FAILED ? ( - <StyledIcon className="icon" icon={iconType} size={49} /> + <Icon className="icon" icon={iconType} size={49} /> ) : ( - <StyledIcon className="icon" icon={iconAddType} size={49} /> + <Icon className="icon" icon={iconAddType} size={49} /> )} </div> <div className="state-picto"> @@ -295,12 +295,29 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({ fluidStatus.status !== FluidState.ERROR_LOGIN_FAILED ? t('FLUID.' + FluidType[fluidStatus.fluidType] + '.LABEL') : t( - 'KONNECTORCONFIG.LABEL_CONNECTTO_' + - FluidType[fluidStatus.fluidType] + `konnector_options.label_connect_to_${FluidType[ + fluidStatus.fluidType + ].toLowerCase()}` )} </div> </div> - <StyledIconButton icon={active ? chevronUp : chevronDown} /> + <IconButton + aria-label={ + active + ? t( + `konnector_options.accessibility.button_hide_detail_${FluidType[ + fluidStatus.fluidType + ].toLowerCase()}` + ) + : t( + `konnector_options.accessibility.button_show_detail_${FluidType[ + fluidStatus.fluidType + ].toLowerCase()}` + ) + } + > + <Icon icon={active ? chevronUp : chevronDown} size={16} /> + </IconButton> </div> <div diff --git a/src/components/Konnector/KonnectorViewerList.tsx b/src/components/Konnector/KonnectorViewerList.tsx index bbb298916..e6027b64a 100644 --- a/src/components/Konnector/KonnectorViewerList.tsx +++ b/src/components/Konnector/KonnectorViewerList.tsx @@ -1,42 +1,42 @@ -import React from 'react' -import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import { useSelector } from 'react-redux' -import { AppStore } from 'store' -import './konnectorViewerList.scss' - -import { FluidStatus } from 'models' -import KonnectorViewerCard from 'components/Konnector/KonnectorViewerCard' - -interface KonnectorViewerListProps { - isParam: boolean -} - -const KonnectorViewerList: React.FC<KonnectorViewerListProps> = ({ - isParam = false, -}: KonnectorViewerListProps) => { - const { t } = useI18n() - const { fluidStatus } = useSelector((state: AppStore) => state.ecolyo.global) - - return ( - <div className="kv-root"> - <div className="kv-content"> - <div className="kv-header text-16-normal-uppercase"> - {t('KONNECTORCONFIG.TITLE_CONNECTION')} - </div> - <div className="accordion-container"> - {fluidStatus.map((fluidStatusItem: FluidStatus, index: number) => { - return ( - <KonnectorViewerCard - key={index} - isParam={isParam} - fluidStatus={fluidStatusItem} - /> - ) - })} - </div> - </div> - </div> - ) -} - -export default KonnectorViewerList +import React from 'react' +import { useI18n } from 'cozy-ui/transpiled/react/I18n' +import { useSelector } from 'react-redux' +import { AppStore } from 'store' +import './konnectorViewerList.scss' + +import { FluidStatus } from 'models' +import KonnectorViewerCard from 'components/Konnector/KonnectorViewerCard' + +interface KonnectorViewerListProps { + isParam: boolean +} + +const KonnectorViewerList: React.FC<KonnectorViewerListProps> = ({ + isParam = false, +}: KonnectorViewerListProps) => { + const { t } = useI18n() + const { fluidStatus } = useSelector((state: AppStore) => state.ecolyo.global) + + return ( + <div className="kv-root"> + <div className="kv-content"> + <div className="kv-header text-16-normal-uppercase"> + {t('konnector_form.title')} + </div> + <div className="accordion-container"> + {fluidStatus.map((fluidStatusItem: FluidStatus, index: number) => { + return ( + <KonnectorViewerCard + key={index} + isParam={isParam} + fluidStatus={fluidStatusItem} + /> + ) + })} + </div> + </div> + </div> + ) +} + +export default KonnectorViewerList diff --git a/src/enum/konnectorUpdate.enum.ts b/src/enum/konnectorUpdate.enum.ts index 1a1fd1b67..5923efb32 100644 --- a/src/enum/konnectorUpdate.enum.ts +++ b/src/enum/konnectorUpdate.enum.ts @@ -1,4 +1,4 @@ -export enum KonnectorUpdate { - ERROR_UPDATE = 'ERROR_UPDATE', - ERROR_UPDATE_OAUTH = 'ERROR_UPDATE_OAUTH', -} +export enum KonnectorUpdate { + ERROR_UPDATE = 'error_update', + ERROR_UPDATE_OAUTH = 'error_update_oauth', +} diff --git a/src/locales/fr.json b/src/locales/fr.json index 5f5dbd9c1..e5a5a8e7c 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -124,40 +124,57 @@ "SWITCH_LABEL": "Être prévenu de la parution de mon bilan mensuel" } }, - "KONNECTORCONFIG": { - "TITLE_CONNECTION": "Connexion aux distributeurs", - "LABEL_UPDATEDAT": "dernière mise-à-jour le", - "LABEL_CONNECTTO_ELECTRICITY": "Se connecter à l'électricité", - "LABEL_CONNECTTO_WATER": "Se connecter à l'eau", - "LABEL_CONNECTTO_GAS": "Se connecter au gaz", - "BTN_INSTALL": "Installer", - "BTN_CONFIGURE": "Configurer", - "BTN_UPDATE": "Mettre à jour", - "BTN_DELETE": "Supprimer", - "LOADING_DATA": "Veuillez patienter, vos données sont en cours de chargement.", - "LOADING_DATA_UPDATE": "Veuillez patienter, vos données sont en cours de mise à jour.", - "NOT_INSTALLED": "Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.", - "ERROR_NO_LOGIN_PASSWORD": "Identifiant et mot de passe requis", - "ERROR_ACCOUNT_CREATION": "Une erreur est survenue, veuillez essayer de nouveau.", - "ERROR_LOGIN_FAILED": "Identifiants invalides", - "SUCCESS_TXT": "Félicitations !", - "SUCCESS_DATA_ELECTRICITY": "Vos données de consommation d'électricité sont maintenant connectées à Ecolyo.", - "SUCCESS_DATA_WATER": "Vos données de consommation d'eau sont maintenant connectées à Ecolyo.", - "SUCCESS_DATA_GAS": "Vos données de consommation de gaz sont maintenant connectées à Ecolyo.", - "SUCCESS_DATA_UPDATE_ELECTRICITY": "Vos données de consommation d'électricité sont maintenant à jour dans Ecolyo.", - "SUCCESS_DATA_UPDATE_WATER": "Vos données de consommation d'eau sont maintenant à jour dans Ecolyo.", - "SUCCESS_DATA_UPDATE_GAS": "Vos données de consommation de gaz sont maintenant à jour dans Ecolyo.", - "ERROR_TXT": "Aïe !", - "ERROR_DATA_ELECTRICITY": "Un problème a empêché vos données de consommation d'électricité de se connecter à Ecolyo.", - "ERROR_DATA_WATER": "Un problème a empêché vos données de consommation d'eau de se connecter à Ecolyo.", - "ERROR_DATA_GAS": "Un problème a empêché vos données de consommation de gaz de se connecter à Ecolyo.", - "ERROR_DATA_UPDATE_ELECTRICITY": "Un problème a empêché vos données de consommation d'électricité de se mettre à jour dans Ecolyo.", - "ERROR_DATA_UPDATE_WATER": "Un problème a empêché vos données de consommation d'eau de se mettre à jour dans Ecolyo.", - "ERROR_DATA_UPDATE_GAS": "Un problème a empêché vos données de consommation de gaz de se mettre à jour dans Ecolyo.", - "ERROR_DATA_2": "Merci de réessayer plus tard.", - "ERROR_UPDATE": "Un problème est survenu lors du rappatriement de vos données.", - "ERROR_UPDATE_OAUTH": "Le service demande d'autoriser à nouveau votre accès. Merci de supprimer puis reconnecter votre compte. Aucune donnée ne sera perdue.", + "konnector_form": { + "title": "Connexion aux distributeurs", + "label_updated_at": "dernière mise-à-jour le", + "button_update": "Mettre à jour", + "button_delete": "Supprimer", + "not_installed": "Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.", + "button_install": "Installer", + "error_account_creation": "Une erreur est survenue, veuillez essayer de nouveau.", + "error_no_login_password": "Identifiant et mot de passe requis", + "error_login_failed": "Identifiants invalides", + "error_update": "Un problème est survenu lors du rappatriement de vos données.", + "error_update_oauth": "Le service demande d'autoriser à nouveau votre accès. Merci de supprimer puis reconnecter votre compte. Aucune donnée ne sera perdue.", "OK": "Ok", + "accessibility": { + "button_install": "Installer le connecteur", + "button_update": "Mettre à jour la connexion", + "button_delete": "Supprimer la connexion" + } + }, + "konnector_options": { + "label_connect_to_electricity": "Se connecter à l'électricité", + "label_connect_to_water": "Se connecter à l'eau", + "label_connect_to_gas": "Se connecter au gaz", + "accessibility": { + "button_show_detail_electricity": "Afficher le détail de la connexion a l'électricité", + "button_show_detail_water": "Afficher le détail de la connexion à l'eau", + "button_show_detail_gas": "Afficher le détail de la connexion au gaz", + "button_hide_detail_electricity": "Afficher le détail de la connexion a l'électricité", + "button_hide_detail_water": "Afficher le détail de la connexion à l'eau", + "button_hide_detail_gas": "Afficher le détail de la connexion au gaz" + } + }, + "konnector_modal": { + "loading_data": "Veuillez patienter, vos données sont en cours de chargement.", + "loading_data_update": "Veuillez patienter, vos données sont en cours de mise à jour.", + "success_txt": "Félicitations !", + "success_data_electricity": "Vos données de consommation d'électricité sont maintenant connectées à Ecolyo.", + "success_data_water": "Vos données de consommation d'eau sont maintenant connectées à Ecolyo.", + "success_data_gas": "Vos données de consommation de gaz sont maintenant connectées à Ecolyo.", + "success_data_update_electricity": "Vos données de consommation d'électricité sont maintenant à jour dans Ecolyo.", + "success_data_update_water": "Vos données de consommation d'eau sont maintenant à jour dans Ecolyo.", + "success_data_update_gas": "Vos données de consommation de gaz sont maintenant à jour dans Ecolyo.", + "error_txt": "Aïe !", + "error_data_electricity": "Un problème a empêché vos données de consommation d'électricité de se connecter à Ecolyo.", + "error_data_water": "Un problème a empêché vos données de consommation d'eau de se connecter à Ecolyo.", + "error_data_gas": "Un problème a empêché vos données de consommation de gaz de se connecter à Ecolyo.", + "error_data_update_electricity": "Un problème a empêché vos données de consommation d'électricité de se mettre à jour dans Ecolyo.", + "error_data_update_water": "Un problème a empêché vos données de consommation d'eau de se mettre à jour dans Ecolyo.", + "error_data_update_gas": "Un problème a empêché vos données de consommation de gaz de se mettre à jour dans Ecolyo.", + "error_data_2": "Merci de réessayer plus tard.", + "button_validate": "Ok", "accessibility": { "window_title": "Fenètre d'attente de connexion", "button_close": "Fermer la fenètre" -- GitLab