sb-mig
Version:
CLI to rule the world. (and handle stuff related to Storyblok CMS)
53 lines (52 loc) • 1.9 kB
JavaScript
import Logger from "../../utils/logger.js";
import { createStory, updateStory } from "./stories.js";
export const createTree = (stories, storiesToUpdate = []) => {
return buildTree(stories, null, storiesToUpdate);
};
const buildTree = (nodes, parentId = null, storiesToUpdate = []) => {
const tree = [];
nodes.forEach((node) => {
if (node.parent_id === parentId) {
const children = buildTree(nodes, node.id, storiesToUpdate);
tree.push({
action: storiesToUpdate.includes(node?.full_slug)
? "update"
: "create",
id: node.id,
parent_id: node.parent_id,
story: node,
children,
});
}
});
return tree;
};
export const traverseAndCreate = async (input, config) => {
const { tree, realParentId, spaceId } = input;
for (const node of tree) {
try {
const { action, story } = node;
const { parent, ...content } = story;
let storyId = story.id;
if (action === "create") {
const result = await createStory({ ...content, parent_id: realParentId }, { ...config, spaceId });
storyId = result.story.id;
}
else if (action === "update") {
const result = await updateStory({ ...content, parent_id: realParentId }, `${storyId}`, { force_update: true }, { ...config, spaceId });
storyId = result.story.id;
}
if (node.children) {
await traverseAndCreate({
tree: node.children,
realParentId: storyId,
spaceId,
}, config);
}
}
catch (e) {
Logger.error("Error happened");
Logger.error(e);
}
}
};