/ pages / reserve-overview.page.tsx
reserve-overview.page.tsx
  1  import { Trans } from '@lingui/macro';
  2  import { Box, Typography } from '@mui/material';
  3  import { useRouter } from 'next/router';
  4  import { useEffect, useState } from 'react';
  5  import StyledToggleButton from 'src/components/StyledToggleButton';
  6  import StyledToggleButtonGroup from 'src/components/StyledToggleButtonGroup';
  7  import {
  8    ComputedReserveData,
  9    useAppDataContext,
 10  } from 'src/hooks/app-data-provider/useAppDataProvider';
 11  import { AssetCapsProvider } from 'src/hooks/useAssetCaps';
 12  import { MainLayout } from 'src/layouts/MainLayout';
 13  import { ReserveActions } from 'src/modules/reserve-overview/ReserveActions';
 14  import { ReserveConfigurationWrapper } from 'src/modules/reserve-overview/ReserveConfigurationWrapper';
 15  import { ReserveTopDetailsWrapper } from 'src/modules/reserve-overview/ReserveTopDetailsWrapper';
 16  import { useRootStore } from 'src/store/root';
 17  
 18  import { ContentContainer } from '../src/components/ContentContainer';
 19  
 20  export default function ReserveOverview() {
 21    const router = useRouter();
 22    const { reserves } = useAppDataContext();
 23    const underlyingAsset = router.query.underlyingAsset as string;
 24  
 25    const [mode, setMode] = useState<'overview' | 'actions' | ''>('overview');
 26    const trackEvent = useRootStore((store) => store.trackEvent);
 27  
 28    const reserve = reserves.find(
 29      (reserve) => reserve.underlyingAsset === underlyingAsset
 30    ) as ComputedReserveData;
 31  
 32    const [pageEventCalled, setPageEventCalled] = useState(false);
 33  
 34    useEffect(() => {
 35      if (!pageEventCalled && reserve && reserve.iconSymbol && underlyingAsset) {
 36        trackEvent('Page Viewed', {
 37          'Page Name': 'Reserve Overview',
 38          Reserve: reserve.iconSymbol,
 39          Asset: underlyingAsset,
 40        });
 41        setPageEventCalled(true);
 42      }
 43    }, [trackEvent, reserve, underlyingAsset, pageEventCalled]);
 44  
 45    const isOverview = mode === 'overview';
 46  
 47    return (
 48      <AssetCapsProvider asset={reserve}>
 49        <ReserveTopDetailsWrapper underlyingAsset={underlyingAsset} />
 50  
 51        <ContentContainer>
 52          <Box
 53            sx={{
 54              display: { xs: 'flex', lg: 'none' },
 55              justifyContent: { xs: 'center', xsm: 'flex-start' },
 56              mb: { xs: 3, xsm: 4 },
 57            }}
 58          >
 59            <StyledToggleButtonGroup
 60              color="primary"
 61              value={mode}
 62              exclusive
 63              onChange={(_, value) => setMode(value)}
 64              sx={{ width: { xs: '100%', xsm: '359px' }, height: '44px' }}
 65            >
 66              <StyledToggleButton value="overview" disabled={mode === 'overview'}>
 67                <Typography variant="subheader1">
 68                  <Trans>Overview</Trans>
 69                </Typography>
 70              </StyledToggleButton>
 71              <StyledToggleButton value="actions" disabled={mode === 'actions'}>
 72                <Typography variant="subheader1">
 73                  <Trans>Your info</Trans>
 74                </Typography>
 75              </StyledToggleButton>
 76            </StyledToggleButtonGroup>
 77          </Box>
 78  
 79          <Box sx={{ display: 'flex' }}>
 80            {/** Main status and configuration panel*/}
 81            <Box
 82              sx={{
 83                display: { xs: !isOverview ? 'none' : 'block', lg: 'block' },
 84                width: { xs: '100%', lg: 'calc(100% - 432px)' },
 85                mr: { xs: 0, lg: 4 },
 86              }}
 87            >
 88              <ReserveConfigurationWrapper reserve={reserve} />
 89            </Box>
 90  
 91            {/** Right panel with actions*/}
 92            <Box
 93              sx={{
 94                display: { xs: isOverview ? 'none' : 'block', lg: 'block' },
 95                width: { xs: '100%', lg: '416px' },
 96              }}
 97            >
 98              <ReserveActions reserve={reserve} />
 99            </Box>
100          </Box>
101        </ContentContainer>
102      </AssetCapsProvider>
103    );
104  }
105  
106  ReserveOverview.getLayout = function getLayout(page: React.ReactElement) {
107    return <MainLayout>{page}</MainLayout>;
108  };