import React, { useState, useEffect } from 'react'; import { useSearchParams } from 'react-router-dom'; import { Grocery } from '../types'; import { groceryApi } from '../services/api'; import AddGroceryModal from './AddGroceryModal'; import ConfirmDeleteModal from './ConfirmDeleteModal'; const GroceryList: React.FC = () => { const [searchParams, setSearchParams] = useSearchParams(); const [groceries, setGroceries] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [isModalOpen, setIsModalOpen] = useState(false); const [editingGrocery, setEditingGrocery] = useState(null); const [deletingGrocery, setDeletingGrocery] = useState(null); const [deleteLoading, setDeleteLoading] = useState(false); useEffect(() => { fetchGroceries(); // Check if we should auto-open the modal if (searchParams.get('add') === 'true') { setIsModalOpen(true); // Remove the parameter from URL setSearchParams({}); } }, [searchParams, setSearchParams]); const fetchGroceries = async () => { try { setLoading(true); const response = await groceryApi.getAll(); setGroceries(response.data); } catch (err) { setError('Failed to fetch groceries'); console.error('Error fetching groceries:', err); } finally { setLoading(false); } }; const handleEdit = (grocery: Grocery) => { setEditingGrocery(grocery); setIsModalOpen(true); }; const handleDelete = (grocery: Grocery) => { setDeletingGrocery(grocery); }; const confirmDelete = async () => { if (!deletingGrocery) return; try { setDeleteLoading(true); await groceryApi.delete(deletingGrocery.id); setDeletingGrocery(null); fetchGroceries(); // Refresh the list } catch (err) { console.error('Error deleting grocery:', err); setError('Failed to delete grocery. Please try again.'); } finally { setDeleteLoading(false); } }; const handleGroceryAdded = () => { fetchGroceries(); // Refresh the list }; const handleCloseModal = () => { setIsModalOpen(false); setEditingGrocery(null); }; const handleCloseDeleteModal = () => { setDeletingGrocery(null); }; if (loading) { return (
); } return (

Groceries

{error && (
{error}
)}
{groceries.length === 0 ? (

No groceries

Get started by adding your first grocery item.

) : ( {groceries.map((grocery) => ( ))}
Name Category Weight Organic Actions
{grocery.name}
{grocery.category} {grocery.weight ? `${grocery.weight}${grocery.weight_unit}` : '-'} {grocery.organic ? 'Organic' : 'Conventional'}
)}
); }; export default GroceryList;