diff --git a/lib/new-settings-loader.js b/lib/new-settings-loader.js index bdf585d8..eca4fbb8 100644 --- a/lib/new-settings-loader.js +++ b/lib/new-settings-loader.js @@ -11,6 +11,8 @@ low(adapter).then(it => { function saveConfig (config) { const currentState = db.getState() + // TODO this should be _.assign + // change after flattening of schema const newState = _.mergeWith((objValue, srcValue) => { if (_.isArray(objValue)) { return srcValue diff --git a/new-lamassu-admin/package-lock.json b/new-lamassu-admin/package-lock.json index d33803ea..aba4796d 100644 --- a/new-lamassu-admin/package-lock.json +++ b/new-lamassu-admin/package-lock.json @@ -1840,7 +1840,8 @@ "@emotion/hash": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.3.tgz", - "integrity": "sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw==" + "integrity": "sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw==", + "dev": true }, "@emotion/is-prop-valid": { "version": "0.8.3", @@ -2226,48 +2227,40 @@ } }, "@material-ui/core": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.5.0.tgz", - "integrity": "sha512-UHVAjU+1uDtA+OMBNBHb4RlCZOu514XeYPafNJv+GTdXBDr1SCPK7yqRE6TV1/bulxlDusTgu5Q6BAUgpmO4MA==", + "version": "4.9.8", + "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.9.8.tgz", + "integrity": "sha512-4cslpG6oLoPWUfwPkX+hvbak4hAGiOfgXOu/UIYeeMrtsTEebC0Mirjoby7zhS4ny86YI3rXEFW6EZDmlj5n5w==", "requires": { "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.5.0", - "@material-ui/system": "^4.5.0", - "@material-ui/types": "^4.1.1", - "@material-ui/utils": "^4.4.0", + "@material-ui/styles": "^4.9.6", + "@material-ui/system": "^4.9.6", + "@material-ui/types": "^5.0.0", + "@material-ui/utils": "^4.9.6", "@types/react-transition-group": "^4.2.0", "clsx": "^1.0.2", - "convert-css-length": "^2.0.1", - "deepmerge": "^4.0.0", - "hoist-non-react-statics": "^3.2.1", - "is-plain-object": "^3.0.0", - "normalize-scroll-left": "^0.2.0", + "hoist-non-react-statics": "^3.3.2", "popper.js": "^1.14.1", "prop-types": "^15.7.2", + "react-is": "^16.8.0", "react-transition-group": "^4.3.0" }, "dependencies": { "@babel/runtime": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", - "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, - "is-plain-object": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", - "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "requires": { - "isobject": "^4.0.0" + "react-is": "^16.7.0" } }, - "isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==" - }, "react-transition-group": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz", @@ -2280,134 +2273,176 @@ } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" } } }, "@material-ui/icons": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.4.3.tgz", - "integrity": "sha512-HVVvUyc/78kmaBd93LkfWyGkXMM+zOMKzUfulWXxaV/fFAZ3N0pD0oHjWUd94zrOoF3tZP9JC7EPlIpIcZSNow==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.9.1.tgz", + "integrity": "sha512-GBitL3oBWO0hzBhvA9KxqcowRUsA0qzwKkURyC8nppnC3fw54KPKZ+d4V1Eeg/UnDRSzDaI9nGCdel/eh9AQMg==", "requires": { "@babel/runtime": "^7.4.4" }, "dependencies": { "@babel/runtime": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", - "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + } + } + }, + "@material-ui/lab": { + "version": "4.0.0-alpha.47", + "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.47.tgz", + "integrity": "sha512-+WC3O0M/769D3nO9Rqupusc+lob7tQMe5/DnOjAhZ0bpXlJbhZb7N84WkEk4JgQLj6ydP8e9Jhqd1lG+mGj+xw==", + "requires": { + "@babel/runtime": "^7.4.4", + "@material-ui/utils": "^4.9.6", + "clsx": "^1.0.4", + "prop-types": "^15.7.2", + "react-is": "^16.8.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" } } }, "@material-ui/styles": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.5.0.tgz", - "integrity": "sha512-O0NSAECHK9f3DZK6wy56PZzp8b/7KSdfpJs8DSC7vnXUAoMPCTtchBKLzMtUsNlijiJFeJjSxNdQfjWXgyur5A==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.9.6.tgz", + "integrity": "sha512-ijgwStEkw1OZ6gCz18hkjycpr/3lKs1hYPi88O/AUn4vMuuGEGAIrqKVFq/lADmZUNF3DOFIk8LDkp7zmjPxtA==", "requires": { "@babel/runtime": "^7.4.4", - "@emotion/hash": "^0.7.1", - "@material-ui/types": "^4.1.1", - "@material-ui/utils": "^4.1.0", + "@emotion/hash": "^0.8.0", + "@material-ui/types": "^5.0.0", + "@material-ui/utils": "^4.9.6", "clsx": "^1.0.2", "csstype": "^2.5.2", - "deepmerge": "^4.0.0", - "hoist-non-react-statics": "^3.2.1", - "jss": "^10.0.0", - "jss-plugin-camel-case": "^10.0.0", - "jss-plugin-default-unit": "^10.0.0", - "jss-plugin-global": "^10.0.0", - "jss-plugin-nested": "^10.0.0", - "jss-plugin-props-sort": "^10.0.0", - "jss-plugin-rule-value-function": "^10.0.0", - "jss-plugin-vendor-prefixer": "^10.0.0", + "hoist-non-react-statics": "^3.3.2", + "jss": "^10.0.3", + "jss-plugin-camel-case": "^10.0.3", + "jss-plugin-default-unit": "^10.0.3", + "jss-plugin-global": "^10.0.3", + "jss-plugin-nested": "^10.0.3", + "jss-plugin-props-sort": "^10.0.3", + "jss-plugin-rule-value-function": "^10.0.3", + "jss-plugin-vendor-prefixer": "^10.0.3", "prop-types": "^15.7.2" }, "dependencies": { "@babel/runtime": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", - "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "jss": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz", + "integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^2.6.5", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" } } }, "@material-ui/system": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.5.0.tgz", - "integrity": "sha512-vR0PbMTzLnuuVCoYNQ13zyhLa/4s/UA9P9JbNuHBOOkfrHn53ShINiG0v05EgfwizfULLtc7mNvsGAgIyyp/hQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.9.6.tgz", + "integrity": "sha512-QtfoAePyqXoZ2HUVSwGb1Ro0kucMCvVjbI0CdYIR21t0Opgfm1Oer6ni9P5lfeXA39xSt0wCierw37j+YES48Q==", "requires": { "@babel/runtime": "^7.4.4", - "deepmerge": "^4.0.0", + "@material-ui/utils": "^4.9.6", "prop-types": "^15.7.2" }, "dependencies": { "@babel/runtime": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", - "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" } } }, "@material-ui/types": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-4.1.1.tgz", - "integrity": "sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ==", - "requires": { - "@types/react": "*" - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.0.0.tgz", + "integrity": "sha512-UeH2BuKkwDndtMSS0qgx1kCzSMw+ydtj0xx/XbFtxNSTlXydKwzs5gVW5ZKsFlAkwoOOQ9TIsyoCC8hq18tOwg==" }, "@material-ui/utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.4.0.tgz", - "integrity": "sha512-UXoQVwArQEQWXxf2FPs0iJGT+MePQpKr0Qh0CPoLc1OdF0GSMTmQczcqCzwZkeHxHAOq/NkIKM1Pb/ih1Avicg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.9.6.tgz", + "integrity": "sha512-gqlBn0JPPTUZeAktn1rgMcy9Iczrr74ecx31tyZLVGdBGGzsxzM6PP6zeS7FuoLS6vG4hoZP7hWnOoHtkR0Kvw==", "requires": { "@babel/runtime": "^7.4.4", "prop-types": "^15.7.2", - "react-is": "^16.8.6" + "react-is": "^16.8.0" }, "dependencies": { "@babel/runtime": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", - "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, - "react-is": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", - "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==" - }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" } } }, @@ -2509,6 +2544,12 @@ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==", "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true } } }, @@ -3925,9 +3966,9 @@ } }, "@types/react-transition-group": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.2.3.tgz", - "integrity": "sha512-Hk8jiuT7iLOHrcjKP/ZVSyCNXK73wJAUz60xm0mVhiRujrdiI++j4duLiL282VGxwAgxetHQFfqA29LgEeSkFA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.2.4.tgz", + "integrity": "sha512-8DMUaDqh0S70TjkqU0DxOu80tFUiiaS9rxkWip/nb7gtvAsbqOXm02UCmR8zdcjWujgeYPiPNTVpVpKzUDotwA==", "requires": { "@types/react": "*" } @@ -6906,7 +6947,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -6927,12 +6969,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6947,17 +6991,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -7074,7 +7121,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -7086,6 +7134,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -7100,6 +7149,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -7107,12 +7157,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -7131,6 +7183,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -7211,7 +7264,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -7223,6 +7277,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -7308,7 +7363,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -7344,6 +7400,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -7363,6 +7420,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -7406,12 +7464,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -7991,11 +8051,6 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, - "convert-css-length": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/convert-css-length/-/convert-css-length-2.0.1.tgz", - "integrity": "sha512-iGpbcvhLPRKUbBc0Quxx7w/bV14AC3ItuBEGMahA5WTYqB8lq9jH0kTXFheCBASsYnqeMFZhiTruNxr1N59Axg==" - }, "convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", @@ -8464,17 +8519,17 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", - "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" } } }, @@ -8762,11 +8817,6 @@ "integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==", "dev": true }, - "deepmerge": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.1.1.tgz", - "integrity": "sha512-+qO5WbNBKBaZez95TffdUDnGIo4+r5kmsX8aOb7PDHvXsTbghAmleuxjs6ytNaf5Eg4FGBXDS5vqO61TRi6BMg==" - }, "default-gateway": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", @@ -11291,18 +11341,18 @@ "dev": true }, "formik": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.0.3.tgz", - "integrity": "sha512-kYBvcxlsYSncY8OiJHD49C0UmoWXbgmIc9V1g3N1WwBJ7SMLk34QpcJDgroYd42K1cH+mSJlXhB7PlgTXTzlWg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.1.4.tgz", + "integrity": "sha512-oKz8S+yQBzuQVSEoxkqqJrKQS5XJASWGVn6mrs+oTWrBoHgByVwwI1qHiVc9GKDpZBU9vAxXYAKz2BvujlwunA==", "requires": { "deepmerge": "^2.1.1", "hoist-non-react-statics": "^3.3.0", "lodash": "^4.17.14", "lodash-es": "^4.17.14", "react-fast-compare": "^2.0.1", - "scheduler": "^0.14.0", + "scheduler": "^0.18.0", "tiny-warning": "^1.0.2", - "tslib": "^1.9.3" + "tslib": "^1.10.0" }, "dependencies": { "deepmerge": { @@ -11311,13 +11361,18 @@ "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" }, "scheduler": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.14.0.tgz", - "integrity": "sha512-9CgbS06Kki2f4R9FjLSITjZo5BZxPsryiRNyL3LpvrM9WxcVmhlqAOc9E+KQbeI2nqej4JIIbOsfdL51cNb4Iw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", + "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } + }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" } } }, @@ -14690,22 +14745,48 @@ } }, "jss-plugin-camel-case": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0.tgz", - "integrity": "sha512-yALDL00+pPR4FJh+k07A8FeDvfoPPuXU48HLy63enAubcVd3DnS+2rgqPXglHDGixIDVkCSXecl/l5GAMjzIbA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.1.1.tgz", + "integrity": "sha512-MDIaw8FeD5uFz1seQBKz4pnvDLnj5vIKV5hXSVdMaAVq13xR6SVTVWkIV/keyTs5txxTvzGJ9hXoxgd1WTUlBw==", "requires": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", - "jss": "10.0.0" + "jss": "10.1.1" + }, + "dependencies": { + "jss": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz", + "integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^2.6.5", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" + } + } } }, "jss-plugin-default-unit": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0.tgz", - "integrity": "sha512-sURozIOdCtGg9ap18erQ+ijndAfEGtTaetxfU3H4qwC18Bi+fdvjlY/ahKbuu0ASs7R/+WKCP7UaRZOjUDMcdQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.1.1.tgz", + "integrity": "sha512-UkeVCA/b3QEA4k0nIKS4uWXDCNmV73WLHdh2oDGZZc3GsQtlOCuiH3EkB/qI60v2MiCq356/SYWsDXt21yjwdg==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" + "jss": "10.1.1" + }, + "dependencies": { + "jss": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz", + "integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^2.6.5", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" + } + } } }, "jss-plugin-extend": { @@ -14719,50 +14800,115 @@ } }, "jss-plugin-global": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.0.0.tgz", - "integrity": "sha512-80ofWKSQUo62bxLtRoTNe0kFPtHgUbAJeOeR36WEGgWIBEsXLyXOnD5KNnjPqG4heuEkz9eSLccjYST50JnI7Q==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.1.1.tgz", + "integrity": "sha512-VBG3wRyi3Z8S4kMhm8rZV6caYBegsk+QnQZSVmrWw6GVOT/Z4FA7eyMu5SdkorDlG/HVpHh91oFN56O4R9m2VA==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" + "jss": "10.1.1" + }, + "dependencies": { + "jss": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz", + "integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^2.6.5", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" + } + } } }, "jss-plugin-nested": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.0.0.tgz", - "integrity": "sha512-waxxwl/po1hN3azTyixKnr8ReEqUv5WK7WsO+5AWB0bFndML5Yqnt8ARZ90HEg8/P6WlqE/AB2413TkCRZE8bA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.1.1.tgz", + "integrity": "sha512-ozEu7ZBSVrMYxSDplPX3H82XHNQk2DQEJ9TEyo7OVTPJ1hEieqjDFiOQOxXEj9z3PMqkylnUbvWIZRDKCFYw5Q==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0", + "jss": "10.1.1", "tiny-warning": "^1.0.2" + }, + "dependencies": { + "jss": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz", + "integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^2.6.5", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" + } + } } }, "jss-plugin-props-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0.tgz", - "integrity": "sha512-41mf22CImjwNdtOG3r+cdC8+RhwNm616sjHx5YlqTwtSJLyLFinbQC/a4PIFk8xqf1qpFH1kEAIw+yx9HaqZ3g==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.1.1.tgz", + "integrity": "sha512-g/joK3eTDZB4pkqpZB38257yD4LXB0X15jxtZAGbUzcKAVUHPl9Jb47Y7lYmiGsShiV4YmQRqG1p2DHMYoK91g==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" + "jss": "10.1.1" + }, + "dependencies": { + "jss": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz", + "integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^2.6.5", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" + } + } } }, "jss-plugin-rule-value-function": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0.tgz", - "integrity": "sha512-Jw+BZ8JIw1f12V0SERqGlBT1JEPWax3vuZpMym54NAXpPb7R1LYHiCTIlaJUyqvIfEy3kiHMtgI+r2whGgRIxQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.1.1.tgz", + "integrity": "sha512-ClV1lvJ3laU9la1CUzaDugEcwnpjPTuJ0yGy2YtcU+gG/w9HMInD5vEv7xKAz53Bk4WiJm5uLOElSEshHyhKNw==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" + "jss": "10.1.1" + }, + "dependencies": { + "jss": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz", + "integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^2.6.5", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" + } + } } }, "jss-plugin-vendor-prefixer": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0.tgz", - "integrity": "sha512-qslqvL0MUbWuzXJWdUxpj6mdNUX8jr4FFTo3aZnAT65nmzWL7g8oTr9ZxmTXXgdp7ANhS1QWE7036/Q2isFBpw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.1.1.tgz", + "integrity": "sha512-09MZpQ6onQrhaVSF6GHC4iYifQ7+4YC/tAP6D4ZWeZotvCMq1mHLqNKRIaqQ2lkgANjlEot2JnVi1ktu4+L4pw==", "requires": { "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.6", - "jss": "10.0.0" + "css-vendor": "^2.0.7", + "jss": "10.1.1" + }, + "dependencies": { + "jss": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz", + "integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^2.6.5", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" + } + } } }, "jsx-ast-utils": { @@ -16348,11 +16494,6 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, - "normalize-scroll-left": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-scroll-left/-/normalize-scroll-left-0.2.0.tgz", - "integrity": "sha512-t5oCENZJl8TGusJKoCJm7+asaSsPuNmK6+iEjrZ5TyBj2f02brCRsd4c83hwtu+e5d4LCSBZ0uoDlMjBo+A8yA==" - }, "normalize-url": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", @@ -22170,6 +22311,12 @@ "psl": "^1.1.24", "punycode": "^1.4.1" } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true } } }, @@ -23393,6 +23540,12 @@ "requires": { "websocket-driver": ">=0.5.1" } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true } } }, @@ -24956,10 +25109,9 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.2.tgz", + "integrity": "sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw==" }, "v8-compile-cache": { "version": "2.1.0", @@ -25267,7 +25419,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -25295,6 +25448,7 @@ "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -25309,7 +25463,8 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", @@ -25320,7 +25475,8 @@ "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -25437,7 +25593,8 @@ "inherits": { "version": "2.0.4", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -25449,6 +25606,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -25463,6 +25621,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -25470,12 +25629,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.9.0", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -25494,6 +25655,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -25583,7 +25745,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -25595,6 +25758,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -25680,7 +25844,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -25716,6 +25881,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -25735,6 +25901,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -25778,12 +25945,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -25879,6 +26048,14 @@ "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } } }, "webpack-manifest-plugin": { diff --git a/new-lamassu-admin/package.json b/new-lamassu-admin/package.json index a51ee905..d5536bcf 100644 --- a/new-lamassu-admin/package.json +++ b/new-lamassu-admin/package.json @@ -4,8 +4,9 @@ "license": "unlicense", "dependencies": { "@apollo/react-hooks": "^3.1.3", - "@material-ui/core": "4.5.0", - "@material-ui/icons": "4.4.3", + "@material-ui/core": "4.9.8", + "@material-ui/icons": "4.9.1", + "@material-ui/lab": "^4.0.0-alpha.47", "@use-hooks/axios": "1.3.0", "apollo-boost": "^0.4.7", "axios": "0.19.0", @@ -13,7 +14,7 @@ "classnames": "2.2.6", "downshift": "3.3.4", "file-saver": "2.0.2", - "formik": "2.0.3", + "formik": "2.1.4", "fuse.js": "^3.4.6", "graphql": "^14.5.8", "jss-plugin-extend": "^10.0.0", @@ -27,6 +28,7 @@ "react-virtualized": "^9.21.2", "sanctuary": "^2.0.1", "slugify": "^1.3.6", + "uuid": "^7.0.2", "yup": "0.27.0" }, "devDependencies": { diff --git a/new-lamassu-admin/src/App.js b/new-lamassu-admin/src/App.js index 73f0d92c..75bc8ce8 100644 --- a/new-lamassu-admin/src/App.js +++ b/new-lamassu-admin/src/App.js @@ -1,3 +1,4 @@ +import { ApolloProvider } from '@apollo/react-hooks' import CssBaseline from '@material-ui/core/CssBaseline' import { StylesProvider, @@ -5,13 +6,12 @@ import { MuiThemeProvider, makeStyles } from '@material-ui/core/styles' +import ApolloClient from 'apollo-boost' import { setAutoFreeze } from 'immer' import { create } from 'jss' import extendJss from 'jss-plugin-extend' import React from 'react' import { BrowserRouter as Router } from 'react-router-dom' -import ApolloClient from 'apollo-boost' -import { ApolloProvider } from '@apollo/react-hooks' import Header from './components/Header' import { tree, Routes } from './routing/routes' @@ -19,8 +19,23 @@ import global from './styling/global' import theme from './styling/theme' import { backgroundColor, mainWidth } from './styling/variables' +const defaultOptions = { + watchQuery: { + fetchPolicy: 'no-cache', + errorPolicy: 'ignore' + }, + query: { + fetchPolicy: 'no-cache', + errorPolicy: 'all' + }, + mutate: { + errorPolicy: 'all' + } +} + const client = new ApolloClient({ credentials: 'include', + defaultOptions, uri: process.env.NODE_ENV === 'development' ? 'https://localhost:8070/graphql/' @@ -29,7 +44,7 @@ const client = new ApolloClient({ if (process.env.NODE_ENV !== 'production') { const whyDidYouRender = require('@welldone-software/why-did-you-render') - whyDidYouRender(React, { include: [/Logs/] }) + whyDidYouRender(React) } // disable immer autofreeze for performance diff --git a/new-lamassu-admin/src/components/ConfirmDialog.js b/new-lamassu-admin/src/components/ConfirmDialog.js index 1a7f9c76..b56cef22 100644 --- a/new-lamassu-admin/src/components/ConfirmDialog.js +++ b/new-lamassu-admin/src/components/ConfirmDialog.js @@ -73,7 +73,7 @@ export const ConfirmDialog = memo( autoFocus id="confirm-input" type="text" - large + size="lg" fullWidth value={value} touched={{}} diff --git a/new-lamassu-admin/src/components/booleanPropertiesTable/BooleanPropertiesTable.js b/new-lamassu-admin/src/components/booleanPropertiesTable/BooleanPropertiesTable.js index 306e5efe..724fb483 100644 --- a/new-lamassu-admin/src/components/booleanPropertiesTable/BooleanPropertiesTable.js +++ b/new-lamassu-admin/src/components/booleanPropertiesTable/BooleanPropertiesTable.js @@ -1,14 +1,13 @@ import { makeStyles } from '@material-ui/core/styles' import React, { useState, memo } from 'react' -import { H4 } from 'src/components/typography' import { Link } from 'src/components/buttons' import { RadioGroup } from 'src/components/inputs' import { Table, TableBody, TableRow, TableCell } from 'src/components/table' -import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/enabled.svg' +import BooleanCell from 'src/components/tables/BooleanCell' +import { H4 } from 'src/components/typography' import { ReactComponent as EditIconDisabled } from 'src/styling/icons/action/edit/disabled.svg' -import { ReactComponent as TrueIcon } from 'src/styling/icons/table/true.svg' -import { ReactComponent as FalseIcon } from 'src/styling/icons/table/false.svg' +import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/enabled.svg' import { booleanPropertiesTableStyles } from './BooleanPropertiesTable.styles' @@ -82,7 +81,7 @@ const BooleanPropertiesTable = memo( {element.display} - {editing ? ( + {editing && ( - ) : element.value ? ( - - ) : ( - )} + {!editing && } ))} diff --git a/new-lamassu-admin/src/components/buttons/AddButton.js b/new-lamassu-admin/src/components/buttons/AddButton.js index d549aa80..edd4a106 100644 --- a/new-lamassu-admin/src/components/buttons/AddButton.js +++ b/new-lamassu-admin/src/components/buttons/AddButton.js @@ -2,9 +2,9 @@ import { makeStyles } from '@material-ui/core/styles' import classnames from 'classnames' import React, { memo } from 'react' +import typographyStyles from 'src/components/typography/styles' import { ReactComponent as AddIcon } from 'src/styling/icons/button/add/zodiac.svg' import { zircon, zircon2, comet, fontColor, white } from 'src/styling/variables' -import typographyStyles from 'src/components/typography/styles' const { p } = typographyStyles diff --git a/new-lamassu-admin/src/components/buttons/IconButton.js b/new-lamassu-admin/src/components/buttons/IconButton.js new file mode 100644 index 00000000..42e68747 --- /dev/null +++ b/new-lamassu-admin/src/components/buttons/IconButton.js @@ -0,0 +1,27 @@ +import { makeStyles, IconButton as IconB, SvgIcon } from '@material-ui/core' +import React from 'react' + +const styles = { + root: { + '&:hover': { + backgroundColor: 'inherit' + } + } +} + +const useStyles = makeStyles(styles) + +const IconButton = ({ children, onClick, ...props }) => { + const classes = useStyles() + return ( + + {children} + + ) +} + +export default IconButton diff --git a/new-lamassu-admin/src/components/buttons/Link.js b/new-lamassu-admin/src/components/buttons/Link.js index 6a8c9a32..39e20780 100644 --- a/new-lamassu-admin/src/components/buttons/Link.js +++ b/new-lamassu-admin/src/components/buttons/Link.js @@ -6,23 +6,25 @@ import styles from './Link.styles' const useStyles = makeStyles(styles) -const Link = memo(({ submit, className, children, color, size, ...props }) => { - const classes = useStyles() - const classNames = { - [classes.link]: true, - [classes.primary]: color === 'primary', - [classes.secondary]: color === 'secondary', - [classes.noColor]: color === 'noColor' - } +const Link = memo( + ({ submit, className, children, color = 'primary', ...props }) => { + const classes = useStyles() + const classNames = { + [classes.link]: true, + [classes.primary]: color === 'primary', + [classes.secondary]: color === 'secondary', + [classes.noColor]: color === 'noColor' + } - return ( - - ) -}) + return ( + + ) + } +) export default Link diff --git a/new-lamassu-admin/src/components/buttons/Link.styles.js b/new-lamassu-admin/src/components/buttons/Link.styles.js index 411fffbd..bc6c7fbe 100644 --- a/new-lamassu-admin/src/components/buttons/Link.styles.js +++ b/new-lamassu-admin/src/components/buttons/Link.styles.js @@ -1,11 +1,11 @@ import { fade } from '@material-ui/core/styles/colorManipulator' +import typographyStyles from 'src/components/typography/styles' import { white, linkPrimaryColor, linkSecondaryColor } from 'src/styling/variables' -import typographyStyles from 'src/components/typography/styles' const { h4 } = typographyStyles @@ -24,7 +24,8 @@ export default { border: 'none', backgroundColor: 'transparent', cursor: 'pointer', - padding: '0' + padding: '0', + height: '100%' }, primary: { extend: color(linkPrimaryColor) diff --git a/new-lamassu-admin/src/components/buttons/index.js b/new-lamassu-admin/src/components/buttons/index.js index 413e17d1..2031fb58 100644 --- a/new-lamassu-admin/src/components/buttons/index.js +++ b/new-lamassu-admin/src/components/buttons/index.js @@ -3,6 +3,7 @@ import AddButton from './AddButton' import Button from './Button' import FeatureButton from './FeatureButton' import IDButton from './IDButton' +import IconButton from './IconButton' import Link from './Link' import SimpleButton from './SimpleButton' @@ -12,6 +13,7 @@ export { SimpleButton, ActionButton, FeatureButton, + IconButton, IDButton, AddButton } diff --git a/new-lamassu-admin/src/components/dataTable/DataTable.js b/new-lamassu-admin/src/components/dataTable/DataTable.js index 2e744d8b..56fcf116 100644 --- a/new-lamassu-admin/src/components/dataTable/DataTable.js +++ b/new-lamassu-admin/src/components/dataTable/DataTable.js @@ -19,15 +19,18 @@ const DataTable = memo(({ elements, data }) => { <>
- {elements.map(({ size, className, textAlign, header }, idx) => ( - - {header} - - ))} + {elements.map( + ({ width, size, className, textAlign, header }, idx) => ( + + {header} + + ) + )}
@@ -52,8 +55,8 @@ const DataTable = memo(({ elements, data }) => { {elements.map( ( { - header, size, + width, className, textAlign, view = it => it?.toString() @@ -63,6 +66,7 @@ const DataTable = memo(({ elements, data }) => { {view(data[index])} diff --git a/new-lamassu-admin/src/components/editableTable/Header.js b/new-lamassu-admin/src/components/editableTable/Header.js new file mode 100644 index 00000000..74306fb3 --- /dev/null +++ b/new-lamassu-admin/src/components/editableTable/Header.js @@ -0,0 +1,35 @@ +import React from 'react' + +import { Td, THead } from 'src/components/fake-table/Table' +import { startCase } from 'src/utils/string' + +import { ACTION_COL_SIZE, DEFAULT_COL_SIZE } from './consts' + +const Header = ({ elements, enableEdit, enableDelete }) => { + const actionColSize = + enableDelete && enableEdit ? ACTION_COL_SIZE / 2 : ACTION_COL_SIZE + + return ( + + {elements.map( + ({ name, width = DEFAULT_COL_SIZE, header, textAlign }, idx) => ( + + {header || startCase(name)} + + ) + )} + {enableEdit && ( + + Edit + + )} + {enableDelete && ( + + Delete + + )} + + ) +} + +export default Header diff --git a/new-lamassu-admin/src/components/editableTable/Row.js b/new-lamassu-admin/src/components/editableTable/Row.js index 1d7e4e16..c25b1cff 100644 --- a/new-lamassu-admin/src/components/editableTable/Row.js +++ b/new-lamassu-admin/src/components/editableTable/Row.js @@ -1,250 +1,150 @@ -import React, { memo } from 'react' -import * as R from 'ramda' -import classnames from 'classnames' -import { Form, Formik, Field, useFormikContext } from 'formik' import { makeStyles } from '@material-ui/core' +import classnames from 'classnames' +import { Field, useFormikContext } from 'formik' +import React from 'react' -import { Link } from 'src/components/buttons' -import { Td, Tr, CellDoubleLevel } from 'src/components/fake-table/Table' -import { TextInputDisplay } from 'src/components/inputs/base/TextInput' -import { ReactComponent as DeleteIcon } from 'src/styling/icons/action/delete/enabled.svg' +import { Link, IconButton } from 'src/components/buttons' +import { Td, Tr } from 'src/components/fake-table/Table' +import { TL2 } from 'src/components/typography' import { ReactComponent as DisabledDeleteIcon } from 'src/styling/icons/action/delete/disabled.svg' -// import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/enabled.svg' -// import { ReactComponent as DisabledEditIcon } from 'src/styling/icons/action/edit/disabled.svg' +import { ReactComponent as DeleteIcon } from 'src/styling/icons/action/delete/enabled.svg' +import { ReactComponent as DisabledEditIcon } from 'src/styling/icons/action/edit/disabled.svg' +import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/enabled.svg' -const styles = { - button: { - border: 'none', - backgroundColor: 'transparent', - outline: 0, - cursor: 'pointer' - }, - actionCol: { - display: 'flex', - marginLeft: 'auto' - }, - actionColDisplayMode: { - justifyContent: 'center' - }, - actionColEditMode: { - justifyContent: 'flex-end', - '& > :first-child': { - marginRight: 16 - } - }, - textInput: { - '& > .MuiInputBase-input': { - width: 282 - } - } - // doubleLevelRow: { - // '& > div': { - // marginRight: 72 - // } - // } -} +import styles from './Row.styles' +import { ACTION_COL_SIZE } from './consts' const useStyles = makeStyles(styles) -const ERow = memo( - ({ elements, editing, setEditing, disableAction, action }) => { - const classes = useStyles() +const ActionCol = ({ + editing, + setEditing, + enableEdit, + disabled, + onDelete, + enableDelete +}) => { + const classes = useStyles() + const { values, submitForm, resetForm } = useFormikContext() - const Cell = ({ - name, - input, - type, - display, - className, - size, - textAlign, - inputProps, - editing - }) => { - return ( - - {editing && ( - - )} - {!editing && type === 'text' && ( - - )} + const actionColSize = + enableDelete && enableEdit ? ACTION_COL_SIZE / 2 : ACTION_COL_SIZE + + return ( + <> + {editing && ( + + + Cancel + + + Save + - ) - } - - const actionCol = R.last(elements) - const { values, errors } = useFormikContext() - - const actionColClasses = { - [classes.actionCol]: true, - [classes.actionColDisplayMode]: !editing, - [classes.actionColEditMode]: editing - } - - const icon = (action, disabled) => { - if (action === 'delete' && !disabled) return - if (action === 'delete' && disabled) return - } - - return ( - - {R.init(elements).map((element, idx) => { - const colClasses = { - [classes.textInput]: true - } - - if (Array.isArray(element)) { - return ( - - {R.map( - ( - { - name, - input, - size, - textAlign, - type, - view = it => it?.toString(), - inputProps - }, - idx - ) => ( - - // - // (x === '' ? '-' : x)} - // decoration="%" - // className={classes.eRowField} - // setError={setError} - // /> - // - ) - )(R.tail(element))} - - ) - } - - const { - name, - input, - size, - textAlign, - type, - view = it => it?.toString(), - inputProps - } = element - - return ( - - // - // {editing && ( - // - // )} - // {!editing && type === 'text' && ( - // - // )} - // - ) - })} - - {!editing && !disableAction && ( - - )} - {!editing && disableAction && ( -
{icon(actionCol.name, disableAction)}
- )} - {editing && ( - <> - - Cancel - - - Save - - - )} + )} + {!editing && enableEdit && ( + + setEditing && setEditing(values.id)}> + {disabled ? : } + - - ) - } -) + )} + {!editing && enableDelete && ( + + onDelete(values.id)}> + {disabled ? : } + + + )} + + ) +} -const ERowWithFormik = memo( - ({ - initialValues, - validationSchema, - save, - reset, - action, - elements, - editing, - disableAction - }) => { - return ( - -
- - -
- ) - } -) +const ECol = ({ editing, config }) => { + const { + name, + input, + size, + bold, + width, + textAlign, + suffix, + view = it => it?.toString(), + inputProps = {} + } = config -export default ERowWithFormik + const { values } = useFormikContext() + const classes = useStyles({ textAlign, size }) + + const viewClasses = { + [classes.bold]: bold, + [classes.size]: true + } + + const iProps = { + fullWidth: true, + size, + bold, + textAlign, + ...inputProps + } + + // Autocomplete + if (iProps.options && !iProps.getLabel) { + iProps.getLabel = view + } + + return ( + + {editing && } + {!editing && values && ( +
{view(values[name])}
+ )} + {suffix && {suffix}} + + ) +} + +const ERow = ({ + elements, + enableEdit, + enableDelete, + onDelete, + editing, + setEditing, + disabled +}) => { + const { errors } = useFormikContext() + + return ( + + {elements.map((it, idx) => ( + + ))} + {(enableEdit || enableDelete) && ( + + )} + + ) +} + +export default ERow diff --git a/new-lamassu-admin/src/components/editableTable/Row.styles.js b/new-lamassu-admin/src/components/editableTable/Row.styles.js new file mode 100644 index 00000000..65faac11 --- /dev/null +++ b/new-lamassu-admin/src/components/editableTable/Row.styles.js @@ -0,0 +1,17 @@ +import { bySize, bold } from 'src/styling/helpers' + +export default { + cancelButton: { + marginRight: 20 + }, + withSuffix: ({ textAlign }) => ({ + display: 'flex', + alignItems: 'baseline', + justifyContent: textAlign === 'right' && 'end' + }), + suffix: { + marginLeft: 7 + }, + size: ({ size }) => bySize(size), + bold +} diff --git a/new-lamassu-admin/src/components/editableTable/Table.js b/new-lamassu-admin/src/components/editableTable/Table.js index 100a9b93..ecc9d57d 100644 --- a/new-lamassu-admin/src/components/editableTable/Table.js +++ b/new-lamassu-admin/src/components/editableTable/Table.js @@ -1,124 +1,152 @@ -import React, { memo } from 'react' +import { makeStyles } from '@material-ui/core' +import { Form, Formik } from 'formik' import * as R from 'ramda' +import React, { useState } from 'react' +import { v4 } from 'uuid' -import { - Th, - ThDoubleLevel, - THead, - TBody, - Table, - TDoubleLevelHead -} from 'src/components/fake-table/Table' -import { startCase } from 'src/utils/string' +import Link from 'src/components/buttons/Link.js' +import { AddButton } from 'src/components/buttons/index.js' +import { TBody, Table } from 'src/components/fake-table/Table' +import { Info2 } from 'src/components/typography' +import Header from './Header' import ERow from './Row' +import styles from './Table.styles' +import { DEFAULT_COL_SIZE, ACTION_COL_SIZE } from './consts' -const ETHead = memo(({ elements, className }) => { - const action = R.last(elements) +const useStyles = makeStyles(styles) - return ( - - {R.init(elements).map(({ name, size, display, textAlign }, idx) => ( - - {display} - - ))} - - {startCase(action.name)} - - - ) -}) - -const ETDoubleHead = memo(({ elements, className }) => { - const action = R.last(elements) - - return ( - - {R.init(elements).map((element, idx) => { - if (Array.isArray(element)) { - return ( - - {R.map(({ name, size, display, textAlign }) => ( - - {display} - - ))(R.tail(element))} - - ) - } - - const { name, size, display, textAlign } = element - return ( - - {display} - - ) - })} - - {startCase(action.name)} - - - ) -}) - -const ETable = memo( - ({ - elements = [], - data = [], - save, - reset, - action, - initialValues, - validationSchema, - editing, - addingRow, - disableAction, - className, - double - }) => { - return ( - - {!double && } - {double && ( - - )} - - {addingRow && ( - - )} - {data.map((it, idx) => ( - reset(it)} - action={action} - validationSchema={validationSchema} - disableAction={disableAction} - editing={editing[idx]} - /> - ))} - -
- ) - } +const getWidth = R.compose( + R.reduce(R.add)(0), + R.map(it => it.width ?? DEFAULT_COL_SIZE) ) +const ETable = ({ + name, + title, + elements = [], + data = [], + save, + validationSchema, + enableCreate, + forceDisable, + disableAdd, + enableDelete, + initialValues, + enableEdit, + setEditing, + createText = 'Add override' +}) => { + const [editingId, setEditingId] = useState(null) + const [adding, setAdding] = useState(false) + + const innerSave = async it => { + const index = R.findIndex(R.propEq('id', it.id))(data) + const list = index !== -1 ? R.update(index, it, data) : R.prepend(it, data) + + // no response means the save failed + const response = await save({ [name]: list }) + if (!response) return + setAdding(false) + setEditingId(null) + } + + const onDelete = id => { + const list = R.reject(it => it.id === id, data) + return save({ [name]: list }) + } + + const onReset = () => { + setAdding(false) + setEditingId(null) + setEditing && setEditing(false) + } + + const onEdit = it => { + setEditingId(it) + setEditing && setEditing(it, true) + } + + const addField = () => setAdding(true) + + const actionSize = enableEdit || enableDelete ? ACTION_COL_SIZE : 0 + const width = getWidth(elements) + actionSize + const classes = useStyles({ width }) + + const showButtonOnEmpty = !data.length && enableCreate && !adding + const canAdd = !forceDisable && !editingId && !disableAdd && !adding + const showTable = adding || data.length !== 0 + + return ( +
+ {showButtonOnEmpty && ( + + {createText} + + )} + {showTable && ( + <> +
+ {title && {title}} + {enableCreate && canAdd && ( + + {createText} + + )} +
+ +
+
+ {adding && ( + +
+ + +
+ )} + {data.map((it, idx) => ( + +
+ + +
+ ))} + +
+ + )} +
+ ) +} + export default ETable diff --git a/new-lamassu-admin/src/components/editableTable/Table.styles.js b/new-lamassu-admin/src/components/editableTable/Table.styles.js new file mode 100644 index 00000000..00f93bd6 --- /dev/null +++ b/new-lamassu-admin/src/components/editableTable/Table.styles.js @@ -0,0 +1,21 @@ +import { offColor } from 'src/styling/variables' + +export default { + wrapper: ({ width }) => ({ + width: width + }), + addLink: { + marginLeft: 'auto' + }, + title: { + margin: 0, + color: offColor + }, + outerHeader: { + minHeight: 16, + marginBottom: 24, + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center' + } +} diff --git a/new-lamassu-admin/src/components/editableTable/consts.js b/new-lamassu-admin/src/components/editableTable/consts.js new file mode 100644 index 00000000..da6fd5af --- /dev/null +++ b/new-lamassu-admin/src/components/editableTable/consts.js @@ -0,0 +1,4 @@ +const ACTION_COL_SIZE = 175 +const DEFAULT_COL_SIZE = 100 + +export { ACTION_COL_SIZE, DEFAULT_COL_SIZE } diff --git a/new-lamassu-admin/src/components/expandable-table/ExpTable.js b/new-lamassu-admin/src/components/expandable-table/ExpTable.js index 52a6ae9e..de996cb6 100644 --- a/new-lamassu-admin/src/components/expandable-table/ExpTable.js +++ b/new-lamassu-admin/src/components/expandable-table/ExpTable.js @@ -8,10 +8,10 @@ import { CellMeasurerCache } from 'react-virtualized' +import { THead, Tr, Td, Th } from 'src/components/fake-table/Table' import { ReactComponent as ExpandClosedIcon } from 'src/styling/icons/action/expand/closed.svg' import { ReactComponent as ExpandOpenIcon } from 'src/styling/icons/action/expand/open.svg' import { mainWidth } from 'src/styling/variables' -import { THead, Tr, Td, Th } from 'src/components/fake-table/Table' const styles = { expandButton: { @@ -48,25 +48,19 @@ const ExpRow = ({ .slice(0, -1) .map( ( - { - header, - size, - className, - textAlign, - view = it => it?.toString() - }, + { width, className, textAlign, view = it => it?.toString() }, idx ) => ( {view(data)} ) )} - +