diff --git a/package.json b/package.json index 4c62b34..de5a24c 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@prisma/adapter-libsql": "^5.14.0", "@prisma/client": "^5.7.0", "@solidjs/meta": "^0.29.4", - "@solidjs/router": "^0.14.5", + "@solidjs/router": "^0.15.0", "@solidjs/start": "^1.0.6", "@unocss/reset": "^0.58.5", "better-sqlite3": "^9.4.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6167e5b..c39330a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^0.29.4 version: 0.29.4(solid-js@1.8.22) '@solidjs/router': - specifier: ^0.14.5 - version: 0.14.5(solid-js@1.8.22) + specifier: ^0.15.0 + version: 0.15.0(solid-js@1.8.22) '@solidjs/start': specifier: ^1.0.6 version: 1.0.6(rollup@4.21.0)(solid-js@1.8.22)(vinxi@0.4.2(@libsql/client@0.6.2)(@types/node@20.16.1)(better-sqlite3@9.6.0)(ioredis@5.4.1)(terser@5.31.6))(vite@5.4.2(@types/node@20.16.1)(terser@5.31.6)) @@ -942,8 +942,8 @@ packages: peerDependencies: solid-js: '>=1.8.4' - '@solidjs/router@0.14.5': - resolution: {integrity: sha512-J8ZMntnkDvNCSO9n4HyhlQlGdxYa1mandQLt5LMd0YiWAXGlYzjj+bB+OVtzsH1woWfoEJlVnBnGkMpf2lY/ig==} + '@solidjs/router@0.15.0': + resolution: {integrity: sha512-Q286eKFh9sY2OeSISqiNrZW5ZJ7M58fkxCfFeYg0KE15P9QMwhT9YqnInE/OdzavWzXU3ZYclV2NGVKz8pfqWg==} peerDependencies: solid-js: ^1.8.6 @@ -3893,7 +3893,7 @@ snapshots: dependencies: solid-js: 1.8.22 - '@solidjs/router@0.14.5(solid-js@1.8.22)': + '@solidjs/router@0.15.0(solid-js@1.8.22)': dependencies: solid-js: 1.8.22 diff --git a/src/lib/index.ts b/src/lib/index.ts index 321257c..0a9cd8e 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,10 +1,10 @@ -import { action, cache, redirect } from "@solidjs/router"; +import { action, query, redirect } from "@solidjs/router"; import { db } from "./db"; import { login, register, validateEmail, validatePassword } from "./server"; import { getAuthUser, logoutSession, setAuthOnResponse } from "./auth"; import { BoardData } from "~/components/Board"; -export const getUser = cache(async () => { +export const getUser = query(async () => { "use server"; const userId = await getAuthUser(); if (!userId) throw redirect("/login"); @@ -38,7 +38,7 @@ export const logout = action(async () => { throw redirect("/login"); }); -export const redirectIfLoggedIn = cache(async () => { +export const redirectIfLoggedIn = query(async () => { "use server"; let userId = await getAuthUser(); @@ -48,7 +48,7 @@ export const redirectIfLoggedIn = cache(async () => { return null; }, "loggedIn"); -export const fetchBoard = cache(async (boardId: number) => { +export const fetchBoard = query(async (boardId: number) => { "use server"; const accountId = await getAuthUser(); diff --git a/src/routes/board/[id].tsx b/src/routes/board/[id].tsx index f5e188f..902cc34 100644 --- a/src/routes/board/[id].tsx +++ b/src/routes/board/[id].tsx @@ -4,6 +4,9 @@ import { RouteSectionProps, action, createAsync, + query, + reload, + revalidate, useAction, useSubmission, } from "@solidjs/router"; @@ -18,11 +21,23 @@ const updateBoardName = action(async (boardId: number, name: string) => { "use server"; const accountId = await getAuthUser(); - return db.board.update({ + await db.board.update({ where: { id: boardId, accountId }, data: { name }, }); -}, "update-board-name"); + + return reload({ revalidate: "nothing" }); +}, { + name: "update-board-name", + onComplete: (submission) => { + const key = fetchBoard.keyFor(submission.input[0]); + const data = query.get(key); + data.board.title = submission.input[1]; + + revalidate(key, false); + return true; + } +}); export const route: RouteDefinition = { preload: (props) => fetchBoard(+props.params.id), diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 8aca058..388484f 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -1,8 +1,8 @@ import { Title } from "@solidjs/meta"; import { action, - cache, createAsync, + query, redirect, useSubmission, useSubmissions, @@ -42,7 +42,7 @@ const deleteBoard = action(async (boardId: number) => { }); }, "delete-board"); -const getBoards = cache(async () => { +const getBoards = query(async () => { "use server"; const userId = await getAuthUser();