import { createFileRoute, useRouter, } from "@tanstack/react-router"; import { getApi } from "@/userbase"; import { createServerFn, useServerFn } from "@tanstack/react-start"; import { Footer } from "@/components/Footer"; import { List } from "@/components/List"; export const completeTodo = createServerFn({ method: "POST" }) .inputValidator( (data) => data as { done: boolean; id: number; title: string }, ) .handler(async ({ data: todo }) => { try { const api = await getApi({}); await api.data.updateOne("todos", todo.id, { done: !todo.done, }); console.log("state updated in db"); } catch (error) { console.log(error); } }); export const deleteTodo = createServerFn({ method: "POST" }) .inputValidator((data) => data as { id: number }) .handler(async ({ data }) => { try { const api = await getApi({}); await api.data.deleteOne("todos", data.id); console.log("todo deleted from db"); } catch (error) { console.log(error); } }); export const createTodo = createServerFn({ method: "POST" }) .inputValidator((data) => data as { title: string }) .handler(async ({ data }) => { try { const api = await getApi({}); await api.data.createOne("todos", { title: data.title }); console.log("todo created in db"); } catch (error) { console.log(error); } }); export const getTodo = createServerFn({ method: "POST" }).handler(async () => { const api = await getApi({}); const limit = 5; const todos = await api.data.readMany("todos", { limit, sort: "-id" }); const total = todos.body.meta.total as number; return { total, todos, limit }; }); export const Route = createFileRoute("/")({ ssr:false, component: App, loader: async () => { return await getTodo(); }, }); function App() { const { todos, total, limit } = Route.useLoaderData(); const router = useRouter(); const updateTodo = useServerFn(completeTodo); const removeTodo = useServerFn(deleteTodo); const addTodo = useServerFn(createTodo); return (
What's next?