import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, Typography, Grid, ButtonGroup, Dialog, Box } from '@mui/material'; import { useHistory } from 'react-router-dom'; import currencyDict from '../../../static/assets/currencies.json'; import DepthChart from '../../components/Charts/DepthChart'; import { Book, Favorites, LimitList, Maker } from '../../models'; // Icons import { BarChart, FormatListBulleted } from '@mui/icons-material'; import MakerForm from '../../components/MakerForm'; import BookTable from '../../components/BookTable'; 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; } const BookPage = ({ lastDayPremium = 0, limits, book = { orders: [], loading: true }, fetchBook, fetchLimits, fav, setFav, maker, setMaker, windowSize, }: BookPageProps): JSX.Element => { const { t } = useTranslation(); const history = useHistory(); const [view, setView] = useState<'list' | 'depth'>('list'); const [openMaker, setOpenMaker] = useState(false); const doubleView = windowSize.width > 115; const width = windowSize.width * 0.9; const maxBookTableWidth = 85; const chartWidthEm = width - maxBookTableWidth; const defaultMaker: Maker = { isExplicit: false, amount: '', paymentMethods: [], paymentMethodsText: 'not specified', badPaymentMethod: false, premium: '', satoshis: '', publicExpiryTime: new Date(0, 0, 0, 23, 59), publicDuration: 86340, escrowExpiryTime: new Date(0, 0, 0, 3, 0), escrowDuration: 10800, bondSize: 3, minAmount: '', maxAmount: '', badPremiumText: '', badSatoshisText: '', }; 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 NoOrdersFound = function () { return ( {fav.type == 0 ? t('No orders found to sell BTC for {{currencyCode}}', { currencyCode: fav.currency == 0 ? t('ANY') : currencyDict[fav.currency.toString()], }) : t('No orders found to buy BTC for {{currencyCode}}', { currencyCode: fav.currency == 0 ? t('ANY') : currencyDict[fav.currency.toString()], })} {t('Be the first one to create an order')} ); }; const NavButtons = function () { return ( {doubleView ? ( <> ) : ( )} ); }; return ( {openMaker ? ( setOpenMaker(false)}> ) : null} {doubleView ? ( 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} noResultsOverlay={NoOrdersFound} /> ) : view === 'depth' ? ( ) : ( 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} noResultsOverlay={NoOrdersFound} /> )} ); }; export default BookPage;