import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Checkbox } from "@/components/ui/checkbox"; import { Input } from "@/components/ui/input"; {{#if (eq api "orpc")}} import { orpc } from "@/utils/orpc"; {{/if}} {{#if (eq api "trpc")}} import { trpc } from "@/utils/trpc"; {{/if}} import { useMutation, useQuery } from "@tanstack/react-query"; import { createFileRoute } from "@tanstack/react-router"; import { Loader2, Trash2 } from "lucide-react"; import { useState } from "react"; export const Route = createFileRoute("/todos")({ component: TodosRoute, }); function TodosRoute() { const [newTodoText, setNewTodoText] = useState(""); {{#if (eq api "orpc")}} const todos = useQuery(orpc.todo.getAll.queryOptions()); const createMutation = useMutation( orpc.todo.create.mutationOptions({ onSuccess: () => { todos.refetch(); setNewTodoText(""); }, }), ); const toggleMutation = useMutation( orpc.todo.toggle.mutationOptions({ onSuccess: () => todos.refetch(), }), ); const deleteMutation = useMutation( orpc.todo.delete.mutationOptions({ onSuccess: () => todos.refetch(), }), ); {{/if}} {{#if (eq api "trpc")}} const todos = useQuery(trpc.todo.getAll.queryOptions()); const createMutation = useMutation( trpc.todo.create.mutationOptions({ onSuccess: () => { todos.refetch(); setNewTodoText(""); }, }), ); const toggleMutation = useMutation( trpc.todo.toggle.mutationOptions({ onSuccess: () => todos.refetch(), }), ); const deleteMutation = useMutation( trpc.todo.delete.mutationOptions({ onSuccess: () => todos.refetch(), }), ); {{/if}} const handleAddTodo = (e: React.FormEvent) => { e.preventDefault(); if (newTodoText.trim()) { createMutation.mutate({ text: newTodoText }); } }; const handleToggleTodo = (id: number, completed: boolean) => { toggleMutation.mutate({ id, completed: !completed }); }; const handleDeleteTodo = (id: number) => { deleteMutation.mutate({ id }); }; return (
Todo List Manage your tasks efficiently
setNewTodoText(e.target.value)} placeholder="Add a new task..." disabled={createMutation.isPending} />
{todos.isLoading ? (
) : todos.data?.length === 0 ? (

No todos yet. Add one above!

) : (
    {todos.data?.map((todo) => (
  • handleToggleTodo(todo.id, todo.completed) } id={`todo-${todo.id}`} />
  • ))}
)}
); }