From 4344b6ff6baaebb8327fa7943cf52653ecd4ce0c Mon Sep 17 00:00:00 2001 From: Khaled Garbaya Date: Wed, 13 Dec 2017 15:48:23 +0100 Subject: [PATCH] feat: Add new diffing --- .gitignore | 1 + lib/entry-state.js | 26 ++++++++++++++++++++++++-- services/contentful.js | 5 +++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index b29653e..96bd2a3 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,4 @@ cypress # e2e test directory test/e2e +.vscode diff --git a/lib/entry-state.js b/lib/entry-state.js index 1d81a1c..b825988 100644 --- a/lib/entry-state.js +++ b/lib/entry-state.js @@ -1,8 +1,9 @@ const { getEntry } = require('./../services/contentful') +const { isObject, isArray } = require('lodash') async function getPublishedEntry (entry) { try { - return await getEntry(entry.sys.id) + return await getEntry(entry.sys.id, entry.sys.contentType.sys.id) } catch (err) { return null } @@ -12,11 +13,32 @@ module.exports = async function attachEntryState (entry) { const publishedEntry = await getPublishedEntry(entry) entry.draft = false entry.pendingChanges = false - if (!publishedEntry) { entry.draft = true } + const entriesToCompare = Object.keys(entry.fields).map((key) => { + const field = entry.fields[key] + if (isObject(field)) { + return [entry.fields[key], publishedEntry.fields[key]] + } + }).filter(Boolean) + entriesToCompare.forEach((item) => { + const originalItem = item[0] + const publishedItem = item[1] + if (isArray(originalItem)) { + originalItem.forEach((innerItem, index) => { + if (!isArray(innerItem) && isObject(innerItem) && (!innerItem.fields || originalItem[index].sys.updatedAt !== publishedItem[index].sys.updatedAt)) { + entry.pendingChanges = true + return + } + }) + } else if (isObject(item[0]) && (!item[0].fields || item[0].sys.updatedAt !== item[1].sys.updatedAt)) { + entry.pendingChanges = true + return + } + }) + if (entry && publishedEntry && (entry.sys.updatedAt !== publishedEntry.sys.updatedAt)) { entry.pendingChanges = true } diff --git a/services/contentful.js b/services/contentful.js index 68c47ca..500c9f5 100644 --- a/services/contentful.js +++ b/services/contentful.js @@ -52,8 +52,9 @@ module.exports.getSpace = assert((api = `cda`) => { * @returns {Object} */ -module.exports.getEntry = assert((entryId, api = `cda`) => { - return getClient(api).getEntry(entryId) +module.exports.getEntry = assert((entryId, contentType, api = `cda`) => { + return getClient(api).getEntries({content_type: contentType, 'sys.id': entryId}) + .then((response) => response.items[0]) }, 'Entry') /**