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