diff --git a/.eslintrc.json b/.eslintrc.json index 8a7dd36..edbaef4 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -41,6 +41,7 @@ "sort-destructure-keys/sort-destructure-keys": "warn", "jsx-a11y/no-static-element-interactions": "off", "jsx-a11y/media-has-caption": "off", + "jsx-a11y/no-noninteractive-tabindex": "off", "react/jsx-sort-props": [ "warn", { diff --git a/src/components/toolbox/countdown-timer/timers/timer/reverse-timer/index.ts b/src/components/toolbox/countdown-timer/timers/timer/reverse-timer/index.ts deleted file mode 100644 index 03e8ec4..0000000 --- a/src/components/toolbox/countdown-timer/timers/timer/reverse-timer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { ReverseTimer } from './reverse-timer'; diff --git a/src/components/toolbox/countdown-timer/timers/timer/reverse-timer/reverse-timer.module.css b/src/components/toolbox/countdown-timer/timers/timer/reverse-timer/reverse-timer.module.css deleted file mode 100644 index ca62729..0000000 --- a/src/components/toolbox/countdown-timer/timers/timer/reverse-timer/reverse-timer.module.css +++ /dev/null @@ -1,9 +0,0 @@ -.reverseTimer { - position: absolute; - top: 15px; - left: 50%; - font-size: var(--font-xsm); - color: var(--color-foreground-subtle); - letter-spacing: 1px; - transform: translate(-50%); -} diff --git a/src/components/toolbox/countdown-timer/timers/timer/reverse-timer/reverse-timer.tsx b/src/components/toolbox/countdown-timer/timers/timer/reverse-timer/reverse-timer.tsx deleted file mode 100644 index 5a10532..0000000 --- a/src/components/toolbox/countdown-timer/timers/timer/reverse-timer/reverse-timer.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useMemo } from 'react'; - -import { padNumber } from '@/helpers/number'; - -import styles from './reverse-timer.module.css'; - -interface ReverseTimerProps { - spent: number; -} - -export function ReverseTimer({ spent }: ReverseTimerProps) { - const hours = useMemo(() => Math.floor(spent / 3600), [spent]); - const minutes = useMemo(() => Math.floor((spent % 3600) / 60), [spent]); - const seconds = useMemo(() => spent % 60, [spent]); - - return ( -
- -{padNumber(hours)}:{padNumber(minutes)}:{padNumber(seconds)} -
- ); -} diff --git a/src/components/toolbox/countdown-timer/timers/timer/timer.module.css b/src/components/toolbox/countdown-timer/timers/timer/timer.module.css index 886f789..17345bc 100644 --- a/src/components/toolbox/countdown-timer/timers/timer/timer.module.css +++ b/src/components/toolbox/countdown-timer/timers/timer/timer.module.css @@ -118,6 +118,7 @@ font-family: var(--font-mono); font-size: var(--font-2xlg); font-weight: 700; + cursor: pointer; & span { color: var(--color-foreground-subtle); diff --git a/src/components/toolbox/countdown-timer/timers/timer/timer.tsx b/src/components/toolbox/countdown-timer/timers/timer/timer.tsx index d22770e..cd4240f 100644 --- a/src/components/toolbox/countdown-timer/timers/timer/timer.tsx +++ b/src/components/toolbox/countdown-timer/timers/timer/timer.tsx @@ -1,12 +1,6 @@ import { useRef, useMemo, useState, useEffect } from 'react'; -import { - IoPlay, - IoPause, - IoRefresh, - IoTrashOutline, -} from 'react-icons/io5/index'; +import { IoPlay, IoPause, IoRefresh, IoTrashOutline } from 'react-icons/io5'; -import { ReverseTimer } from './reverse-timer'; import { Toolbar } from './toolbar'; import { useCountdownTimers } from '@/stores/countdown-timers'; @@ -31,25 +25,24 @@ export function Timer({ enableAnimations, id }: TimerProps) { const { first, last, name, spent, total } = useCountdownTimers(state => state.getTimer(id), - ) || { name: '', spent: 0, total: 0 }; - - const [isDeleting, setIsDeleting] = useState(false); - const [snapshot, setSnapshot] = useState({ spent: 0, total: 0 }); - + ); const tick = useCountdownTimers(state => state.tick); const rename = useCountdownTimers(state => state.rename); const reset = useCountdownTimers(state => state.reset); const deleteTimer = useCountdownTimers(state => state.delete); - const left = useMemo( - () => (isDeleting ? snapshot.total - snapshot.spent : total - spent), - [total, spent, isDeleting, snapshot], - ); + const left = useMemo(() => total - spent, [total, spent]); const hours = useMemo(() => Math.floor(left / 3600), [left]); const minutes = useMemo(() => Math.floor((left % 3600) / 60), [left]); const seconds = useMemo(() => left % 60, [left]); + const [isReversed, setIsReversed] = useState(false); + + const spentHours = useMemo(() => Math.floor(spent / 3600), [spent]); + const spentMinutes = useMemo(() => Math.floor((spent % 3600) / 60), [spent]); + const spentSeconds = useMemo(() => spent % 60, [spent]); + const playAlarm = useAlarm(); const showSnackbar = useSnackbar(); @@ -79,9 +72,6 @@ export function Timer({ enableAnimations, id }: TimerProps) { enableAnimations(false); - setIsDeleting(true); - setSnapshot({ spent, total }); - deleteTimer(id); setTimeout(() => enableAnimations(true), 100); @@ -157,14 +147,30 @@ export function Timer({ enableAnimations, id }: TimerProps) { - - -
- {padNumber(hours)} - : - {padNumber(minutes)} - : - {padNumber(seconds)} +
setIsReversed(prev => !prev)} + onKeyDown={() => setIsReversed(prev => !prev)} + > + {!isReversed ? ( + <> + {padNumber(hours)} + : + {padNumber(minutes)} + : + {padNumber(seconds)} + + ) : ( + <> + - + {padNumber(spentHours)} + : + {padNumber(spentMinutes)} + : + {padNumber(spentSeconds)} + + )}