46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
import PropTypes from 'prop-types'
|
|
import {
|
|
useState, useEffect, forwardRef, useImperativeHandle
|
|
} from 'react'
|
|
import {signOut} from 'next-auth/react'
|
|
|
|
const LogoutCountdown = forwardRef(({setError, setIsErrorAlertOpen}, ref) => {
|
|
const [counter, setCounter] = useState(5)
|
|
const [isCountdownActive, setIsCountdownActive] = useState(false)
|
|
|
|
useEffect(() => {
|
|
let timer
|
|
|
|
if (isCountdownActive) {
|
|
if (counter > 0) {
|
|
timer = setInterval(() => {
|
|
setCounter(prevCounter => prevCounter - 1)
|
|
}, 1000)
|
|
} else if (counter === 0) {
|
|
signOut()
|
|
}
|
|
|
|
setError(`Session expirée, reconnectez-vous ! Déconnexion dans... ${counter} sec`)
|
|
setIsErrorAlertOpen(true)
|
|
}
|
|
|
|
return () => clearInterval(timer)
|
|
}, [isCountdownActive, counter, setError, setIsErrorAlertOpen])
|
|
|
|
useImperativeHandle(ref, () => ({
|
|
startCountdown() {
|
|
setCounter(5)
|
|
setIsCountdownActive(true)
|
|
}
|
|
}))
|
|
|
|
return null
|
|
})
|
|
|
|
LogoutCountdown.propTypes = {
|
|
setError: PropTypes.func.isRequired,
|
|
setIsErrorAlertOpen: PropTypes.func.isRequired
|
|
}
|
|
|
|
export default LogoutCountdown
|