'use client'; import { useState, useEffect } from 'react'; import { WorkItem, WorkItemStatus } from '@/lib/types'; import { workItemApi } from '@/lib/api-client'; import WorkItemCard from '@/components/WorkItemCard'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faCheck } from '@fortawesome/free-solid-svg-icons'; export default function TodoPage() { const [workItems, setWorkItems] = useState([]); const [selectedItems, setSelectedItems] = useState>(new Set()); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { loadWorkItems(); }, []); const loadWorkItems = async () => { try { setLoading(true); const items = await workItemApi.getWorkItems(); setWorkItems(items); setError(null); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load work items'); } finally { setLoading(false); } }; const handleToggle = (id: number) => { const newSelected = new Set(selectedItems); if (newSelected.has(id)) { newSelected.delete(id); } else { newSelected.add(id); } setSelectedItems(newSelected); }; const handleConfirm = async () => { if (selectedItems.size > 0) { try { // Update each selected item for (const id of selectedItems) { const item = workItems.find(item => item.id === id); if (item) { const updatedItem = { ...item, status: WorkItemStatus.Completed }; await workItemApi.updateWorkItem(id, updatedItem); } } // Reload the list await loadWorkItems(); setSelectedItems(new Set()); alert(`${selectedItems.size} item(s) marked as completed!`); } catch (err) { alert('Failed to update items. Please try again.'); console.error('Error updating items:', err); } } }; if (loading) { return (

Work Item List

Loading work items...
); } if (error) { return (

Work Item List

Error: {error}
); } return (

Work Item List

Title
Status
{workItems.map((item) => ( ))}
); }