import React from 'react'; import PropTypes from 'prop-types'; import Head from 'next/head'; import { ThemeProvider } from '@mui/core/styles'; import Dialog from '@mui/core/Dialog'; import DialogContent from '@mui/core/DialogContent'; import DialogContentText from '@mui/core/DialogContentText'; import DialogTitle from '@mui/core/DialogTitle'; import LinearProgress from '@mui/core/LinearProgress'; import Box from '@mui/core/Box'; import CssBaseline from '@mui/core/CssBaseline'; import theme from '../src/theme'; import '../styles/globals.css'; import { querySessions, querySyncStatus } from '../api/bbgo'; const SyncNotStarted = 0; const Syncing = 1; const SyncDone = 2; // session is configured, check if we're syncing data let syncStatusPoller = null; export default function MyApp(props) { const { Component, pageProps } = props; const [loading, setLoading] = React.useState(true); const [syncing, setSyncing] = React.useState(false); React.useEffect(() => { // Remove the server-side injected CSS. const jssStyles = document.querySelector('#jss-server-side'); if (jssStyles) { jssStyles.parentElement.removeChild(jssStyles); } querySessions((sessions) => { if (sessions.length > 0) { setSyncing(true); const pollSyncStatus = () => { querySyncStatus((status) => { switch (status) { case SyncNotStarted: break; case Syncing: setSyncing(true); break; case SyncDone: clearInterval(syncStatusPoller); setLoading(false); setSyncing(false); break; } }).catch((err) => { console.error(err); }); }; syncStatusPoller = setInterval(pollSyncStatus, 1000); } else { // no session found, so we can not sync any data setLoading(false); setSyncing(false); } }).catch((err) => { console.error(err); }); }, []); return ( BBGO {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */} {loading ? ( syncing ? ( {'Syncing Trades'} The environment is syncing trades from the exchange sessions. Please wait a moment... ) : ( {'Loading'} Loading... ) ) : ( )} ); } MyApp.propTypes = { Component: PropTypes.elementType.isRequired, pageProps: PropTypes.object.isRequired, };