import React, { useState } from 'react'; import { PlusCircle, Edit, Trash2, Save, X } from 'lucide-react'; import Button from '../common/Button'; import Card, { CardContent, CardHeader } from '../common/Card'; import { Category } from '../../types'; import { categories as mockCategories, generateId } from '../../data/mockData'; const CategoryManagement: React.FC = () => { const [categories, setCategories] = useState(mockCategories); const [isAddingCategory, setIsAddingCategory] = useState(false); const [editingCategoryId, setEditingCategoryId] = useState(null); const [newCategory, setNewCategory] = useState>({ name: '', description: '', icon: 'tag', slug: '', }); const handleAddCategory = () => { setIsAddingCategory(true); setNewCategory({ name: '', description: '', icon: 'tag', slug: '', }); }; const handleEditCategory = (category: Category) => { setEditingCategoryId(category.id); setNewCategory({ ...category }); }; const handleCancelEdit = () => { setIsAddingCategory(false); setEditingCategoryId(null); }; const handleSaveCategory = () => { if (!newCategory.name || !newCategory.description) { return; } if (isAddingCategory) { const slug = newCategory.name?.toLowerCase().replace(/\s+/g, '-') || ''; const category: Category = { id: generateId(), name: newCategory.name || '', description: newCategory.description || '', icon: newCategory.icon || 'tag', slug, }; setCategories([...categories, category]); setIsAddingCategory(false); } else if (editingCategoryId) { setCategories( categories.map(cat => cat.id === editingCategoryId ? { ...cat, ...newCategory, slug: newCategory.slug || cat.slug } : cat ) ); setEditingCategoryId(null); } }; const handleDeleteCategory = (id: string) => { // In a real app, we would check if there are any listings using this category setCategories(categories.filter(cat => cat.id !== id)); }; const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setNewCategory(prev => ({ ...prev, [name]: value })); }; const iconOptions = [ 'tag', 'home', 'car', 'smartphone', 'briefcase', 'shopping-bag', 'package', 'gift', 'coffee', 'music', 'book', 'camera', 'heart', 'user', 'users', 'star', 'globe', 'map-pin', 'flag', 'bell' ]; return (

Category Management

{(isAddingCategory || editingCategoryId) && (

{isAddingCategory ? 'Add New Category' : 'Edit Category'}

)}
{categories.map(category => ( ))}
Name Description Icon Slug Actions
{category.name} {category.description} {category.icon} {category.slug}
); }; export default CategoryManagement;