'use client' import {useState} from 'react'; import {Plus, Save} from 'lucide-react'; import Button from '@/components/ui/Button'; interface TimeGoal { desiredReleaseDate: string; maxReleaseDate: string; } interface NumbersGoal { minWordsCount: number; maxWordsCount: number; desiredWordsCountByChapter: number; desiredChapterCount: number; } interface Goal { id: number; name: string; timeGoal: TimeGoal; numbersGoal: NumbersGoal; } export default function GoalsPage() { const [goals, setGoals] = useState([ { id: 1, name: 'First Goal', timeGoal: { desiredReleaseDate: '', maxReleaseDate: '', }, numbersGoal: { minWordsCount: 0, maxWordsCount: 0, desiredWordsCountByChapter: 0, desiredChapterCount: 0, }, }, ]); const [selectedGoalIndex, setSelectedGoalIndex] = useState(0); const [newGoalName, setNewGoalName] = useState(''); const handleAddGoal = () => { const newGoal: Goal = { id: goals.length + 1, name: newGoalName, timeGoal: { desiredReleaseDate: '', maxReleaseDate: '', }, numbersGoal: { minWordsCount: 0, maxWordsCount: 0, desiredWordsCountByChapter: 0, desiredChapterCount: 0, }, }; setGoals([...goals, newGoal]); setNewGoalName(''); }; const handleInputChange = (e: React.ChangeEvent, field: keyof Goal, subField?: keyof TimeGoal | keyof NumbersGoal) => { const updatedGoals = [...goals]; if (subField) { if (field === 'timeGoal' && subField in updatedGoals[selectedGoalIndex].timeGoal) { (updatedGoals[selectedGoalIndex].timeGoal[subField as keyof TimeGoal] as string) = e.target.value; } else if (field === 'numbersGoal' && subField in updatedGoals[selectedGoalIndex].numbersGoal) { (updatedGoals[selectedGoalIndex].numbersGoal[subField as keyof NumbersGoal] as number) = Number(e.target.value); } } else { (updatedGoals[selectedGoalIndex][field] as string) = e.target.value; } setGoals(updatedGoals); }; return (

Goals

setNewGoalName(e.target.value)} className="input-base" placeholder="New Goal Name" />

{goals[selectedGoalIndex].name}

Time Goal

handleInputChange(e, 'timeGoal', 'desiredReleaseDate')} className="input-base" /> handleInputChange(e, 'timeGoal', 'maxReleaseDate')} className="input-base" />

Numbers Goal

handleInputChange(e, 'numbersGoal', 'minWordsCount')} className="input-base" /> handleInputChange(e, 'numbersGoal', 'maxWordsCount')} className="input-base" /> handleInputChange(e, 'numbersGoal', 'desiredWordsCountByChapter')} className="input-base" /> handleInputChange(e, 'numbersGoal', 'desiredChapterCount')} className="input-base" />
); }