import React from 'react'; import { formatDate } from '../lib/utils'; interface VersionRow { version: number; created_at: number; snapshot: Record; } /** فقط فیلدهایی که تغییرشان معنا دارد — `updated_at` و نسخه خودشان همیشه فرق دارند. */ const WATCHED: Array<{ key: string; label: string }> = [ { key: 'name', label: 'نام' }, { key: 'priority', label: 'اولویت' }, { key: 'active', label: 'فعال' }, { key: 'condition', label: 'شرط' }, { key: 'effects', label: 'اثرها' }, { key: 'valid_from', label: 'شروع اعتبار' }, { key: 'valid_to', label: 'پایان اعتبار' }, { key: 'service_uuid', label: 'سرویس' }, { key: 'address_uuid', label: 'شعبه' }, ]; function show(value: unknown): string { if (value === null || value === undefined) return '—'; if (typeof value === 'boolean') return value ? 'بله' : 'خیر'; if (typeof value === 'object') return JSON.stringify(value, null, 0); return String(value); } /** * تفاوت هر نسخه با نسخهٔ پیش از خودش. * * فهرست کامل اثرها روی هر نسخه، سؤال واقعی را جواب نمی‌دهد: «چه چیزی عوض شد؟». وقتی * نوبتی به نسخهٔ ۳ ارجاع می‌دهد و کسی می‌پرسد چرا قیمتش فرق دارد، همین ستون جواب است. */ export default function PolicyVersionDiff({ versions }: { versions: VersionRow[] }) { if (!versions || versions.length === 0) return null; const ordered = [...versions].sort((a, b) => a.version - b.version); return (

تاریخچهٔ نسخه‌ها

{ordered.map((v, i) => { const previous = i === 0 ? null : ordered[i - 1].snapshot; const changes = previous ? WATCHED.filter((f) => show(v.snapshot[f.key]) !== show(previous[f.key])) : []; return (
نسخهٔ {v.version} {formatDate(v.created_at)} {previous === null && ( نسخهٔ نخست )} {previous !== null && changes.length === 0 && ( بدون تغییرِ معنادار )}
{changes.map((f) => (
{f.label} {show(previous?.[f.key])} {show(v.snapshot[f.key])}
))}
); })}
); }