first commit

This commit is contained in:
2026-06-05 17:28:05 +05:30
commit a162fa89e5
62 changed files with 8729 additions and 0 deletions

View File

@@ -0,0 +1,142 @@
import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import {
Grid, Card, CardContent, Stack, Button, TextField, MenuItem, Typography, Divider,
Autocomplete, FormControlLabel, Checkbox, Box
} from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import dayjs from 'dayjs';
import AddIcon from '@mui/icons-material/Add';
import PageHeader from '@/components/PageHeader';
import { locations, tenantsList, tenants } from '@/data/mock';
const TIME_SLOTS = ['09:00 - 11:00', '11:00 - 13:00', '13:00 - 15:00', '15:00 - 17:00', '17:00 - 19:00'];
const SectionTitle = ({ children }) => (
<>
<Typography variant="h5" sx={{ fontWeight: 600 }}>{children}</Typography>
<Divider sx={{ mt: 1, mb: 2.5 }} />
</>
);
function AddressFields({ saveForLater, onSaveForLater }) {
return (
<Grid container spacing={2.5}>
<Grid item xs={12} md={6}>
<TextField fullWidth label="Contact Name" placeholder="Enter contact name" />
</Grid>
<Grid item xs={12} md={6}>
<TextField fullWidth label="Contact Number" placeholder="+91 ..." />
</Grid>
<Grid item xs={12}>
<TextField fullWidth label="Address" placeholder="Enter full address" multiline minRows={2} />
</Grid>
<Grid item xs={12} md={6}>
<TextField fullWidth label="Door No / Street" placeholder="e.g. 24, 1st Cross" />
</Grid>
<Grid item xs={12} md={6}>
<TextField select fullWidth label="Location" defaultValue="">
{locations.map((l) => <MenuItem key={l} value={l}>{l}</MenuItem>)}
</TextField>
</Grid>
<Grid item xs={12} md={6}>
<TextField fullWidth label="Postcode" placeholder="e.g. 560102" />
</Grid>
<Grid item xs={12} md={6}>
<TextField fullWidth label="Landmark" placeholder="Nearby landmark" />
</Grid>
<Grid item xs={12}>
<FormControlLabel
control={<Checkbox checked={saveForLater} onChange={(e) => onSaveForLater(e.target.checked)} />}
label="Save for later"
/>
</Grid>
</Grid>
);
}
export default function CreateOrder() {
const navigate = useNavigate();
const [deliveryDate, setDeliveryDate] = useState(dayjs());
const [slot, setSlot] = useState('');
const [savePickup, setSavePickup] = useState(false);
const [saveDrop, setSaveDrop] = useState(false);
return (
<>
<PageHeader
title="Create Order"
breadcrumbs={[{ label: 'Orders', to: '/orders' }, { label: 'Create Order' }]}
/>
<Card>
<CardContent sx={{ p: { xs: 2, md: 3 } }}>
{/* Top row */}
<Grid container spacing={2.5} sx={{ mb: 1 }}>
<Grid item xs={12} md={4}>
<Autocomplete
options={locations}
renderInput={(params) => <TextField {...params} label="Location" placeholder="Select location" />}
/>
</Grid>
<Grid item xs={12} md={4}>
<Autocomplete
options={tenantsList}
renderInput={(params) => <TextField {...params} label="Client" placeholder="Select client" />}
/>
</Grid>
<Grid item xs={12} md={4}>
<Autocomplete
options={tenants.map((t) => `${t.name}${t.address}`)}
renderInput={(params) => <TextField {...params} label="Business Location" placeholder="Select business location" />}
/>
</Grid>
</Grid>
<Box sx={{ mt: 3 }}>
<SectionTitle>Pickup Details</SectionTitle>
<AddressFields saveForLater={savePickup} onSaveForLater={setSavePickup} />
</Box>
<Box sx={{ mt: 3 }}>
<SectionTitle>Drop Details</SectionTitle>
<AddressFields saveForLater={saveDrop} onSaveForLater={setSaveDrop} />
</Box>
<Box sx={{ mt: 3 }}>
<SectionTitle>Schedule</SectionTitle>
<Grid container spacing={2.5}>
<Grid item xs={12} md={6}>
<DatePicker
label="Delivery Date"
value={deliveryDate}
onChange={setDeliveryDate}
slotProps={{ textField: { fullWidth: true } }}
/>
</Grid>
<Grid item xs={12} md={6}>
<TextField select fullWidth label="Pickup Time Slot" value={slot} onChange={(e) => setSlot(e.target.value)}>
{TIME_SLOTS.map((s) => <MenuItem key={s} value={s}>{s}</MenuItem>)}
</TextField>
</Grid>
<Grid item xs={12}>
<TextField fullWidth label="Notes" placeholder="Special instructions for this order" multiline minRows={3} />
</Grid>
</Grid>
</Box>
<Divider sx={{ mt: 3 }} />
<Stack direction="row" spacing={1.5} justifyContent="flex-end" sx={{ mt: 2.5 }}>
<Button variant="outlined" onClick={() => navigate('/orders')}>
Cancel
</Button>
<Button variant="contained" startIcon={<AddIcon />} onClick={() => navigate('/orders')}>
Create Order
</Button>
</Stack>
</CardContent>
</Card>
</>
);
}