gatsby-source-contentful
Version:
Gatsby source plugin for building websites using the Contentful CMS as a data source
58 lines (54 loc) • 1.64 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.renderRichText = renderRichText;
var _richTextReactRenderer = require("@contentful/rich-text-react-renderer");
var _contentfulResolveResponse = _interopRequireDefault(require("contentful-resolve-response"));
// @ts-check
function renderRichText({
raw,
references
}, options = {}) {
const richText = JSON.parse(raw || null);
// If no references are given, there is no need to resolve them
if (!references || !references.length) {
return (0, _richTextReactRenderer.documentToReactComponents)(richText, options);
}
// Create dummy response so we can use official libraries for resolving the entries
const dummyResponse = {
items: [{
sys: {
type: `Entry`
},
richText
}],
includes: {
Entry: references.filter(({
__typename
}) => __typename !== `ContentfulAsset`).map(reference => {
return {
...reference,
sys: {
type: `Entry`,
id: reference.contentful_id
}
};
}),
Asset: references.filter(({
__typename
}) => __typename === `ContentfulAsset`).map(reference => {
return {
...reference,
sys: {
type: `Asset`,
id: reference.contentful_id
}
};
})
}
};
const resolved = (0, _contentfulResolveResponse.default)(dummyResponse, {
removeUnresolved: true
});
return (0, _richTextReactRenderer.documentToReactComponents)(resolved[0].richText, options);
}