Skip to content

Commit

Permalink
Add support for modular item links in rich text
Browse files Browse the repository at this point in the history
CN-221
  • Loading branch information
Jan Lenoch committed Sep 7, 2018
1 parent 825080f commit 6d74079
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 57 deletions.
15 changes: 11 additions & 4 deletions plugins/gatsby-source-kentico-cloud/gatsby-node.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@ exports.sourceNodes = async ({ boundActionCreators, createNodeId }, { kcProjectI
)

const contentItemsResponse = await client.items().getPromise()
const contentItems = contentItemsResponse.items
normalize.refillRichTextModularCodenames(contentItems, contentItemsResponse.debug.response.data.items)
let defaultLanguageCodename = `default`

if (contentItemsResponse.items !== undefined &&
contentItemsResponse.items !== null &&
if (contentItemsResponse.items &&
Array.isArray(contentItemsResponse) &&
contentItemsResponse.items.length > 0) {
defaultLanguageCodename = contentItemsResponse.items[0].system.language
Expand All @@ -38,11 +39,13 @@ exports.sourceNodes = async ({ boundActionCreators, createNodeId }, { kcProjectI
let nonDefaultLanguageItemNodes = new Map()

languageResponses.forEach(languageResponse => {
const languageItems = languageResponse.items
normalize.refillRichTextModularCodenames(languageItems, languageResponse.debug.response.data.items)
let allNodesOfCurrentLanguage = new Array()
let languageCodename = null

contentItemNodes.forEach(contentItemNode => {
const languageVariantItem = languageResponse.items.find(variant =>
const languageVariantItem = languageItems.find(variant =>
contentItemNode.system.codename === variant.system.codename)

if (languageVariantItem !== undefined && languageVariantItem !== null) {
Expand Down Expand Up @@ -82,7 +85,11 @@ exports.sourceNodes = async ({ boundActionCreators, createNodeId }, { kcProjectI
languageNodes.forEach(itemNode => normalize.decorateItemNodesWithModularElementLinks(itemNode, languageNodes))
})

//contentItemNodes.forEach(itemNode => normalize.decorateItemNodesWithRichTextModularLinks(itemNode, contentItemNodes))
contentItemNodes.forEach(itemNode => normalize.decorateItemNodesWithRichTextModularLinks(itemNode, contentItemNodes))

nonDefaultLanguageItemNodes.forEach(languageNodes => {
languageNodes.forEach(itemNode => normalize.decorateItemNodesWithRichTextModularLinks(itemNode, languageNodes))
})

try {
contentTypeNodes.forEach(contentTypeNode => createNode(contentTypeNode))
Expand Down
100 changes: 47 additions & 53 deletions plugins/gatsby-source-kentico-cloud/normalize.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,29 @@ exports.decorateItemNodeWithLanguageVariantLink = (itemNode, allNodesOfAnotherLa
}
}

exports.refillRichTextModularCodenames = (sdkItems, debugItems) => {
if (sdkItems && debugItems && Array.isArray(sdkItems) && Array.isArray(debugItems)) {
sdkItems
.forEach(sdkItem => {
const counterpart = debugItems.find(debugItem => sdkItem.system.type === debugItem.system.type && sdkItem.system.codename === debugItem.system.codename)

Object
.keys(sdkItem)
.forEach(propertyName => {
const property = sdkItem[propertyName]

if (property && property.type && property.type === `rich_text`) {
property[`modular_content`] = counterpart.elements[propertyName].modular_content
}
})
})
}
}

exports.decorateItemNodesWithModularElementLinks = (itemNode, allNodesOfSameLanguage) => {
Object
.keys(itemNode)
.forEach(propertyName => {
//if (itemNode.related_project_references !== undefined){
const property = itemNode[propertyName]

if (Array.isArray(property) && property.length > 0 && property[0].system !== undefined) {
Expand All @@ -66,75 +84,28 @@ exports.decorateItemNodesWithModularElementLinks = (itemNode, allNodesOfSameLang
return match !== undefined && match !== null
})

linkedNodes
.forEach(linkedNode => {
if (linkedNode.usedByContentItems___NODE === undefined) {
linkedNode.usedByContentItems___NODE = new Array()
}

if (!linkedNode.usedByContentItems___NODE.includes(itemNode.id)) {
linkedNode.usedByContentItems___NODE.push(itemNode.id)
}
})

idsOfLinkedNodes = linkedNodes.map(node => node.id)

if (itemNode[linkPropertyName] === undefined) {
itemNode[linkPropertyName] = idsOfLinkedNodes
}
else {
idsOfLinkedNodes.forEach(id => {
if (!itemNode[linkPropertyName].includes(id)) {
itemNode[linkPropertyName].push(id)
}
})
}
addModularItemLinks(itemNode, linkedNodes, linkPropertyName)
}
//}
})
}

exports.decorateItemNodesWithRichTextModularLinks = (itemNode, allNodesOfSameLanguage) => {
Object
.keys(itemNode)
.forEach(propertyName => {
if (itemNode.summary !== undefined && propertyName === "summary"){
const property = itemNode[propertyName]

if (property.type !== undefined && property.type === `rich_text` && property.modular_content.length > 0) {
if (property !== undefined && property !== null && property.type !== undefined && property.type === `rich_text` && property.modular_content.length > 0) {
const linkPropertyName = `${propertyName}_nodes___NODE`

const linkedNodes = allNodesOfSameLanguage
.filter(node => {
const match = property.find(propertyNode => propertyNode.system.type === node.system.type && propertyNode.system.codename === node.system.codename)

return match !== undefined && match !== null
})
const match = property.modular_content.includes(node.system.codename)

linkedNodes
.forEach(linkedNode => {
if (linkedNode.usedByContentItems___NODE === undefined) {
linkedNode.usedByContentItems___NODE = new Array()
}

if (!linkedNode.usedByContentItems___NODE.includes(itemNode.id)) {
linkedNode.usedByContentItems___NODE.push(itemNode.id)
}
return match !== undefined && match === true
})

idsOfLinkedNodes = linkedNodes.map(node => node.id)

if (itemNode[linkPropertyName] === undefined) {
itemNode[linkPropertyName] = idsOfLinkedNodes
}
else {
idsOfLinkedNodes.forEach(id => {
if (!itemNode[linkPropertyName].includes(id)) {
itemNode[linkPropertyName].push(id)
}
})
}
}
addModularItemLinks(itemNode, linkedNodes, linkPropertyName)
}
})
}
Expand All @@ -156,10 +127,33 @@ createKcArtifactNode = (nodeId, kcArtifact, artifactKind, typeName = ``, additio
id: nodeId,
parent: null,
children: [],
usedByContentItems___NODE: new Array(),
internal: {
type: `KenticoCloud${artifactKindPascalCase}${codenamePascalCase}`,
content: nodeContent,
contentDigest: nodeContentDigest,
}
}
}

addModularItemLinks = (itemNode, linkedNodes, linkPropertyName) => {
linkedNodes
.forEach(linkedNode => {
if (!linkedNode.usedByContentItems___NODE.includes(itemNode.id)) {
linkedNode.usedByContentItems___NODE.push(itemNode.id)
}
})

const idsOfLinkedNodes = linkedNodes.map(node => node.id)

if (itemNode[linkPropertyName] === undefined) {
itemNode[linkPropertyName] = idsOfLinkedNodes
}
else {
idsOfLinkedNodes.forEach(id => {
if (!itemNode[linkPropertyName].includes(id)) {
itemNode[linkPropertyName].push(id)
}
})
}
}

0 comments on commit 6d74079

Please sign in to comment.