feat: Add RouteOptimization page to App.tsx router
Browse files
ops/AIsupplychain/aisupply/src/App.tsx
CHANGED
|
@@ -21,6 +21,7 @@ import { AllocateRoutes } from "./pages/AllocateRoutes";
|
|
| 21 |
import { FairDispatch } from "./pages/FairDispatch";
|
| 22 |
import { ApiKeys } from "./pages/ApiKeys";
|
| 23 |
import { LoadConsolidation } from "./pages/LoadConsolidation";
|
|
|
|
| 24 |
import { useLocation } from "react-router-dom";
|
| 25 |
|
| 26 |
// Protected Route Component
|
|
@@ -51,7 +52,6 @@ function DashboardLayout() {
|
|
| 51 |
|
| 52 |
useEffect(() => {
|
| 53 |
const handleKeyDown = (e: KeyboardEvent) => {
|
| 54 |
-
// Ignore if user is typing in an input or textarea
|
| 55 |
if (
|
| 56 |
(e.target as HTMLElement).tagName === "INPUT" ||
|
| 57 |
(e.target as HTMLElement).tagName === "TEXTAREA"
|
|
@@ -59,52 +59,22 @@ function DashboardLayout() {
|
|
| 59 |
return;
|
| 60 |
}
|
| 61 |
|
| 62 |
-
// Help Shortcut (?)
|
| 63 |
if (e.key === "?" && e.shiftKey) {
|
| 64 |
e.preventDefault();
|
| 65 |
setIsShortcutsOpen(true);
|
| 66 |
return;
|
| 67 |
}
|
| 68 |
|
| 69 |
-
// Check for Ctrl/Cmd key modifications
|
| 70 |
if (e.ctrlKey || e.metaKey) {
|
| 71 |
switch (e.key) {
|
| 72 |
-
case "1":
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
case "
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
case "3":
|
| 81 |
-
e.preventDefault();
|
| 82 |
-
navigate("/packages");
|
| 83 |
-
break;
|
| 84 |
-
case "4":
|
| 85 |
-
e.preventDefault();
|
| 86 |
-
navigate("/analytics");
|
| 87 |
-
break;
|
| 88 |
-
case "5":
|
| 89 |
-
e.preventDefault();
|
| 90 |
-
navigate("/eway-bill");
|
| 91 |
-
break;
|
| 92 |
-
case "6":
|
| 93 |
-
e.preventDefault();
|
| 94 |
-
navigate("/drivers");
|
| 95 |
-
break;
|
| 96 |
-
case "k":
|
| 97 |
-
case "K":
|
| 98 |
-
e.preventDefault();
|
| 99 |
-
document.getElementById("global-search-input")?.focus();
|
| 100 |
-
break;
|
| 101 |
-
case "q":
|
| 102 |
-
case "Q":
|
| 103 |
-
e.preventDefault();
|
| 104 |
-
showToast("Quick Actions", "Opening quick actions menu...", "info");
|
| 105 |
-
break;
|
| 106 |
-
default:
|
| 107 |
-
break;
|
| 108 |
}
|
| 109 |
}
|
| 110 |
};
|
|
@@ -126,10 +96,8 @@ function DashboardLayout() {
|
|
| 126 |
<Route path="/" element={<Dashboard />} />
|
| 127 |
<Route path="/dashboard" element={<Dashboard />} />
|
| 128 |
<Route path="/fair-dispatch" element={<FairDispatch />} />
|
| 129 |
-
<Route
|
| 130 |
-
|
| 131 |
-
element={<AbsorptionRequests />}
|
| 132 |
-
/>
|
| 133 |
<Route path="/analytics" element={<Analytics />} />
|
| 134 |
<Route path="/eway-bill" element={<EWayBill />} />
|
| 135 |
<Route path="/drivers" element={<Drivers />} />
|
|
@@ -156,7 +124,6 @@ function DashboardLayout() {
|
|
| 156 |
function AppContent() {
|
| 157 |
const { loading } = useAuth();
|
| 158 |
|
| 159 |
-
// Initialize dev token if available (dev only)
|
| 160 |
useEffect(() => {
|
| 161 |
if (!import.meta.env.DEV) return;
|
| 162 |
const initializeToken = async () => {
|
|
@@ -167,10 +134,9 @@ function AppContent() {
|
|
| 167 |
localStorage.setItem("authToken", data.token);
|
| 168 |
}
|
| 169 |
} catch {
|
| 170 |
-
// dev_token.json not found — expected
|
| 171 |
}
|
| 172 |
};
|
| 173 |
-
|
| 174 |
initializeToken();
|
| 175 |
}, []);
|
| 176 |
|
|
|
|
| 21 |
import { FairDispatch } from "./pages/FairDispatch";
|
| 22 |
import { ApiKeys } from "./pages/ApiKeys";
|
| 23 |
import { LoadConsolidation } from "./pages/LoadConsolidation";
|
| 24 |
+
import { RouteOptimization } from "./pages/RouteOptimization";
|
| 25 |
import { useLocation } from "react-router-dom";
|
| 26 |
|
| 27 |
// Protected Route Component
|
|
|
|
| 52 |
|
| 53 |
useEffect(() => {
|
| 54 |
const handleKeyDown = (e: KeyboardEvent) => {
|
|
|
|
| 55 |
if (
|
| 56 |
(e.target as HTMLElement).tagName === "INPUT" ||
|
| 57 |
(e.target as HTMLElement).tagName === "TEXTAREA"
|
|
|
|
| 59 |
return;
|
| 60 |
}
|
| 61 |
|
|
|
|
| 62 |
if (e.key === "?" && e.shiftKey) {
|
| 63 |
e.preventDefault();
|
| 64 |
setIsShortcutsOpen(true);
|
| 65 |
return;
|
| 66 |
}
|
| 67 |
|
|
|
|
| 68 |
if (e.ctrlKey || e.metaKey) {
|
| 69 |
switch (e.key) {
|
| 70 |
+
case "1": e.preventDefault(); navigate("/"); break;
|
| 71 |
+
case "2": e.preventDefault(); navigate("/fair-dispatch"); break;
|
| 72 |
+
case "3": e.preventDefault(); navigate("/route-optimization"); break;
|
| 73 |
+
case "4": e.preventDefault(); navigate("/load-consolidation"); break;
|
| 74 |
+
case "5": e.preventDefault(); navigate("/analytics"); break;
|
| 75 |
+
case "6": e.preventDefault(); navigate("/drivers"); break;
|
| 76 |
+
case "k": case "K": e.preventDefault(); document.getElementById("global-search-input")?.focus(); break;
|
| 77 |
+
default: break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
}
|
| 79 |
}
|
| 80 |
};
|
|
|
|
| 96 |
<Route path="/" element={<Dashboard />} />
|
| 97 |
<Route path="/dashboard" element={<Dashboard />} />
|
| 98 |
<Route path="/fair-dispatch" element={<FairDispatch />} />
|
| 99 |
+
<Route path="/route-optimization" element={<RouteOptimization />} />
|
| 100 |
+
<Route path="/absorption-requests" element={<AbsorptionRequests />} />
|
|
|
|
|
|
|
| 101 |
<Route path="/analytics" element={<Analytics />} />
|
| 102 |
<Route path="/eway-bill" element={<EWayBill />} />
|
| 103 |
<Route path="/drivers" element={<Drivers />} />
|
|
|
|
| 124 |
function AppContent() {
|
| 125 |
const { loading } = useAuth();
|
| 126 |
|
|
|
|
| 127 |
useEffect(() => {
|
| 128 |
if (!import.meta.env.DEV) return;
|
| 129 |
const initializeToken = async () => {
|
|
|
|
| 134 |
localStorage.setItem("authToken", data.token);
|
| 135 |
}
|
| 136 |
} catch {
|
| 137 |
+
// dev_token.json not found — expected
|
| 138 |
}
|
| 139 |
};
|
|
|
|
| 140 |
initializeToken();
|
| 141 |
}, []);
|
| 142 |
|