import { useTranslation } from 'react-i18next' import { LostConnectionAlert } from './lost-connection-alert' import { useConnectionContext } from '@/features/ide-react/context/connection-context' import { debugging } from '@/utils/debugging' import useScopeValue from '@/shared/hooks/use-scope-value' import { createPortal } from 'react-dom' import { useGlobalAlertsContainer } from '@/features/ide-react/context/global-alerts-context' import OLNotification from '@/features/ui/components/ol/ol-notification' import OLButton from '@/features/ui/components/ol/ol-button' export function Alerts() { const { t } = useTranslation() const { connectionState, isConnected, isStillReconnecting, tryReconnectNow, secondsUntilReconnect, } = useConnectionContext() const globalAlertsContainer = useGlobalAlertsContainer() const [synctexError] = useScopeValue('sync_tex_error') if (!globalAlertsContainer) { return null } return createPortal( <> {connectionState.forceDisconnected ? ( {t('disconnected')}} /> ) : null} {connectionState.reconnectAt ? ( ) : null} {isStillReconnecting ? ( {t('reconnecting')}…} /> ) : null} {synctexError ? ( {t('synctex_failed')}} action={ {t('more_info')} } /> ) : null} {connectionState.inactiveDisconnect || (connectionState.readyState === WebSocket.CLOSED && (connectionState.error === 'rate-limited' || connectionState.error === 'unable-to-connect') && !secondsUntilReconnect()) ? ( {t('editor_disconected_click_to_reconnect')} } /> ) : null} {debugging ? ( Connected: {isConnected.toString()}} /> ) : null} , globalAlertsContainer ) }