'use client'; import React, { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { Button, Card, Input, Select, Textarea, Loading } from '../../../../shared/components'; import { useToast } from '@hykocx/zen/toast'; /** * Item Edit Page Component * Page for editing an existing item */ const ItemEditPage = ({ itemId, user }) => { const router = useRouter(); const toast = useToast(); const [categories, setCategories] = useState([]); const [item, setItem] = useState(null); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [formData, setFormData] = useState({ name: '', description: '', unit_price: '', sku: '', category_id: '', is_active: true }); const [errors, setErrors] = useState({}); useEffect(() => { loadCategoriesAndItem(); }, [itemId]); const loadCategoriesAndItem = async () => { try { setLoading(true); // Load categories const categoriesResponse = await fetch('/zen/api/admin/categories?limit=1000&is_active=true', { credentials: 'include' }); const categoriesData = await categoriesResponse.json(); if (categoriesData.success) { setCategories(categoriesData.categories || []); } // Load item const itemResponse = await fetch(`/zen/api/admin/items?id=${itemId}`, { credentials: 'include' }); const itemData = await itemResponse.json(); if (itemData.success && itemData.item) { const loadedItem = itemData.item; setItem(loadedItem); setFormData({ name: loadedItem.name || '', description: loadedItem.description || '', unit_price: loadedItem.unit_price || '', sku: loadedItem.sku || '', category_id: loadedItem.category_id || '', is_active: loadedItem.is_active !== undefined ? loadedItem.is_active : true }); } else { toast.error("Article introuvable"); } } catch (error) { console.error('Error loading data:', error); toast.error("Échec du chargement de l'article"); } finally { setLoading(false); } }; const handleInputChange = (field, value) => { setFormData(prev => ({ ...prev, [field]: value })); if (errors[field]) { setErrors(prev => ({ ...prev, [field]: null })); } }; const handleCheckboxChange = (e) => { const { name, checked } = e.target; setFormData(prev => ({ ...prev, [name]: checked })); }; const validateForm = () => { const newErrors = {}; if (!formData.name.trim()) { newErrors.name = "Le nom de l'article est requis"; } if (!formData.unit_price || formData.unit_price <= 0) { newErrors.unit_price = "Le prix unitaire doit être supérieur à 0"; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e) => { e.preventDefault(); if (!validateForm()) { return; } try { setSaving(true); const submitData = { ...formData, category_id: formData.category_id === '' || formData.category_id === 'null' ? null : parseInt(formData.category_id) }; const response = await fetch(`/zen/api/admin/items?id=${itemId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, credentials: 'include', body: JSON.stringify(submitData) }); const data = await response.json(); if (data.success) { toast.success("Article mis à jour avec succès"); router.push('/admin/invoice/items'); } else { toast.error(data.message || "Échec de la mise à jour de l'article"); } } catch (error) { console.error('Error updating item:', error); toast.error("Échec de la mise à jour de l'article"); } finally { setSaving(false); } }; if (loading) { return (
Article introuvable
Article introuvable
L'article que vous recherchez n'existe pas ou a été supprimé.
Article : {item.name}