'use client'; import { useState, useEffect, useCallback, useRef } from 'react'; import { useAuth } from '@/contexts/AuthContext'; import { packagesApi } from '@/lib/api/packages'; import { remindersApi } from '@/lib/api/reminders'; import ReminderList from '@/components/admin/reminders/ReminderList'; import ReminderForm from '@/components/admin/reminders/ReminderForm'; import PageHeader from '@/components/admin/PageHeader'; import { showToast } from '@/components/Toast'; import { PackageName } from '@/types/package'; import { Reminder, CreateReminderData, UpdateReminderData } from '@/types/reminder'; import { PlusIcon } from '@heroicons/react/24/outline'; export default function RemindersPage() { const { token } = useAuth(); const [packages, setPackages] = useState([]); const [selectedPackage, setSelectedPackage] = useState(null); const [reminders, setReminders] = useState([]); const [selectedReminder, setSelectedReminder] = useState(null); const [isLoading, setIsLoading] = useState(false); const [isLoadingPackages, setIsLoadingPackages] = useState(false); const [isFormVisible, setIsFormVisible] = useState(false); const [error, setError] = useState(null); const initialLoadRef = useRef(false); const prevPackageRef = useRef(null); useEffect(() => { if (token && !initialLoadRef.current) { initialLoadRef.current = true; loadPackages(); } }, [token]); const loadPackages = async () => { setIsLoadingPackages(true); setError(null); try { const data = await packagesApi.getAllPackages(token!); setPackages(data); if (data.length > 0 && !selectedPackage) { setSelectedPackage(data[0]); } } catch (err) { setError('خطا در دریافت لیست پکیج‌ها'); } finally { setIsLoadingPackages(false); } }; const loadReminders = useCallback(async (packageName: string, force = false) => { if (!force && prevPackageRef.current === packageName) { return; } setIsLoading(true); setError(null); prevPackageRef.current = packageName; try { const data = await remindersApi.getReminders(packageName, token!); setReminders(data); } catch (err) { setError(err instanceof Error ? err.message : 'خطا در دریافت یادآوری‌ها'); } finally { setIsLoading(false); } }, [token]); useEffect(() => { if (selectedPackage?.name && token) { loadReminders(selectedPackage.name); } else { setReminders([]); } }, [selectedPackage?.name, token, loadReminders]); const handlePackageChange = (e: React.ChangeEvent) => { const pkg = packages.find(p => p.name === e.target.value); setSelectedPackage(pkg || null); setIsFormVisible(false); setSelectedReminder(null); setError(null); }; const handleCreate = () => { setSelectedReminder(null); setIsFormVisible(true); }; const handleEdit = (reminder: Reminder) => { setSelectedReminder(reminder); setIsFormVisible(true); }; const handleDelete = async (reminder: Reminder) => { if (!selectedPackage) return; if (!confirm(`آیا از حذف یادآوری "${reminder.title}" اطمینان دارید؟`)) { return; } setIsLoading(true); setError(null); try { await remindersApi.deleteReminder(selectedPackage.name!, reminder.id, token!); showToast('success', 'یادآوری با موفقیت حذف شد'); if (selectedPackage.name) { prevPackageRef.current = null; await loadReminders(selectedPackage.name, true); } } catch (err) { setError(err instanceof Error ? err.message : 'خطا در حذف یادآوری'); } finally { setIsLoading(false); } }; const handleSubmit = async (data: CreateReminderData | UpdateReminderData) => { if (!selectedPackage) return; setIsLoading(true); setError(null); try { if (selectedReminder) { await remindersApi.updateReminder(selectedPackage.name!, selectedReminder.id, data, token!); showToast('success', 'یادآوری با موفقیت به‌روزرسانی شد'); } else { await remindersApi.createReminder(selectedPackage.name!, data as CreateReminderData, token!); showToast('success', 'یادآوری با موفقیت ایجاد شد'); } if (selectedPackage.name) { prevPackageRef.current = null; await loadReminders(selectedPackage.name, true); } setIsFormVisible(false); setSelectedReminder(null); } catch (err) { setError(err instanceof Error ? err.message : 'خطا در ذخیره یادآوری'); } finally { setIsLoading(false); } }; const handleCancel = () => { setIsFormVisible(false); setSelectedReminder(null); setError(null); }; return (
{/* Package Selector */}
{error && (

{error}

)} {selectedPackage && ( <> {!isFormVisible && (
)} {isFormVisible ? ( ) : ( )} )}
); }