Files
cinny/src/app/hooks/media/useMediaPlaybackRate.ts
T
Lotus Bot 23008670f3
CI / Build & Quality Checks (push) Successful in 10m13s
chore: upgrade i18next 26, prettier 3, fontsource-variable, domhandler 6, lint-staged 17
- i18next 23->26 + react-i18next 15->17
- prettier 2->3, reformat all files
- replace @fontsource/inter with @fontsource-variable/inter 5, update import path
- domhandler 5->6 (aligns with transitive deps)
- lint-staged 16->17
2026-05-21 23:30:50 -04:00

41 lines
1.0 KiB
TypeScript

import { useCallback, useEffect, useState } from 'react';
export type MediaPlaybackRateData = {
playbackRate: number;
};
export type MediaPlaybackRateControl = {
setPlaybackRate: (rate: number) => void;
};
export const useMediaPlaybackRate = (
getTargetElement: () => HTMLMediaElement | null,
): MediaPlaybackRateData & MediaPlaybackRateControl => {
const [rate, setRate] = useState(1.0);
const setPlaybackRate = useCallback(
(playbackRate: number) => {
const targetEl = getTargetElement();
if (!targetEl) return;
targetEl.playbackRate = playbackRate;
},
[getTargetElement],
);
useEffect(() => {
const targetEl = getTargetElement();
const handleChange = () => {
if (!targetEl) return;
setRate(targetEl.playbackRate);
};
targetEl?.addEventListener('ratechange', handleChange);
return () => {
targetEl?.removeEventListener('ratechange', handleChange);
};
}, [getTargetElement]);
return {
playbackRate: rate,
setPlaybackRate,
};
};