@paroicms/server
Version:
The ParoiCMS server
109 lines • 5.03 kB
JavaScript
import { createNoTracker } from "@paroicms/internal-server-lib";
import { encodeLNodeId, parseLNodeId } from "@paroicms/public-anywhere-lib";
import { type } from "arktype";
import { siteReadyGuard } from "../../graphql/graphql.types.js";
import { permissionGuard } from "../auth/authorization.helper.js";
import { formatGqlOrderBy } from "./lnode-wrap.formatters.js";
import { getBreadcrumb, getChildDocuments, getDocuments, getParentLanguages, searchDocuments, setLNodeReady, } from "./lnode.queries.js";
import { searchRedirectLNodes } from "./redirect-lnode.queries.js";
const LNodeLanguageRowAT = type({
language: "string",
"+": "reject",
});
export const documentListResolvers = {
Query: {
pagedChildDocuments: async (_parent, { parentDocumentId, offset, limit, sorting, missingInLanguage }, { siteContext, httpContext }) => {
siteReadyGuard(siteContext);
await permissionGuard(siteContext, httpContext, "document.edit");
const parentId = parseLNodeId(parentDocumentId);
const result = await getChildDocuments(siteContext, {
parentNodeId: parentId.nodeId,
language: parentId.language,
missingInLanguage: missingInLanguage ?? false,
pagination: { limit, offset },
sorting: sorting ? formatGqlOrderBy(sorting) : undefined,
});
return {
items: result.items,
total: result.total,
offset,
};
},
searchDocuments: async (_parent, { language, queryString, offset, limit, sorting }, { siteContext, httpContext }) => {
siteReadyGuard(siteContext);
await permissionGuard(siteContext, httpContext, "document.edit");
return await searchDocuments(siteContext, {
language,
queryString,
offset,
limit,
sorting: sorting ? formatGqlOrderBy(sorting) : undefined,
});
},
searchRedirectLNodes: async (_parent, { language, queryString, offset, limit }, { siteContext, httpContext }) => {
siteReadyGuard(siteContext);
await permissionGuard(siteContext, httpContext, "document.edit");
return await searchRedirectLNodes(siteContext, { language, queryString, offset, limit });
},
documents: async (_parent, { parentDocumentId }, { siteContext, httpContext }) => {
siteReadyGuard(siteContext);
await permissionGuard(siteContext, httpContext, "document.edit");
const parentId = parseLNodeId(parentDocumentId);
return (await getDocuments(siteContext, { parentId })).documents;
},
},
Mutation: {
setLNodeReady: async (_parent, { lNodeId, ready }, { siteContext, httpContext }) => {
siteReadyGuard(siteContext);
await permissionGuard(siteContext, httpContext, "document.edit");
const parsedId = parseLNodeId(lNodeId);
await setLNodeReady(siteContext, {
lNodeId: parsedId,
ready,
});
return true;
},
},
Document: {
translatedInto: async ({ nodeId }, _args, { siteContext }) => {
siteReadyGuard(siteContext);
const lNodes = await siteContext
.cn("PaLNode as l")
.select("l.language")
.where("l.nodeId", nodeId);
return lNodes.map((item) => LNodeLanguageRowAT.assert(item).language);
},
translations: async ({ nodeId }, _args, { siteContext }) => {
siteReadyGuard(siteContext);
const { cn } = siteContext;
const rows = await cn("PaLNode as l").select("l.language").where("l.nodeId", nodeId);
const translations = rows.map((row) => {
const language = LNodeLanguageRowAT.assert(row).language;
return {
language,
lNodeId: encodeLNodeId({
language,
nodeId,
}),
};
});
return translations;
},
parentLanguages: async ({ nodeId }, _args, { siteContext }) => {
siteReadyGuard(siteContext);
return await getParentLanguages(siteContext, nodeId);
},
breadcrumb: async ({ nodeId, language }, _args, { siteContext }) => {
siteReadyGuard(siteContext);
const breadcrumb = await getBreadcrumb(siteContext, createNoTracker(), { nodeId, language });
return breadcrumb.map((item) => ({
language: item.documentId.language,
nodeId: item.documentId.nodeId,
typeName: item.typeName,
documentId: encodeLNodeId(item.documentId),
title: item.title,
}));
},
},
};
//# sourceMappingURL=document-list.resolver.js.map