updates on the milers page and name change

This commit is contained in:
2026-08-28 13:00:05 +05:30
parent fbf1b31cf7
commit a4cc06d516
6 changed files with 44 additions and 31 deletions

View File

@@ -101,9 +101,14 @@ const AuthenticatedApp = () => {
<Route path="pricing" element={<Pricing />} /> <Route path="pricing" element={<Pricing />} />
<Route path="riders" element={<Riders />} /> <Route path="milers" element={<Riders />} />
<Route path="riders/create" element={<CreateRider />} /> <Route path="milers/create" element={<CreateRider />} />
<Route path="riders/edit" element={<EditRider />} /> <Route path="milers/edit" element={<EditRider />} />
{/* Backwards-compatible aliases */}
<Route path="riders" element={<Navigate to="/doormile/milers" replace />} />
<Route path="riders/create" element={<Navigate to="/doormile/milers/create" replace />} />
<Route path="riders/edit" element={<Navigate to="/doormile/milers/edit" replace />} />
<Route path="customers" element={<Customers />} /> <Route path="customers" element={<Customers />} />
<Route path="hubs" element={<Hubs />} /> <Route path="hubs" element={<Hubs />} />

View File

@@ -284,6 +284,7 @@ const ROUTES = [
['/doormile/dispatch', DISPATCH], ['/doormile/dispatch', DISPATCH],
['/doormile/deliveries', { ...ORDERS, label: 'Deliveries' }], ['/doormile/deliveries', { ...ORDERS, label: 'Deliveries' }],
['/doormile/orders', ORDERS], ['/doormile/orders', ORDERS],
['/doormile/milers', RIDERS],
['/doormile/riders', RIDERS], ['/doormile/riders', RIDERS],
['/doormile/vehicles', VEHICLES], ['/doormile/vehicles', VEHICLES],
['/doormile/hubs', HUBS], ['/doormile/hubs', HUBS],

View File

@@ -49,7 +49,7 @@ const NAV = [
{ label: 'Dispatch', path: '/doormile/dispatch' }, { label: 'Dispatch', path: '/doormile/dispatch' },
{ label: 'Orders', path: '/doormile/orders' }, { label: 'Orders', path: '/doormile/orders' },
{ label: 'Deliveries', path: '/doormile/deliveries' }, { label: 'Deliveries', path: '/doormile/deliveries' },
{ label: 'Riders', path: '/doormile/riders' }, { label: 'Milers', path: '/doormile/milers' },
{ label: 'Clients', path: '/doormile/tenants' }, { label: 'Clients', path: '/doormile/tenants' },
{ label: 'Pricing', path: '/doormile/pricing' }, { label: 'Pricing', path: '/doormile/pricing' },
{ label: 'Customers', path: '/doormile/customers' }, { label: 'Customers', path: '/doormile/customers' },

View File

@@ -77,7 +77,7 @@ export default function CreateRider() {
applocationid: Number(form.applocationid), applocationid: Number(form.applocationid),
hubid: form.hubid ? Number(form.hubid) : undefined, hubid: form.hubid ? Number(form.hubid) : undefined,
}, },
{ onSuccess: (res) => res?.success !== false && navigate('/doormile/riders') } { onSuccess: (res) => res?.success !== false && navigate('/doormile/milers') }
); );
}; };
@@ -85,23 +85,23 @@ export default function CreateRider() {
<Stack space="lg"> <Stack space="lg">
<PageHeader <PageHeader
icon={Bike} icon={Bike}
title="New rider" title="New miler"
subtitle="Creates a miler-app login and puts them on a zone" subtitle="Creates a miler-app login and puts them on a zone"
breadcrumb={ breadcrumb={
<Breadcrumb> <Breadcrumb>
<BreadcrumbList> <BreadcrumbList>
<BreadcrumbItem> <BreadcrumbItem>
<BreadcrumbLink href="/doormile/riders">Riders</BreadcrumbLink> <BreadcrumbLink href="/doormile/milers">Milers</BreadcrumbLink>
</BreadcrumbItem> </BreadcrumbItem>
<BreadcrumbSeparator /> <BreadcrumbSeparator />
<BreadcrumbItem> <BreadcrumbItem>
<BreadcrumbPage>New rider</BreadcrumbPage> <BreadcrumbPage>New miler</BreadcrumbPage>
</BreadcrumbItem> </BreadcrumbItem>
</BreadcrumbList> </BreadcrumbList>
</Breadcrumb> </Breadcrumb>
} }
actions={ actions={
<Button variant="outline" onClick={() => navigate('/doormile/riders')}> <Button variant="outline" onClick={() => navigate('/doormile/milers')}>
<ArrowLeft className="mr-1.5 h-4 w-4" /> Back <ArrowLeft className="mr-1.5 h-4 w-4" /> Back
</Button> </Button>
} }
@@ -140,7 +140,7 @@ export default function CreateRider() {
/> />
</Field> </Field>
<Field label="Password" required error={errors.password}> <Field label="Initial password" required error={errors.password}>
<Input <Input
type="password" type="password"
autoComplete="new-password" autoComplete="new-password"
@@ -151,7 +151,7 @@ export default function CreateRider() {
</Field> </Field>
<Field label="Default vehicle"> <Field label="Default vehicle">
<Select value={form.defaultvehicletype} onValueChange={set('defaultvehicletype')}> <Select value={form.defaultvehicletype} onValueChange={(value) => set('defaultvehicletype')(value)}>
<SelectTrigger> <SelectTrigger>
<SelectValue /> <SelectValue />
</SelectTrigger> </SelectTrigger>
@@ -166,15 +166,19 @@ export default function CreateRider() {
</Field> </Field>
{isStaff && ( {isStaff && (
<Field label="Client" required error={errors.tenantid}> <Field label="Client" hint="Who this rider delivers for">
<Select value={String(form.tenantid)} onValueChange={set('tenantid')}> <Select
value={form.tenantid === '' ? 'all' : String(form.tenantid)}
onValueChange={(value) => set('tenantid')(value === 'all' ? '' : value)}
>
<SelectTrigger> <SelectTrigger>
<SelectValue placeholder="Choose a client" /> <SelectValue placeholder="All clients (Doormile staff)" />
</SelectTrigger> </SelectTrigger>
<SelectContent> <SelectContent>
<SelectItem value="all">All clients (Doormile staff)</SelectItem>
{(tenants || []).map((tenant) => ( {(tenants || []).map((tenant) => (
<SelectItem key={tenant.tenantid} value={String(tenant.tenantid)}> <SelectItem key={tenant.tenantid} value={String(tenant.tenantid)}>
{tenant.tenantname || `Tenant #${tenant.tenantid}`} {tenant.tenantname || `Client #${tenant.tenantid}`}
</SelectItem> </SelectItem>
))} ))}
</SelectContent> </SelectContent>
@@ -182,10 +186,13 @@ export default function CreateRider() {
</Field> </Field>
)} )}
<Field label="City" required error={errors.applocationid}> <Field label="Zone / City" required error={errors.applocationid}>
<Select value={String(form.applocationid)} onValueChange={set('applocationid')}> <Select
value={form.applocationid === '' ? undefined : String(form.applocationid)}
onValueChange={(value) => set('applocationid')(value)}
>
<SelectTrigger> <SelectTrigger>
<SelectValue placeholder="Choose a city" /> <SelectValue placeholder="Choose a zone" />
</SelectTrigger> </SelectTrigger>
<SelectContent> <SelectContent>
{(locations || []) {(locations || [])
@@ -220,11 +227,11 @@ export default function CreateRider() {
</div> </div>
<div className="mt-6 flex justify-end gap-2 border-t border-border pt-5"> <div className="mt-6 flex justify-end gap-2 border-t border-border pt-5">
<Button type="button" variant="ghost" onClick={() => navigate('/doormile/riders')}> <Button type="button" variant="ghost" onClick={() => navigate('/doormile/milers')}>
Cancel Cancel
</Button> </Button>
<Button type="submit" loading={createMiler.isPending}> <Button type="submit" loading={createMiler.isPending}>
Create rider Create miler
</Button> </Button>
</div> </div>
</Surface> </Surface>

View File

@@ -83,7 +83,7 @@ export default function EditRider() {
applocationid: form.applocationid === '' ? undefined : Number(form.applocationid), applocationid: form.applocationid === '' ? undefined : Number(form.applocationid),
}, },
}, },
{ onSuccess: (res) => res?.success !== false && navigate('/doormile/riders') } { onSuccess: (res) => res?.success !== false && navigate('/doormile/milers') }
); );
}; };
@@ -91,13 +91,13 @@ export default function EditRider() {
<Stack space="lg"> <Stack space="lg">
<PageHeader <PageHeader
icon={Bike} icon={Bike}
title={form?.displayname || 'Edit rider'} title={form?.displayname || 'Edit miler'}
subtitle="Identity, contact, client and zone" subtitle="Identity, contact, client and zone"
breadcrumb={ breadcrumb={
<Breadcrumb> <Breadcrumb>
<BreadcrumbList> <BreadcrumbList>
<BreadcrumbItem> <BreadcrumbItem>
<BreadcrumbLink href="/doormile/riders">Riders</BreadcrumbLink> <BreadcrumbLink href="/doormile/milers">Milers</BreadcrumbLink>
</BreadcrumbItem> </BreadcrumbItem>
<BreadcrumbSeparator /> <BreadcrumbSeparator />
<BreadcrumbItem> <BreadcrumbItem>
@@ -107,7 +107,7 @@ export default function EditRider() {
</Breadcrumb> </Breadcrumb>
} }
actions={ actions={
<Button variant="outline" onClick={() => navigate('/doormile/riders')}> <Button variant="outline" onClick={() => navigate('/doormile/milers')}>
<ArrowLeft className="mr-1.5 h-4 w-4" /> Back <ArrowLeft className="mr-1.5 h-4 w-4" /> Back
</Button> </Button>
} }

View File

@@ -159,11 +159,11 @@ export default function Riders() {
cell: (row) => ( cell: (row) => (
<div className="flex justify-end gap-1"> <div className="flex justify-end gap-1">
<IconButton <IconButton
label="Edit rider" label="Edit miler"
icon={Pencil} icon={Pencil}
variant="ghost" variant="ghost"
size="sm" size="sm"
onClick={() => navigate('/doormile/riders/edit', { state: { rider: row } })} onClick={() => navigate('/doormile/milers/edit', { state: { rider: row } })}
/> />
<IconButton <IconButton
label="Assign vehicle" label="Assign vehicle"
@@ -192,7 +192,7 @@ export default function Riders() {
size="sm" size="sm"
onClick={() => setLogsRow(row)} onClick={() => setLogsRow(row)}
/> />
<IconButton label="Block rider" icon={Ban} variant="ghost" size="sm" onClick={() => setBlockRow(row)} /> <IconButton label="Block miler" icon={Ban} variant="ghost" size="sm" onClick={() => setBlockRow(row)} />
</div> </div>
), ),
}, },
@@ -204,11 +204,11 @@ export default function Riders() {
<Stack space="lg"> <Stack space="lg">
<PageHeader <PageHeader
icon={Bike} icon={Bike}
title="Riders" title="Milers"
subtitle="Who is on the road, what they are on, and where they are" subtitle="Who is on the road, what they are on, and where they are"
actions={ actions={
<Button onClick={() => navigate('/doormile/riders/create')}> <Button onClick={() => navigate('/doormile/milers/create')}>
<Plus className="mr-1.5 h-4 w-4" /> New rider <Plus className="mr-1.5 h-4 w-4" /> New miler
</Button> </Button>
} }
/> />
@@ -217,7 +217,7 @@ export default function Riders() {
<KpiCard <KpiCard
icon={Users} icon={Users}
value={summary?.total ?? counts.all} value={summary?.total ?? counts.all}
label="Total riders" label="Total milers"
tone="brand" tone="brand"
index={0} index={0}
loading={isLoading} loading={isLoading}