1 | export function propsDiff(propsArray) {
|
2 |
|
3 |
|
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 |
|
18 | function 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 |
|
45 | function 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 |
|
55 | function 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 |
|
64 | function 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 | }
|