From 6262f0789afee916340a4699ae8f2b6a2e93e4ac Mon Sep 17 00:00:00 2001 From: Navan Chauhan Date: Sun, 27 Apr 2025 20:13:16 -0600 Subject: create submit bid page --- client/src/SubmitBidPage.jsx | 146 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 client/src/SubmitBidPage.jsx (limited to 'client/src') diff --git a/client/src/SubmitBidPage.jsx b/client/src/SubmitBidPage.jsx new file mode 100644 index 0000000..65a9eb8 --- /dev/null +++ b/client/src/SubmitBidPage.jsx @@ -0,0 +1,146 @@ +import React, { useState, useEffect } from 'react'; +import { Form, InputNumber, DatePicker, Button, Message, Typography, Card } from '@arco-design/web-react'; +import '@arco-design/web-react/dist/css/arco.css'; +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc'; +import timezone from 'dayjs/plugin/timezone'; +import API_BASE_URL from './config'; + +dayjs.extend(utc); +dayjs.extend(timezone); + +function SubmitBidPage() { + const [form] = Form.useForm(); + const [loading, setLoading] = useState(false); + const [localNow, setLocalNow] = useState(''); + const [newEnglandNow, setNewEnglandNow] = useState(''); + + useEffect(() => { + const updateTime = () => { + const now = dayjs(); + const localFormatted = now.format('dddd, MMMM D, h:mm A'); + + const newEngland = now.tz('America/New_York'); + const newEnglandFormatted = newEngland.format('dddd, MMMM D, h:mm A'); + + setLocalNow(localFormatted); + setNewEnglandNow(newEnglandFormatted); + }; + + updateTime(); + const interval = setInterval(updateTime, 1000); // update every second + + return () => clearInterval(interval); + }, []); + + const handleSubmit = async (values) => { + setLoading(true); + try { + const picked = dayjs(values.timestamp); + const adjusted = picked.minute(0).second(0).millisecond(0); + + const payload = { + timestamp: adjusted.tz('America/New_York').format(), + quantity: values.quantity, + price: values.price, + user_id: 1 // Hardcoded user id for now + }; + + const res = await fetch(`${API_BASE_URL}/bids/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(payload) + }); + + if (!res.ok) { + const error = await res.json(); + throw new Error(error.detail || 'Failed to submit bid'); + } + + Message.success('Bid submitted successfully!'); + form.resetFields(); + } catch (err) { + console.error(err); + Message.error(err.message || 'Submission failed'); + } finally { + setLoading(false); + } + }; + + return ( +
+ Submit New Bid + + {/* 🕰️ Show Current Time Info */} + + Current Local Time: {localNow} + + + Current New England Time: {newEnglandNow} + + +
+ + Array.from({ length: 60 }, (_, i) => i !== 0), + step: { minute: 60 } + }} + style={{ width: '100%' }} + format="YYYY-MM-DD HH:00" + placeholder="Select date and hour" + timezone='America/New_York' + disabledMinutes={() => Array.from({ length: 60 }, (_, i) => i !== 0)} + /> + + + 0' } + ]} + > + + + + = 0' } + ]} + > + + + + + + +
+
+
+ ); +} + +export default SubmitBidPage; -- cgit v1.2.3