import Button from '@mui/material/Button'; import { observer } from 'mobx-react-lite'; import { useSnackbar, type SnackbarKey, type SnackbarMessage, type OptionsObject, } from 'notistack'; import React, { useEffect } from 'react'; import { ContrastThemeProvider } from '../theme/ThemeProvider'; import type EditorStore from './EditorStore'; const DEBOUNCE_TIMEOUT = 350; function enqueueLater( enqueueSnackbar: ( message: SnackbarMessage, options: OptionsObject | undefined, ) => SnackbarKey, closeSnackbar: (key: SnackbarKey) => void, message: SnackbarMessage, options?: OptionsObject | undefined, debounceTimeout = DEBOUNCE_TIMEOUT, ): () => void { let key: SnackbarKey | undefined; let timeout: number | undefined = setTimeout(() => { timeout = undefined; key = enqueueSnackbar(message, options); }, debounceTimeout); return () => { if (timeout !== undefined) { clearTimeout(timeout); } if (key !== undefined) { closeSnackbar(key); } }; } export default observer(function ConnectionStatusNotification({ editorStore, }: { editorStore: EditorStore; }): null { const { opened, opening, connectionErrors, disconnectedByUser, networkMissing, } = editorStore; const { enqueueSnackbar, closeSnackbar } = useSnackbar(); useEffect(() => { if (opening) { return enqueueLater( enqueueSnackbar, closeSnackbar, 'Connecting to Refinery', { persist: true, action: ( ), }, 500, ); } if (connectionErrors.length >= 1 && !opening) { return enqueueLater( enqueueSnackbar, closeSnackbar,
Connection error:{' '} {connectionErrors[connectionErrors.length - 1]} {connectionErrors.length >= 2 && ( <> {' '} and {connectionErrors.length - 1} more{' '} {connectionErrors.length >= 3 ? 'errors' : 'error'} )}
, { persist: !opened, variant: 'error', action: opened ? ( ) : ( <> ), }, ); } if (networkMissing) { if (disconnectedByUser) { return enqueueLater( enqueueSnackbar, closeSnackbar,
No network connection: Some editing features might be degraded
, { action: ( ), }, 0, ); } return enqueueLater( enqueueSnackbar, closeSnackbar,
No network connection: Refinery will try to reconnect when the connection is restored
, { persist: true, action: ( ), }, ); } if (disconnectedByUser) { return enqueueLater( enqueueSnackbar, closeSnackbar,
Not connected to Refinery: Some editing features might be degraded
, { action: ( ), }, 0, ); } return () => {}; }, [ editorStore, opened, opening, connectionErrors, disconnectedByUser, networkMissing, closeSnackbar, enqueueSnackbar, ]); return null; });