UNPKG

@paroicms/site-generator-plugin

Version:

ParoiCMS Site Generator Plugin

49 lines (48 loc) 2.21 kB
import { encodeLNodeId, } from "@paroicms/public-anywhere-lib"; export async function updateLNodesWithTaxonomies(ctx, options) { const { siteSchema, siteConnector } = ctx; const { idPicker } = options; const { nodeTypes } = siteSchema; for (const nodeType of Object.values(nodeTypes)) { const labelingFields = nodeType.fields?.filter((f) => f.dataType === "labeling"); if (!labelingFields || labelingFields.length === 0) continue; await updateLabelingFields(ctx, { idPicker, nodeType, labelingFields, }, siteConnector); } } async function updateLabelingFields(ctx, options, siteConnector) { const { nodeType, labelingFields, idPicker } = options; if (nodeType.kind !== "document" && nodeType.kind !== "part") return; const nodeIds = idPicker.pickNodeIds({ typeName: nodeType.typeName }); // Labeling fields are not localized, so use default language const defaultLanguage = ctx.siteSchema.languages[0]; for (const nodeId of nodeIds) { const fieldValues = {}; for (const field of labelingFields) { const taxonomyIds = idPicker.pickNodeIds({ typeName: field.taxonomy }); if (taxonomyIds.length !== 1) { if (taxonomyIds.length > 1) { ctx.logger.warn(`Expected one taxonomy ID for "${field.taxonomy}", got ${taxonomyIds.length}`); } continue; } const taxonomyNodeId = taxonomyIds[0]; const max = field.multiple ? Math.floor(Math.random() * 2) + 1 : 1; const termNodeIds = idPicker.pickNodeIds({ parentNodeId: taxonomyNodeId }, max); if (termNodeIds.length === 0) continue; const labelingValue = { t: termNodeIds }; fieldValues[field.name] = labelingValue; } if (Object.keys(fieldValues).length === 0) continue; // Use updateFields with the default language since labeling is not localized const lNodeId = encodeLNodeId({ nodeId, language: defaultLanguage }); await siteConnector.updateFields(lNodeId, fieldValues); } }