From ce8d620ca0f8a809a8dfd3c20d47f565178a5b30 Mon Sep 17 00:00:00 2001 From: Hawk Date: Fri, 17 Apr 2020 20:15:06 +0200 Subject: [PATCH 1/6] basic layout #4 --- frontend/package-lock.json | 371 +++++++++++++++++-- frontend/package.json | 68 ++-- frontend/public/index.html | 42 +-- frontend/src/App.css | 38 -- frontend/src/App.js | 43 ++- frontend/src/components/content.js | 26 ++ frontend/src/components/footer.js | 35 ++ frontend/src/components/navbar.js | 50 +++ frontend/src/components/overview/overview.js | 22 ++ frontend/src/index.js | 11 +- frontend/src/logo.svg | 7 - 11 files changed, 553 insertions(+), 160 deletions(-) create mode 100644 frontend/src/components/content.js create mode 100644 frontend/src/components/footer.js create mode 100644 frontend/src/components/navbar.js create mode 100644 frontend/src/components/overview/overview.js delete mode 100644 frontend/src/logo.svg diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b67ef39..abe7c27 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1035,6 +1035,11 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, "@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -1260,6 +1265,81 @@ "@types/yargs": "^13.0.0" } }, + "@material-ui/core": { + "version": "4.9.10", + "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.9.10.tgz", + "integrity": "sha512-CQuZU9Y10RkwSdxjn785kw2EPcXhv5GKauuVQufR9LlD37kjfn21Im1yvr6wsUzn81oLhEvVPz727UWC0gbqxg==", + "requires": { + "@babel/runtime": "^7.4.4", + "@material-ui/styles": "^4.9.10", + "@material-ui/system": "^4.9.10", + "@material-ui/types": "^5.0.1", + "@material-ui/utils": "^4.9.6", + "@types/react-transition-group": "^4.2.0", + "clsx": "^1.0.4", + "hoist-non-react-statics": "^3.3.2", + "popper.js": "^1.16.1-lts", + "prop-types": "^15.7.2", + "react-is": "^16.8.0", + "react-transition-group": "^4.3.0" + } + }, + "@material-ui/icons": { + "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" + } + }, + "@material-ui/styles": { + "version": "4.9.10", + "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.9.10.tgz", + "integrity": "sha512-EXIXlqVyFDnjXF6tj72y6ZxiSy+mHtrsCo3Srkm3XUeu3Z01aftDBy7ZSr3TQ02gXHTvDSBvegp3Le6p/tl7eA==", + "requires": { + "@babel/runtime": "^7.4.4", + "@emotion/hash": "^0.8.0", + "@material-ui/types": "^5.0.1", + "@material-ui/utils": "^4.9.6", + "clsx": "^1.0.2", + "csstype": "^2.5.2", + "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" + } + }, + "@material-ui/system": { + "version": "4.9.10", + "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.9.10.tgz", + "integrity": "sha512-E+t0baX2TBZk6ALm8twG6objpsxLdMM4MDm1++LMt2m7CetCAEc3aIAfDaprk4+tm5hFT1Cah5dRWk8EeIFQYw==", + "requires": { + "@babel/runtime": "^7.4.4", + "@material-ui/utils": "^4.9.6", + "prop-types": "^15.7.2" + } + }, + "@material-ui/types": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.0.1.tgz", + "integrity": "sha512-wURPSY7/3+MAtng3i26g+WKwwNE3HEeqa/trDBR5+zWKmcjO+u9t7Npu/J1r+3dmIa/OeziN9D/18IrBKvKffw==" + }, + "@material-ui/utils": { + "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.0" + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -1558,6 +1638,14 @@ "@types/react": "*" } }, + "@types/react-transition-group": { + "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": "*" + } + }, "@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", @@ -1823,9 +1911,9 @@ } }, "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" }, "acorn-globals": { "version": "4.3.4", @@ -3113,6 +3201,11 @@ "shallow-clone": "^0.1.2" } }, + "clsx": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -3600,6 +3693,15 @@ } } }, + "css-vendor": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", + "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", + "requires": { + "@babel/runtime": "^7.8.3", + "is-in-browser": "^1.0.2" + } + }, "css-what": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", @@ -4026,6 +4128,30 @@ "utila": "~0.4" } }, + "dom-helpers": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz", + "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^2.6.7" + }, + "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==" + } + } + }, "dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", @@ -5637,6 +5763,11 @@ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, "gzip-size": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", @@ -5767,6 +5898,19 @@ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -5777,6 +5921,14 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "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" + } + }, "hosted-git-info": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", @@ -5980,6 +6132,11 @@ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, + "hyphenate-style-name": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz", + "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -6284,6 +6441,11 @@ "is-extglob": "^2.1.1" } }, + "is-in-browser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", + "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -7626,6 +7788,83 @@ "verror": "1.10.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" + } + }, + "jss-plugin-camel-case": { + "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.1.1" + } + }, + "jss-plugin-default-unit": { + "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.1.1" + } + }, + "jss-plugin-global": { + "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.1.1" + } + }, + "jss-plugin-nested": { + "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.1.1", + "tiny-warning": "^1.0.2" + } + }, + "jss-plugin-props-sort": { + "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.1.1" + } + }, + "jss-plugin-rule-value-function": { + "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.1.1" + } + }, + "jss-plugin-vendor-prefixer": { + "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.7", + "jss": "10.1.1" + } + }, "jsx-ast-utils": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", @@ -7719,12 +7958,12 @@ } }, "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "requires": { "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -8093,6 +8332,16 @@ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz", "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=" }, + "mini-create-react-context": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz", + "integrity": "sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==", + "requires": { + "@babel/runtime": "^7.4.0", + "gud": "^1.0.0", + "tiny-warning": "^1.0.2" + } + }, "mini-css-extract-plugin": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", @@ -8135,9 +8384,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { "version": "3.1.1", @@ -8224,18 +8473,11 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } + "minimist": "^1.2.5" } }, "move-concurrently": { @@ -9062,6 +9304,11 @@ "ts-pnp": "^1.1.2" } }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, "portfinder": { "version": "1.0.25", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", @@ -10444,6 +10691,52 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" }, + "react-router": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.1.2.tgz", + "integrity": "sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.3.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "react-router-dom": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.1.2.tgz", + "integrity": "sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.1.2", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, "react-scripts": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.0.tgz", @@ -10504,6 +10797,17 @@ "workbox-webpack-plugin": "4.3.1" } }, + "react-transition-group": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz", + "integrity": "sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -10806,6 +11110,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -12220,6 +12529,16 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -12361,6 +12680,11 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "typeface-roboto": { + "version": "0.0.75", + "resolved": "https://registry.npmjs.org/typeface-roboto/-/typeface-roboto-0.0.75.tgz", + "integrity": "sha512-VrR/IiH00Z1tFP4vDGfwZ1esNqTiDMchBEXYY9kilT6wRGgFoCAlgkEUMHb1E3mB0FsfZhv756IF0+R+SFPfdg==" + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -12591,6 +12915,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index 2b78f03..d694f70 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,34 +1,38 @@ { - "name": "simcompanies-dashboard", - "version": "0.1.0", - "private": true, - "dependencies": { - "@testing-library/jest-dom": "^4.2.4", - "@testing-library/react": "^9.4.0", - "@testing-library/user-event": "^7.2.1", - "react": "^16.12.0", - "react-dom": "^16.12.0", - "react-scripts": "3.4.0" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": "react-app" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } + "name": "simcompanies-dashboard", + "version": "0.1.0", + "private": true, + "dependencies": { + "@material-ui/core": "^4.9.8", + "@material-ui/icons": "^4.9.1", + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.4.0", + "@testing-library/user-event": "^7.2.1", + "react": "^16.12.0", + "react-dom": "^16.12.0", + "react-router-dom": "^5.1.2", + "react-scripts": "3.4.0", + "typeface-roboto": "0.0.75" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } } diff --git a/frontend/public/index.html b/frontend/public/index.html index aa069f2..0a1f215 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -1,43 +1,19 @@ - + + - - - + + - - - React App - - +
- - - + \ No newline at end of file diff --git a/frontend/src/App.css b/frontend/src/App.css index 74b5e05..e69de29 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/frontend/src/App.js b/frontend/src/App.js index ce9cbd2..e70949e 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -1,26 +1,25 @@ -import React from 'react'; -import logo from './logo.svg'; -import './App.css'; +import React, { Component } from "react"; +import { + BrowserRouter +} from "react-router-dom"; +import Navbar from "./components/navbar"; +import Footer from "./components/footer"; +import Content from "./components/content"; +import "./App.css"; -function App() { - return ( -
-
- logo -

- Edit src/App.js and save to reload. -

- - Learn React - -
-
- ); + + +class App extends Component { + render() { + //change basename in browserrouter if uri changes + return ( + + + +
+
+ ); + } } export default App; diff --git a/frontend/src/components/content.js b/frontend/src/components/content.js new file mode 100644 index 0000000..d112160 --- /dev/null +++ b/frontend/src/components/content.js @@ -0,0 +1,26 @@ +import React from 'react'; +import { makeStyles } from '@material-ui/core/styles'; +import Overview from "./overview/overview"; +import { + Route, +} from "react-router-dom"; + +const useStyles = makeStyles(theme => ({ + root: { + flexGrow: 1, + padding: 20, + backgroundColor: "#eeeeee", + }, +})); + +export default function Content() { + const classes = useStyles(); + + return ( + +
+ +
+ + ); +} diff --git a/frontend/src/components/footer.js b/frontend/src/components/footer.js new file mode 100644 index 0000000..0715051 --- /dev/null +++ b/frontend/src/components/footer.js @@ -0,0 +1,35 @@ +import React from 'react'; +import { makeStyles } from '@material-ui/core/styles'; +import Typography from '@material-ui/core/Typography'; +import Box from '@material-ui/core/Box'; + +function Copyright() { + return ( + + {'Copyright © '} + {new Date().getFullYear()} + {' Oliver Boehlk, Falk Bachmann'} + {'.'} + + ); +} + +const useStyles = makeStyles(theme => ({ + footer: { + backgroundColor: theme.palette.primary.main, + color: theme.palette.primary.light, + padding: theme.spacing(6, 0), + }, +})); + +export default function Footer() { + const classes = useStyles(); + + return ( + + ); +} diff --git a/frontend/src/components/navbar.js b/frontend/src/components/navbar.js new file mode 100644 index 0000000..11c75ea --- /dev/null +++ b/frontend/src/components/navbar.js @@ -0,0 +1,50 @@ +import React from 'react'; +import AppBar from '@material-ui/core/AppBar'; +import Tabs from '@material-ui/core/Tabs'; +import Tab from '@material-ui/core/Tab'; +import CssBaseline from '@material-ui/core/CssBaseline'; +import { makeStyles } from '@material-ui/core/styles'; +import { Link } from "react-router-dom"; +import Toolbar from '@material-ui/core/Toolbar'; +import Link1 from '@material-ui/core/Link'; + + +const useStyles = makeStyles(theme => ({ + root: { + flexGrow: 1, + }, + title: { + paddingTop: 10, + }, + grow: { + flexGrow: 1, + }, + tabs: { + ...theme.mixins.toolbar, + marginRight: 15 + } + +})); + +export default function Navbar(props) { + const classes = useStyles(); + const [value, setValue] = React.useState(0); + + const handleChange = (event, newValue) => { + setValue(newValue); + }; + return ( + + + + + +
+ + + + + + + ); +} diff --git a/frontend/src/components/overview/overview.js b/frontend/src/components/overview/overview.js new file mode 100644 index 0000000..a77de0c --- /dev/null +++ b/frontend/src/components/overview/overview.js @@ -0,0 +1,22 @@ +import React from 'react'; +import { makeStyles } from '@material-ui/core/styles'; + +const useStyles = makeStyles(theme => ({ + root: { + flexGrow: 1, + padding: 20, + backgroundColor: "#eeeeee", + }, +})); + +export default function Content() { + const classes = useStyles(); + + return ( + +
+ Hallo i bims 1 nicer Overview +
+ + ); +} diff --git a/frontend/src/index.js b/frontend/src/index.js index 87d1be5..7a8ad64 100644 --- a/frontend/src/index.js +++ b/frontend/src/index.js @@ -2,11 +2,8 @@ import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; -import * as serviceWorker from './serviceWorker'; -ReactDOM.render(, document.getElementById('root')); - -// If you want your app to work offline and load faster, you can change -// unregister() to register() below. Note this comes with some pitfalls. -// Learn more about service workers: https://bit.ly/CRA-PWA -serviceWorker.unregister(); +ReactDOM.render( + , + document.getElementById('root') +); diff --git a/frontend/src/logo.svg b/frontend/src/logo.svg deleted file mode 100644 index 6b60c10..0000000 --- a/frontend/src/logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - From 1d3aa2c4778679bff7efed8e660d489529fa0185 Mon Sep 17 00:00:00 2001 From: Hawk Date: Fri, 17 Apr 2020 21:28:42 +0200 Subject: [PATCH 2/6] added drawer + restructure #4 --- frontend/src/App.js | 7 +- frontend/src/components/content.js | 2 +- frontend/src/components/navbar.js | 50 ----- frontend/src/components/navigation.js | 210 +++++++++++++++++++ frontend/src/components/overview/overview.js | 2 +- 5 files changed, 214 insertions(+), 57 deletions(-) delete mode 100644 frontend/src/components/navbar.js create mode 100644 frontend/src/components/navigation.js diff --git a/frontend/src/App.js b/frontend/src/App.js index e70949e..0ec23e5 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -2,9 +2,8 @@ import React, { Component } from "react"; import { BrowserRouter } from "react-router-dom"; -import Navbar from "./components/navbar"; -import Footer from "./components/footer"; -import Content from "./components/content"; +import Navbar from "./components/navigation"; + import "./App.css"; @@ -15,8 +14,6 @@ class App extends Component { return ( - -
); } diff --git a/frontend/src/components/content.js b/frontend/src/components/content.js index d112160..cb9bc29 100644 --- a/frontend/src/components/content.js +++ b/frontend/src/components/content.js @@ -19,7 +19,7 @@ export default function Content() { return (
- +
); diff --git a/frontend/src/components/navbar.js b/frontend/src/components/navbar.js deleted file mode 100644 index 11c75ea..0000000 --- a/frontend/src/components/navbar.js +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import AppBar from '@material-ui/core/AppBar'; -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; -import CssBaseline from '@material-ui/core/CssBaseline'; -import { makeStyles } from '@material-ui/core/styles'; -import { Link } from "react-router-dom"; -import Toolbar from '@material-ui/core/Toolbar'; -import Link1 from '@material-ui/core/Link'; - - -const useStyles = makeStyles(theme => ({ - root: { - flexGrow: 1, - }, - title: { - paddingTop: 10, - }, - grow: { - flexGrow: 1, - }, - tabs: { - ...theme.mixins.toolbar, - marginRight: 15 - } - -})); - -export default function Navbar(props) { - const classes = useStyles(); - const [value, setValue] = React.useState(0); - - const handleChange = (event, newValue) => { - setValue(newValue); - }; - return ( - - - - - -
- - - - - - - ); -} diff --git a/frontend/src/components/navigation.js b/frontend/src/components/navigation.js new file mode 100644 index 0000000..57a494c --- /dev/null +++ b/frontend/src/components/navigation.js @@ -0,0 +1,210 @@ +import React from 'react'; +import clsx from 'clsx'; +import { makeStyles, useTheme, fade } from '@material-ui/core/styles'; +import Drawer from '@material-ui/core/Drawer'; +import CssBaseline from '@material-ui/core/CssBaseline'; +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +import List from '@material-ui/core/List'; +import Typography from '@material-ui/core/Typography'; +import Divider from '@material-ui/core/Divider'; +import IconButton from '@material-ui/core/IconButton'; +import MenuIcon from '@material-ui/icons/Menu'; +import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; +import ChevronRightIcon from '@material-ui/icons/ChevronRight'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import Footer from "./footer"; +import Content from "./content" +import Link1 from '@material-ui/core/Link'; +import { Link } from "react-router-dom"; +import SearchIcon from '@material-ui/icons/Search'; +import InputBase from '@material-ui/core/InputBase'; + +const drawerWidth = 240; + +const useStyles = makeStyles((theme) => ({ + root: { + display: 'flex', + }, + appBar: { + transition: theme.transitions.create(['margin', 'width'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + }, + appBarShift: { + width: `calc(100% - ${drawerWidth}px)`, + marginLeft: drawerWidth, + transition: theme.transitions.create(['margin', 'width'], { + easing: theme.transitions.easing.easeOut, + duration: theme.transitions.duration.enteringScreen, + }), + }, + menuButton: { + marginRight: theme.spacing(2), + }, + hide: { + display: 'none', + }, + drawer: { + width: drawerWidth, + flexShrink: 0, + }, + drawerPaper: { + width: drawerWidth, + }, + drawerHeader: { + display: 'flex', + alignItems: 'center', + padding: theme.spacing(0, 1), + // necessary for content to be below app bar + ...theme.mixins.toolbar, + justifyContent: 'flex-end', + }, + content: { + flexGrow: 1, + padding: 0, + transition: theme.transitions.create('margin', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + marginLeft: -drawerWidth, + }, + contentShift: { + transition: theme.transitions.create('margin', { + easing: theme.transitions.easing.easeOut, + duration: theme.transitions.duration.enteringScreen, + }), + marginLeft: 0, + }, + search: { + position: 'relative', + borderRadius: theme.shape.borderRadius, + backgroundColor: fade(theme.palette.common.white, 0.15), + '&:hover': { + backgroundColor: fade(theme.palette.common.white, 0.25), + }, + marginLeft: 0, + width: '100%', + [theme.breakpoints.up('sm')]: { + marginLeft: theme.spacing(1), + width: 'auto', + }, + }, + searchIcon: { + padding: theme.spacing(0, 2), + height: '100%', + position: 'absolute', + pointerEvents: 'none', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }, + inputRoot: { + color: 'inherit', + }, + inputInput: { + padding: theme.spacing(1, 1, 1, 0), + // vertical padding + font size from searchIcon + paddingLeft: `calc(1em + ${theme.spacing(4)}px)`, + transition: theme.transitions.create('width'), + width: '100%', + [theme.breakpoints.up('sm')]: { + width: '12ch', + '&:focus': { + width: '20ch', + }, + }, + }, + grow: { + flexGrow: 1, + }, +})); + +export default function Navigation() { + const classes = useStyles(); + const theme = useTheme(); + const [open, setOpen] = React.useState(false); + + const handleDrawerOpen = () => { + setOpen(true); + }; + + const handleDrawerClose = () => { + setOpen(false); + }; + + function ListItemLink(props) { + return ; + } + + return ( +
+ + + + + + + +
+
+
+ +
+ +
+ + + +
+ + {theme.direction === 'ltr' ? : } + +
+ + + {['Overview'].map((text, index) => ( + + + + ))} + +
+
+
+ +
+
+ +
+ ); +} diff --git a/frontend/src/components/overview/overview.js b/frontend/src/components/overview/overview.js index a77de0c..e1911b7 100644 --- a/frontend/src/components/overview/overview.js +++ b/frontend/src/components/overview/overview.js @@ -9,7 +9,7 @@ const useStyles = makeStyles(theme => ({ }, })); -export default function Content() { +export default function Overview() { const classes = useStyles(); return ( From 3383bf8e1405cafcd7bd2eabb540fb477c9bcc19 Mon Sep 17 00:00:00 2001 From: Oliver Boehlk Date: Fri, 17 Apr 2020 22:08:53 +0200 Subject: [PATCH 3/6] add autoupdate script for server --- update.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 update.sh diff --git a/update.sh b/update.sh new file mode 100644 index 0000000..e76d977 --- /dev/null +++ b/update.sh @@ -0,0 +1,13 @@ +BACKENDID = netstat -tulpn 2>/dev/null | grep ":3001 " | awk '{print $7;}' | cut -d "/" -f1 +kill -9 $BACKENDID +git checkout master && +git pull && +cd backend +npm i +cd ../frontend +npm i +npm run build +mv ./build/* +../backend/frontend +cd ../backend +npm start \ No newline at end of file From 48981ccaf400f777c4ef626a3707c117ca5afb9f Mon Sep 17 00:00:00 2001 From: Hawk Date: Fri, 17 Apr 2020 22:28:50 +0200 Subject: [PATCH 4/6] added logo & favicon close #4 --- frontend/public/favicon.ico | Bin 3150 -> 1150 bytes frontend/public/index.html | 1 - frontend/public/logo192.png | Bin 5347 -> 0 bytes frontend/public/logo512.png | Bin 9664 -> 0 bytes frontend/public/manifest.json | 36 +++++++++----------------- frontend/src/App.css | 11 ++++++++ frontend/src/components/navigation.js | 2 +- frontend/src/img/logo.png | Bin 0 -> 21974 bytes 8 files changed, 24 insertions(+), 26 deletions(-) delete mode 100644 frontend/public/logo192.png delete mode 100644 frontend/public/logo512.png create mode 100644 frontend/src/img/logo.png diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico index bcd5dfd67cd0361b78123e95c2dd96031f27f743..8aad3ab6c77ce88d540a35be7724c7bfd4b5b00e 100644 GIT binary patch literal 1150 zcmbVMJBwOD6rP3DVXM?B_m2s|2cjqnDhd`Vh=mB+X<=g_D7YHXN=0#riQwDL!Z&yY z@%{Mro>{%CVkBfP^ZL&BotZgj<}&sqe$UTLY`?P~Ul{ww7<&<`2#LrCE_RHGw%pf` z%I9K(2j%VU7lf(sfN^a)9*7@54~Owl}d$BD1_y5$vL~-4qmSpPNx%v zLIE0$2FYadQ$HGGu~@)rwZiZBBNmH6E|;TLt8va|vq2`4L9^M!d_ITSY(_L1mGmP~ zF9-q*1_N@r9Qyq}v|24nr4r|y8}dUswOWl)_z3Z4IQebV166dR>diF7)R{eCY|?&-<*U@(y4M|_H(+wJCgp|h@5EAHb~Pv@r` znoK5?%Vo|Xz0c=^%jH6&(SY4V~L9^Y^{EbZ~^gnR^pK};r-Gjye=yG^!Uug7yBkxm1$U&fB$L?Zdm i_y5)(&3~8wU?zONhkKky*zs`0?VG&ipZ^2@+rI-R@R{@g literal 3150 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 MDeX2GIKR{Qf5okjU;qFB diff --git a/frontend/public/index.html b/frontend/public/index.html index 0a1f215..d2777f6 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -6,7 +6,6 @@ - Sim Companies Dashboard diff --git a/frontend/public/logo192.png b/frontend/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json index 080d6c7..40cbbeb 100644 --- a/frontend/public/manifest.json +++ b/frontend/public/manifest.json @@ -1,25 +1,13 @@ { - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} + "short_name": "React App", + "name": "Create React App Sample", + "icons": [{ + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} \ No newline at end of file diff --git a/frontend/src/App.css b/frontend/src/App.css index e69de29..b80d8fc 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -0,0 +1,11 @@ +.logo { + background-image: url(./img/logo.png); + background-repeat: no-repeat; + background-size: 100%; + width: 150px; + text-indent: 100%; + white-space: nowrap; + overflow: hidden; + margin-left: 10px; + height: 64px; +} \ No newline at end of file diff --git a/frontend/src/components/navigation.js b/frontend/src/components/navigation.js index 57a494c..2046bd5 100644 --- a/frontend/src/components/navigation.js +++ b/frontend/src/components/navigation.js @@ -157,7 +157,7 @@ export default function Navigation() { > - + Sim Companies Dashboard
diff --git a/frontend/src/img/logo.png b/frontend/src/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4e07ad1e21b82b93f2004bcff0d5ac429d51bab3 GIT binary patch literal 21974 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
+zqfQS1|Blzp6fLiW^c)&e*h%^?Hw0p| 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 B#}@zq literal 0 HcmV?d00001 From d72176fac66bfec54906fa31fe448acc2aae58a8 Mon Sep 17 00:00:00 2001 From: Hawk Date: Fri, 17 Apr 2020 22:29:37 +0200 Subject: [PATCH 5/6] removed comma --- frontend/public/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json index 40cbbeb..e2e6aee 100644 --- a/frontend/public/manifest.json +++ b/frontend/public/manifest.json @@ -5,7 +5,7 @@ "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" - }, ], + }], "start_url": ".", "display": "standalone", "theme_color": "#000000", From 1641a3edcb74671e683ed58a30a72299d367ccb3 Mon Sep 17 00:00:00 2001 From: Oliver Boehlk Date: Fri, 17 Apr 2020 23:35:20 +0200 Subject: [PATCH 6/6] add daychart --- frontend/package-lock.json | 201 ++++++++++++++++++ frontend/package.json | 8 +- frontend/src/App.js | 19 +- .../components/resourcechart/resourcechart.js | 41 ++++ 4 files changed, 250 insertions(+), 19 deletions(-) create mode 100644 frontend/src/components/resourcechart/resourcechart.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b67ef39..13cd343 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -3036,6 +3036,11 @@ } } }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, "clean-css": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", @@ -3731,6 +3736,73 @@ "type": "^1.0.1" } }, + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "d3-color": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.0.tgz", + "integrity": "sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg==" + }, + "d3-format": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.4.tgz", + "integrity": "sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw==" + }, + "d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "d3-scale": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + }, + "d3-time-format": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.3.tgz", + "integrity": "sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA==", + "requires": { + "d3-time": "1" + } + }, "damerau-levenshtein": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", @@ -3779,6 +3851,11 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "decimal.js-light": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.0.tgz", + "integrity": "sha512-b3VJCbd2hwUpeRGG3Toob+CRo8W22xplipNhP3tN7TSVB/cyMX71P1vM2Xjc9H74uV6dS2hDDmo/rHq8L87Upg==" + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -4026,6 +4103,14 @@ "utila": "~0.4" } }, + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, "dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", @@ -7808,6 +7893,11 @@ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -7835,6 +7925,11 @@ "lodash._reinterpolate": "^3.0.0" } }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -7931,6 +8026,11 @@ "object-visit": "^1.0.0" } }, + "math-expression-evaluator": { + "version": "1.2.22", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz", + "integrity": "sha512-L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ==" + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -10444,6 +10544,22 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-resize-detector": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-2.3.0.tgz", + "integrity": "sha512-oCAddEWWeFWYH5FAcHdBYcZjAw9fMzRUK9sWSx6WvSSOPVRxcHd5zTIGy/mOus+AhN/u6T4TMiWxvq79PywnJQ==", + "requires": { + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", + "prop-types": "^15.6.0", + "resize-observer-polyfill": "^1.5.0" + } + }, "react-scripts": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.0.tgz", @@ -10504,6 +10620,28 @@ "workbox-webpack-plugin": "4.3.1" } }, + "react-smooth": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-1.0.5.tgz", + "integrity": "sha512-eW057HT0lFgCKh8ilr0y2JaH2YbNcuEdFpxyg7Gf/qDKk9hqGMyXryZJ8iMGJEuKH0+wxS0ccSsBBB3W8yCn8w==", + "requires": { + "lodash": "~4.17.4", + "prop-types": "^15.6.0", + "raf": "^3.4.0", + "react-transition-group": "^2.5.0" + } + }, + "react-transition-group": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "requires": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -10549,6 +10687,39 @@ "util.promisify": "^1.0.0" } }, + "recharts": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-1.8.5.tgz", + "integrity": "sha512-tM9mprJbXVEBxjM7zHsIy6Cc41oO/pVYqyAsOHLxlJrbNBuLs0PHB3iys2M+RqCF0//k8nJtZF6X6swSkWY3tg==", + "requires": { + "classnames": "^2.2.5", + "core-js": "^2.6.10", + "d3-interpolate": "^1.3.0", + "d3-scale": "^2.1.0", + "d3-shape": "^1.2.0", + "lodash": "^4.17.5", + "prop-types": "^15.6.0", + "react-resize-detector": "^2.3.0", + "react-smooth": "^1.0.5", + "recharts-scale": "^0.4.2", + "reduce-css-calc": "^1.3.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + } + } + }, + "recharts-scale": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.3.tgz", + "integrity": "sha512-t8p5sccG9Blm7c1JQK/ak9O8o95WGhNXD7TXg/BW5bYbVlr6eCeRBNpgyigD4p6pSSMehC5nSvBUPj6F68rbFA==", + "requires": { + "decimal.js-light": "^2.4.1" + } + }, "recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", @@ -10566,6 +10737,31 @@ "strip-indent": "^3.0.0" } }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "requires": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + } + } + }, + "reduce-function-call": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", + "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", + "requires": { + "balanced-match": "^1.0.0" + } + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -10785,6 +10981,11 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "resolve": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 2b78f03..c6dbdfc 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,7 +8,8 @@ "@testing-library/user-event": "^7.2.1", "react": "^16.12.0", "react-dom": "^16.12.0", - "react-scripts": "3.4.0" + "react-scripts": "3.4.0", + "recharts": "^1.8.5" }, "scripts": { "start": "react-scripts start", @@ -30,5 +31,6 @@ "last 1 firefox version", "last 1 safari version" ] - } -} + }, + "proxy": "http://127.0.0.1:3001" +} \ No newline at end of file diff --git a/frontend/src/App.js b/frontend/src/App.js index ce9cbd2..93306db 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -2,24 +2,11 @@ import React from 'react'; import logo from './logo.svg'; import './App.css'; +import ResourceChart from './components/resourcechart/resourcechart' + function App() { return ( -
-
- logo -

- Edit src/App.js and save to reload. -

- - Learn React - -
-
+ ); } diff --git a/frontend/src/components/resourcechart/resourcechart.js b/frontend/src/components/resourcechart/resourcechart.js new file mode 100644 index 0000000..2d7d047 --- /dev/null +++ b/frontend/src/components/resourcechart/resourcechart.js @@ -0,0 +1,41 @@ +import React from 'react'; +import { + LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, +} from 'recharts'; + +export default function (day, kind) { + + const [data, setData] = React.useState(null); + + const loadData = async () => { + let nextData = await fetch(`/API/day?date=${day}&kind=${kind}`); + nextData = await nextData.json(); + for (let i = 0; i < nextData.length; i++) { + nextData[i]["time"] = new Date(nextData[i]["time"]); + nextData[i]["time"] = nextData[i]["time"].toLocaleTimeString(); + } + setData(nextData) + } + + if (data === null) { + loadData(); + } + + return ( + + + + + + + + + ); +} \ No newline at end of file