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,