UNPKG

@paroicms/server

Version:
109 lines 5.03 kB
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