Migrate console off jupiter.nearle.app to the Doormile Express API

Retires REACT_APP_URL/URL2/URL3 in favor of REACT_APP_DOORMILE_URL across
every page (orders, deliveries, riders, tenants, pricing, profile, reports,
dispatch). Fixes several field-mapping and envelope-check bugs found along
the way, most notably that /admin/milers/:id routes (block, assign-vehicle,
edit, notify) key off milerprofileid, not userid, and that a miler's real
fields are phone/availabilitystatus/displayname, not contactno/status/
firstname+lastname (confirmed against a live read-only session).

Also fixes several silent-failure bugs uncovered during that audit: order
creation and order cancellation showed a success toast but gave no feedback
at all on failure (createorder1.js had a dead notifyadmin() call that left
the loading spinner stuck forever on every failed submit), and Tenants.js's
pricing/profile updates never surfaced a failed response to the operator.

The AI dispatch optimiser (routes.workolik.com/routemate.workolik.com) and
its jupiter.nearle.app delivery-commit call remain untouched by design —
separate solver service with no equivalent in the new API.
This commit is contained in:
2026-08-06 19:26:23 +05:30
parent 0a36212ac8
commit 59f31c8adf
39 changed files with 7006 additions and 9170 deletions

View File

@@ -24,7 +24,14 @@ import {
UserOutlined,
ProfileOutlined,
TeamOutlined,
MoneyCollectOutlined
MoneyCollectOutlined,
ContactsOutlined,
ShopOutlined,
CarryOutOutlined,
IdcardOutlined,
TruckOutlined,
WarningOutlined,
RadarChartOutlined
} from '@ant-design/icons';
// icons
@@ -50,7 +57,14 @@ const icons = {
UserOutlined,
ProfileOutlined,
TeamOutlined,
MoneyCollectOutlined
MoneyCollectOutlined,
ContactsOutlined,
ShopOutlined,
CarryOutOutlined,
IdcardOutlined,
TruckOutlined,
WarningOutlined,
RadarChartOutlined
};
// ==============================|| MENU ITEMS - SUPPORT ||============================== //
@@ -103,6 +117,63 @@ const nearle = {
url: '/doormile/pricing',
icon: icons.MoneyCollectOutlined
},
{
id: 'customers',
title: <FormattedMessage id="customers" />,
type: 'item',
url: '/doormile/customers',
icon: icons.ContactsOutlined
},
{
id: 'fleetops',
title: <FormattedMessage id="fleetops" />,
type: 'collapse',
icon: icons.TruckOutlined,
children: [
{
id: 'hubs',
title: <FormattedMessage id="hubs" />,
type: 'item',
url: '/doormile/hubs',
icon: icons.ShopOutlined
},
{
id: 'vehicles',
title: <FormattedMessage id="vehicles" />,
type: 'item',
url: '/doormile/vehicles',
icon: icons.CarOutlined
},
{
id: 'tripsheets',
title: <FormattedMessage id="tripsheets" />,
type: 'item',
url: '/doormile/tripsheets',
icon: icons.CarryOutOutlined
},
{
id: 'exceptions',
title: <FormattedMessage id="exceptions" />,
type: 'item',
url: '/doormile/exceptions',
icon: icons.WarningOutlined
},
{
id: 'competitiveintel',
title: <FormattedMessage id="competitiveintel" />,
type: 'item',
url: '/doormile/competitive-intel',
icon: icons.RadarChartOutlined
},
{
id: 'appusers',
title: <FormattedMessage id="appusers" />,
type: 'item',
url: '/doormile/app-users',
icon: icons.IdcardOutlined
}
]
},
{
id: 'reports',
title: <FormattedMessage id="reports" />,