import { useMutation, useSuspenseQuery } from '@tanstack/react-query' import { createFileRoute } from '@tanstack/react-router' import type { ChangeEvent, FormEvent } from 'react' import { useState } from 'react' import { orpc } from '@/orpc' export const Route = createFileRoute('/todos')({ component: Todo, }) function Todo() { const [newTodoTitle, setNewTodoTitle] = useState('') const listQuery = useSuspenseQuery(orpc.todo.list.queryOptions()) const createMutation = useMutation(orpc.todo.create.mutationOptions()) const updateMutation = useMutation(orpc.todo.update.mutationOptions()) const deleteMutation = useMutation(orpc.todo.remove.mutationOptions()) const handleCreateTodo = (e: FormEvent) => { e.preventDefault() if (newTodoTitle.trim()) { createMutation.mutate(newTodoTitle.trim()) } } const handleInputChange = (e: ChangeEvent) => { setNewTodoTitle(e.target.value) } const handleToggleTodo = (id: string, currentCompleted: boolean) => { updateMutation.mutate({ id, completed: !currentCompleted }) } const handleDeleteTodo = (id: string) => { deleteMutation.mutate(id) } const completedCount = todos.filter((todo) => todo.completed).length const totalCount = todos.length const progress = totalCount > 0 ? (completedCount / totalCount) * 100 : 0 return (
{/* Header */}

我的待办

保持专注,逐个击破

{completedCount} /{totalCount}
已完成
{/* Add Todo Form */}
{/* Progress Bar (Only visible when there are tasks) */} {totalCount > 0 && (
)} {/* Todo List */}
{todos.length === 0 ? (

没有待办事项

输入上方内容添加您的第一个任务

) : ( todos.map((todo) => (

{todo.title}

{new Date(todo.createdAt).toLocaleDateString('zh-CN')}
)) )}
) }