Files
fotospiel-app/resources/js/guest-v2/lib/usePulseAnimation.ts
2026-02-02 13:01:20 +01:00

40 lines
878 B
TypeScript

import React from 'react';
type UsePulseAnimationOptions = {
intervalMs?: number;
delayMs?: number;
};
export function usePulseAnimation({ intervalMs = 2400, delayMs = 0 }: UsePulseAnimationOptions = {}) {
const [active, setActive] = React.useState(false);
React.useEffect(() => {
let interval: ReturnType<typeof setInterval> | undefined;
let timeout: ReturnType<typeof setTimeout> | undefined;
const start = () => {
setActive((prev) => !prev);
interval = setInterval(() => {
setActive((prev) => !prev);
}, intervalMs);
};
if (delayMs > 0) {
timeout = setTimeout(start, delayMs);
} else {
start();
}
return () => {
if (interval) {
clearInterval(interval);
}
if (timeout) {
clearTimeout(timeout);
}
};
}, [delayMs, intervalMs]);
return active;
}