UNPKG

5.23 kBJavaScriptView Raw
1"use strict";
2var __assign = (this && this.__assign) || function () {
3 __assign = Object.assign || function(t) {
4 for (var s, i = 1, n = arguments.length; i < n; i++) {
5 s = arguments[i];
6 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7 t[p] = s[p];
8 }
9 return t;
10 };
11 return __assign.apply(this, arguments);
12};
13var __importDefault = (this && this.__importDefault) || function (mod) {
14 return (mod && mod.__esModule) ? mod : { "default": mod };
15};
16Object.defineProperty(exports, "__esModule", { value: true });
17exports.handleListenerEvent = void 0;
18var debug_1 = __importDefault(require("../debug"));
19var normalize_1 = require("./normalize");
20var removeGatsbyInternalProps_1 = require("./removeGatsbyInternalProps");
21var documentIds_1 = require("./documentIds");
22function handleListenerEvent(event, publishedNodes, context, processingOptions) {
23 var actions = context.actions, createNodeId = context.createNodeId, getNode = context.getNode;
24 var createNode = actions.createNode, deleteNode = actions.deleteNode;
25 var overlayDrafts = processingOptions.overlayDrafts;
26 var current = getNode(documentIds_1.safeId(documentIds_1.unprefixId(event.documentId), createNodeId));
27 var published = publishedNodes.get(documentIds_1.unprefixId(event.documentId));
28 if (published) {
29 published = removeGatsbyInternalProps_1.removeGatsbyInternalProps(published);
30 }
31 var touchedIsDraft = documentIds_1.isDraftId(event.documentId);
32 var currentIsDraft = current && documentIds_1.isDraftId(current._id);
33 // In non-overlay mode, things are pretty simple -
34 // replace the current on create/update,
35 // delete the current if it disappears
36 if (!overlayDrafts) {
37 if (touchedIsDraft) {
38 debug_1.default('Document is draft, but draft overlay disabled. Skipping.');
39 return;
40 }
41 if (event.transition !== 'disappear' && event.result) {
42 // Created/updated, replace current
43 debug_1.default('Published document created or updated, replace/create');
44 normalize_1.processDocument(event.result, processingOptions);
45 }
46 else if (current) {
47 // Deleted a node that we currently have, delete it
48 debug_1.default('Published document deleted, remove');
49 deleteNode({ node: current });
50 }
51 return;
52 }
53 // In overlay mode, things are a bit more tricky.
54 // We need to keep a copy of the published documents around so we can
55 // put the published version back if a draft is discarded (deleted).
56 // If a published document is updated but there is still a draft,
57 // we still want to show the draft. A lot of cases here, unfortunately.
58 if (event.transition === 'disappear') {
59 // A document was deleted
60 if (touchedIsDraft && published) {
61 debug_1.default('Draft deleted, published version exists, restore published version');
62 createNode(published);
63 }
64 else if (touchedIsDraft && !published && current) {
65 debug_1.default('Draft deleted, no published version exist, delete node');
66 deleteNode({ node: current });
67 }
68 else if (!touchedIsDraft && currentIsDraft && published) {
69 debug_1.default('Published version deleted, but we have draft, remove published from working set');
70 publishedNodes.delete(event.documentId);
71 }
72 else if (!touchedIsDraft && !currentIsDraft && current) {
73 debug_1.default('Published version deleted, we have no draft, remove node entirely');
74 deleteNode({ node: current });
75 publishedNodes.delete(event.documentId);
76 }
77 }
78 else {
79 // A document was updated / created
80 if (touchedIsDraft && event.result) {
81 debug_1.default(current ? 'Replace the current draft with a new draft' : 'New draft discovered');
82 normalize_1.processDocument(event.result, processingOptions);
83 // If the currently used node is a published one, make sure we keep a copy
84 if (current && !currentIsDraft) {
85 publishedNodes.set(documentIds_1.unprefixId(event.documentId), current);
86 }
87 }
88 else if (currentIsDraft && event.result) {
89 // Creating/updating a published document, but we have a draft
90 // Keep the draft as the current, but update our set of published docs
91 debug_1.default('Created/updating published document, but draft overlays it');
92 publishedNodes.set(event.documentId, normalize_1.processDocument(event.result, __assign(__assign({}, processingOptions), { skipCreate: true })));
93 }
94 else if (event.result) {
95 // Creating/updating a published document, and there is no draft version present
96 // Replace the current version with the new one
97 debug_1.default('Created/updating published document, no draft present');
98 normalize_1.processDocument(event.result, processingOptions);
99 }
100 }
101}
102exports.handleListenerEvent = handleListenerEvent;
103//# sourceMappingURL=handleListenerEvent.js.map
\No newline at end of file