lost-connection-alert.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { useTranslation } from 'react-i18next'
  2. import { useEffect, useState } from 'react'
  3. import { secondsUntil } from '@/features/ide-react/connection/utils'
  4. import { Alert } from 'react-bootstrap'
  5. type LostConnectionAlertProps = {
  6. reconnectAt: number
  7. tryReconnectNow: () => void
  8. }
  9. export function LostConnectionAlert({
  10. reconnectAt,
  11. tryReconnectNow,
  12. }: LostConnectionAlertProps) {
  13. const { t } = useTranslation()
  14. const [secondsUntilReconnect, setSecondsUntilReconnect] = useState(
  15. secondsUntil(reconnectAt)
  16. )
  17. useEffect(() => {
  18. const timer = window.setInterval(() => {
  19. setSecondsUntilReconnect(secondsUntil(reconnectAt))
  20. }, 1000)
  21. return () => window.clearInterval(timer)
  22. }, [reconnectAt])
  23. return (
  24. <Alert bsStyle="warning" className="small">
  25. <strong>{t('lost_connection')}</strong>{' '}
  26. {t('reconnecting_in_x_secs', { seconds: secondsUntilReconnect })}.
  27. <button
  28. id="try-reconnect-now-button"
  29. className="pull-right"
  30. onClick={() => tryReconnectNow()}
  31. >
  32. {t('try_now')}
  33. </button>
  34. </Alert>
  35. )
  36. }