import { Button, CircularProgress, Container, IconButton } from '@material-ui/core' import { createStyles, makeStyles, Theme } from '@material-ui/core/styles' import React, { ReactElement, useContext, useEffect } from 'react' import { useSnackbar } from 'notistack' import CloseIcon from 'remixicon-react/CloseCircleLineIcon' import ErrorBoundary from '../components/ErrorBoundary' import SideBar from '../components/SideBar' import { Context as BeeContext } from '../providers/Bee' import { Context as SettingsContext } from '../providers/Settings' import config from '../config' import * as Sentry from '@sentry/react' import ItsBroken from './ItsBroken' import { useNewBeeDesktopVersion } from '../hooks/apiHooks' import { BEE_DESKTOP_LATEST_RELEASE_PAGE } from '../utils/desktop' const useStyles = makeStyles((theme: Theme) => createStyles({ content: { backgroundColor: theme.palette.background.default, minHeight: '100vh', }, }), ) interface Props { children?: ReactElement } const Dashboard = (props: Props): ReactElement => { const classes = useStyles() const { isLoading, isLatestBeeVersion, latestBeeRelease, latestBeeVersionUrl, latestUserVersion } = useContext(BeeContext) const { isBeeDesktop } = useContext(SettingsContext) const { newBeeDesktopVersion } = useNewBeeDesktopVersion(isBeeDesktop) const { enqueueSnackbar, closeSnackbar } = useSnackbar() // New version of Bee client notification useEffect(() => { if (!isLoading && !isBeeDesktop && !isLatestBeeVersion && latestBeeRelease && latestUserVersion) { enqueueSnackbar(`There is new Bee version ${latestBeeRelease?.name}!`, { variant: 'warning', preventDuplicate: true, key: 'beeNewVersion', persist: true, action: key => ( { closeSnackbar(key) }} > ), }) } }, [ closeSnackbar, enqueueSnackbar, isLatestBeeVersion, isBeeDesktop, latestBeeRelease, latestBeeVersionUrl, isLoading, latestUserVersion, ]) useEffect(() => { if (newBeeDesktopVersion !== '') { enqueueSnackbar(`There is new Swarm Dashboard version ${newBeeDesktopVersion}!`, { variant: 'warning', preventDuplicate: true, key: 'desktopNewVersion', persist: true, action: key => ( { closeSnackbar(key) }} > ), }) } }, [enqueueSnackbar, closeSnackbar, newBeeDesktopVersion]) const content = ( <> {isLoading ? (
) : ( props.children )} ) let errorBoundaryWithContent if (config.SENTRY_KEY) { errorBoundaryWithContent = ( } > {content} ) } else { errorBoundaryWithContent = {content} } return (
{errorBoundaryWithContent}
) } export default Dashboard