"use client"; import { useParams } from "next/navigation"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { useTenantId } from "@/hooks/useTenantId"; import { deliveryApi } from "@/modules/delivery/services/delivery-api"; import { DeliveryPageLoader, DeliveryPageError } from "@/modules/delivery/pages/shared"; import { PageHeader, Card, CardContent, Button, Badge, Tabs, ConfirmDialog } from "@/components/ds"; import { DeliveryDetailBreadcrumbs } from "@/modules/delivery/components/DeliveryBreadcrumbs"; import { DeliveryStatusChip } from "@/modules/delivery/design-system"; import { useDeliveryPermissions } from "@/modules/delivery/hooks/useDeliveryPermissions"; import { useState } from "react"; export const DriverDetailPage = function DriverDetail() { const params = useParams(); const driverId = String(params.id); const { tenantId } = useTenantId(); const qc = useQueryClient(); const perms = useDeliveryPermissions(); const [tab, setTab] = useState("profile"); const [lifecycleAction, setLifecycleAction] = useState(null); const driverQ = useQuery({ queryKey: ["delivery", tenantId, "driver", driverId], queryFn: () => deliveryApi.drivers.get(tenantId!, driverId), enabled: !!tenantId && !!driverId, }); const lifecycleQ = useQuery({ queryKey: ["delivery", tenantId, "driver-lifecycle", driverId], queryFn: () => deliveryApi.drivers.lifecycle(tenantId!, driverId), enabled: !!tenantId && !!driverId && tab === "lifecycle", }); const credsQ = useQuery({ queryKey: ["delivery", tenantId, "driver-creds", driverId], queryFn: () => deliveryApi.drivers.credentials.list(tenantId!, driverId), enabled: !!tenantId && !!driverId && tab === "credentials", }); const docsQ = useQuery({ queryKey: ["delivery", tenantId, "driver-docs", driverId], queryFn: () => deliveryApi.drivers.documents.list(tenantId!, driverId), enabled: !!tenantId && !!driverId && tab === "documents", }); const lifecycleM = useMutation({ mutationFn: (action: string) => { const body = { version: driverQ.data!.version as number }; const drivers = deliveryApi.drivers; switch (action) { case "activate": return drivers.activate(tenantId!, driverId, body); case "suspend": return drivers.suspend(tenantId!, driverId, body); case "resume": return drivers.resume(tenantId!, driverId, body); case "deactivate": return drivers.deactivate(tenantId!, driverId, body); case "block": return drivers.block(tenantId!, driverId, body); case "unblock": return drivers.unblock(tenantId!, driverId, body); case "archive": return drivers.archive(tenantId!, driverId, body); default: throw new Error("عملیات نامعتبر"); } }, onSuccess: () => { toast.success("وضعیت به‌روز شد"); setLifecycleAction(null); qc.invalidateQueries({ queryKey: ["delivery", tenantId, "driver", driverId] }); qc.invalidateQueries({ queryKey: ["delivery", tenantId, "driver-lifecycle", driverId] }); }, onError: (e: Error) => toast.error(e.message), }); if (!tenantId || driverQ.isLoading) return ; if (driverQ.error) return driverQ.refetch()} />; const d = driverQ.data!; const lifecycleActions = ["activate", "suspend", "resume", "deactivate", "block", "unblock", "archive"]; return (
} /> {tab === "profile" ? (

ایمیل: {String(d.email ?? "—")}

نسخه: {String(d.version)}

ایجاد: {new Date(String(d.created_at)).toLocaleString("fa-IR")}

{d.notes ?

{String(d.notes)}

: null}
) : null} {tab === "lifecycle" ? (
{lifecycleActions.map((a) => ( ))}
{(lifecycleQ.data ?? []).map((ev) => ( {String(ev.action)}: {String(ev.from_status)} → {String(ev.to_status)} {new Date(String(ev.created_at)).toLocaleString("fa-IR")} ))}
) : null} {tab === "credentials" ? (
{(credsQ.data ?? []).map((c) => ( {String(c.kind)} — {String(c.number)} {c.is_verified ? تأیید شده : null} ))}
) : null} {tab === "documents" ? (
{(docsQ.data ?? []).map((doc) => ( {String(doc.title)} — {String(doc.kind)} ))}
) : null} setLifecycleAction(null)} title="تغییر وضعیت" description={`آیا از اجرای ${lifecycleAction} اطمینان دارید؟`} onConfirm={() => lifecycleAction && lifecycleM.mutate(lifecycleAction)} loading={lifecycleM.isPending} />
); }; export default DriverDetailPage;