|
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> |
|
); |
|
} |
|
|