import React from 'react'; import PropTypes from 'prop-types'; import Head from 'next/head'; import {ThemeProvider} from '@material-ui/core/styles'; import Dialog from '@material-ui/core/Dialog'; import DialogContent from '@material-ui/core/DialogContent'; import DialogContentText from '@material-ui/core/DialogContentText'; import DialogTitle from '@material-ui/core/DialogTitle'; import LinearProgress from '@material-ui/core/LinearProgress'; import Box from '@material-ui/core/Box'; import CssBaseline from '@material-ui/core/CssBaseline'; import theme from '../src/theme'; import '../styles/globals.css' import {querySessions, querySyncStatus} from "../api/bbgo"; 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) // session is configured, check if we're syncing data let poller = null const pollSyncStatus = () => { querySyncStatus((status) => { if (status === false) { setLoading(false) setSyncing(false) clearInterval(poller) } }).catch((err) => { console.error(err) }) } poller = 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, };