diff --git a/lib/www/server/lib/db/project/configuration/patch.js b/lib/www/server/lib/db/project/configuration/patch.js index 3e8a211..aacc03c 100644 --- a/lib/www/server/lib/db/project/configuration/patch.js +++ b/lib/www/server/lib/db/project/configuration/patch.js @@ -1,5 +1,5 @@ const { setSurvey } = require('../../connection'); -const { deepMerge } = require('../../../utils'); +const { deepMerge, removeNulls } = require('../../../utils'); const { modify } = require('../create'); @@ -36,7 +36,7 @@ async function patch (projectId, payload, opts = {}) { } } - const dest = deepMerge(source, payload); + const dest = removeNulls(deepMerge(source, payload)); await modify(projectId, dest); return dest; diff --git a/lib/www/server/lib/utils/index.js b/lib/www/server/lib/utils/index.js index d93ca92..e1a120e 100644 --- a/lib/www/server/lib/utils/index.js +++ b/lib/www/server/lib/utils/index.js @@ -4,5 +4,6 @@ module.exports = { dms: require('./dms'), replaceMarkers: require('./replaceMarkers'), flattenQCDefinitions: require('./flattenQCDefinitions'), - deepMerge: require('./deepMerge') + deepMerge: require('./deepMerge'), + removeNulls: require('./removeNulls') }; diff --git a/lib/www/server/lib/utils/removeNulls.js b/lib/www/server/lib/utils/removeNulls.js new file mode 100644 index 0000000..28e305e --- /dev/null +++ b/lib/www/server/lib/utils/removeNulls.js @@ -0,0 +1,23 @@ + +/** + * Delete keys whose value is null. + * + */ +function removeNulls (obj) { + + function getType (obj) { + return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase(); + } + + for (let [key, value] of Object.entries(obj)) { + if (value === null) { + delete obj[key]; + } else if (getType(value) == "object") { + removeNulls(value); + } + } + + return obj; +} + +module.exports = removeNulls;