import React, { useState, useEffect } from 'react'; import { choreService, CreateChoreRequest } from '../api/chores'; import api from '../api/axios'; import { User } from '../api/auth'; interface CreateChoreModalProps { onClose: () => void; onSuccess: () => void; } const CreateChoreModal: React.FC = ({ onClose, onSuccess }) => { const [formData, setFormData] = useState({ title: '', description: '', room: '', frequency: 'daily', assigned_to: undefined, due_date: '', }); const [users, setUsers] = useState([]); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(''); useEffect(() => { loadUsers(); }, []); const loadUsers = async () => { try { const response = await api.get('/api/v1/users'); setUsers(response.data); } catch (error) { console.error('Failed to load users:', error); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); setIsLoading(true); try { await choreService.createChore(formData); onSuccess(); } catch (err: any) { // Handle different error response formats let errorMessage = 'Failed to create task'; if (err.response?.data) { const errorData = err.response.data; // Check if it's a validation error array if (Array.isArray(errorData.detail)) { errorMessage = errorData.detail .map((e: any) => `${e.loc?.join('.')}: ${e.msg}`) .join(', '); } else if (typeof errorData.detail === 'string') { errorMessage = errorData.detail; } else if (typeof errorData === 'string') { errorMessage = errorData; } } setError(errorMessage); } finally { setIsLoading(false); } }; const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: name === 'assigned_to' ? (value ? parseInt(value) : undefined) : value, })); }; return (

Create New Task

{error && (
{error}
)}