diff --git a/client/pages/CategoriesPage.jsx b/client/pages/CategoriesPage.jsx index 9b2ba26..c738bb9 100644 --- a/client/pages/CategoriesPage.jsx +++ b/client/pages/CategoriesPage.jsx @@ -2,7 +2,7 @@ import React, { useState, useEffect, useCallback, useRef } from 'react'; import { Link } from 'react-router-dom'; import { toast } from 'sonner'; import { - ChevronDown, Plus, Pencil, Trash2, ReceiptText, + ChevronDown, Plus, Pencil, Trash2, ReceiptText, AlertCircle, RefreshCw, } from 'lucide-react'; import { api } from '@/api.js'; import { Button, buttonVariants } from '@/components/ui/button'; @@ -231,6 +231,7 @@ function ExpandedBills({ category }) { export default function CategoriesPage() { const [categories, setCategories] = useState([]); const [loading, setLoading] = useState(true); + const [loadError, setLoadError] = useState(null); const [newName, setNewName] = useState(''); const [adding, setAdding] = useState(false); const [expanded, setExpanded] = useState(() => new Set()); @@ -243,11 +244,12 @@ export default function CategoriesPage() { const [deleting, setDeleting] = useState(false); const load = useCallback(async () => { + setLoadError(null); try { const cats = await api.categories(); setCategories(cats); } catch (err) { - toast.error(err.message); + setLoadError(err.message || 'Failed to load categories'); } finally { setLoading(false); } @@ -412,6 +414,17 @@ export default function CategoriesPage() {
Failed to load categories
+{loadError}
+ +Failed to load settings
+{loadError}
+ +Failed to load snowball data
+{loadError}
+ +Failed to load tracker data
+{error?.message || 'An unexpected error occurred.'}
+ +