UNPKG

2.07 kBJavaScriptView Raw
1export function propsDiff(propsArray) {
2 // Edge case: features may be duplicated. See issue #122.
3 // If the changeType is `added` ignore the second feature.
4 if (propsArray.length === 1 || propsArray[0].changeType === 'added') {
5 var changeType = propsArray[0].changeType;
6 if (changeType === 'added') {
7 return getAdded(propsArray[0]);
8 } else {
9 throw new Error('only 1 element but neither added nor deleted');
10 }
11 } else {
12 var oldProps = getOld(propsArray);
13 var newProps = getNew(propsArray);
14 return getDiff(oldProps, newProps);
15 }
16}
17
18function getDiff(oldProps, newProps) {
19 var ret = {};
20 for (var prop in newProps) {
21 ret[prop] = {};
22 if (!oldProps.hasOwnProperty(prop)) {
23 ret[prop]['added'] = newProps[prop];
24 } else {
25 var oldValue = oldProps[prop];
26 var newValue = newProps[prop];
27 if (oldValue === newValue) {
28 ret[prop]['unchanged'] = newValue;
29 } else {
30 ret[prop]['modifiedOld'] = oldValue;
31 ret[prop]['modifiedNew'] = newValue;
32 }
33 }
34 }
35 for (var oldProp in oldProps) {
36 if (!ret.hasOwnProperty(oldProp)) {
37 ret[oldProp] = {
38 deleted: oldProps[oldProp]
39 };
40 }
41 }
42 return ret;
43}
44
45function getAdded(props) {
46 var ret = {};
47 for (var prop in props) {
48 ret[prop] = {
49 added: props[prop]
50 };
51 }
52 return ret;
53}
54
55function getOld(propsArray) {
56 for (var i = 0; i < propsArray.length; i++) {
57 var changeType = propsArray[i].changeType;
58 if (changeType === 'modifiedOld' || changeType === 'deletedOld') {
59 return propsArray[i];
60 }
61 }
62}
63
64function getNew(propsArray) {
65 for (var i = 0; i < propsArray.length; i++) {
66 var changeType = propsArray[i].changeType;
67 if (changeType === 'modifiedNew' || changeType === 'deletedNew') {
68 return propsArray[i];
69 }
70 }
71}