import { useQuery } from '@tanstack/react-query'; import { api } from '../../lib/api'; import type { ApiResponse } from '../../lib/api'; import type { SessionAuditEntry } from '../../types'; import { formatDateTime, formatRial } from '../../lib/utils'; import Modal from '../ui/Modal'; const FIELD_LABELS: Record = { visit_price_rials: 'قیمت ویزیت', services: 'سرویس‌ها', consumables: 'کالاهای مصرفی', services_total_rials: 'مجموع سرویس‌ها', final_price_rials: 'مبلغ نهایی', payment: 'پرداخت', discount: 'تخفیف', }; const OP_LABELS: Record = { create: { label: 'ایجاد', color: '#3c9a4f' }, update: { label: 'ویرایش', color: '#5559ce' }, delete: { label: 'حذف', color: '#EF4444' }, }; // مقادیر پولی (ریال) را با فرمت تومان نشان بده؛ بقیه را خام. const RIAL_FIELDS = new Set(['visit_price_rials', 'services_total_rials', 'final_price_rials', 'payment', 'discount']); const fmtValue = (field: string, v: string | null): string => { if (v === null || v === '') return '—'; if (RIAL_FIELDS.has(field) && /^\d+$/.test(v)) return formatRial(Number(v)); return v; }; export default function SessionAuditModal({ sessionUuid, onClose }: { sessionUuid: string | null; onClose: () => void }) { const { data, isLoading } = useQuery({ queryKey: ['session-audit-log', sessionUuid], queryFn: () => api.get>(`/api/v1/session/${sessionUuid}/audit-log`), enabled: !!sessionUuid, }); const rows: SessionAuditEntry[] = (data?.data as any) ?? []; if (!sessionUuid) return null; return ( {isLoading ? (
در حال بارگذاری...
) : rows.length === 0 ? (
تغییری ثبت نشده است.
) : (
{rows.map((r, i) => { const op = OP_LABELS[r.operation] ?? { label: r.operation, color: 'var(--text-3)' }; return (
{op.label} {FIELD_LABELS[r.field] ?? r.field} {formatDateTime(r.created_at)}
{fmtValue(r.field, r.old_value)} {fmtValue(r.field, r.new_value)}
{r.actor_name && توسط: {r.actor_name}} {r.note && {r.note}}
); })}
)}
); }