summaryrefslogtreecommitdiffstats
path: root/lib/utils/reducedObject.js
blob: 7bcfd5b1bdfc7f6f8bd551edcc2967e8ab4c9709 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var Immutable = require('immutable');

/**
 *  Reduce the difference between a map and its default version
 *  @param {Map} defaultVersion
 *  @param {Map} currentVersion
 *  @return {Map} The properties of currentVersion that differs from defaultVersion
 */
function reducedObject(defaultVersion, currentVersion) {
    if(defaultVersion === undefined) {
        return currentVersion;
    }

    return currentVersion.reduce(function(result, value, key) {
        var defaultValue = defaultVersion.get(key);

        if (Immutable.Map.isMap(value)) {
            var diffs = reducedObject(defaultValue, value);

            if (diffs.size > 0) {
                return result.set(key, diffs);
            }
        }

        if (Immutable.is(defaultValue, value)) {
            return result;
        }

        return result.set(key, value);
    }, Immutable.Map());
}

module.exports = reducedObject;