line-loading.tsx 1014 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { useEffect, useState } from 'react'
  2. import { rgbAlpha } from '@/utils/theme'
  3. import { Progress } from 'antd'
  4. import { themeVars } from '@/theme/theme.css'
  5. export function LineLoading() {
  6. const [percent, setPercent] = useState(10)
  7. const [increasing, setIncreasing] = useState(true)
  8. useEffect(() => {
  9. const interval = setInterval(() => {
  10. if (increasing) {
  11. setPercent((prevPercent) => prevPercent + 20)
  12. if (percent === 100) {
  13. setIncreasing(false)
  14. }
  15. } else {
  16. setPercent(0)
  17. setIncreasing(true)
  18. }
  19. }, 50)
  20. return () => {
  21. clearInterval(interval)
  22. }
  23. }, [percent, increasing])
  24. return (
  25. <div className='m-auto flex h-full w-96 items-center justify-center'>
  26. <Progress
  27. percent={percent}
  28. trailColor={rgbAlpha(themeVars.colors.palette.primary.default, 0.8)}
  29. strokeColor={themeVars.colors.palette.primary.default}
  30. showInfo={false}
  31. size='small'
  32. />
  33. </div>
  34. )
  35. }