diff --git a/src/features/shared/Snowfall.jsx b/src/features/shared/Snowfall.jsx index 7d6ef0a..a1e99f2 100644 --- a/src/features/shared/Snowfall.jsx +++ b/src/features/shared/Snowfall.jsx @@ -8,8 +8,54 @@ import { import { useSelector } from "react-redux"; import GetTheme from "../../themes/ThemeProvider"; import GetAutoThemeId from "../../constants/themeDates"; +import { useState } from "react"; +import { useEffect } from "react"; export default function SnowfallWrapper() { + const [snowflakeCount, setSnowflakeCount] = useState(150); + const [isSnowReducerRunning, setIsSnowReducerRunning] = useState(false); + + const isHeatOn = useSelector((state) => state.deviceInteraction.isHeatOn); + + const currentTargetTemperature = useSelector( + (state) => state.deviceInteraction.targetTemperature + ); + + const currentTemperature = useSelector( + (state) => state.deviceInteraction.currentTemperature + ); + + useEffect(() => { + let intervalId; + if (isSnowReducerRunning) { + intervalId = setInterval(() => { + reduceStorm(); + }, 125); + } + + return () => clearInterval(intervalId); + }, [isSnowReducerRunning]); + + const reduceStorm = () => { + setSnowflakeCount((currentCount) => { + const newSnowflakeCount = currentCount - 1; + if (newSnowflakeCount < 10) return 10; + return newSnowflakeCount; + }); + }; + + useEffect(() => { + if ( + isHeatOn && + Math.abs(currentTargetTemperature - currentTemperature) > 5 + ) { + setIsSnowReducerRunning(true); + } else { + setIsSnowReducerRunning(false); + setSnowflakeCount(150); + } + }, [isHeatOn, currentTargetTemperature, currentTemperature]); + const currentThemeId = useSelector( (state) => state.settings.config?.currentTheme || GetTheme().themeId ); @@ -36,7 +82,7 @@ export default function SnowfallWrapper() { return ; case funId: return ( - + /*