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>
This commit is contained in:
parent
203671a7bf
commit
7978970783
@ -95,6 +95,32 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": ["app/delivery/**/*", "modules/delivery/**/*"],
|
||||
"rules": {
|
||||
"no-restricted-imports": [
|
||||
"error",
|
||||
{
|
||||
"patterns": [
|
||||
{
|
||||
"group": [
|
||||
"@/components/accounting/**",
|
||||
"@/components/beauty/**",
|
||||
"@/components/healthcare/**",
|
||||
"@/modules/beauty/**",
|
||||
"@/modules/accounting/**",
|
||||
"@/modules/hospitality/**",
|
||||
"@/modules/crm/**",
|
||||
"@/src/modules/healthcare/**",
|
||||
"@/src/modules/accounting/**"
|
||||
],
|
||||
"message": "Delivery must not import other business modules."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"components/ds/**/*",
|
||||
@ -120,6 +146,7 @@
|
||||
"@/modules/beauty/**",
|
||||
"@/modules/healthcare/**",
|
||||
"@/modules/hospitality/**",
|
||||
"@/modules/delivery/**",
|
||||
"@/src/modules/healthcare/**",
|
||||
"@/src/modules/accounting/**",
|
||||
"@/modules/accounting/**",
|
||||
|
||||
53
frontend/app/api/delivery/[...path]/route.ts
Normal file
53
frontend/app/api/delivery/[...path]/route.ts
Normal file
@ -0,0 +1,53 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
|
||||
const UPSTREAM =
|
||||
process.env.DELIVERY_SERVICE_URL ||
|
||||
process.env.NEXT_PUBLIC_DELIVERY_API_URL ||
|
||||
"http://localhost:8007";
|
||||
|
||||
async function proxy(req: NextRequest, pathSegments: string[]) {
|
||||
const p = pathSegments.join("/");
|
||||
const url = new URL(req.url);
|
||||
const target = `${UPSTREAM.replace(/\/$/, "")}/${p}${url.search}`;
|
||||
const headers = new Headers();
|
||||
for (const h of ["authorization", "content-type", "x-tenant-id", "accept"]) {
|
||||
const v = req.headers.get(h);
|
||||
if (v) headers.set(h, v);
|
||||
}
|
||||
let body: ArrayBuffer | undefined;
|
||||
if (req.method !== "GET" && req.method !== "HEAD") body = await req.arrayBuffer();
|
||||
try {
|
||||
const res = await fetch(target, { method: req.method, headers, body, cache: "no-store" });
|
||||
const out = new Headers();
|
||||
const ct = res.headers.get("content-type");
|
||||
if (ct) out.set("content-type", ct);
|
||||
return new NextResponse(await res.arrayBuffer(), { status: res.status, headers: out });
|
||||
} catch (err) {
|
||||
const detail = err instanceof Error ? err.message : "upstream_unreachable";
|
||||
return NextResponse.json(
|
||||
{ error: { code: "delivery_proxy_error", message: `پروکسی تربت درایور — ${detail}` } },
|
||||
{ status: 502 }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export async function GET(req: NextRequest, ctx: { params: Promise<{ path: string[] }> }) {
|
||||
const { path: p } = await ctx.params;
|
||||
return proxy(req, p);
|
||||
}
|
||||
export async function POST(req: NextRequest, ctx: { params: Promise<{ path: string[] }> }) {
|
||||
const { path: p } = await ctx.params;
|
||||
return proxy(req, p);
|
||||
}
|
||||
export async function PATCH(req: NextRequest, ctx: { params: Promise<{ path: string[] }> }) {
|
||||
const { path: p } = await ctx.params;
|
||||
return proxy(req, p);
|
||||
}
|
||||
export async function PUT(req: NextRequest, ctx: { params: Promise<{ path: string[] }> }) {
|
||||
const { path: p } = await ctx.params;
|
||||
return proxy(req, p);
|
||||
}
|
||||
export async function DELETE(req: NextRequest, ctx: { params: Promise<{ path: string[] }> }) {
|
||||
const { path: p } = await ctx.params;
|
||||
return proxy(req, p);
|
||||
}
|
||||
7
frontend/app/delivery/ai/recommendations/error.tsx
Normal file
7
frontend/app/delivery/ai/recommendations/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/ai/recommendations/loading.tsx
Normal file
5
frontend/app/delivery/ai/recommendations/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/ai/recommendations/page.tsx
Normal file
3
frontend/app/delivery/ai/recommendations/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { AiRecommendationsPage as default } from "@/modules/delivery/features/aiRecommendations";
|
||||
7
frontend/app/delivery/analytics/error.tsx
Normal file
7
frontend/app/delivery/analytics/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
7
frontend/app/delivery/analytics/heatmaps/error.tsx
Normal file
7
frontend/app/delivery/analytics/heatmaps/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/analytics/heatmaps/loading.tsx
Normal file
5
frontend/app/delivery/analytics/heatmaps/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/analytics/heatmaps/page.tsx
Normal file
3
frontend/app/delivery/analytics/heatmaps/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { HeatMapsPage as default } from "@/modules/delivery/features/heatmaps";
|
||||
7
frontend/app/delivery/analytics/kpis/error.tsx
Normal file
7
frontend/app/delivery/analytics/kpis/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/analytics/kpis/loading.tsx
Normal file
5
frontend/app/delivery/analytics/kpis/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/analytics/kpis/page.tsx
Normal file
3
frontend/app/delivery/analytics/kpis/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { PerformanceKpisPage as default } from "@/modules/delivery/features/kpis";
|
||||
5
frontend/app/delivery/analytics/loading.tsx
Normal file
5
frontend/app/delivery/analytics/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/analytics/page.tsx
Normal file
3
frontend/app/delivery/analytics/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { AnalyticsPage as default } from "@/modules/delivery/features/analytics";
|
||||
7
frontend/app/delivery/api-keys/error.tsx
Normal file
7
frontend/app/delivery/api-keys/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/api-keys/loading.tsx
Normal file
5
frontend/app/delivery/api-keys/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/api-keys/page.tsx
Normal file
3
frontend/app/delivery/api-keys/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { ApiKeysPage as default } from "@/modules/delivery/features/apiKeys";
|
||||
7
frontend/app/delivery/audit/error.tsx
Normal file
7
frontend/app/delivery/audit/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/audit/loading.tsx
Normal file
5
frontend/app/delivery/audit/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/audit/page.tsx
Normal file
3
frontend/app/delivery/audit/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { AuditLogsPage as default } from "@/modules/delivery/features/audit";
|
||||
7
frontend/app/delivery/automation/error.tsx
Normal file
7
frontend/app/delivery/automation/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/automation/loading.tsx
Normal file
5
frontend/app/delivery/automation/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/automation/page.tsx
Normal file
3
frontend/app/delivery/automation/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { AutomationPage as default } from "@/modules/delivery/features/automation";
|
||||
7
frontend/app/delivery/branches/error.tsx
Normal file
7
frontend/app/delivery/branches/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/branches/loading.tsx
Normal file
5
frontend/app/delivery/branches/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/branches/page.tsx
Normal file
3
frontend/app/delivery/branches/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { BranchesPage as default } from "@/modules/delivery/features/branches";
|
||||
7
frontend/app/delivery/capabilities/error.tsx
Normal file
7
frontend/app/delivery/capabilities/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/capabilities/loading.tsx
Normal file
5
frontend/app/delivery/capabilities/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/capabilities/page.tsx
Normal file
3
frontend/app/delivery/capabilities/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { CapabilitiesPage as default } from "@/modules/delivery/features/capabilities";
|
||||
7
frontend/app/delivery/cod/error.tsx
Normal file
7
frontend/app/delivery/cod/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/cod/loading.tsx
Normal file
5
frontend/app/delivery/cod/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/cod/page.tsx
Normal file
3
frontend/app/delivery/cod/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { CodManagementPage as default } from "@/modules/delivery/features/cod";
|
||||
7
frontend/app/delivery/commissions/error.tsx
Normal file
7
frontend/app/delivery/commissions/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/commissions/loading.tsx
Normal file
5
frontend/app/delivery/commissions/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/commissions/page.tsx
Normal file
3
frontend/app/delivery/commissions/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { CommissionsPage as default } from "@/modules/delivery/features/commissions";
|
||||
7
frontend/app/delivery/configurations/error.tsx
Normal file
7
frontend/app/delivery/configurations/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/configurations/loading.tsx
Normal file
5
frontend/app/delivery/configurations/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/configurations/page.tsx
Normal file
3
frontend/app/delivery/configurations/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { ConfigurationsPage as default } from "@/modules/delivery/features/configurations";
|
||||
7
frontend/app/delivery/deliveries/error.tsx
Normal file
7
frontend/app/delivery/deliveries/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/deliveries/loading.tsx
Normal file
5
frontend/app/delivery/deliveries/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/deliveries/page.tsx
Normal file
3
frontend/app/delivery/deliveries/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { DeliveriesPage as default } from "@/modules/delivery/features/deliveries";
|
||||
7
frontend/app/delivery/dispatch/assignment/error.tsx
Normal file
7
frontend/app/delivery/dispatch/assignment/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/dispatch/assignment/loading.tsx
Normal file
5
frontend/app/delivery/dispatch/assignment/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/dispatch/assignment/page.tsx
Normal file
3
frontend/app/delivery/dispatch/assignment/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { AssignmentCenterPage as default } from "@/modules/delivery/features/assignment";
|
||||
7
frontend/app/delivery/dispatch/queue/error.tsx
Normal file
7
frontend/app/delivery/dispatch/queue/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/dispatch/queue/loading.tsx
Normal file
5
frontend/app/delivery/dispatch/queue/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/dispatch/queue/page.tsx
Normal file
3
frontend/app/delivery/dispatch/queue/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { DispatchQueuePage as default } from "@/modules/delivery/features/dispatchQueue";
|
||||
7
frontend/app/delivery/dispatcher/error.tsx
Normal file
7
frontend/app/delivery/dispatcher/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/dispatcher/loading.tsx
Normal file
5
frontend/app/delivery/dispatcher/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/dispatcher/page.tsx
Normal file
3
frontend/app/delivery/dispatcher/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { DispatcherDashboard as default } from "@/modules/delivery/features/dispatcher";
|
||||
3
frontend/app/delivery/drivers/[id]/error.tsx
Normal file
3
frontend/app/delivery/drivers/[id]/error.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
import { ErrorState } from "@/components/ds";
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) { return <ErrorState message={error.message} onRetry={reset} />; }
|
||||
2
frontend/app/delivery/drivers/[id]/loading.tsx
Normal file
2
frontend/app/delivery/drivers/[id]/loading.tsx
Normal file
@ -0,0 +1,2 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
export default function Loading() { return <LoadingState label="بارگذاری راننده…" />; }
|
||||
3
frontend/app/delivery/drivers/[id]/page.tsx
Normal file
3
frontend/app/delivery/drivers/[id]/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { DriverDetailPage as default } from "@/modules/delivery/features/driverDetail";
|
||||
7
frontend/app/delivery/drivers/availability/error.tsx
Normal file
7
frontend/app/delivery/drivers/availability/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/drivers/availability/loading.tsx
Normal file
5
frontend/app/delivery/drivers/availability/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/drivers/availability/page.tsx
Normal file
3
frontend/app/delivery/drivers/availability/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { DriverAvailabilityPage as default } from "@/modules/delivery/features/driverAvailability";
|
||||
7
frontend/app/delivery/drivers/error.tsx
Normal file
7
frontend/app/delivery/drivers/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/drivers/loading.tsx
Normal file
5
frontend/app/delivery/drivers/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/drivers/page.tsx
Normal file
3
frontend/app/delivery/drivers/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { DriversPage as default } from "@/modules/delivery/features/drivers";
|
||||
7
frontend/app/delivery/drivers/performance/error.tsx
Normal file
7
frontend/app/delivery/drivers/performance/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/drivers/performance/loading.tsx
Normal file
5
frontend/app/delivery/drivers/performance/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/drivers/performance/page.tsx
Normal file
3
frontend/app/delivery/drivers/performance/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { DriverPerformancePage as default } from "@/modules/delivery/features/driverPerformance";
|
||||
7
frontend/app/delivery/error.tsx
Normal file
7
frontend/app/delivery/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
7
frontend/app/delivery/failed/error.tsx
Normal file
7
frontend/app/delivery/failed/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/failed/loading.tsx
Normal file
5
frontend/app/delivery/failed/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/failed/page.tsx
Normal file
3
frontend/app/delivery/failed/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { FailedDeliveriesPage as default } from "@/modules/delivery/features/failed";
|
||||
7
frontend/app/delivery/fleet-dashboard/error.tsx
Normal file
7
frontend/app/delivery/fleet-dashboard/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/fleet-dashboard/loading.tsx
Normal file
5
frontend/app/delivery/fleet-dashboard/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/fleet-dashboard/page.tsx
Normal file
3
frontend/app/delivery/fleet-dashboard/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { FleetDashboard as default } from "@/modules/delivery/features/fleetDashboard";
|
||||
7
frontend/app/delivery/fleet/maintenance/error.tsx
Normal file
7
frontend/app/delivery/fleet/maintenance/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/fleet/maintenance/loading.tsx
Normal file
5
frontend/app/delivery/fleet/maintenance/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/fleet/maintenance/page.tsx
Normal file
3
frontend/app/delivery/fleet/maintenance/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { FleetMaintenancePage as default } from "@/modules/delivery/features/maintenance";
|
||||
7
frontend/app/delivery/health/error.tsx
Normal file
7
frontend/app/delivery/health/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/health/loading.tsx
Normal file
5
frontend/app/delivery/health/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/health/page.tsx
Normal file
3
frontend/app/delivery/health/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { HealthPage as default } from "@/modules/delivery/features/health";
|
||||
7
frontend/app/delivery/hub/error.tsx
Normal file
7
frontend/app/delivery/hub/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/hub/loading.tsx
Normal file
5
frontend/app/delivery/hub/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/hub/page.tsx
Normal file
3
frontend/app/delivery/hub/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { DeliveryHub as default } from "@/modules/delivery/features/hub";
|
||||
7
frontend/app/delivery/incidents/error.tsx
Normal file
7
frontend/app/delivery/incidents/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/incidents/loading.tsx
Normal file
5
frontend/app/delivery/incidents/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/incidents/page.tsx
Normal file
3
frontend/app/delivery/incidents/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { IncidentsPage as default } from "@/modules/delivery/features/incidents";
|
||||
7
frontend/app/delivery/integrations/providers/error.tsx
Normal file
7
frontend/app/delivery/integrations/providers/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/integrations/providers/loading.tsx
Normal file
5
frontend/app/delivery/integrations/providers/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/integrations/providers/page.tsx
Normal file
3
frontend/app/delivery/integrations/providers/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { ExternalProvidersPage as default } from "@/modules/delivery/features/externalProviders";
|
||||
7
frontend/app/delivery/integrations/routing/error.tsx
Normal file
7
frontend/app/delivery/integrations/routing/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/integrations/routing/loading.tsx
Normal file
5
frontend/app/delivery/integrations/routing/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/integrations/routing/page.tsx
Normal file
3
frontend/app/delivery/integrations/routing/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { RoutingEnginesPage as default } from "@/modules/delivery/features/routingEngines";
|
||||
5
frontend/app/delivery/layout.tsx
Normal file
5
frontend/app/delivery/layout.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
"use client";
|
||||
|
||||
import { DeliveryRootLayout } from "@/modules/delivery/components/createPortalLayout";
|
||||
|
||||
export default DeliveryRootLayout;
|
||||
5
frontend/app/delivery/loading.tsx
Normal file
5
frontend/app/delivery/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
7
frontend/app/delivery/maps/geofence/error.tsx
Normal file
7
frontend/app/delivery/maps/geofence/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/maps/geofence/loading.tsx
Normal file
5
frontend/app/delivery/maps/geofence/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/maps/geofence/page.tsx
Normal file
3
frontend/app/delivery/maps/geofence/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { GeofencePage as default } from "@/modules/delivery/features/geofence";
|
||||
7
frontend/app/delivery/maps/routes/optimization/error.tsx
Normal file
7
frontend/app/delivery/maps/routes/optimization/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/maps/routes/optimization/page.tsx
Normal file
3
frontend/app/delivery/maps/routes/optimization/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { RouteOptimizationPage as default } from "@/modules/delivery/features/routeOptimization";
|
||||
7
frontend/app/delivery/maps/routes/planner/error.tsx
Normal file
7
frontend/app/delivery/maps/routes/planner/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/maps/routes/planner/loading.tsx
Normal file
5
frontend/app/delivery/maps/routes/planner/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
3
frontend/app/delivery/maps/routes/planner/page.tsx
Normal file
3
frontend/app/delivery/maps/routes/planner/page.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
"use client";
|
||||
|
||||
export { RoutePlannerPage as default } from "@/modules/delivery/features/routePlanner";
|
||||
7
frontend/app/delivery/maps/view/error.tsx
Normal file
7
frontend/app/delivery/maps/view/error.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ErrorState } from "@/components/ds";
|
||||
|
||||
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
|
||||
return <ErrorState message={error.message} onRetry={reset} />;
|
||||
}
|
||||
5
frontend/app/delivery/maps/view/loading.tsx
Normal file
5
frontend/app/delivery/maps/view/loading.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
import { LoadingState } from "@/components/ds";
|
||||
|
||||
export default function Loading() {
|
||||
return <LoadingState label="در حال بارگذاری تربت درایور…" />;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user