gatsby-source-morty
Version:
Gatsby source plugin for building websites using the Morty CMS as a data source
91 lines (69 loc) • 2.52 kB
JavaScript
;
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _lodash = require('lodash');
var _utils = require('./utils');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function createImageNode(node, field, _ref) {
var createNode = _ref.createNode,
createParentChildLink = _ref.createParentChildLink;
var image = node[field];
var specialFields = (0, _keys2.default)(image).filter(function (field) {
return field.slice(0, 2) === '__';
});
var item = (0, _lodash.omit)(image, specialFields);
var imageNode = (0, _extends3.default)({}, item, {
id: image.id,
parent: node.id,
children: [],
internal: {
type: 'MortyImage',
mediaType: 'application/json',
content: (0, _stringify2.default)(item),
contentDigest: (0, _utils.digest)(item)
}
});
node[field + '___NODE'] = image.id;
node.children = node.children.concat([imageNode.id]);
createParentChildLink({ parent: node, child: imageNode });
createNode(imageNode);
}
function createDescriptionListItemNodes(node, _ref2) {
var createNode = _ref2.createNode,
createParentChildLink = _ref2.createParentChildLink;
node.descriptionListItems.forEach(function (item) {
var itemNode = (0, _extends3.default)({}, item, {
id: item.id,
parent: node.id,
children: [],
internal: {
type: 'MortyDescriptionListItem',
mediaType: 'application/json',
contentDigest: (0, _utils.digest)(item)
}
});
node['descriptionListItems___NODE'] = node.children;
createParentChildLink({ parent: node, child: itemNode });
createNode(itemNode);
});
}
function onCreateNode(_ref3, pluginOptions) {
var node = _ref3.node,
boundActionCreators = _ref3.boundActionCreators;
if (node.internal.mediaType !== 'application/json') {
return;
}
['bannerImage', 'abstractPhoto', 'headshot', 'image', 'attributionPhoto'].forEach(function (iField) {
if (node[iField]) {
createImageNode(node, iField, boundActionCreators);
}
});
if (node.descriptionListItems) {
createDescriptionListItemNodes(node, boundActionCreators);
}
}
exports.onCreateNode = onCreateNode;