| | import Box from '@mui/material/Box'; |
| | import {useEffect, useState} from 'react'; |
| |
|
| | type Props = { |
| | intervalMs: number; |
| | children: React.ReactNode; |
| | shouldBlink: boolean; |
| | |
| | }; |
| |
|
| | export default function Blink({ |
| | // display = 'inline-block', |
| | shouldBlink, |
| | intervalMs, |
| | children, |
| | }: Props): React.ReactElement { |
| | const [cursorBlinkOn, setCursorBlinkOn] = useState(false); |
| |
|
| | useEffect(() => { |
| | if (shouldBlink) { |
| | const interval = setInterval(() => { |
| | setCursorBlinkOn((prev) => !prev); |
| | }, intervalMs); |
| |
|
| | return () => clearInterval(interval); |
| | } else { |
| | setCursorBlinkOn(false); |
| | } |
| | }, [intervalMs, shouldBlink]); |
| |
|
| | return ( |
| | <Box |
| | component="span" |
| | sx={{ |
| | display: 'inline-block', |
| | visibility: cursorBlinkOn ? 'visible' : 'hidden', |
| | }}> |
| | {children} |
| | </Box> |
| | ); |
| | } |
| |
|