Reckless_Satoshi 741fba11d5 Add swappable baseurls (#316)
* Add swappable baseurls (network and coordinators)

* Add testnet bitcoin styles

* Small fixes

* Small fixes
2022-11-07 16:45:05 +00:00

217 lines
6.4 KiB
TypeScript

import React, { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Button, Grid, ButtonGroup, Dialog, Box } from '@mui/material';
import { useHistory } from 'react-router-dom';
import DepthChart from '../../components/Charts/DepthChart';
import { NoRobotDialog } from '../../components/Dialogs';
import MakerForm from '../../components/MakerForm';
import BookTable from '../../components/BookTable';
import { Page } from '../NavBar';
import { Book, Favorites, LimitList, Maker } from '../../models';
// Icons
import { BarChart, FormatListBulleted } from '@mui/icons-material';
interface BookPageProps {
book: Book;
limits: { list: LimitList; loading: boolean };
fetchLimits: () => void;
fav: Favorites;
setFav: (state: Favorites) => void;
fetchBook: () => void;
windowSize: { width: number; height: number };
lastDayPremium: number;
maker: Maker;
setMaker: (state: Maker) => void;
hasRobot: boolean;
setPage: (state: Page) => void;
setCurrentOrder: (state: number) => void;
baseUrl: string;
}
const BookPage = ({
lastDayPremium = 0,
limits,
book = { orders: [], loading: true },
fetchBook,
fetchLimits,
fav,
setFav,
maker,
setMaker,
windowSize,
hasRobot = false,
setPage = () => null,
setCurrentOrder = () => null,
baseUrl,
}: BookPageProps): JSX.Element => {
const { t } = useTranslation();
const history = useHistory();
const [view, setView] = useState<'list' | 'depth'>('list');
const [openMaker, setOpenMaker] = useState<boolean>(false);
const [openNoRobot, setOpenNoRobot] = useState<boolean>(false);
const doubleView = windowSize.width > 115;
const width = windowSize.width * 0.9;
const maxBookTableWidth = 85;
const chartWidthEm = width - maxBookTableWidth;
useEffect(() => {
if (book.orders.length < 1) {
fetchBook(true, false);
} else {
fetchBook(false, true);
}
}, []);
const handleCurrencyChange = function (e) {
const currency = e.target.value;
setFav({ ...fav, currency });
};
const handleTypeChange = function (mouseEvent, val) {
setFav({ ...fav, type: val });
};
const onOrderClicked = function (id: number) {
if (hasRobot) {
history.push('/order/' + id);
setPage('order');
setCurrentOrder(id);
} else {
setOpenNoRobot(true);
}
};
const NavButtons = function () {
return (
<ButtonGroup variant='contained' color='inherit'>
<Button color='primary' onClick={() => setOpenMaker(true)}>
{t('Create')}
</Button>
{doubleView ? (
<></>
) : (
<Button
color='inherit'
style={{ color: '#111111' }}
onClick={() => setView(view === 'depth' ? 'list' : 'depth')}
>
{view == 'depth' ? (
<>
<FormatListBulleted /> {t('List')}
</>
) : (
<>
<BarChart /> {t('Chart')}
</>
)}
</Button>
)}
</ButtonGroup>
);
};
return (
<Grid container direction='column' alignItems='center' spacing={1} sx={{ minWidth: 400 }}>
<NoRobotDialog open={openNoRobot} onClose={() => setOpenNoRobot(false)} setPage={setPage} />
{openMaker ? (
<Dialog open={openMaker} onClose={() => setOpenMaker(false)}>
<Box sx={{ maxWidth: '18em', padding: '0.5em' }}>
<MakerForm
limits={limits}
fetchLimits={fetchLimits}
maker={maker}
setMaker={setMaker}
fav={fav}
setFav={setFav}
setPage={setPage}
hasRobot={hasRobot}
onOrderCreated={(id) => {
setCurrentOrder(id);
setPage('order');
history.push('/order/' + id);
}}
baseUrl={baseUrl}
/>
</Box>
</Dialog>
) : null}
<Grid item xs={12}>
{doubleView ? (
<Grid
container
alignItems='center'
justifyContent='center'
spacing={1}
direction='row'
style={{ width: `${windowSize.width}em` }}
>
<Grid item>
<BookTable
clickRefresh={() => fetchBook()}
book={book}
fav={fav}
maxWidth={maxBookTableWidth} // EM units
maxHeight={windowSize.height * 0.825 - 5} // EM units
fullWidth={windowSize.width} // EM units
fullHeight={windowSize.height} // EM units
defaultFullscreen={false}
onCurrencyChange={handleCurrencyChange}
onTypeChange={handleTypeChange}
onOrderClicked={onOrderClicked}
baseUrl={baseUrl}
/>
</Grid>
<Grid item>
<DepthChart
orders={book.orders}
lastDayPremium={lastDayPremium}
currency={fav.currency}
limits={limits.list}
maxWidth={chartWidthEm} // EM units
maxHeight={windowSize.height * 0.825 - 5} // EM units
onOrderClicked={onOrderClicked}
baseUrl={baseUrl}
/>
</Grid>
</Grid>
) : view === 'depth' ? (
<DepthChart
orders={book.orders}
lastDayPremium={lastDayPremium}
currency={fav.currency}
limits={limits.list}
maxWidth={windowSize.width * 0.8} // EM units
maxHeight={windowSize.height * 0.825 - 5} // EM units
onOrderClicked={onOrderClicked}
baseUrl={baseUrl}
/>
) : (
<BookTable
book={book}
clickRefresh={() => fetchBook()}
fav={fav}
maxWidth={windowSize.width * 0.97} // EM units
maxHeight={windowSize.height * 0.825 - 5} // EM units
fullWidth={windowSize.width} // EM units
fullHeight={windowSize.height} // EM units
defaultFullscreen={false}
onCurrencyChange={handleCurrencyChange}
onTypeChange={handleTypeChange}
onOrderClicked={onOrderClicked}
baseUrl={baseUrl}
/>
)}
</Grid>
<Grid item xs={12}>
<NavButtons />
</Grid>
</Grid>
);
};
export default BookPage;