'use client'; import { useState, useEffect } from 'react'; import { useAuth } from '@/contexts/AuthContext'; import { packagesApi } from '@/lib/api/packages'; import { productsApi } from '@/lib/api/products'; import ProductList from '@/components/admin/products/ProductList'; import ProductForm from '@/components/admin/products/ProductForm'; import { PackageName } from '@/types/package'; import { Product, CreateProductData, UpdateProductData } from '@/types/product'; import { PlusIcon } from '@heroicons/react/24/outline'; export default function ProductsPage() { const { token } = useAuth(); const [packages, setPackages] = useState([]); const [selectedPackage, setSelectedPackage] = useState(null); const [products, setProducts] = useState([]); const [selectedProduct, setSelectedProduct] = useState(null); const [isLoading, setIsLoading] = useState(false); const [isFormVisible, setIsFormVisible] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); // Load packages on mount useEffect(() => { if (token) { loadPackages(); } }, [token]); // Load products when package is selected useEffect(() => { if (selectedPackage && token) { loadProducts(selectedPackage.name!); } else { setProducts([]); } }, [selectedPackage, token]); const loadPackages = async () => { try { const data = await packagesApi.getAllPackages(token!); setPackages(data); if (data.length > 0 && !selectedPackage) { setSelectedPackage(data[0]); } } catch (err) { setError('خطا در دریافت لیست پکیج‌ها'); } }; const loadProducts = async (packageName: string) => { setIsLoading(true); setError(null); try { const data = await productsApi.getProducts(packageName, token!); setProducts(data); } catch (err) { setError(err instanceof Error ? err.message : 'خطا در دریافت محصولات'); } finally { setIsLoading(false); } }; const handlePackageChange = (e: React.ChangeEvent) => { const pkg = packages.find(p => p.name === e.target.value); setSelectedPackage(pkg || null); setIsFormVisible(false); setSelectedProduct(null); }; const handleCreate = () => { setSelectedProduct(null); setIsFormVisible(true); }; const handleEdit = (product: Product) => { setSelectedProduct(product); setIsFormVisible(true); }; const handleDelete = async (product: Product) => { if (!selectedPackage) return; if (!confirm(`آیا از حذف محصول "${product.title}" اطمینان دارید؟`)) { return; } setIsLoading(true); setError(null); setSuccess(null); try { await productsApi.deleteProduct(selectedPackage.name!, product.id, token!); setSuccess('محصول با موفقیت حذف شد'); await loadProducts(selectedPackage.name!); } catch (err) { setError(err instanceof Error ? err.message : 'خطا در حذف محصول'); } finally { setIsLoading(false); } }; const handleSubmit = async (data: CreateProductData | UpdateProductData) => { if (!selectedPackage) return; setIsLoading(true); setError(null); setSuccess(null); try { if (selectedProduct) { // Update existing product await productsApi.updateProduct(selectedPackage.name!, selectedProduct.id, data, token!); setSuccess('محصول با موفقیت به‌روزرسانی شد'); } else { // Create new product await productsApi.createProduct(selectedPackage.name!, data as CreateProductData, token!); setSuccess('محصول با موفقیت ایجاد شد'); } await loadProducts(selectedPackage.name!); setIsFormVisible(false); setSelectedProduct(null); } catch (err) { setError(err instanceof Error ? err.message : 'خطا در ذخیره محصول'); } finally { setIsLoading(false); } }; const handleCancel = () => { setIsFormVisible(false); setSelectedProduct(null); setError(null); setSuccess(null); }; return (

مدیریت محصولات

{/* Package Selector */}
{/* Messages */} {error && (

{error}

)} {success && (

{success}

)} {/* Form or List */} {selectedPackage && ( <> {!isFormVisible && (
)} {isFormVisible ? ( ) : ( )} )}
); }