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