UNPKG

gatsby-source-sanity

Version:

Gatsby source plugin for building websites using Sanity.io as a backend.

99 lines 4.97 kB
"use strict"; 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