@paroicms/server
Version:
The ParoiCMS server
72 lines • 3.09 kB
JavaScript
import { encodeLNodeId, parseLNodeId } from "@paroicms/public-anywhere-lib";
import { assignLoadDescriptor } from "@paroicms/public-server-lib";
import { type } from "arktype";
import { makeCacheDependencyKey } from "../common/text-cache.js";
import { mainDbSchemaName } from "../connector/db-init/db-constants.js";
import { createLiquidDrop } from "../liquidjs-tools/liquidjs-drop.js";
import { getHomeUrl, getUrlOfDocument } from "../rendered-site/page-route/make-url.js";
export function makeBasicTranslationsPayload(siteContext) {
return siteContext.siteSchema.languages.map((language) => {
return assignLoadDescriptor({
language,
languageLabel: siteContext.siteSchema.languageLabels[language],
active: false,
url: getHomeUrl(siteContext, language),
}, {
load: "one",
nodeKind: "document",
descriptorName: "id",
documentId: parseLNodeId(siteContext.homeRoutingCluster.lNodeIds[language]),
});
});
}
export async function loadTranslationsAsDrops(renderingContext, documentId) {
const { siteContext } = renderingContext;
const { nodeId } = documentId;
const existingLanguages = await getExistingLanguagesOf(siteContext, renderingContext.tracker, nodeId);
const translations = [];
for (const language of siteContext.siteSchema.languages) {
const exists = existingLanguages.has(language);
const itemId = { nodeId, language };
translations.push(createLiquidDrop(renderingContext, {
renderingCacheKey: `translation:${encodeLNodeId(itemId)}`,
values: {
language,
languageLabel: siteContext.siteSchema.languageLabels[language],
active: language === documentId.language,
url: exists
? async () => await getUrlOfDocument(siteContext, renderingContext.tracker, {
nodeId,
language,
})
: getHomeUrl(siteContext, language),
},
}, {
loadDescriptor: {
load: "one",
nodeKind: "document",
descriptorName: "id",
documentId,
},
}));
if (language !== documentId.language) {
renderingContext.addDependencyKey(makeCacheDependencyKey({ documentId: itemId }));
}
}
renderingContext.addDependencyKey(makeCacheDependencyKey({ nodeId }));
return translations;
}
const TranslationLanguageRowAT = type({
language: "string",
"+": "reject",
});
async function getExistingLanguagesOf(siteContext, tracker, nodeId) {
const documents = await siteContext
.cn("PaLNode as l")
.select("l.language")
.where("l.nodeId", nodeId)
.where("l.ready", 1);
tracker.trackAccess(mainDbSchemaName, "PaLNode", "read");
return new Set(documents.map((item) => TranslationLanguageRowAT.assert(item).language));
}
//# sourceMappingURL=translations.queries.js.map