mirror of
https://github.com/remvze/moodist.git
synced 2025-12-18 01:14:17 +00:00
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import { useMemo, forwardRef } from 'react';
|
|
|
|
import { Timer } from './timer';
|
|
import { Notice } from './notice';
|
|
|
|
import { useCountdownTimers } from '@/stores/countdown-timers';
|
|
|
|
import styles from './timers.module.css';
|
|
|
|
interface TimersProps {
|
|
enableAnimations: (enabled: boolean) => void;
|
|
}
|
|
|
|
export const Timers = forwardRef(function Timers(
|
|
{ enableAnimations }: TimersProps,
|
|
ref: React.ForwardedRef<HTMLDivElement>,
|
|
) {
|
|
const timers = useCountdownTimers(state => state.timers);
|
|
const spent = useCountdownTimers(state => state.spent());
|
|
const total = useCountdownTimers(state => state.total());
|
|
|
|
const spentMinutes = useMemo(() => Math.floor(spent / 60), [spent]);
|
|
const totalMinutes = useMemo(() => Math.floor(total / 60), [total]);
|
|
|
|
return (
|
|
<div>
|
|
{timers.length > 0 ? (
|
|
<div className={styles.timers}>
|
|
<header>
|
|
<h2 className={styles.title}>Timers</h2>
|
|
<div className={styles.line} />
|
|
{totalMinutes > 0 && (
|
|
<p className={styles.spent}>
|
|
{spentMinutes} / {totalMinutes} Minute
|
|
{totalMinutes !== 1 && 's'}
|
|
</p>
|
|
)}
|
|
</header>
|
|
|
|
<div ref={ref}>
|
|
{timers.map(timer => (
|
|
<Timer
|
|
enableAnimations={enableAnimations}
|
|
id={timer.id}
|
|
key={timer.id}
|
|
/>
|
|
))}
|
|
</div>
|
|
|
|
<Notice />
|
|
</div>
|
|
) : null}
|
|
</div>
|
|
);
|
|
});
|