keepSynced middleware

This commit is contained in:
2018-06-24 18:13:37 +03:00
parent ba71878261
commit 3791d4a5d7
10 changed files with 243 additions and 247 deletions

172
package-lock.json generated
View File

@@ -2127,9 +2127,9 @@
"dev": true "dev": true
}, },
"dlv": { "dlv": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.1.tgz", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.2.tgz",
"integrity": "sha512-b/kUB0D6RgRGG69h5ExsLnUAwfs5Jndfk1pU2ao7/9mVdsxpUBlkFdTkNJThXw1jrLXpUbIIg+h3um5zXi6sFA==", "integrity": "sha512-xxD4VSH67GbRvSGUrckvha94RD7hjgOH7rqGxiytLpkaeMvixOHFZTGFK6EkIm3T761OVHT8ABHmGkq9gXgu6Q==",
"dev": true "dev": true
}, },
"doctrine": { "doctrine": {
@@ -2445,9 +2445,9 @@
"dev": true "dev": true
}, },
"eslint-plugin-prettier": { "eslint-plugin-prettier": {
"version": "2.6.0", "version": "2.6.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.1.tgz",
"integrity": "sha512-floiaI4F7hRkTrFe8V2ItOK97QYrX75DjmdzmVITZoAP6Cn06oEDPQRsO6MlHEP/u2SxI3xQ52Kpjw6j5WGfeQ==", "integrity": "sha512-wNZ2z0oVCWnf+3BSI7roS+z4gGu2AwcPKUek+SlLZMZg+X0KbZLsB2knul7fd0K3iuIp402HIYzm4f2+OyfXxA==",
"dev": true, "dev": true,
"requires": { "requires": {
"fast-diff": "^1.1.1", "fast-diff": "^1.1.1",
@@ -3063,8 +3063,7 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
@@ -3085,14 +3084,12 @@
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
@@ -3107,20 +3104,17 @@
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
@@ -3237,8 +3231,7 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
@@ -3250,7 +3243,6 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
@@ -3265,7 +3257,6 @@
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
@@ -3273,14 +3264,12 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.2.4", "version": "2.2.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.1", "safe-buffer": "^5.1.1",
"yallist": "^3.0.0" "yallist": "^3.0.0"
@@ -3299,7 +3288,6 @@
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
@@ -3380,8 +3368,7 @@
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
@@ -3393,7 +3380,6 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
@@ -3479,8 +3465,7 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.1", "version": "5.1.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
@@ -3516,7 +3501,6 @@
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
@@ -3536,7 +3520,6 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
@@ -3580,14 +3563,12 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.2", "version": "3.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
} }
} }
}, },
@@ -5538,17 +5519,17 @@
} }
}, },
"mongodb": { "mongodb": {
"version": "3.0.9", "version": "3.0.10",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.9.tgz", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.10.tgz",
"integrity": "sha512-2NJzruJu15/1YF6+H55f1wfLQb1M6/+hU96+L5sPv07PDZDPvZEDJBtCjFQorpbW9D2aqsem7mFVUKPhVwwRog==", "integrity": "sha512-jy9s4FgcM4rl8sHNETYHGeWcuRh9AlwQCUuMiTj041t/HD02HwyFgmm2VZdd9/mA9YNHaUJLqj0tzBx2QFivtg==",
"requires": { "requires": {
"mongodb-core": "3.0.8" "mongodb-core": "3.0.9"
} }
}, },
"mongodb-core": { "mongodb-core": {
"version": "3.0.8", "version": "3.0.9",
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.8.tgz", "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.9.tgz",
"integrity": "sha512-dFxfhH9N7ohuQnINyIl6dqEF8sYOE0WKuymrFf3L3cipJNrx+S8rAbNOTwa00/fuJCjBMJNFsaA+R2N16//UIw==", "integrity": "sha512-buOWjdLLBlEqjHDeHYSXqXx173wHMVp7bafhdHxSjxWdB9V6Ri4myTqxjYZwL/eGFZxvd8oRQSuhwuIDbaaB+g==",
"requires": { "requires": {
"bson": "~1.0.4", "bson": "~1.0.4",
"require_optional": "^1.0.1" "require_optional": "^1.0.1"
@@ -5615,15 +5596,15 @@
} }
}, },
"mongoose": { "mongoose": {
"version": "5.1.5", "version": "5.1.6",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.1.5.tgz", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.1.6.tgz",
"integrity": "sha512-/bDtFRvWZclE4Fxw5ntofGA2Zm+lgJJw9WHZK4aWotVNK5MEDxrfPp+W/gk4whv0t4AO9JxmyAD4jfotjARSiA==", "integrity": "sha512-p8p/3Z2kfXViqawN1TV+cZ8XbHz6SsllkytKTog+CDWfCNObyGraHQlUuRv/9aYPNKiZfq6WWITgLpJLZW/o/A==",
"requires": { "requires": {
"async": "2.6.1", "async": "2.6.1",
"bson": "~1.0.5", "bson": "~1.0.5",
"kareem": "2.2.1", "kareem": "2.2.1",
"lodash.get": "4.4.2", "lodash.get": "4.4.2",
"mongodb": "3.0.9", "mongodb": "3.0.10",
"mongoose-legacy-pluralize": "1.0.2", "mongoose-legacy-pluralize": "1.0.2",
"mpath": "0.4.1", "mpath": "0.4.1",
"mquery": "3.0.0", "mquery": "3.0.0",
@@ -6155,9 +6136,9 @@
} }
}, },
"passport-local-mongoose": { "passport-local-mongoose": {
"version": "5.0.0", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/passport-local-mongoose/-/passport-local-mongoose-5.0.0.tgz", "resolved": "https://registry.npmjs.org/passport-local-mongoose/-/passport-local-mongoose-5.0.1.tgz",
"integrity": "sha512-ZfCBzPD42j7iDvZyg5X5lBtOpiOfId+kvwOqsJgIaVEy5R2lypE0QCbw7afZzyMpAWilh7h6EY4YZnlTgt7hnw==", "integrity": "sha512-VUY5DgBdpjt1tjunJJ1EXV5b2nhMDkXJuhTjyiK660IgIp7kONMyWEe9tGHf8I9tZudXuTF+47JNQLIzU+Hjbw==",
"requires": { "requires": {
"debug": "^3.1.0", "debug": "^3.1.0",
"generaterr": "^1.5.0", "generaterr": "^1.5.0",
@@ -6327,15 +6308,15 @@
"dev": true "dev": true
}, },
"prettier": { "prettier": {
"version": "1.13.4", "version": "1.13.5",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.4.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.5.tgz",
"integrity": "sha512-emsEZ2bAigL1lq6ssgkpPm1MIBqgeTvcp90NxOP5XDqprub/V/WS2Hfgih3mS7/1dqTUvhG+sxx1Dv8crnVexA==", "integrity": "sha512-4M90mfvLz6yRf2Dhzd+xPIE6b4xkI8nHMJhsSm9IlfG17g6wujrrm7+H1X8x52tC4cSNm6HmuhCUSNe6Hd5wfw==",
"dev": true "dev": true
}, },
"prettier-eslint": { "prettier-eslint": {
"version": "8.8.1", "version": "8.8.2",
"resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.1.tgz", "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz",
"integrity": "sha512-8YMkJZnA+XVfEW6fPet05jpNmSQbD+Htbh/QyOxQcVf2GIUEZsnGP7ZScaM9Mq2Ra2261eCu60E7/TRIy9coXQ==", "integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "^6.26.0", "babel-runtime": "^6.26.0",
@@ -6346,10 +6327,38 @@
"lodash.merge": "^4.6.0", "lodash.merge": "^4.6.0",
"loglevel-colored-level-prefix": "^1.0.0", "loglevel-colored-level-prefix": "^1.0.0",
"prettier": "^1.7.0", "prettier": "^1.7.0",
"pretty-format": "^22.0.3", "pretty-format": "^23.0.1",
"require-relative": "^0.8.7", "require-relative": "^0.8.7",
"typescript": "^2.5.1", "typescript": "^2.5.1",
"typescript-eslint-parser": "^11.0.0" "typescript-eslint-parser": "^16.0.0",
"vue-eslint-parser": "^2.0.2"
},
"dependencies": {
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"pretty-format": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.0.1.tgz",
"integrity": "sha1-1h0GUmjkx1kIO8y8onoBrXx2AfQ=",
"dev": true,
"requires": {
"ansi-regex": "^3.0.0",
"ansi-styles": "^3.2.0"
}
}
} }
}, },
"pretty-format": { "pretty-format": {
@@ -8296,27 +8305,19 @@
"dev": true "dev": true
}, },
"typescript": { "typescript": {
"version": "2.9.1", "version": "2.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
"integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==", "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
"dev": true "dev": true
}, },
"typescript-eslint-parser": { "typescript-eslint-parser": {
"version": "11.0.0", "version": "16.0.0",
"resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-11.0.0.tgz", "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.0.tgz",
"integrity": "sha512-/fBHTBRBSorWQGKWOOjeMPkzd3o8cOPtFjTRwU5JLNGgVtmMa3KDkiw0R2n+H6ovo9y3OX30/5usm6YTqY44PQ==", "integrity": "sha512-ZYYVKlHWR/RMvTCah4WfrZclb2azZipW4sbaYLJjbh6jiYn81tLUZAw/WdVLlXxaCbIawaKCA44AJPMFVArKZQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"lodash.unescape": "4.0.1", "lodash.unescape": "4.0.1",
"semver": "5.4.1" "semver": "5.5.0"
},
"dependencies": {
"semver": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
"integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
"dev": true
}
} }
}, },
"uglify-js": { "uglify-js": {
@@ -8588,6 +8589,31 @@
"extsprintf": "^1.2.0" "extsprintf": "^1.2.0"
} }
}, },
"vue-eslint-parser": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz",
"integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==",
"dev": true,
"requires": {
"debug": "^3.1.0",
"eslint-scope": "^3.7.1",
"eslint-visitor-keys": "^1.0.0",
"espree": "^3.5.2",
"esquery": "^1.0.0",
"lodash": "^4.17.4"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
}
}
},
"w3c-hr-time": { "w3c-hr-time": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",

View File

@@ -28,12 +28,12 @@
"express-jwt": "^5.3.1", "express-jwt": "^5.3.1",
"hsts": "^2.1.0", "hsts": "^2.1.0",
"jsonwebtoken": "^8.3.0", "jsonwebtoken": "^8.3.0",
"mongoose": "^5.1.5", "mongoose": "^5.1.6",
"mongoose-unique-validator": "^2.0.1", "mongoose-unique-validator": "^2.0.1",
"morgan": "^1.9.0", "morgan": "^1.9.0",
"passport": "^0.4.0", "passport": "^0.4.0",
"passport-local": "^1.0.0", "passport-local": "^1.0.0",
"passport-local-mongoose": "^5.0.0" "passport-local-mongoose": "^5.0.1"
}, },
"devDependencies": { "devDependencies": {
"cross-env": "^5.2.0", "cross-env": "^5.2.0",
@@ -43,11 +43,11 @@
"eslint-config-prettier": "^2.9.0", "eslint-config-prettier": "^2.9.0",
"eslint-plugin-import": "^2.12.0", "eslint-plugin-import": "^2.12.0",
"eslint-plugin-jest": "^21.17.0", "eslint-plugin-jest": "^21.17.0",
"eslint-plugin-prettier": "^2.6.0", "eslint-plugin-prettier": "^2.6.1",
"jest": "^22.4.4", "jest": "^22.4.4",
"mongodb-memory-server": "^1.8.0", "mongodb-memory-server": "^1.8.0",
"nodemon": "^1.17.5", "nodemon": "^1.17.5",
"prettier-eslint": "^8.8.1", "prettier-eslint": "^8.8.2",
"supertest": "^3.1.0" "supertest": "^3.1.0"
}, },
"jest": { "jest": {

212
react/package-lock.json generated
View File

@@ -21,9 +21,9 @@
} }
}, },
"@material-ui/core": { "@material-ui/core": {
"version": "1.2.1", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/@material-ui/core/-/core-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-1.2.3.tgz",
"integrity": "sha512-CG1jhJKUedImcdD8OdjQvDO89H/wUH5IVRYP1+cupr25iSpW84T/G0KHGPceoNRNUlbQpmuY98rffHQ7C74yvw==", "integrity": "sha512-5Z4LhIrFJcvp1a7E8C3DPxL4W0RkjxWO9OwqOlRsr8YCF2sJgqCMDWn8DMW9eg1VD50JnZQ8bmx1esE0GBo71Q==",
"requires": { "requires": {
"@babel/runtime": "^7.0.0-beta.42", "@babel/runtime": "^7.0.0-beta.42",
"@types/jss": "^9.5.3", "@types/jss": "^9.5.3",
@@ -81,9 +81,9 @@
} }
}, },
"@types/react": { "@types/react": {
"version": "16.3.17", "version": "16.4.1",
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.3.17.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.4.1.tgz",
"integrity": "sha512-f2ZTOSF7l9sRdXSbzLI84Z2wsVnj3qUjfJhtDLSi7lTWFMo1WSou7eQ2vkQga8100zhzzDjSyGbj+Viz7i927g==", "integrity": "sha512-uZP8Fd4f7rwHKztnOhFJYEJsKXO7opmcyKk5P9vRC8UJAx3AiWaGFiLxDqPJqzO3n3IhF/v6rdscxadarEXnag==",
"requires": { "requires": {
"csstype": "^2.2.0" "csstype": "^2.2.0"
} }
@@ -2097,13 +2097,10 @@
"integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8=" "integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8="
}, },
"common-tags": { "common-tags": {
"version": "1.7.2", "version": "1.8.0",
"resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.7.2.tgz", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
"integrity": "sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ==", "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
"dev": true, "dev": true
"requires": {
"babel-runtime": "^6.26.0"
}
}, },
"commondir": { "commondir": {
"version": "1.0.1", "version": "1.0.1",
@@ -2590,9 +2587,9 @@
} }
}, },
"csstype": { "csstype": {
"version": "2.5.3", "version": "2.5.5",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.3.tgz", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.5.tgz",
"integrity": "sha512-G5HnoK8nOiAq3DXIEoY2n/8Vb7Lgrms+jGJl8E4EJpQEeVONEnPFJSl8IK505wPBoxxtrtHhrRm4WX2GgdqarA==" "integrity": "sha512-EGMjeoiN3aqEX5u/cyH5mSdGBDGdLcCQvcEcBWNGFSPXKd9uOTIeVG91YQ22OxI44DKpvI+4C7VUSmEpsHWJaA=="
}, },
"currently-unhandled": { "currently-unhandled": {
"version": "0.4.1", "version": "0.4.1",
@@ -2806,9 +2803,9 @@
} }
}, },
"dlv": { "dlv": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.1.tgz", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.2.tgz",
"integrity": "sha1-x52Wv+ZZpVaAASUO0qr2U5kr3T8=", "integrity": "sha512-xxD4VSH67GbRvSGUrckvha94RD7hjgOH7rqGxiytLpkaeMvixOHFZTGFK6EkIm3T761OVHT8ABHmGkq9gXgu6Q==",
"dev": true "dev": true
}, },
"dns-equal": { "dns-equal": {
@@ -3503,6 +3500,12 @@
"estraverse": "^4.1.1" "estraverse": "^4.1.1"
} }
}, },
"eslint-visitor-keys": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
"integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
"dev": true
},
"espree": { "espree": {
"version": "3.5.4", "version": "3.5.4",
"resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
@@ -4125,8 +4128,7 @@
}, },
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
@@ -4144,13 +4146,11 @@
}, },
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true
"optional": true
}, },
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
@@ -4163,18 +4163,15 @@
}, },
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"bundled": true, "bundled": true
"optional": true
}, },
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
@@ -4277,8 +4274,7 @@
}, },
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
@@ -4288,7 +4284,6 @@
"is-fullwidth-code-point": { "is-fullwidth-code-point": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
@@ -4301,20 +4296,17 @@
"minimatch": { "minimatch": {
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
}, },
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.2.4", "version": "2.2.4",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.1", "safe-buffer": "^5.1.1",
"yallist": "^3.0.0" "yallist": "^3.0.0"
@@ -4331,7 +4323,6 @@
"mkdirp": { "mkdirp": {
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
@@ -4404,8 +4395,7 @@
}, },
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
@@ -4415,7 +4405,6 @@
"once": { "once": {
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
@@ -4491,8 +4480,7 @@
}, },
"safe-buffer": { "safe-buffer": {
"version": "5.1.1", "version": "5.1.1",
"bundled": true, "bundled": true
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
@@ -4522,7 +4510,6 @@
"string-width": { "string-width": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
@@ -4540,7 +4527,6 @@
"strip-ansi": { "strip-ansi": {
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
@@ -4579,13 +4565,11 @@
}, },
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.2", "version": "3.0.2",
"bundled": true, "bundled": true
"optional": true
} }
} }
}, },
@@ -6604,9 +6588,9 @@
} }
}, },
"jss": { "jss": {
"version": "9.8.3", "version": "9.8.7",
"resolved": "https://registry.npmjs.org/jss/-/jss-9.8.3.tgz", "resolved": "https://registry.npmjs.org/jss/-/jss-9.8.7.tgz",
"integrity": "sha512-3rywJZAmUTsxS07Af7ww3c4syWwXplQKhZnrgY4QIMuO5047LgF+heowaWdbbkykyREe3TauDcqp4wEpIlRLWw==", "integrity": "sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==",
"requires": { "requires": {
"is-in-browser": "^1.1.3", "is-in-browser": "^1.1.3",
"symbol-observable": "^1.1.0", "symbol-observable": "^1.1.0",
@@ -6897,9 +6881,9 @@
} }
}, },
"localforage": { "localforage": {
"version": "1.7.1", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.1.tgz", "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.2.tgz",
"integrity": "sha1-5JJ+BCMCuGTbMPMhHxO1xvDell0=", "integrity": "sha1-+kRCYC+Abt0rympUq05lbwMfEhw=",
"requires": { "requires": {
"lie": "3.1.1" "lie": "3.1.1"
} }
@@ -6951,7 +6935,7 @@
"lodash.merge": { "lodash.merge": {
"version": "4.6.1", "version": "4.6.1",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
"integrity": "sha1-rcJdnLmbk5HFliTzefu6YNcRHVQ=", "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",
"dev": true "dev": true
}, },
"lodash.template": { "lodash.template": {
@@ -9071,15 +9055,15 @@
"integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
}, },
"prettier": { "prettier": {
"version": "1.12.1", "version": "1.13.5",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.5.tgz",
"integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=", "integrity": "sha512-4M90mfvLz6yRf2Dhzd+xPIE6b4xkI8nHMJhsSm9IlfG17g6wujrrm7+H1X8x52tC4cSNm6HmuhCUSNe6Hd5wfw==",
"dev": true "dev": true
}, },
"prettier-eslint": { "prettier-eslint": {
"version": "8.8.1", "version": "8.8.2",
"resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.1.tgz", "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz",
"integrity": "sha1-OFBRYydHQvKgsxZTw55A8369B9o=", "integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "^6.26.0", "babel-runtime": "^6.26.0",
@@ -9090,10 +9074,11 @@
"lodash.merge": "^4.6.0", "lodash.merge": "^4.6.0",
"loglevel-colored-level-prefix": "^1.0.0", "loglevel-colored-level-prefix": "^1.0.0",
"prettier": "^1.7.0", "prettier": "^1.7.0",
"pretty-format": "^22.0.3", "pretty-format": "^23.0.1",
"require-relative": "^0.8.7", "require-relative": "^0.8.7",
"typescript": "^2.5.1", "typescript": "^2.5.1",
"typescript-eslint-parser": "^11.0.0" "typescript-eslint-parser": "^16.0.0",
"vue-eslint-parser": "^2.0.2"
}, },
"dependencies": { "dependencies": {
"ansi-regex": { "ansi-regex": {
@@ -9109,9 +9094,9 @@
"dev": true "dev": true
}, },
"pretty-format": { "pretty-format": {
"version": "22.4.3", "version": "23.0.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.0.1.tgz",
"integrity": "sha1-+HPXgIOanALpZkyKCC6e556qwW8=", "integrity": "sha1-1h0GUmjkx1kIO8y8onoBrXx2AfQ=",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-regex": "^3.0.0", "ansi-regex": "^3.0.0",
@@ -9172,11 +9157,10 @@
} }
}, },
"prop-types": { "prop-types": {
"version": "15.6.1", "version": "15.6.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
"integrity": "sha1-NmREU1ZCVd3aORGR+zoSXL32VMo=", "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
"requires": { "requires": {
"fbjs": "^0.8.16",
"loose-envify": "^1.3.1", "loose-envify": "^1.3.1",
"object-assign": "^4.1.1" "object-assign": "^4.1.1"
} }
@@ -9416,23 +9400,13 @@
"integrity": "sha1-0ZhAioW0Bwk3qYZn9QDIMvhr1dQ=" "integrity": "sha1-0ZhAioW0Bwk3qYZn9QDIMvhr1dQ="
}, },
"react-event-listener": { "react-event-listener": {
"version": "0.6.0", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.0.tgz", "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.1.tgz",
"integrity": "sha512-CqewJSQ/0p09oPZ9BABNvoFhGMhUAuLQ4B4skPsZXxxgOBx+2SP3AgM9lP7zc68pRmJXlCQBDjgOAQsp1jnhAQ==", "integrity": "sha1-QceoCmazmMJ91RHiJxKwLz1OzMo=",
"requires": { "requires": {
"@babel/runtime": "^7.0.0-beta.42", "@babel/runtime": "^7.0.0-beta.42",
"prop-types": "^15.6.0", "prop-types": "^15.6.0",
"warning": "^3.0.0" "warning": "^4.0.1"
},
"dependencies": {
"warning": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
"integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
"requires": {
"loose-envify": "^1.0.0"
}
}
} }
}, },
"react-jss": { "react-jss": {
@@ -9685,9 +9659,9 @@
} }
}, },
"react-spring": { "react-spring": {
"version": "5.3.15", "version": "5.3.18",
"resolved": "https://registry.npmjs.org/react-spring/-/react-spring-5.3.15.tgz", "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-5.3.18.tgz",
"integrity": "sha512-VP7m3Fptn2DdAyAKgoWE/nXMk+Tgu/ZPpgoHOVh8GExlQmFBH4FFjU5CI8zUZd/r0/Ez1wEVXdZzUpBXxGyRTw==", "integrity": "sha512-gPLxo0wk1OYK1b3ZL9emWIAoWuQvTjuLDT8+yKXG+PTyEOYHvhaqEWShykL4bN6AUjPJyY4+7CLioHxJeAefZA==",
"requires": { "requires": {
"@babel/runtime": "7.0.0-beta.49" "@babel/runtime": "7.0.0-beta.49"
}, },
@@ -9863,9 +9837,9 @@
} }
}, },
"redux-form": { "redux-form": {
"version": "7.4.0", "version": "7.4.2",
"resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.4.0.tgz", "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.4.2.tgz",
"integrity": "sha512-ppFEdbxS+HggJcS+HF37Gwyuh35/54hAZ2e1DvLBEzfw8sTqvas67A1YmfpK9thHj2XyLkwPOSbxgfObfkP+BQ==", "integrity": "sha512-QxC36s4Lelx5Cr8dbpxqvl23dwYOydeAX8c6YPmgkz/Dhj053C16S2qoyZN6LO6HJ2oUF00rKsAyE94GwOUhFA==",
"requires": { "requires": {
"es6-error": "^4.1.1", "es6-error": "^4.1.1",
"hoist-non-react-statics": "^2.5.4", "hoist-non-react-statics": "^2.5.4",
@@ -9873,13 +9847,14 @@
"is-promise": "^2.1.0", "is-promise": "^2.1.0",
"lodash": "^4.17.10", "lodash": "^4.17.10",
"lodash-es": "^4.17.10", "lodash-es": "^4.17.10",
"prop-types": "^15.6.1" "prop-types": "^15.6.1",
"react-lifecycles-compat": "^3.0.4"
}, },
"dependencies": { "dependencies": {
"hoist-non-react-statics": { "hoist-non-react-statics": {
"version": "2.5.4", "version": "2.5.5",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.4.tgz", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
"integrity": "sha512-yklXtcYj0Pt5Dz9No8xUh7d+/7fy5XRIm+r7U/BXgwJ/VsD75EfXA8t4p9tIL0jykzo5A/sGzt1xV6oqd/gP0w==" "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw=="
} }
} }
}, },
@@ -11195,27 +11170,19 @@
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
}, },
"typescript": { "typescript": {
"version": "2.8.3", "version": "2.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
"integrity": "sha1-XYF/m28xu4cYNfTt8AifIavmwXA=", "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
"dev": true "dev": true
}, },
"typescript-eslint-parser": { "typescript-eslint-parser": {
"version": "11.0.0", "version": "16.0.0",
"resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-11.0.0.tgz", "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.0.tgz",
"integrity": "sha1-N9umoBMN0wdQSqS0shsNPcfU6fI=", "integrity": "sha512-ZYYVKlHWR/RMvTCah4WfrZclb2azZipW4sbaYLJjbh6jiYn81tLUZAw/WdVLlXxaCbIawaKCA44AJPMFVArKZQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"lodash.unescape": "4.0.1", "lodash.unescape": "4.0.1",
"semver": "5.4.1" "semver": "5.5.0"
},
"dependencies": {
"semver": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
"integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=",
"dev": true
}
} }
}, },
"ua-parser-js": { "ua-parser-js": {
@@ -11569,6 +11536,31 @@
"indexof": "0.0.1" "indexof": "0.0.1"
} }
}, },
"vue-eslint-parser": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz",
"integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==",
"dev": true,
"requires": {
"debug": "^3.1.0",
"eslint-scope": "^3.7.1",
"eslint-visitor-keys": "^1.0.0",
"espree": "^3.5.2",
"esquery": "^1.0.0",
"lodash": "^4.17.4"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
}
}
},
"walker": { "walker": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",

View File

@@ -3,20 +3,20 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@material-ui/core": "^1.2.1", "@material-ui/core": "^1.2.3",
"@material-ui/icons": "^1.1.0", "@material-ui/icons": "^1.1.0",
"@redux-offline/redux-offline": "^2.3.3", "@redux-offline/redux-offline": "^2.3.3",
"localforage": "^1.7.1", "localforage": "^1.7.2",
"prop-types": "^15.6.1", "prop-types": "^15.6.2",
"react": "^16.4.1", "react": "^16.4.1",
"react-dom": "^16.4.1", "react-dom": "^16.4.1",
"react-redux": "^5.0.7", "react-redux": "^5.0.7",
"react-router-dom": "^4.3.1", "react-router-dom": "^4.3.1",
"react-router-redux": "^4.0.8", "react-router-redux": "^4.0.8",
"react-scripts": "1.1.4", "react-scripts": "1.1.4",
"react-spring": "^5.3.15", "react-spring": "^5.3.18",
"redux": "^4.0.0", "redux": "^4.0.0",
"redux-form": "^7.4.0", "redux-form": "^7.4.2",
"redux-thunk": "^2.3.0" "redux-thunk": "^2.3.0"
}, },
"scripts": { "scripts": {
@@ -33,6 +33,6 @@
"eslint-plugin-jest": "^21.17.0", "eslint-plugin-jest": "^21.17.0",
"eslint-plugin-jsx-a11y": "^6.0.3", "eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-react": "^7.9.1", "eslint-plugin-react": "^7.9.1",
"prettier-eslint": "^8.8.1" "prettier-eslint": "^8.8.2"
} }
} }

