Spaces:
Running
Running
File size: 1,155 Bytes
f7fe834 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import React, { useEffect, useState } from 'react'
export default function LoadingOverlay({ show, label = 'Processando...' }) {
const [elapsedSeconds, setElapsedSeconds] = useState(0)
useEffect(() => {
if (!show) {
setElapsedSeconds(0)
return undefined
}
const startedAt = Date.now()
const timer = window.setInterval(() => {
setElapsedSeconds(Math.floor((Date.now() - startedAt) / 1000))
}, 1000)
return () => {
window.clearInterval(timer)
}
}, [show])
function formatElapsed(totalSeconds) {
const minutes = Math.floor(totalSeconds / 60)
const seconds = totalSeconds % 60
return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`
}
if (!show) return null
return (
<div className="loading-overlay" role="status" aria-live="polite" aria-label={label}>
<div className="loading-overlay-card">
<div className="loading-spinner" aria-hidden="true" />
<div className="loading-overlay-label">{label}</div>
<div className="loading-overlay-elapsed">Tempo: {formatElapsed(elapsedSeconds)}</div>
</div>
</div>
)
}
|