'use client' import { useEffect, useState } from 'react' import { Calendar } from '@/components/ui/calendar' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { loadHabitsData } from '@/app/actions/data' import { Habit } from '@/lib/types' import { d2s, getNow } from '@/lib/utils' import { useAtom } from 'jotai' import { settingsAtom } from '@/lib/atoms' import { DateTime } from 'luxon' export default function HabitCalendar() { const [settings] = useAtom(settingsAtom) const [selectedDate, setSelectedDate] = useState(getNow({ timezone: settings.system.timezone })) const [habits, setHabits] = useState([]) useEffect(() => { fetchHabitsData() }, []) const fetchHabitsData = async () => { const data = await loadHabitsData() setHabits(data.habits) } const getHabitsForDate = (date: Date) => { const dateString = date.toISOString().split('T')[0] return habits.filter(habit => habit.completions.includes(dateString) ) } return (

Habit Calendar

Calendar e && setSelectedDate(DateTime.fromJSDate(e))} className="rounded-md border" modifiers={{ completed: (date) => getHabitsForDate(date).length > 0, }} modifiersClassNames={{ completed: 'bg-green-100 text-green-800 font-bold', }} /> {selectedDate ? ( <>Habits for {d2s({ dateTime: selectedDate, timezone: settings.system.timezone })} ) : ( 'Select a date' )} {selectedDate && (
    {habits.map((habit) => { const isCompleted = getHabitsForDate(selectedDate.toJSDate()).some(h => h.id === habit.id) return (
  • {habit.name} {isCompleted ? ( Completed ) : ( Not Completed )}
  • ) })}
)}
) }