nitropage
Version:
A free and open source, extensible visual page builder based on SolidStart.
52 lines (45 loc) • 1.49 kB
text/typescript
import { getUser } from "#lib/auth/server";
import { deletePageRevision as deletePageRevision_ } from "#lib/server/page";
import { useDatabase } from "#lib/server/prisma";
import { getRevision as getRevision_ } from "#lib/server/revision";
import { action, createAsync, query, reload, useParams } from "@solidjs/router";
export const getLatestRevision = query(
async ({ pageId }: { pageId: string }) => {
"use server";
await getUser({ assert: {} });
const db = useDatabase();
const revision = await db.nitroPageRevision.findFirst({
select: { id: true },
where: {
page: { id: pageId },
},
orderBy: {
// TODO: Replace with createdAt
savedAt: "desc",
},
});
return revision?.id;
},
"np-latestPageRevision",
);
export const useRouterLatestRevision = (opts = { deferStream: true }) => {
const params = useParams();
return createAsync(() => getLatestRevision({ pageId: params.page }), opts);
};
export const deletePageRevision = action(
async (id: string, skipReload?: boolean) => {
"use server";
await getUser({ assert: { csrf: true } });
await deletePageRevision_(id);
if (skipReload) {
return reload({ revalidate: "$$$nope" });
}
},
"np-deletePageRevision",
);
export const getRevision = query(async ({ id }: { id: string }) => {
"use server";
if (id == null) return;
await getUser({ assert: {} });
return await getRevision_(id, true);
}, "np-pageRevision");