'use client'; import React, { useState } from 'react'; interface TaskFormData { title: string; description?: string; startTime?: string; endTime?: string; dayOfWeek?: number; } interface TaskFormProps { onSubmit: (task: TaskFormData) => void; isLoading?: boolean; } const TaskForm: React.FC = ({ onSubmit, isLoading = false }) => { const [formData, setFormData] = useState({ title: '', description: '', startTime: '', endTime: '', dayOfWeek: 1 // Default to Monday }); const [errors, setErrors] = useState>({}); const validateForm = (): boolean => { const newErrors: Record = {}; if (!formData.title.trim()) { newErrors.title = 'Title is required'; } // Validate time format if provided if (formData.startTime && !isValidTime(formData.startTime)) { newErrors.startTime = 'Invalid time format'; } if (formData.endTime && !isValidTime(formData.endTime)) { newErrors.endTime = 'Invalid time format'; } // Check if start time is before end time if both are provided if (formData.startTime && formData.endTime) { const start = parseTime(formData.startTime); const end = parseTime(formData.endTime); if (start >= end) { newErrors.endTime = 'End time must be after start time'; } } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const isValidTime = (time: string): boolean => { const timeRegex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/; return timeRegex.test(time); }; const parseTime = (time: string): number => { const [hours, minutes] = time.split(':').map(Number); return hours * 60 + minutes; }; const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData({ ...formData, [name]: value }); // Clear error when user starts typing if (errors[name]) { setErrors(prev => { const newErrors = { ...prev }; delete newErrors[name]; return newErrors; }); } }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (validateForm()) { onSubmit(formData); // Reset form setFormData({ title: '', description: '', startTime: '', endTime: '', dayOfWeek: 1 }); setErrors({}); } }; return (

Add New Task

{errors.title &&

{errors.title}

}