View File

@@ -107,7 +107,7 @@ export function toggleTodo(id) {
body: JSON.stringify({ completed }), body: JSON.stringify({ completed }),
headers: { headers: {
Authorization: `Bearer ${getToken()}`, Authorization: `Bearer ${getToken()}`,
'content-type': 'appl ication/json', 'content-type': 'application/json',
}, },
method: 'PATCH', method: 'PATCH',
}, },

View File

@@ -1,13 +1,13 @@
import React from 'react'; import React from 'react';
import FilterLink from '../containers/FilterLink'; import FilterLink from '../containers/FilterLink';
import UserHeaderContainer from '../containers/UserHeaderContainer'; import UserHeader from '../components/UserHeader';
import { VisibilityFilters } from '../actions/todos'; import { VisibilityFilters } from '../actions/todos';
import ListsContainer from '../containers/ListsContainer'; import ListsContainer from '../containers/ListsContainer';
export default function Header() { export default function Header() {
return ( return (
<div id="header"> <div id="header">
<UserHeaderContainer /> <UserHeader />
<div id="lists-header"> <div id="lists-header">
<ListsContainer /> <ListsContainer />
<div id="filters"> <div id="filters">

View File

@@ -1,34 +1,15 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types';
import LogoutLink from '../containers/LogoutLink'; import LogoutLink from '../containers/LogoutLink';
import FetchButton from '../containers/FetchButton'; import FetchButton from '../containers/FetchButton';
import Status from '../containers/Status'; import Status from '../containers/Status';
export default class UserHeader extends React.Component { export default function UserHeader() {
componentDidUpdate() { return (
if ( <div id="user-header">
(this.props.dirtyLists || this.props.dirtyTodos) && <FetchButton>sync</FetchButton>
!this.props.fetchingLists <Status />
) { <LogoutLink>logout</LogoutLink>
this.props.fetchLists(); </div>
} );
}
render() {
return (
<div id="user-header">
<FetchButton>sync</FetchButton>
<Status />
<LogoutLink>logout</LogoutLink>
</div>
);
}
} }
UserHeader.propTypes = {
dirtyLists: PropTypes.bool.isRequired,
dirtyTodos: PropTypes.bool.isRequired,
fetchingLists: PropTypes.bool.isRequired,
fetchLists: PropTypes.func.isRequired,
};

View File

@@ -1,23 +0,0 @@
import { connect } from 'react-redux';
import UserHeader from '../components/UserHeader';
import { fetchLists } from '../actions/lists';
function mapStateToProps(state) {
return {
user: state.user,
dirtyLists: state.lists.dirty,
dirtyTodos: state.todos.dirty,
fetchingLists: state.lists.fetching,
};
}
function mapDispatchToProps(dispatch) {
return {
fetchLists: () => dispatch(fetchLists()),
};
}
export default connect(
mapStateToProps,
mapDispatchToProps,
)(UserHeader);

View File

@@ -10,6 +10,7 @@ import AppContainer from './containers/AppContainer';
import registerServiceWorker from './registerServiceWorker'; import registerServiceWorker from './registerServiceWorker';
import todoApp from './reducers'; import todoApp from './reducers';
import { setToken } from './actions/util'; import { setToken } from './actions/util';
import keepSynced from './middleware/keepSynced';
let store; let store;
@@ -29,8 +30,8 @@ const persistCallback = () => {
store = createStore( store = createStore(
todoApp, todoApp,
compose( compose(
applyMiddleware(thunk),
offline({ ...offlineConfig, persistCallback }), offline({ ...offlineConfig, persistCallback }),
applyMiddleware(thunk, keepSynced),
), ),
); );

View File

@@ -0,0 +1,19 @@
import { fetchLists, REQUEST_LISTS, INVALIDATE_LISTS } from '../actions/lists';
export default store => next => action => {
next(action);
if (action.type !== REQUEST_LISTS && typeof action !== 'function') {
const state = store.getState();
if (state.user.user) {
const dirtyLists = state.lists.dirty || false;
const dirtyTodos = state.todos.dirty || false;
const fetchingLists = state.lists.fetching || false;
if (
((dirtyLists || dirtyTodos) && !fetchingLists) ||
action.type === INVALIDATE_LISTS
) {
store.dispatch(fetchLists());
}
}
}
};