import { useEffect, useState } from 'react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { toast } from 'sonner'; import { api } from '../lib/api'; import { digitsOnly } from '../lib/utils'; import Modal from './ui/Modal'; interface Props { /** `null` یعنی مودال بسته است. */ target: { uuid: string; name: string; mobile_number?: string | null } | null; /** `doctors` → /api/v1/admin/doctors/{uuid}/mobile · `clinic` → /api/v1/admin/clinic/{uuid}/mobile */ resource: 'doctors' | 'clinic'; /** کلید کوئریِ لیستی که بعد از تغییر باید invalidate شود. */ queryKey: unknown[]; onClose: () => void; } /** * تغییر شمارهٔ **ورود** پزشک/کلینیک توسط مدیر کل. شماره هویتِ ورود کاربر است، پس * سرور یکتا بودن را کنترل می‌کند و اینجا فقط قالبِ ۰۹ + ۱۱ رقم اعتبارسنجی می‌شود. */ export default function ChangeLoginMobileModal({ target, resource, queryKey, onClose }: Props) { const qc = useQueryClient(); const [mobile, setMobile] = useState(''); useEffect(() => { setMobile(target?.mobile_number ?? ''); }, [target]); const save = useMutation({ mutationFn: () => api.patch(`/api/v1/admin/${resource}/${target!.uuid}/mobile`, { mobile_number: mobile }), onSuccess: () => { toast.success('شماره موبایل تغییر کرد'); qc.invalidateQueries({ queryKey }); onClose(); }, onError: (e: Error) => toast.error(e.message), }); const invalid = !/^09\d{9}$/.test(mobile); return ( } >

این شماره، شمارهٔ ورود به پنل است. پس از تغییر، ورود فقط با شمارهٔ جدید ممکن خواهد بود و شماره باید در کل سامانه یکتا باشد.

setMobile(digitsOnly(e.target.value, 11))} /> {mobile !== '' && invalid &&

شماره باید با ۰۹ شروع شود و ۱۱ رقم باشد

}
); }