TorbatYar/frontend/modules/delivery/constants/portals.ts
Mortezakoohjani 7978970783 feat(delivery): add Torbat Driver frontend module with real API wiring.
Ship the delivery platform UI under modules/delivery with thin app routes, BFF proxy, CRUD for phase 10.0-10.1 APIs, and capability-gated future screens.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 12:02:01 +03:30

239 lines
7.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import type { LucideIcon } from "lucide-react";
import {
LayoutDashboard,
Truck,
Users,
Map,
Package,
Building2,
Settings,
Shield,
Activity,
BarChart3,
Bell,
Wallet,
Route,
Radio,
Zap,
ClipboardList,
Car,
Clock,
AlertTriangle,
Headphones,
Key,
Plug,
Store,
Brain,
Cog,
} from "lucide-react";
export type DeliveryPortalId = "operations" | "admin";
export type PortalNavItem = {
href: string;
label: string;
feature?: string | null;
};
export type PortalNavGroup = {
id: string;
label: string;
icon: LucideIcon;
href?: string;
feature?: string | null;
items?: PortalNavItem[];
};
export const DELIVERY_PORTAL = {
id: "operations" as const,
label: "تربت درایور",
description: "پلتفرم لجستیک، پیک و ناوگان سازمانی",
basePath: "/delivery",
icon: Truck,
};
export const OPERATIONS_NAV: PortalNavGroup[] = [
{
id: "dashboards",
label: "داشبوردها",
icon: LayoutDashboard,
items: [
{ href: "/delivery", label: "داشبورد اجرایی" },
{ href: "/delivery/dispatcher", label: "دیسپچر", feature: "dispatch_engine" },
{ href: "/delivery/operations", label: "عملیات زنده", feature: "tracking" },
{ href: "/delivery/fleet-dashboard", label: "ناوگان", feature: "fleet" },
],
},
{
id: "drivers",
label: "رانندگان",
icon: Users,
feature: "drivers",
items: [
{ href: "/delivery/drivers", label: "فهرست رانندگان", feature: "drivers" },
{ href: "/delivery/drivers/availability", label: "دسترسی", feature: "fleet" },
{ href: "/delivery/drivers/performance", label: "عملکرد", feature: "tracking" },
],
},
{
id: "orders",
label: "سفارش‌ها",
icon: Package,
feature: "dispatch_engine",
items: [
{ href: "/delivery/orders", label: "سفارش‌ها", feature: "dispatch_engine" },
{ href: "/delivery/dispatch/queue", label: "صف دیسپچ", feature: "dispatch_engine" },
{ href: "/delivery/dispatch/assignment", label: "مرکز تخصیص", feature: "dispatch_engine" },
{ href: "/delivery/pickups", label: "جمع‌آوری", feature: "dispatch_engine" },
{ href: "/delivery/deliveries", label: "تحویل‌ها", feature: "dispatch_engine" },
{ href: "/delivery/returns", label: "مرجوعی", feature: "dispatch_engine" },
{ href: "/delivery/failed", label: "تحویل ناموفق", feature: "dispatch_engine" },
],
},
{
id: "tracking",
label: "رهگیری",
icon: Radio,
feature: "tracking",
items: [
{ href: "/delivery/tracking/live", label: "رهگیری زنده", feature: "tracking" },
{ href: "/delivery/tracking/customer", label: "رهگیری مشتری", feature: "tracking" },
],
},
{
id: "maps",
label: "نقشه",
icon: Map,
feature: "routing_engine",
items: [
{ href: "/delivery/maps/view", label: "نمای نقشه", feature: "routing_engine" },
{ href: "/delivery/maps/routes/planner", label: "برنامه‌ریزی مسیر", feature: "routing_engine" },
{ href: "/delivery/maps/routes/optimization", label: "بهینه‌سازی", feature: "routing_engine" },
{ href: "/delivery/maps/geofence", label: "ژئوفنس", feature: "routing_engine" },
{ href: "/delivery/maps/zones", label: "مناطق تحویل", feature: "routing_engine" },
],
},
{
id: "fleet",
label: "ناوگان",
icon: Car,
feature: "fleet",
items: [
{ href: "/delivery/vehicles", label: "خودروها", feature: "fleet" },
{ href: "/delivery/vehicle-types", label: "انواع خودرو", feature: "fleet" },
{ href: "/delivery/fleet/maintenance", label: "نگهداری", feature: "fleet" },
{ href: "/delivery/schedules", label: "برنامه‌ها", feature: "fleet" },
{ href: "/delivery/shifts", label: "شیفت‌ها", feature: "fleet" },
{ href: "/delivery/tasks", label: "وظایف", feature: "dispatch_engine" },
],
},
{
id: "foundation",
label: "زیرساخت",
icon: Building2,
items: [
{ href: "/delivery/organizations", label: "سازمان‌ها" },
{ href: "/delivery/branches", label: "شعب / هاب‌ها" },
{ href: "/delivery/configurations", label: "پیکربندی" },
],
},
{
id: "finance",
label: "مالی",
icon: Wallet,
feature: "settlement",
items: [
{ href: "/delivery/cod", label: "COD", feature: "settlement" },
{ href: "/delivery/settlements", label: "تسویه", feature: "settlement" },
{ href: "/delivery/payments", label: "پرداخت‌ها", feature: "settlement" },
{ href: "/delivery/wallet", label: "کیف پول راننده", feature: "settlement" },
{ href: "/delivery/commissions", label: "کمیسیون", feature: "settlement" },
],
},
{
id: "integrations",
label: "یکپارچه‌سازی",
icon: Plug,
items: [
{ href: "/delivery/integrations/providers", label: "ارائه‌دهندگان خارجی" },
{ href: "/delivery/integrations/routing", label: "موتور مسیریابی" },
{ href: "/delivery/vendor-portal", label: "پورتال فروشنده", feature: "dispatch_engine" },
],
},
{
id: "insights",
label: "گزارش و تحلیل",
icon: BarChart3,
feature: "tracking",
items: [
{ href: "/delivery/reports", label: "گزارش‌ها", feature: "tracking" },
{ href: "/delivery/analytics", label: "آنالیتیکس", feature: "tracking" },
{ href: "/delivery/analytics/heatmaps", label: "نقشه حرارتی", feature: "tracking" },
{ href: "/delivery/analytics/kpis", label: "KPIها", feature: "tracking" },
],
},
{
id: "support",
label: "پشتیبانی",
icon: Headphones,
feature: "dispatch_engine",
items: [
{ href: "/delivery/notifications", label: "اعلان‌ها", feature: "dispatch_engine" },
{ href: "/delivery/incidents", label: "حوادث", feature: "dispatch_engine" },
{ href: "/delivery/support", label: "تیکت‌ها", feature: "dispatch_engine" },
],
},
{
id: "ai",
label: "هوش مصنوعی",
icon: Brain,
feature: "ai",
items: [
{ href: "/delivery/ai/recommendations", label: "پیشنهادات", feature: "ai" },
{ href: "/delivery/automation", label: "اتوماسیون", feature: "ai" },
],
},
{
id: "admin",
label: "مدیریت",
icon: Settings,
items: [
{ href: "/delivery/settings", label: "تنظیمات" },
{ href: "/delivery/permissions", label: "مجوزها" },
{ href: "/delivery/roles", label: "نقش‌ها" },
{ href: "/delivery/audit", label: "ممیزی" },
{ href: "/delivery/api-keys", label: "کلید API" },
{ href: "/delivery/health", label: "سلامت سرویس" },
{ href: "/delivery/capabilities", label: "قابلیت‌ها" },
],
},
];
export function navForDelivery(): PortalNavGroup[] {
return OPERATIONS_NAV;
}
export function filterNavByCapabilities(
nav: PortalNavGroup[],
features?: Record<string, boolean>
): PortalNavGroup[] {
if (!features) return nav;
const isEnabled = (feature?: string | null) => {
if (!feature) return true;
return features[feature] === true;
};
return nav
.map((group) => {
if (group.feature && !isEnabled(group.feature)) return null;
if (group.items) {
const items = group.items.filter((i) => isEnabled(i.feature));
if (items.length === 0 && !group.href) return null;
return { ...group, items };
}
return group;
})
.filter(Boolean) as PortalNavGroup[];
}