import { useEffect, useState } from 'react'; import SettingsLayout from '../components/layout/SettingsLayout'; import SearchableSelect from '../components/ui/SearchableSelect'; import { useRecordNumberSettings } from '../hooks/useRecordNumberSettings'; import type { RecordNumberResetPolicy } from '../hooks/useRecordNumberSettings'; import Switch from '../components/ui/Switch'; const RESET_OPTIONS: { value: RecordNumberResetPolicy; label: string }[] = [ { value: 'none', label: 'هرگز — شمارنده پیوسته جلو می‌رود' }, { value: 'yearly', label: 'هر سال شمسی از ۱ شروع شود' }, { value: 'monthly', label: 'هر ماه شمسی از ۱ شروع شود' }, ]; const TOKENS: [string, string][] = [ ['{SEQ}', 'شمارنده — {SEQ:4} یعنی چهار رقمی با صفرِ ابتدایی'], ['{YY}', 'دو رقم آخر سال شمسی'], ['{YYYY}', 'سال شمسی کامل'], ['{MM}', 'ماه شمسی دو رقمی'], ]; /** * شمارهٔ پرونده — الگوی شماره‌گذاری خودکار پرونده‌های همین مجموعه. * * پیش‌نمایش سمت کلاینت ساخته نمی‌شود: همان `next_preview` سرور نشان داده می‌شود تا * دو پیاده‌سازیِ رندر (اینجا و در `RecordNumberGenerator`) از هم واگرا نشوند. */ export default function RecordNumberSettingsPage() { const { settings, loading, save } = useRecordNumberSettings(); const [enabled, setEnabled] = useState(false); const [pattern, setPattern] = useState(''); const [resetPolicy, setResetPolicy] = useState('none'); useEffect(() => { if (!settings) return; setEnabled(settings.enabled); setPattern(settings.pattern); setResetPolicy(settings.reset_policy); }, [settings]); const readOnly = !settings?.can_edit; const dirty = !!settings && ( enabled !== settings.enabled || pattern !== settings.pattern || resetPolicy !== settings.reset_policy ); return (

شماره پرونده

با روشن‌کردن این گزینه، شمارهٔ هر پروندهٔ تازه — چه از فرم تشکیل پرونده و چه از نوبتی که قطعی می‌شود — بر اساس همین الگو ساخته می‌شود.

{loading ? (
{Array.from({ length: 3 }).map((_, i) =>
)}
) : !settings ? (
دسترسی به تنظیمات شمارهٔ پرونده ندارید.
) : ( <> {readOnly && (
تغییر الگو فقط با حساب صاحب مجموعه ممکن است؛ اینجا فقط مقدار فعلی را می‌بینید.
)}
setPattern(e.target.value)} placeholder="MD-{YY}-{SEQ:4}" />
    {TOKENS.map(([token, hint]) => (
  • {token} — {hint}
  • ))}
setResetPolicy((v ?? 'none') as RecordNumberResetPolicy)} ariaLabelledBy="reset-policy-label" isDisabled={readOnly} height={44} />
شمارهٔ بعدی: {settings.next_preview}
{dirty ? 'پیش‌نمایش پس از ذخیره به‌روز می‌شود.' : `شمارنده تا اینجا ${settings.counter} پرونده را شماره‌گذاری کرده است.`}
{!readOnly && (
)} )}
); }