aboutsummaryrefslogtreecommitdiff
path: root/client/src/App.js
blob: c85e46cccfe71fb7f330f3a763bd65a142cd2313 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import React, { useState, createContext } from 'react';
import { Routes, Route, Navigate, Link, useLocation } from 'react-router-dom';
import { MarketDataPage, BidsPage, SubmitBidPage } from './components';
import { Menu, Select, PageHeader, Typography } from '@arco-design/web-react';
import '@arco-design/web-react/dist/css/arco.css';

const ghostBgStyle = {
  backgroundImage: 'radial-gradient(var(--color-fill-3) 1px, rgba(0, 0, 0, 0) 1px)',
  backgroundSize: '16px 16px',
  padding: 20,
};

export const MarketContext = createContext();
export const MARKET_FULL_NAMES = {
  CAISO: 'California ISO',
  ERCOT: 'Electric Reliability Council of Texas',
  ISONE: 'ISO New England',
  MISO: 'Midcontinent ISO',
  NYISO: 'New York ISO',
  PJM: 'PJM Interconnection',
};

function App() {
  const [selectedMarket, setSelectedMarket] = useState('ISONE');
  const location = useLocation();
  return (
    <MarketContext.Provider value={{ selectedMarket, setSelectedMarket }}>
    <div>
      <style>
              {`
                @media (max-width: 600px) {
                .page-header-container {
                                flex-direction: column;
                                align-items: center;
                              }
                .page-header-title {
                    font-size: 20px !important;
                    text-align: center;
                  }
                  .page-header-subtitle {
                    font-size: 14px !important;
                    text-align: center;
                  }
                  .market-select-container {
                                  width: 100%;
                                  display: flex;
                                  justify-content: center;
                                  margin-top: 10px;
                                }
                                .market-select {
                                  width: 100% !important;
                                  text-align: center;
                                }
                }
              `}
            </style>
      <div style={ghostBgStyle}>
        <div className="page-header-container" style={{ display: 'flex', flexDirection: 'row', justifyContent: 'space-between', alignItems: 'flex-end', flexWrap: 'wrap' }}>
                    <div>
                      <PageHeader
                        title={
                          <Typography.Title heading={3} className="page-header-title">
                            PolyEnergy
                          </Typography.Title>
                        }
                        subTitle={
                          <Typography.Title type="secondary" heading={4} className="page-header-subtitle">
                            Virtual Energy Trading
                          </Typography.Title>
                        }
                      />
                    </div>
                    <div className="market-select-container">
                      <Select
                        className="market-select"
                        value={selectedMarket}
                        onChange={setSelectedMarket}
                        style={{ width: 200 }}
                        options={['ISONE', 'MISO', 'NYISO'].map(market => ({ label: market, value: market }))}
                      />
                    </div>
                  </div>
                  <Menu mode="horizontal" selectedKeys={[location.pathname.split('/')[1] || 'market-data']}>
                    <Menu.Item key="market-data">
                      <Link to="/market-data">Market Data</Link>
                    </Menu.Item>
                    <Menu.Item key="submit-bid">
                      <Link to="/submit-bid">Submit Bid</Link>
                    </Menu.Item>
                    <Menu.Item key="bids">
                      <Link to="/bids">My Bids</Link>
                    </Menu.Item>
                  </Menu>
      </div>
      <div style={{ backgroundColor: 'var(--color-fill-2)', minHeight: '80vh', display: 'flex', flexDirection: 'column' }}>
      <Routes>
        <Route path="/" element={<Navigate to="/market-data" replace />} />
        <Route path="/market-data" element={<MarketDataPage />} />
        <Route path="/submit-bid" element={<SubmitBidPage />} />
        <Route path="/bids" element={<BidsPage />} />
      </Routes>
      </div>
      <footer style={{ flexShrink: 0, marginTop: 20, textAlign: 'center', fontSize: 14, color: 'var(--color-text-3)', paddingBottom: 20 }}>
                © {new Date().getFullYear()} PolyEnergy. All rights reserved.
              </footer>
    </div>
    </MarketContext.Provider>
  );
}

export default App;