import type { DB } from "bknd"; import { For, Suspense } from "solid-js"; import { Footer } from "~/components/Footer"; import { List } from "~/components/List"; import { getApi } from "~/lib/bknd"; import { action, redirect, useAction, useSubmission } from "@solidjs/router"; import { query, createAsync } from "@solidjs/router"; type Todo = DB['todos']; export const getTodo = async () => { "use server" const api = await getApi({}); const limit = 5; const todos = await api.data.readMany("todos"); const total = todos.body.meta.total as number; return { total, todos: todos as unknown as Todo[], limit }; }; const getTodosFromServer = query(async () => await getTodo(), "getTodosFromServer"); const createTodo = action(async (formData: FormData) => { "use server" const title = formData.get("title") as string; const api = await getApi({}); await api.data.createOne("todos", { title }); throw redirect("/", { revalidate: getTodosFromServer.keyFor() }); }, "createTodo"); const completeTodo = action(async (todo: Todo) => { "use server" const api = await getApi({}); await api.data.updateOne("todos", todo.id, { done: !todo.done, }); throw redirect("/", { revalidate: getTodosFromServer.keyFor() }); }, "completeTodo"); const deleteTodo = action(async (todo: Todo) => { "use server" const api = await getApi({}); await api.data.deleteOne("todos", todo.id); throw redirect("/", { revalidate: getTodosFromServer.keyFor() }); }, "deleteTodo"); export default function Home() { const data = createAsync(() => getTodosFromServer()); const submission = useSubmission(createTodo); const updateTodo = useAction(completeTodo); const removeTodo = useAction(deleteTodo); return (
What's next?