feat: add customer cart with expiry, shipping addresses with USPS validation, and multi-item PayPal checkout
SonarQube Analysis / sonarqube (pull_request) Failing after 59s
Tests / backend-unit (pull_request) Successful in 34s
Tests / backend-integration (pull_request) Failing after 1m33s
Tests / frontend-e2e (pull_request) Failing after 1m5s

This commit is contained in:
2026-08-14 14:02:25 -05:00
parent 433d7e1db5
commit 9ab689e624
18 changed files with 1242 additions and 189 deletions
+38
View File
@@ -0,0 +1,38 @@
import { useEffect, useState } from 'react';
import { Form, InputNumber, Button, Typography, message, Card } from 'antd';
import { fetchAdminSettings, updateAdminSettings } from './adminSettingsApi';
const { Title, Text } = Typography;
export default function Settings() {
const [form] = Form.useForm();
const [loading, setLoading] = useState(true);
useEffect(() => {
fetchAdminSettings().then(s => {
form.setFieldsValue({ cartExpiryHours: s.cartExpiryHours });
setLoading(false);
});
}, [form]);
async function handleSave() {
const values = await form.validateFields();
await updateAdminSettings(values);
message.success('Settings saved');
}
return (
<Card style={{ maxWidth: 480 }}>
<Title level={4}>Cart Settings</Title>
<Text type="secondary">
How long an item stays reserved in a customer's cart before it's automatically released back to available inventory.
</Text>
<Form form={form} layout="vertical" style={{ marginTop: 16 }} disabled={loading}>
<Form.Item name="cartExpiryHours" label="Cart expiry (hours)" rules={[{ required: true }]}>
<InputNumber min={0.5} step={0.5} style={{ width: '100%' }} />
</Form.Item>
<Button type="primary" onClick={handleSave} loading={loading}>Save</Button>
</Form>
</Card>
);
}