import { useState } from 'react' import Swal from 'sweetalert2' import { KeyRoundIcon, XIcon } from 'lucide-react' import { useAdmin } from './AdminContext' import { adminApi } from './adminClient' const STATUS_TEXT: Record = { idle: 'همگام‌سازی شد', saving: 'در حال ذخیره…', error: 'خطا در ذخیره', } const STATUS_COLOR: Record = { idle: 'bg-emerald-400', saving: 'bg-copper animate-pulse', error: 'bg-red-400', } const SWAL_BASE = { background: '#1e1a16', color: '#F5F3EF', iconColor: '#d5874c', buttonsStyling: false, customClass: { popup: 'font-pinar border border-ivory/10 rounded-none', title: 'font-pinar font-bold text-lg text-ivory', htmlContainer: 'font-pinar font-light text-sm text-ivory/70', confirmButton: 'bg-copper text-char font-bold px-8 py-2.5', }, } function ChangePasswordModal({ onClose }: { onClose: () => void }) { const [current, setCurrent] = useState('') const [next, setNext] = useState('') const [confirm, setConfirm] = useState('') const [busy, setBusy] = useState(false) const submit = async () => { if (next.length < 8) { void Swal.fire({ ...SWAL_BASE, icon: 'warning', title: 'رمز جدید کوتاه است', text: 'رمز جدید باید دست‌کم ۸ نویسه باشد.', confirmButtonText: 'باشه' }) return } if (next !== confirm) { void Swal.fire({ ...SWAL_BASE, icon: 'warning', title: 'تکرار رمز مطابق نیست', text: 'رمز جدید و تکرار آن یکسان نیستند.', confirmButtonText: 'باشه' }) return } setBusy(true) try { await adminApi.changePassword(current, next) void Swal.fire({ ...SWAL_BASE, icon: 'success', title: 'رمز عبور عوض شد', text: 'از این به بعد با رمز جدید وارد شوید.', iconColor: '#34d399', confirmButtonText: 'باشه' }) onClose() } catch (error) { void Swal.fire({ ...SWAL_BASE, icon: 'error', title: 'تغییر رمز ناموفق بود', text: error instanceof Error ? error.message : 'دوباره تلاش کنید', confirmButtonText: 'باشه', }) } finally { setBusy(false) } } const field = 'w-full border border-ivory/15 bg-char px-3 py-2 text-sm font-light text-ivory focus:border-copper focus:outline-none' return (

تغییر رمز عبور

setCurrent(e.target.value)} placeholder="رمز عبور فعلی" aria-label="رمز عبور فعلی" autoComplete="current-password" className={field} /> setNext(e.target.value)} placeholder="رمز جدید (دست‌کم ۸ نویسه)" aria-label="رمز جدید" autoComplete="new-password" className={field} /> setConfirm(e.target.value)} placeholder="تکرار رمز جدید" aria-label="تکرار رمز جدید" autoComplete="new-password" className={field} />
) } /** نوار شناور ادمین — فقط برای کاربر واردشده رندر می‌شود */ export function AdminBar() { const { isEditMode, toggleEditMode, saveStatus, logout } = useAdmin() const [pwOpen, setPwOpen] = useState(false) return ( <>
حالت مدیریت
{pwOpen && setPwOpen(false)} />} ) }