gatsby-source-sanity
Version:
Gatsby source plugin for building websites using Sanity.io as a backend.
99 lines • 4.97 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var debug_1 = require("../debug");
var normalize_1 = require("./normalize");
var removeGatsbyInternalProps_1 = require("./removeGatsbyInternalProps");
var documentIds_1 = require("./documentIds");
function handleListenerEvent(event, publishedNodes, context, processingOptions) {
var actions = context.actions, createNodeId = context.createNodeId, getNode = context.getNode;
var createNode = actions.createNode, deleteNode = actions.deleteNode;
var overlayDrafts = processingOptions.overlayDrafts;
var current = getNode(documentIds_1.safeId(documentIds_1.unprefixId(event.documentId), createNodeId));
var published = publishedNodes.get(documentIds_1.unprefixId(event.documentId));
if (published) {
published = removeGatsbyInternalProps_1.removeGatsbyInternalProps(published);
}
var touchedIsDraft = documentIds_1.isDraftId(event.documentId);
var currentIsDraft = current && documentIds_1.isDraftId(current._id);
// In non-overlay mode, things are pretty simple -
// replace the current on create/update,
// delete the current if it disappears
if (!overlayDrafts) {
if (touchedIsDraft) {
debug_1.default('Document is draft, but draft overlay disabled. Skipping.');
return;
}
if (event.transition !== 'disappear') {
// Created/updated, replace current
debug_1.default('Published document created or updated, replace/create');
normalize_1.processDocument(event.result, processingOptions);
}
else if (current) {
// Deleted a node that we currently have, delete it
debug_1.default('Published document deleted, remove');
deleteNode({ node: current });
}
return;
}
// In overlay mode, things are a bit more tricky.
// We need to keep a copy of the published documents around so we can
// put the published version back if a draft is discarded (deleted).
// If a published document is updated but there is still a draft,
// we still want to show the draft. A lot of cases here, unfortunately.
if (event.transition === 'disappear') {
// A document was deleted
if (touchedIsDraft && published) {
debug_1.default('Draft deleted, published version exists, restore published version');
createNode(published);
}
else if (touchedIsDraft && !published && current) {
debug_1.default('Draft deleted, no published version exist, delete node');
deleteNode({ node: current });
}
else if (!touchedIsDraft && currentIsDraft && published) {
debug_1.default('Published version deleted, but we have draft, remove published from working set');
publishedNodes.delete(event.documentId);
}
else if (!touchedIsDraft && !currentIsDraft && current) {
debug_1.default('Published version deleted, we have no draft, remove node entirely');
deleteNode({ node: current });
publishedNodes.delete(event.documentId);
}
}
else {
// A document was updated / created
if (touchedIsDraft) {
debug_1.default(current ? 'Replace the current draft with a new draft' : 'New draft discovered');
normalize_1.processDocument(event.result, processingOptions);
// If the currently used node is a published one, make sure we keep a copy
if (current && !currentIsDraft) {
publishedNodes.set(documentIds_1.unprefixId(event.documentId), current);
}
}
else if (currentIsDraft) {
// Creating/updating a published document, but we have a draft
// Keep the draft as the current, but update our set of published docs
debug_1.default('Created/updating published document, but draft overlays it');
publishedNodes.set(event.documentId, normalize_1.processDocument(event.result, __assign(__assign({}, processingOptions), { skipCreate: true })));
}
else {
// Creating/updating a published document, and there is no draft version present
// Replace the current version with the new one
debug_1.default('Created/updating published document, no draft present');
normalize_1.processDocument(event.result, processingOptions);
}
}
}
exports.handleListenerEvent = handleListenerEvent;
//# sourceMappingURL=handleListenerEvent.js.map