import React, { useContext, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Tab, Tabs, Paper, CircularProgress, Grid, Typography, Box } from '@mui/material'; import { useNavigate, useParams } from 'react-router-dom'; import TradeBox from '../../components/TradeBox'; import OrderDetails from '../../components/OrderDetails'; import { AppContext, type UseAppStoreType } from '../../contexts/AppContext'; import { FederationContext, type UseFederationStoreType } from '../../contexts/FederationContext'; import { GarageContext, type UseGarageStoreType } from '../../contexts/GarageContext'; import { type Order } from '../../models'; import CautionDialog from './CautionDialog'; const OrderPage = (): JSX.Element => { const { windowSize, setOpen, settings, navbarHeight, hostUrl, origin } = useContext(AppContext); const { federation } = useContext(FederationContext); const { garage, badOrder, setBadOrder } = useContext(GarageContext); const [openCoordinatorWarning, setOpenCoordinatorWarning] = useState(true); const { t } = useTranslation(); const navigate = useNavigate(); const params = useParams(); const doublePageWidth: number = 50; const maxHeight: number = (windowSize?.height - navbarHeight) * 0.85 - 3; const [tab, setTab] = useState<'order' | 'contract'>('contract'); const [baseUrl, setBaseUrl] = useState(hostUrl); const [currentOrder, setCurrentOrder] = useState(null); const [currentOrderId, setCurrentOrderId] = useState(null); useEffect(() => { const coordinator = federation.getCoordinator(params.shortAlias ?? ''); const { url, basePath } = coordinator.getEndpoint( settings.network, origin, settings.selfhostedClient, hostUrl, ); setBaseUrl(`${url}${basePath}`); const orderId = Number(params.orderId); if (Boolean(orderId) && currentOrderId !== orderId) setCurrentOrderId(orderId); }, [params]); useEffect(() => { setCurrentOrder(null); if (currentOrderId !== null) { const coordinator = federation.getCoordinator(params.shortAlias ?? ''); const slot = garage.getSlot(); const robot = slot?.getRobot(); if (robot != null && slot?.token != null) { void federation.fetchRobot(garage, slot.token); coordinator .fetchOrder(currentOrderId, robot) .then((order) => { if (order?.bad_request !== undefined) { setBadOrder(order.bad_request); } else if (Boolean(order?.id)) { setCurrentOrder(order); if (order?.is_participant) { garage.updateOrder(order); } } }) .catch((e) => { console.log(e); }); } } }, [currentOrderId]); const onClickCoordinator = function (): void { if (currentOrder?.shortAlias != null) { setOpen((open) => { return { ...open, coordinator: currentOrder?.shortAlias }; }); } }; const startAgain = (): void => { navigate('/robot'); }; const orderDetailsSpace = currentOrder ? ( { navigate('/robot'); }} /> ) : ( <> ); const tradeBoxSpace = currentOrder ? ( ) : ( <> ); return ( setOpenCoordinatorWarning(false)} longAlias={federation.getCoordinator(params.shortAlias ?? '').longAlias} /> {currentOrder === null && badOrder === undefined && } {badOrder !== undefined ? ( {t(badOrder)} ) : null} {currentOrder !== null && badOrder === undefined ? ( currentOrder.is_participant ? ( windowSize.width > doublePageWidth ? ( // DOUBLE PAPER VIEW {orderDetailsSpace} {tradeBoxSpace} ) : ( // SINGLE PAPER VIEW { setTab(value); }} variant='fullWidth' >
{orderDetailsSpace}
{tradeBoxSpace}
) ) : ( {orderDetailsSpace} ) ) : ( <> )}
); }; export default OrderPage;