From 2a1bae6021ac14fc40e2c6901fa66132ea0981b4 Mon Sep 17 00:00:00 2001 From: Vyacheslav Date: Sat, 14 Jun 2025 19:43:26 +0500 Subject: [PATCH] unpack timers from localStorage --- src/components/Timer/Timer.tsx | 38 +++++++++++++------ .../{Formatters.ts => DateFunctions.ts} | 11 +++++- src/helpers/TimeManager.ts | 14 +++++++ src/pages/Timers/Timers.tsx | 2 +- 4 files changed, 52 insertions(+), 13 deletions(-) rename src/helpers/{Formatters.ts => DateFunctions.ts} (66%) diff --git a/src/components/Timer/Timer.tsx b/src/components/Timer/Timer.tsx index 5c45989..f2c274d 100644 --- a/src/components/Timer/Timer.tsx +++ b/src/components/Timer/Timer.tsx @@ -2,7 +2,7 @@ import {useEffect, useState} from 'react'; import TimeManager from '../../helpers/TimeManager'; import Button from '../Button/Button'; import styles from './Timer.module.css' -import {formatTime} from '../../helpers/Formatters'; +import {formatTime, isToday} from '../../helpers/DateFunctions.ts'; import LocalStorageManager from "../../helpers/LocalStorageManager.ts"; interface TimerProps { @@ -10,7 +10,25 @@ interface TimerProps { } const Timer = (props: TimerProps) => { - const [timeManager, recreateTimeManager] = useState(() => new TimeManager(0)) + const [timeManager, recreateTimeManager] = useState(() => { + const localStorageManager = new LocalStorageManager(); + const storedRaw = localStorageManager.getItem(props.id); + let stored: TimeManager | null = null; + + if (storedRaw === null) { + return new TimeManager(0); + } + + stored = TimeManager.initFromJSON(storedRaw); + + if (!isToday(stored.getStartDate())) { + localStorageManager.removeItem(props.id); + return new TimeManager(0); + } + + return TimeManager.initFromJSON(storedRaw); + + }) const [remainingTime, setRemainingTime] = useState({minutes: 0, seconds: 0}); const [startDate, setStartDate] = useState('00:00'); const [endDate, setEndDate] = useState('00:00'); @@ -18,18 +36,12 @@ const Timer = (props: TimerProps) => { useEffect(() => { timeManager.start() - console.log("timer started") const interval = setInterval(() => { setRemainingTime(timeManager.getRemainingTime()); const startString = formatTime(timeManager.getStartDate()); const endString = formatTime(timeManager.getEndDate()); - if (startString === endString) { - setStartDate('00:00'); - setEndDate('00:00'); - } else { - setStartDate(startString); - setEndDate(endString); - } + setStartDate(startString === endString ? '00:00' : startString); + setEndDate(startString === endString ? '00:00' : endString); }, 100); return () => { @@ -46,6 +58,10 @@ const Timer = (props: TimerProps) => { const handlePause = () => handleUpdate(m => m.togglePause()); const handleAdd = () => handleUpdate(m => m.addTime(1)); const handleSubstraction = () => handleUpdate(m => m.subtractTime(1)); + const handleClear = () => { + localStorageManager.removeItem(props.id); + recreateTimeManager(new TimeManager(0)); + } const handleRecreation = (minutes: number) => { const newTimeManager = new TimeManager(minutes) recreateTimeManager(newTimeManager); @@ -59,7 +75,7 @@ const Timer = (props: TimerProps) => {