From 5244aff586df93de2b9973de9c9046e4ad6163bd Mon Sep 17 00:00:00 2001 From: Navan Chauhan Date: Sun, 27 Apr 2025 21:30:56 -0600 Subject: improve styling --- client/src/BidsPage.jsx | 99 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 80 insertions(+), 19 deletions(-) (limited to 'client/src/BidsPage.jsx') diff --git a/client/src/BidsPage.jsx b/client/src/BidsPage.jsx index 3a40f41..fad3989 100644 --- a/client/src/BidsPage.jsx +++ b/client/src/BidsPage.jsx @@ -1,49 +1,70 @@ import React, { useEffect, useState } from 'react'; -import { Table, Typography, Spin, Message, Card } from '@arco-design/web-react'; +import { Table, Typography, Spin, Message, Card, Empty, Badge } from '@arco-design/web-react'; +import { IconArrowRise, IconArrowFall } from '@arco-design/web-react/icon'; import '@arco-design/web-react/dist/css/arco.css'; import API_BASE_URL from './config'; -const columns = [ +const columns = (bids) => [ { title: 'Timestamp', dataIndex: 'timestamp', + sorter: (a, b) => new Date(a.timestamp) - new Date(b.timestamp), render: (val) => new Date(val).toLocaleString(), }, { title: 'Quantity (MW)', dataIndex: 'quantity', + sorter: (a, b) => a.quantity - b.quantity, render: (val) => val.toFixed(2), }, { title: 'Price ($/MWh)', dataIndex: 'price', + sorter: (a, b) => a.price - b.price, render: (val) => `$${val.toFixed(2)}`, }, { title: 'Status', dataIndex: 'status', - render: (val) => { - let color = 'gray'; - if (val === 'Success') color = 'green'; - else if (val === 'Fail') color = 'red'; - else if (val === 'Submitted') color = 'blue'; - return {val}; - } + sorter: (a, b) => a.status.localeCompare(b.status), + filters: [ + { text: 'Submitted', value: 'Submitted' }, + { text: 'Success', value: 'Success' }, + { text: 'Fail', value: 'Fail' }, + ], + onFilter: (value, record) => record.status === value, + render: (val) => ( + + ), }, { title: 'PnL', dataIndex: 'pnl', + sorter: (a, b) => (a.pnl || 0) - (b.pnl || 0), render: (val) => { if (val === null) return 'N/A'; - const color = val >= 0 ? 'green' : 'red'; - return {val.toFixed(2)}; - } + const isProfit = val >= 0; + const color = isProfit ? 'green' : 'red'; + return ( + + {isProfit ? : } + {val.toFixed(2)} + + ); + }, }, { title: 'Market', dataIndex: 'market', + sorter: (a, b) => a.market.localeCompare(b.market), + filters: [ + { text: 'ISONE', value: 'ISONE' }, + { text: 'NYISO', value: 'NYISO' }, + { text: 'MISO', value: 'MISO' }, + ], + onFilter: (value, record) => record.market === value, render: (val) => val, - } + }, ]; function BidsPage() { @@ -65,24 +86,64 @@ function BidsPage() { }, []); return ( -
- Your Submitted Bids - +
+ + Your Submitted Bids + + + {loading ? ( - +
+ +
+ ) : bids.length === 0 ? ( +
+ +
) : ( 'table-row-hover'} /> )} + + ); } -- cgit v1.2.3