Files
kuekhaoyang 3564ce1ede chore: update package versions and add user config sync API
- Bump version to 4.8.0 and update dependencies in package.json
- Implement user config sync API for cross-device settings persistence
- Add resolution badge auto-hide hook for improved user experience
- Create useConfigSync hook to manage user settings synchronization with the server
2026-03-18 12:44:05 +08:00

53 lines
1.4 KiB
TypeScript

/**
* Resolution Badge Auto-Hide Hook
* Shows the resolution badge when detected, then auto-hides after a delay.
* Reappears briefly on user interaction (mouse move / touch).
*/
import { useState, useEffect, useRef, useCallback } from 'react';
import type { VideoResolutionInfo } from './useVideoResolution';
const AUTO_HIDE_DELAY = 5000; // 5 seconds
export function useResolutionBadge(resolution: VideoResolutionInfo | null) {
const [visible, setVisible] = useState(false);
const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
const clearTimer = useCallback(() => {
if (timerRef.current) {
clearTimeout(timerRef.current);
timerRef.current = null;
}
}, []);
const startHideTimer = useCallback(() => {
clearTimer();
timerRef.current = setTimeout(() => {
setVisible(false);
}, AUTO_HIDE_DELAY);
}, [clearTimer]);
// Show badge when resolution first detected or changes
useEffect(() => {
if (resolution) {
setVisible(true);
startHideTimer();
} else {
setVisible(false);
clearTimer();
}
}, [resolution, startHideTimer, clearTimer]);
// Briefly show badge on user interaction
const flashBadge = useCallback(() => {
if (!resolution) return;
setVisible(true);
startHideTimer();
}, [resolution, startHideTimer]);
// Cleanup
useEffect(() => clearTimer, [clearTimer]);
return { badgeVisible: visible, flashBadge };
}