From da92c08a7e6e6f02631b25010bdb728ee8c97542 Mon Sep 17 00:00:00 2001 From: jessikitty Date: Tue, 27 Jan 2026 22:22:37 +1100 Subject: [PATCH] Add ChoreCard component --- frontend/src/components/ChoreCard.tsx | 90 +++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 frontend/src/components/ChoreCard.tsx diff --git a/frontend/src/components/ChoreCard.tsx b/frontend/src/components/ChoreCard.tsx new file mode 100644 index 0000000..4b2a39f --- /dev/null +++ b/frontend/src/components/ChoreCard.tsx @@ -0,0 +1,90 @@ +import React from 'react'; +import { Chore } from '../api/chores'; + +interface ChoreCardProps { + chore: Chore; + onComplete: (id: number) => void; + onDelete: (id: number) => void; +} + +const ChoreCard: React.FC = ({ chore, onComplete, onDelete }) => { + const statusColors = { + pending: 'bg-yellow-100 text-yellow-800', + in_progress: 'bg-blue-100 text-blue-800', + completed: 'bg-green-100 text-green-800', + skipped: 'bg-gray-100 text-gray-800', + }; + + const frequencyIcons = { + daily: '📅', + weekly: '📆', + monthly: '🗓️', + once: '⏱️', + }; + + return ( +
+
+

{chore.title}

+ + {chore.status.replace('_', ' ')} + +
+ + {chore.description && ( +

{chore.description}

+ )} + +
+
+ + + + {chore.room} +
+ +
+ {frequencyIcons[chore.frequency]} + {chore.frequency} +
+ + {chore.assigned_user && ( +
+ + + + {chore.assigned_user.full_name} +
+ )} + + {chore.due_date && ( +
+ + + + {new Date(chore.due_date).toLocaleDateString()} +
+ )} +
+ +
+ {chore.status !== 'completed' && ( + + )} + +
+
+ ); +}; + +export default ChoreCard;