import clsx from 'clsx'; import React, { useEffect, useRef } from 'react'; import { Insets } from '@/types/misc'; import { eventDispatcher } from '@/utils/event'; interface SectionInfoProps { bookKey: string; showDoubleBorder: boolean; isScrolled: boolean; isVertical: boolean; horizontalGap: number; contentInsets: Insets; gridInsets: Insets; } const HintInfo: React.FC = ({ bookKey, showDoubleBorder, isScrolled, isVertical, horizontalGap, contentInsets, gridInsets, }) => { const [hintMessage, setHintMessage] = React.useState(null); const hintTimeout = useRef(2000); const dismissTimeout = useRef | null>(null); const handleShowHint = (event: CustomEvent) => { const { message, bookKey: hintBookKey, timeout = 2000 } = event.detail; if (hintBookKey !== bookKey) return; setHintMessage(message); hintTimeout.current = timeout; }; useEffect(() => { eventDispatcher.on('hint', handleShowHint); return () => { eventDispatcher.off('hint', handleShowHint); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { if (dismissTimeout.current) clearTimeout(dismissTimeout.current); dismissTimeout.current = setTimeout(() => setHintMessage(''), hintTimeout.current); return () => { if (dismissTimeout.current) clearTimeout(dismissTimeout.current); }; }, [hintMessage]); return ( <>

{hintMessage || ''}

); }; export default HintInfo;