import { useState } from "react"; import { createRoute } from "@tanstack/react-router"; import { Route as appRoute } from "../_app"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { api, useApiQuery, useApiMutation } from "@/lib/api"; import { useRealtime } from "@/hooks/use-realtime"; import { Plus, Flame, Trash2, Check, Calendar, TrendingUp } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from "@/components/ui/alert-dialog"; import { EntityDetailPanel } from "@/components/entities/entity-detail-panel"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { cn } from "@/lib/utils"; import type { Habit, HabitCompletion, PaginatedResponse } from "@/lib/types"; function HabitForm({ habit, onClose }: { habit?: Habit; onClose: () => void }) { const queryClient = useQueryClient(); const [name, setName] = useState(habit?.name || ""); const [description, setDescription] = useState(habit?.description || ""); const [frequency, setFrequency] = useState(habit?.frequency || "daily"); const [difficulty, setDifficulty] = useState(habit?.difficulty || "medium"); const [goalPerPeriod, setGoalPerPeriod] = useState(habit?.goalPerPeriod || 1); const createMutation = useMutation({ mutationFn: (data: any) => api.post("/habits", data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["habits"] }); onClose(); }, }); const updateMutation = useMutation({ mutationFn: (data: any) => api.patch("/habits/" + habit!.id, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["habits"] }); onClose(); }, }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!name.trim()) return; const data = { name: name.trim(), description: description || null, frequency, difficulty, goalPerPeriod }; if (habit) updateMutation.mutate(data); else createMutation.mutate(data); }; return (
setName(e.target.value)} placeholder="Habit name" required />