Spaces:
Running
Running
import { memo, useEffect, useState } from 'react'; | |
interface LoadingDotsProps { | |
text: string; | |
} | |
export const LoadingDots = memo(({ text }: LoadingDotsProps) => { | |
const [dotCount, setDotCount] = useState(0); | |
useEffect(() => { | |
const interval = setInterval(() => { | |
setDotCount((prevDotCount) => (prevDotCount + 1) % 4); | |
}, 500); | |
return () => clearInterval(interval); | |
}, []); | |
return ( | |
<div className="flex justify-center items-center h-full"> | |
<div className="relative"> | |
<span>{text}</span> | |
<span className="absolute left-[calc(100%-12px)]">{'.'.repeat(dotCount)}</span> | |
<span className="invisible">...</span> | |
</div> | |
</div> | |
); | |
}); | |