| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import { AnimatePresence, motion } from 'framer-motion'
- import { useEffect, useState } from 'react'
- import { DialogSection } from 'ui'
- import CountdownTimerRadial from '@/components/ui/CountdownTimer/CountdownTimerRadial'
- export const DiskMangementCoolDownSection = ({ visible }: { visible: boolean }) => {
- const [progress, setProgress] = useState(100)
- const [showCountdown, setShowCountdown] = useState(false)
- const [isJumping, setIsJumping] = useState(false)
- useEffect(() => {
- const startCountdown = () => {
- setShowCountdown(true)
- setProgress(100)
- const interval = setInterval(() => {
- setProgress((prevProgress) => {
- if (prevProgress <= 0) {
- clearInterval(interval)
- setIsJumping(true)
- setTimeout(() => {
- setIsJumping(false)
- setProgress(100)
- startCountdown() // Restart the countdown
- }, 300) // Duration of the jump animation
- return 0
- }
- return prevProgress - 1
- })
- }, 100)
- return () => clearInterval(interval)
- }
- const initialDelay = setTimeout(startCountdown, 1000)
- return () => clearTimeout(initialDelay)
- }, [])
- return (
- <AnimatePresence>
- {visible && (
- <motion.div
- initial={{ opacity: 1, height: 'auto' }}
- exit={{ opacity: 0, height: 0 }}
- transition={{ duration: 0.15 }}
- className="w-full"
- >
- <DialogSection className="bg-surface-100 text-sm text-foreground-light flex items-center gap-4 relative w-full border rounded-md">
- <div className="w-12 h-12">
- <AnimatePresence>
- {showCountdown && (
- <motion.div
- key="countdown-timer"
- initial={{ scale: 0.8, opacity: 0, y: -8 }}
- animate={{
- scale: isJumping ? 1.2 : 1,
- opacity: 1,
- y: isJumping ? -8 : 0,
- }}
- exit={{ scale: 0.8, opacity: 0, y: -8 }}
- transition={{
- duration: isJumping ? 0.3 : 0.8,
- type: 'spring',
- bounce: 0.6,
- }}
- >
- <CountdownTimerRadial progress={progress} />
- </motion.div>
- )}
- </AnimatePresence>
- </div>
- <div className="flex flex-col gap-0 grow">
- <p className="text-sm text-foreground">
- For 4 hours you will not be able to change any disk attributes.
- </p>
- <p className="text-sm text-foreground-light">
- There is a cooldown period enforced for any disk attribute modifications
- </p>
- </div>
- </DialogSection>
- </motion.div>
- )}
- </AnimatePresence>
- )
- }
|