diff --git a/src/components/Consumption/ConsumptionView.tsx b/src/components/Consumption/ConsumptionView.tsx index 603b9bea875fd3c72598165d8a5d75d8c00cee27..3358b870a313d80a337cc995e7809ed31a1246fe 100644 --- a/src/components/Consumption/ConsumptionView.tsx +++ b/src/components/Consumption/ConsumptionView.tsx @@ -233,11 +233,7 @@ const ConsumptionView = ({ fluidType }: { fluidType: FluidType }) => { {showOfflineData && ( <> - <FluidChart - fluidType={fluidType} - setActive={setActive} - key={lastDataDateKey} - /> + <FluidChart fluidType={fluidType} key={lastDataDateKey} /> <ConsumptionDetails fluidType={fluidType} /> </> )} @@ -246,8 +242,6 @@ const ConsumptionView = ({ fluidType }: { fluidType: FluidType }) => { <KonnectorViewerCard fluidType={fluidType} showOfflineData={showOfflineData} - setActive={setActive} - active={active} /> )} diff --git a/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx b/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx index 3abf83ce6491136f93ef9c8e1b8c661eff2907ba..ab0e5d35ef66101aebf52175ca76c3c1f1b2779c 100644 --- a/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx +++ b/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx @@ -7,14 +7,7 @@ import { useAppSelector } from 'store/hooks' import InfoDataConsumptionVisualizer from './InfoDataConsumptionVisualizer' import './consumptionVisualizer.scss' -interface ConsumptionVisualizerProps { - fluidType: FluidType - setActive: React.Dispatch<React.SetStateAction<boolean>> -} -const ConsumptionVisualizer = ({ - fluidType, - setActive, -}: ConsumptionVisualizerProps) => { +const ConsumptionVisualizer = ({ fluidType }: { fluidType: FluidType }) => { const { chart: { currentDatachart, currentDatachartIndex }, global: { fluidStatus, fluidTypes }, @@ -53,7 +46,6 @@ const ConsumptionVisualizer = ({ fluidType={fluidType} dataload={dataload} compareDataload={compareDataload} - setActive={setActive} /> <div className="consumptionvisualizer-info"> <InfoDataConsumptionVisualizer diff --git a/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.tsx b/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.tsx index b7bc960a35d140af1f14870a7c04f70b0006a962..e28a077ee9150bb6862ee91bb293b8582f007ddd 100644 --- a/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.tsx +++ b/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.tsx @@ -12,13 +12,11 @@ interface DataloadConsumptionVisualizerProps { fluidType: FluidType dataload: Dataload compareDataload: Dataload | null - setActive: React.Dispatch<React.SetStateAction<boolean>> } const DataloadConsumptionVisualizer = ({ fluidType, dataload, compareDataload, - setActive, }: DataloadConsumptionVisualizerProps) => { const { showCompare } = useAppSelector(state => state.ecolyo.chart) const [openEstimationModal, setOpenEstimationModal] = useState<boolean>(false) @@ -39,11 +37,7 @@ const DataloadConsumptionVisualizer = ({ ) { return ( <div className="dataloadvisualizer-root"> - <DataloadNoValue - dataload={dataload} - setActive={setActive} - fluidType={fluidType} - /> + <DataloadNoValue dataload={dataload} fluidType={fluidType} /> </div> ) } diff --git a/src/components/ConsumptionVisualizer/DataloadNoValue.tsx b/src/components/ConsumptionVisualizer/DataloadNoValue.tsx index 3c55e9ed03502b456ecf0c5de3a4923ac3c8cb5d..77b90b3d47af8f457f0e0166c17c9c1256fe0bc9 100644 --- a/src/components/ConsumptionVisualizer/DataloadNoValue.tsx +++ b/src/components/ConsumptionVisualizer/DataloadNoValue.tsx @@ -3,23 +3,21 @@ import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { DataloadState, FluidType } from 'enums' import { Dataload } from 'models' import React, { useCallback } from 'react' +import { setShowConnectionDetails } from 'store/chart/chart.slice' +import { useAppDispatch } from 'store/hooks' import './consumptionVisualizer.scss' interface DataloadNoValueProps { dataload: Dataload fluidType: FluidType - setActive: React.Dispatch<React.SetStateAction<boolean>> } -const DataloadNoValue = ({ - dataload, - fluidType, - setActive, -}: DataloadNoValueProps) => { +const DataloadNoValue = ({ dataload, fluidType }: DataloadNoValueProps) => { const { t } = useI18n() + const dispatch = useAppDispatch() - const handleToggleKonnectionCard = useCallback(() => { - setActive(true) + const handleToggleKonnectorCard = useCallback(() => { + dispatch(setShowConnectionDetails(true)) const app = document.querySelector('.app-content') const content = document.querySelector('.content-view') if (content && app) { @@ -37,7 +35,7 @@ const DataloadNoValue = ({ }) }, 300) } - }, [setActive]) + }, [dispatch]) if ( dataload.state === DataloadState.EMPTY || @@ -65,7 +63,7 @@ const DataloadNoValue = ({ ) { return ( <Button - onClick={handleToggleKonnectionCard} + onClick={handleToggleKonnectorCard} classes={{ root: 'btnText', label: 'text-22-normal' }} > {t('consumption_visualizer.missing_data')} diff --git a/src/components/FluidChart/FluidChart.tsx b/src/components/FluidChart/FluidChart.tsx index 2b5c2e45a73b9e64102dde5608476e04c17051e6..2e87f46b2f5fa66dcc83c481adddcf7666f82acd 100644 --- a/src/components/FluidChart/FluidChart.tsx +++ b/src/components/FluidChart/FluidChart.tsx @@ -25,12 +25,7 @@ import HalfHourUpcoming from './HalfHourUpcoming/HalfHourUpcoming' import TimeStepSelector from './TimeStepSelector/TimeStepSelector' import './fluidChart.scss' -interface FluidChartProps { - fluidType: FluidType - setActive: React.Dispatch<React.SetStateAction<boolean>> -} - -const FluidChart = ({ fluidType, setActive }: FluidChartProps) => { +const FluidChart = ({ fluidType }: { fluidType: FluidType }) => { const { t } = useI18n() const client = useClient() const { @@ -166,7 +161,7 @@ const FluidChart = ({ fluidType, setActive }: FluidChartProps) => { return ( <> <div className="fluidchart-content"> - <FluidChartSwipe fluidType={fluidType} setActive={setActive} /> + <FluidChartSwipe fluidType={fluidType} /> </div> {showCompare && currentTimeStep !== TimeStep.YEAR && ( <Slide direction="right" in={showCompare}> diff --git a/src/components/FluidChart/FluidChartSlide.tsx b/src/components/FluidChart/FluidChartSlide.tsx index 2bae0adb83144a081ccbb6a4798947d5eec69bd2..f63e06da3887d8f4d91be24460c304c3f3d22c76 100644 --- a/src/components/FluidChart/FluidChartSlide.tsx +++ b/src/components/FluidChart/FluidChartSlide.tsx @@ -18,7 +18,6 @@ interface FluidChartSlideProps { width: number height: number isSwitching: boolean - setActive: React.Dispatch<React.SetStateAction<boolean>> } const FluidChartSlide = ({ @@ -27,7 +26,6 @@ const FluidChartSlide = ({ width, height, isSwitching, - setActive, }: FluidChartSlideProps) => { const client = useClient() const dispatch = useAppDispatch() @@ -119,7 +117,7 @@ const FluidChartSlide = ({ </div> ) : ( <> - <ConsumptionVisualizer fluidType={fluidType} setActive={setActive} /> + <ConsumptionVisualizer fluidType={fluidType} /> <BarChart chartData={chartData} fluidType={fluidType} diff --git a/src/components/FluidChart/FluidChartSwipe.tsx b/src/components/FluidChart/FluidChartSwipe.tsx index 0e5b1693b3eaaf02439d787f9a3e59617b7ae64c..934e86468f5da625b27ff521a5ef50921edffb37 100644 --- a/src/components/FluidChart/FluidChartSwipe.tsx +++ b/src/components/FluidChart/FluidChartSwipe.tsx @@ -12,12 +12,7 @@ import './fluidChartSwipe.scss' const VirtualizeSwipeableViews = virtualize(SwipeableViews) -interface FluidChartSwipeProps { - fluidType: FluidType - setActive: React.Dispatch<React.SetStateAction<boolean>> -} - -const FluidChartSwipe = ({ fluidType, setActive }: FluidChartSwipeProps) => { +const FluidChartSwipe = ({ fluidType }: { fluidType: FluidType }) => { const dispatch = useAppDispatch() const { currentIndex, currentTimeStep, selectedDate } = useAppSelector( state => state.ecolyo.chart @@ -76,7 +71,6 @@ const FluidChartSwipe = ({ fluidType, setActive }: FluidChartSwipeProps) => { width={width} height={height} isSwitching={isSwitching} - setActive={setActive} /> ) diff --git a/src/components/Konnector/KonnectorViewerCard.tsx b/src/components/Konnector/KonnectorViewerCard.tsx index e8ac935e468ed2d0dbec033b83e66289e24efd10..518f66338b7c17d16ae17872001ef4461fc77a0d 100644 --- a/src/components/Konnector/KonnectorViewerCard.tsx +++ b/src/components/Konnector/KonnectorViewerCard.tsx @@ -41,7 +41,11 @@ import DateChartService from 'services/dateChart.service' import FluidService from 'services/fluid.service' import PartnersInfoService from 'services/partnersInfo.service' import { setChallengeConsumption } from 'store/challenge/challenge.slice' -import { setSelectedDate, setShowOfflineData } from 'store/chart/chart.slice' +import { + setSelectedDate, + setShowConnectionDetails, + setShowOfflineData, +} from 'store/chart/chart.slice' import { setFluidStatus, setLastEpglLogin, @@ -56,25 +60,21 @@ import ConnectionResult from './ConnectionResult/ConnectionResult' import './konnectorViewerCard.scss' interface KonnectorViewerCardProps { - isDisconnected: boolean + /** TODO Get this from store ? */ showOfflineData: boolean - active: boolean fluidType: FluidType - setActive: React.Dispatch<React.SetStateAction<boolean>> } const KonnectorViewerCard = ({ - isDisconnected, showOfflineData, - active, fluidType, - setActive, }: KonnectorViewerCardProps) => { const { t } = useI18n() const client = useClient() - const dispatch = useAppDispatch() const navigate = useNavigate() + const dispatch = useAppDispatch() const { + chart: { showConnectionDetails }, challenge: { currentChallenge }, global: { fluidStatus, shouldRefreshConsent, partnersInfo }, } = useAppSelector(state => state.ecolyo) @@ -99,6 +99,9 @@ const KonnectorViewerCard = ({ [client] ) + /** Derived value from store. */ + const isDisconnected = !showOfflineData + const lastDataDate = fluidType !== FluidType.MULTIFLUID && currentFluidStatus.lastDataDate ? currentFluidStatus.lastDataDate.toLocaleString() + fluidType @@ -107,7 +110,7 @@ const KonnectorViewerCard = ({ const iconType = getParamPicto(currentFluidStatus.fluidType) const toggleAccordion = () => { - setActive(prev => !prev) + dispatch(setShowConnectionDetails(!showConnectionDetails)) } const updateGlobalFluidStatus = useCallback(async (): Promise< @@ -159,11 +162,10 @@ const KonnectorViewerCard = ({ const updatedFluidStatus = await fluidService.getFluidStatus(partnersInfo) dispatch(setFluidStatus(updatedFluidStatus)) } - setActive(false) + dispatch(setShowConnectionDetails(false)) }, [ refreshChallengeState, updateGlobalFluidStatus, - setActive, partnersInfoService, fluidService, dispatch, @@ -210,8 +212,7 @@ const KonnectorViewerCard = ({ await fluidService.getFluidStatus(partnersInfo) dispatch(setFluidStatus(updatedFluidStatus)) } - - setActive(false) + dispatch(setShowConnectionDetails(false)) setOpenModal(false) // TODO null state seems to be read before modal closing and display a success icon in modal setKonnectorState(null) @@ -223,7 +224,6 @@ const KonnectorViewerCard = ({ currentFluidStatus, isUpdating, fluidType, - setActive, fluidSlug, client, handleAccountDeletion, @@ -484,7 +484,7 @@ const KonnectorViewerCard = ({ )} {!isDisconnected && ( <Accordion - expanded={active} + expanded={showConnectionDetails} onChange={toggleAccordion} classes={{ root: classNames('expansion-panel-root', { diff --git a/src/models/chart.model.ts b/src/models/chart.model.ts index b9cfb1b972fd0ad896f397eff1a9c5cd738072ec..b0e24c8de78daa13a4f5c917ecb356f52fd8f64e 100644 --- a/src/models/chart.model.ts +++ b/src/models/chart.model.ts @@ -10,4 +10,6 @@ export interface ChartState { selectedDate: DateTime showCompare: boolean showOfflineData: boolean + /** For KonnectorViewerCard Accordion */ + showConnectionDetails: boolean } diff --git a/src/store/chart/chart.slice.spec.ts b/src/store/chart/chart.slice.spec.ts index 0ab8ecdd791f95139561c2bf02102ed9e935b951..02f68b6399afa66dbb82ff070c10dc8d082dbdb1 100644 --- a/src/store/chart/chart.slice.spec.ts +++ b/src/store/chart/chart.slice.spec.ts @@ -10,6 +10,7 @@ import { setCurrentTimeStep, setSelectedDate, setShowCompare, + setShowConnectionDetails, } from './chart.slice' describe('chart reducer', () => { @@ -108,4 +109,17 @@ describe('chart reducer', () => { }) }) }) + + describe('setShowConnectionDetails', () => { + it('should handle setShowConnectionDetails', () => { + const state = chartSlice.reducer( + mockChartState, + setShowConnectionDetails(true) + ) + expect(state).toEqual({ + ...mockChartState, + showConnectionDetails: true, + }) + }) + }) }) diff --git a/src/store/chart/chart.slice.ts b/src/store/chart/chart.slice.ts index 92bec2bdd71d70128f1633f417f700ed28d2234f..558e752a338575e15d2b4fa6896f8845330f975f 100644 --- a/src/store/chart/chart.slice.ts +++ b/src/store/chart/chart.slice.ts @@ -13,6 +13,7 @@ const initialState: ChartState = { currentDatachartIndex: 0, showCompare: false, showOfflineData: false, + showConnectionDetails: false, } export const chartSlice = createSlice({ @@ -43,6 +44,9 @@ export const chartSlice = createSlice({ setShowOfflineData: (state, action: PayloadAction<boolean>) => { state.showOfflineData = action.payload }, + setShowConnectionDetails: (state, action: PayloadAction<boolean>) => { + state.showConnectionDetails = action.payload + }, }, }) @@ -54,4 +58,5 @@ export const { setSelectedDate, setShowCompare, setShowOfflineData, + setShowConnectionDetails, } = chartSlice.actions diff --git a/tests/__mocks__/store/chart.state.mock.ts b/tests/__mocks__/store/chart.state.mock.ts index 337d9d464df5daea182406cef6a19bb5354a4614..76b75c5991de8c41b1cd7d7fe1070b8260f617aa 100644 --- a/tests/__mocks__/store/chart.state.mock.ts +++ b/tests/__mocks__/store/chart.state.mock.ts @@ -12,4 +12,5 @@ export const mockChartState: ChartState = { currentDatachartIndex: 0, showCompare: false, showOfflineData: false, + showConnectionDetails: false, }