From 71a523b7f6413e67cf3467fa3bf1a05a12aa46e1 Mon Sep 17 00:00:00 2001 From: Bastien Dumont <bdumont@grandlyon.com> Date: Fri, 5 Apr 2024 11:54:39 +0200 Subject: [PATCH] update KVC when waiting for consent --- .../ConnectionResult/ConnectionResult.tsx | 48 ++++++++------ .../Konnector/KonnectorViewerCard.tsx | 63 +++++++------------ 2 files changed, 51 insertions(+), 60 deletions(-) diff --git a/src/components/Konnector/ConnectionResult/ConnectionResult.tsx b/src/components/Konnector/ConnectionResult/ConnectionResult.tsx index 3adc7c3dc..69c5d9128 100644 --- a/src/components/Konnector/ConnectionResult/ConnectionResult.tsx +++ b/src/components/Konnector/ConnectionResult/ConnectionResult.tsx @@ -5,7 +5,7 @@ import StyledIcon from 'components/CommonKit/Icon/StyledIcon' import Loader from 'components/Loader/Loader' import { useClient } from 'cozy-client' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import { FluidType, KonnectorUpdate } from 'enums' +import { FluidState, FluidType, KonnectorUpdate } from 'enums' import { DateTime } from 'luxon' import { Account, AccountSgeData, FluidConnection, FluidStatus } from 'models' import React, { useCallback, useEffect, useState } from 'react' @@ -38,6 +38,7 @@ const ConnectionResult = ({ const account: Account | null = currentFluidStatus.connection.account const [deleting, setDeleting] = useState<boolean>(false) + // todo remove updating state const [updating, setUpdating] = useState<boolean>(false) const [lastExecutionDate, setLastExecutionDate] = useState<string | DateTime>( '-' @@ -46,6 +47,10 @@ const ConnectionResult = ({ const [status, setStatus] = useState<string>('') const [outDatedDataDays, setOutDatedDataDays] = useState<number | null>(null) + const isWaitingForConsent = + fluidType === FluidType.GAS && + currentFluidStatus.status === FluidState.CHALLENGE_ASKED + const updateKonnector = async () => { setUpdating(true) setStatus('') @@ -188,12 +193,17 @@ const ConnectionResult = ({ // First check if there is partner error from backoffice if (currentFluidStatus.maintenance) { return ( - <div className="connection-caption text-16-normal"> - <div className="text-16-normal"> - <div className="connection-caption"> - {t('konnector_form.wait_end_issue')} - </div> - </div> + <div className="connection-caption"> + {t('konnector_form.wait_end_issue')} + </div> + ) + } + + if (isWaitingForConsent) { + return ( + <div className="connection-caption"> + <div>{t('auth.grdfgrandlyon.waiting.validate')}</div> + <div>{t('auth.grdfgrandlyon.waiting.comeback')}</div> </div> ) } @@ -228,19 +238,21 @@ const ConnectionResult = ({ ) } + const getErrorClassName = (): string => { + if (isWaitingForConsent) return '' + if ( + status === 'errored' && + !hasUpdatedToday() && + !currentFluidStatus.maintenance + ) { + return 'connection-update-errored' + } + return '' + } + return ( <div className="connection-update-result"> - <div - className={ - status === 'errored' && - !hasUpdatedToday() && - !currentFluidStatus.maintenance - ? 'connection-update-errored' - : '' - } - > - {getConnectionStatus()} - </div> + <div className={getErrorClassName()}>{getConnectionStatus()}</div> <div className="inline-buttons"> {!consentError && ( <Button diff --git a/src/components/Konnector/KonnectorViewerCard.tsx b/src/components/Konnector/KonnectorViewerCard.tsx index 6a74684c0..27056d754 100644 --- a/src/components/Konnector/KonnectorViewerCard.tsx +++ b/src/components/Konnector/KonnectorViewerCard.tsx @@ -90,6 +90,10 @@ const KonnectorViewerCard = ({ const [konnectorState, setKonnectorState] = useState<string | null>(null) const [isOutdatedData, setIsOutdatedData] = useState<number | null>(null) + const isWaitingForConsent = + fluidType === FluidType.GAS && + currentFluidStatus.status === FluidState.CHALLENGE_ASKED + const fluidService = useMemo(() => new FluidService(client), [client]) const partnersInfoService = useMemo( () => new PartnersInfoService(client), @@ -306,63 +310,38 @@ const KonnectorViewerCard = ({ ] ) - /** Return maintenance, error or warning status icon */ - const getStatusIcon = ( - status: FluidState, - maintenance: boolean, - connection: FluidConnection, - outdatedData: number | null - ) => { - if (maintenance) { - return ( - <StyledIcon - icon={PartnersIssueNotif} - size={24} - className="konnector-state-picto" - /> - ) - } + /** Display konnector icon & its smaller status icon in upper left corner */ + const displayKonnectorIcon = useCallback(() => { + const { maintenance, status, connection } = currentFluidStatus + let statusIcon = null - if ( + if (maintenance) { + statusIcon = PartnersIssueNotif + } else if ( (status === FluidState.ERROR || status === FluidState.LOGIN_FAILED) && connection.account ) { - return ( - <StyledIcon - icon={ErrorNotif} - size={24} - className="konnector-state-picto" - /> - ) + statusIcon = ErrorNotif + } else if (isWaitingForConsent || (isOutdatedData && isOutdatedData > 0)) { + statusIcon = WarningNotif } - if (outdatedData && outdatedData > 0) { - return ( - <StyledIcon - icon={WarningNotif} - size={24} - className="konnector-state-picto" - /> - ) - } - } - - const displayKonnectorIcon = useCallback(() => { return ( <div className="konnector-icon"> <Icon icon={currentFluidStatus.connection.account ? iconType : OfflinePicto} size={49} /> - {getStatusIcon( - currentFluidStatus.status, - currentFluidStatus.maintenance, - currentFluidStatus.connection, - isOutdatedData + {statusIcon && ( + <StyledIcon + icon={statusIcon} + size={24} + className="konnector-state-picto" + /> )} </div> ) - }, [currentFluidStatus, iconType, isOutdatedData]) + }, [currentFluidStatus, iconType, isOutdatedData, isWaitingForConsent]) const displayKonnectorHeader = useCallback(() => { if (currentFluidStatus.maintenance) { -- GitLab