From 1af09fb34bb4d4cd157f22adc558bd6d02b28bf9 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Sun, 29 Nov 2020 17:39:58 +0100 Subject: [PATCH 01/12] added the basics types and structure --- webapp_frontend/package-lock.json | 841 ++++++++++++++++++ webapp_frontend/package.json | 2 +- .../src/background/api/filesystem.tsx | 85 ++ .../src/background/api/filesystemTypes.tsx | 42 + .../src/components/Router/Router.tsx | 4 +- .../components/pages/filesytem/FileList.tsx | 36 + .../pages/filesytem/FileListItem.tsx | 46 + .../components/pages/filesytem/Filesystem.tsx | 1 + 8 files changed, 1055 insertions(+), 2 deletions(-) create mode 100644 webapp_frontend/src/background/api/filesystem.tsx create mode 100644 webapp_frontend/src/background/api/filesystemTypes.tsx create mode 100644 webapp_frontend/src/components/pages/filesytem/FileList.tsx create mode 100644 webapp_frontend/src/components/pages/filesytem/FileListItem.tsx create mode 100644 webapp_frontend/src/components/pages/filesytem/Filesystem.tsx diff --git a/webapp_frontend/package-lock.json b/webapp_frontend/package-lock.json index 3409c4ab..c936c2f0 100644 --- a/webapp_frontend/package-lock.json +++ b/webapp_frontend/package-lock.json @@ -1782,6 +1782,12 @@ "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz", "integrity": "sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw==" }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, "@storybook/addon-actions": { "version": "6.0.28", "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.0.28.tgz", @@ -6558,6 +6564,15 @@ } } }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, "ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -6593,6 +6608,12 @@ } } }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -6613,6 +6634,23 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "dev": true, + "requires": { + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true + } + } + }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -7740,6 +7778,16 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" }, + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", @@ -8109,6 +8157,34 @@ "isarray": "^1.0.0" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -8190,6 +8266,72 @@ "unset-value": "^1.0.0" } }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, "call-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", @@ -8288,6 +8430,18 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "dev": true, + "requires": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + } + }, "ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", @@ -8582,6 +8736,15 @@ "shallow-clone": "^0.1.2" } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "clsx": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", @@ -8653,6 +8816,12 @@ "simple-swizzle": "^0.2.2" } }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, "colorette": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", @@ -8760,6 +8929,16 @@ "typedarray": "^0.0.6" } }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "confusing-browser-globals": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", @@ -9310,6 +9489,139 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + } + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + } + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + } + } + }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -9737,11 +10049,60 @@ "dotenv-defaults": "^1.0.2" } }, + "download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "dev": true, + "requires": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "pify": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -10741,6 +11102,25 @@ } } }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -10844,6 +11224,18 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -10924,6 +11316,15 @@ "bser": "2.1.1" } }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -10989,6 +11390,12 @@ } } }, + "file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", + "dev": true + }, "filelist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", @@ -10998,6 +11405,23 @@ "minimatch": "^3.0.4" } }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true + }, + "filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "dev": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, "filesize": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", @@ -11198,6 +11622,12 @@ "readable-stream": "^2.0.0" } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -11336,6 +11766,15 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "dev": true, + "requires": { + "npm-conf": "^1.1.0" + } + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -11550,6 +11989,45 @@ "delegate": "^3.1.2" } }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -11634,11 +12112,26 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -12000,6 +12493,12 @@ } } }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -12311,6 +12810,16 @@ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -12530,6 +13039,12 @@ "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", "dev": true }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true + }, "is-negative-zero": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", @@ -12606,6 +13121,12 @@ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, "is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", @@ -12767,6 +13288,16 @@ "html-escaper": "^2.0.0" } }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, "iterate-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", @@ -13875,6 +14406,12 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -13959,6 +14496,15 @@ "object.assign": "^4.1.0" } }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -14142,6 +14688,12 @@ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -14223,6 +14775,12 @@ "tslib": "^1.10.0" } }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, "lowlight": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.12.1.tgz", @@ -14546,6 +15104,12 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", @@ -15047,6 +15611,24 @@ "sort-keys": "^1.0.0" } }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -15364,6 +15946,12 @@ "integrity": "sha512-p8oHrMeRAKxXDMPI/EBNITj/zTVHKNnAnM59Im+xnoZUlV07FyTg46wom2286jJlXGGfcPFG/ba5NUiCwWNd4w==", "dev": true }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, "p-each-series": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", @@ -15372,11 +15960,26 @@ "p-reduce": "^1.0.0" } }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "requires": { + "p-timeout": "^2.0.1" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -15414,6 +16017,15 @@ "retry": "^0.12.0" } }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -15492,6 +16104,12 @@ "error-ex": "^1.2.0" } }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, "parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", @@ -15581,6 +16199,12 @@ "sha.js": "^2.4.8" } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -16792,6 +17416,12 @@ "xtend": "^4.0.0" } }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -18384,6 +19014,15 @@ } } }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -18620,6 +19259,15 @@ } } }, + "seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "requires": { + "commander": "^2.8.1" + } + }, "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -18984,6 +19632,12 @@ } } }, + "slugify": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.6.tgz", + "integrity": "sha512-ZdJIgv9gdrYwhXqxsH9pv7nXxjUEyQ6nqhngRxoAAOlmMGA28FDq5O4/5US4G2/Nod7d1ovNcgURQJ7kHq50KQ==", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -19135,6 +19789,69 @@ } } }, + "sonarqube-scanner": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonarqube-scanner/-/sonarqube-scanner-2.8.0.tgz", + "integrity": "sha512-zZtJsxY2+LIC1h7mRa7tZ+HjHBvNtCHLpQpVvUrhHsTVLdo+eEfgG0Au/Db9lY6GexnImHgiQJXnS9b21/effg==", + "dev": true, + "requires": { + "download": "^7.1.0", + "extend": "3.0.2", + "fancy-log": "^1.3.3", + "lodash.get": "^4.4.2", + "lodash.uniq": "^4.5.0", + "mkdirp": "^1.0.3", + "progress": "^2.0.3", + "read-pkg": "2.0.0", + "slugify": "^1.4.0" + }, + "dependencies": { + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -19143,6 +19860,15 @@ "is-plain-obj": "^1.0.0" } }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "requires": { + "sort-keys": "^1.0.0" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -19581,6 +20307,15 @@ "babel-plugin-transform-object-rest-spread": "^6.26.0" } }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "requires": { + "is-natural-number": "^4.0.1" + } + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -19599,6 +20334,15 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "style-loader": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", @@ -19755,6 +20499,21 @@ "inherits": "2" } }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, "telejson": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.1.0.tgz", @@ -20009,6 +20768,18 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, "timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -20063,6 +20834,12 @@ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -20135,6 +20912,15 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "trim-trailing-lines": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", @@ -20255,6 +21041,28 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==" }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } + }, "uncontrollable": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.1.1.tgz", @@ -20547,6 +21355,29 @@ "requires-port": "^1.0.0" } }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + } + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -21681,6 +22512,16 @@ } } }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", diff --git a/webapp_frontend/package.json b/webapp_frontend/package.json index fa985817..f1f00bde 100644 --- a/webapp_frontend/package.json +++ b/webapp_frontend/package.json @@ -35,7 +35,7 @@ "eject": "react-scripts eject", "storybook": "start-storybook -p 6006 -s public --no-dll", "build-storybook": "build-storybook -s public --no-dll", - "sonar": "SONAR_LOGIN=$SONAR_LOGIN SONAR_PASSWORD=$SONAR_PASSWORD node src/sonar-scanner.js" + "sonar": "SONAR_LOGIN=$SONAR_LOGIN SONAR_PASSWORD=$SONAR_PASSWORD node src/sonar-scanner.js" }, "eslintConfig": { "extends": "react-app" diff --git a/webapp_frontend/src/background/api/filesystem.tsx b/webapp_frontend/src/background/api/filesystem.tsx new file mode 100644 index 00000000..02e650a4 --- /dev/null +++ b/webapp_frontend/src/background/api/filesystem.tsx @@ -0,0 +1,85 @@ +import {BackendFolderContentsData} from "./filesystemTypes"; + + +export const getFolderContents=()=>new Promise((resolve, reject)=>resolve(exampleValue)) + + + + + + +const exampleValue:BackendFolderContentsData={ + "files": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "string", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ], + "folders": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "string", + "path": "string", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ] +} diff --git a/webapp_frontend/src/background/api/filesystemTypes.tsx b/webapp_frontend/src/background/api/filesystemTypes.tsx new file mode 100644 index 00000000..8ff6a879 --- /dev/null +++ b/webapp_frontend/src/background/api/filesystemTypes.tsx @@ -0,0 +1,42 @@ + +export interface UsersSet { + groups: string[]; + id: number; + username: string; +} + + +export interface PermissionSet { + editableForGroups: string[]; + editableForUsers: UsersSet[]; + visibleForGroups: string[]; + visibleForUsers: UsersSet[]; +} + +export interface File { + createdByUserId: number; + id: number; + lastUpdated: number; + name: string; + permissionSet: PermissionSet; + size: number; + type: string; +} + +export interface Folder { + createdByUserId: number; + id: number; + lastUpdated: number; + name: string; + path: string; + permissionSet: PermissionSet; + size: number; + type: string; +} + +export interface BackendFolderContentsData { + files: File[]; + folders: Folder[]; +} + + diff --git a/webapp_frontend/src/components/Router/Router.tsx b/webapp_frontend/src/components/Router/Router.tsx index eda49ad0..febddadb 100644 --- a/webapp_frontend/src/components/Router/Router.tsx +++ b/webapp_frontend/src/components/Router/Router.tsx @@ -4,6 +4,7 @@ import Health from "../pages/Health"; import Error404 from "../pages/errors/Error404"; import Login from "../basicElements/Login"; import Registration from "../pages/Registration"; +import FileList from "../pages/filesytem/FileList"; export default function Router(): ReactElement { @@ -11,6 +12,7 @@ export default function Router(): ReactElement { + @@ -18,4 +20,4 @@ export default function Router(): ReactElement { ) -} \ No newline at end of file +} diff --git a/webapp_frontend/src/components/pages/filesytem/FileList.tsx b/webapp_frontend/src/components/pages/filesytem/FileList.tsx new file mode 100644 index 00000000..1e6a8a3d --- /dev/null +++ b/webapp_frontend/src/components/pages/filesytem/FileList.tsx @@ -0,0 +1,36 @@ +import React, {ReactElement, useEffect, useState} from "react"; +import {getFolderContents} from "../../../background/api/filesystem"; +import {Folder, File, BackendFolderContentsData} from "../../../background/api/filesystemTypes"; +import {Row} from "react-bootstrap"; +import FileListItem from "./FileListItem"; + + +type Props = {} + + +export default function FileList(props: Props): ReactElement { + const [path,SetPath] = useState("/") + const [files, setFiles] = useState(null) + const [folders, setFolders] = useState(null) + + useEffect(() => { + updateStates() + }, []); + + function updateStates(): void { + getFolderContents() + .then( + (response:BackendFolderContentsData) => { + setFiles(response.files) + setFolders(response.folders) + } + ) + + } + + return ( + {folders?.map((folder:Folder,i:number)=>{return()})} + {files?.map((file:File,i:number)=>{return()})} + ) + +} diff --git a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx new file mode 100644 index 00000000..39871513 --- /dev/null +++ b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx @@ -0,0 +1,46 @@ +import {Folder, File, PermissionSet} from "../../../background/api/filesystemTypes"; +import React, {ReactElement} from "react"; + + +type Props = { + file?: File + folder?: Folder +} + + +type fileOrFolder={ + createdByUserId:number + id:number + lastUpdated:number + name:string + permissionSet:PermissionSet + size:number; + type:string; + path?:string; + isFolder:boolean + +} + +export default function FileListItem(props: Props): ReactElement { + + + + // this is really ugly :( + // @ts-ignore + let fileOrFolder:fileOrFolder={}; + if (props.file){ + for(let k in props.file) { // @ts-ignore + fileOrFolder[k]=props.file[k]; + } + fileOrFolder.isFolder=false; + } + else { + for(let k in props.folder) { // @ts-ignore + fileOrFolder[k]=props.folder[k]; + } + fileOrFolder.isFolder=true; + } + + + return (
dsad
) +} diff --git a/webapp_frontend/src/components/pages/filesytem/Filesystem.tsx b/webapp_frontend/src/components/pages/filesytem/Filesystem.tsx new file mode 100644 index 00000000..4618c01f --- /dev/null +++ b/webapp_frontend/src/components/pages/filesytem/Filesystem.tsx @@ -0,0 +1 @@ +export const bla = false; From 5442c163220b4fae95f487a84f28bc425d3fde07 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Sun, 29 Nov 2020 18:02:16 +0100 Subject: [PATCH 02/12] basic layout --- .../components/pages/filesytem/FileList.tsx | 6 ++- .../pages/filesytem/FileListFile.tsx | 28 ++++++++++++++ .../pages/filesytem/FileListFolder.tsx | 28 ++++++++++++++ .../pages/filesytem/FileListItem.tsx | 38 +++++++++---------- 4 files changed, 77 insertions(+), 23 deletions(-) create mode 100644 webapp_frontend/src/components/pages/filesytem/FileListFile.tsx create mode 100644 webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx diff --git a/webapp_frontend/src/components/pages/filesytem/FileList.tsx b/webapp_frontend/src/components/pages/filesytem/FileList.tsx index 1e6a8a3d..d1ee8a84 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileList.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileList.tsx @@ -3,6 +3,8 @@ import {getFolderContents} from "../../../background/api/filesystem"; import {Folder, File, BackendFolderContentsData} from "../../../background/api/filesystemTypes"; import {Row} from "react-bootstrap"; import FileListItem from "./FileListItem"; +import FileListFolder from "./FileListFolder"; +import FileListFile from "./FileListFile"; type Props = {} @@ -29,8 +31,8 @@ export default function FileList(props: Props): ReactElement { } return ( - {folders?.map((folder:Folder,i:number)=>{return()})} - {files?.map((file:File,i:number)=>{return()})} + {folders?.map((folder:Folder,i:number)=>{return()})} + {files?.map((file:File,i:number)=>{return()})} ) } diff --git a/webapp_frontend/src/components/pages/filesytem/FileListFile.tsx b/webapp_frontend/src/components/pages/filesytem/FileListFile.tsx new file mode 100644 index 00000000..7cecb3f1 --- /dev/null +++ b/webapp_frontend/src/components/pages/filesytem/FileListFile.tsx @@ -0,0 +1,28 @@ +import React, {ReactElement} from "react"; +import {File} from "../../../background/api/filesystemTypes"; +import FileListItem from "./FileListItem"; + +type Props={ + file:File +} + +export default function FileListFile(props: Props): ReactElement { + + + + const fileListEntity = { + createdByUserId: props.file.createdByUserId, + id: props.file.id, + lastUpdated: props.file.lastUpdated, + name: props.file.name, + permissionSet: props.file.permissionSet, + size: props.file.size, + type: props.file.type, + isFolder:false + + + }; + + return () +} + diff --git a/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx b/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx new file mode 100644 index 00000000..02c9913c --- /dev/null +++ b/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx @@ -0,0 +1,28 @@ +import React, {ReactElement} from "react"; +import {Folder} from "../../../background/api/filesystemTypes"; +import FileListFile from "./FileListFile"; +import FileListItem, {FileListEntity} from "./FileListItem"; + +type Props = { + folder: Folder +} + +export default function FileListFolder(props: Props): ReactElement { + + + const fileListEntity = { + createdByUserId: props.folder.createdByUserId, + id: props.folder.id, + lastUpdated: props.folder.lastUpdated, + name: props.folder.name, + permissionSet: props.folder.permissionSet, + size: props.folder.size, + type: props.folder.type, + isFolder:true + + + }; + + return () +} + diff --git a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx index 39871513..e6ce81c5 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx @@ -1,14 +1,14 @@ import {Folder, File, PermissionSet} from "../../../background/api/filesystemTypes"; import React, {ReactElement} from "react"; +import {Col} from "react-bootstrap"; type Props = { - file?: File - folder?: Folder + fileListItem:FileListEntity; } -type fileOrFolder={ +export interface FileListEntity{ createdByUserId:number id:number lastUpdated:number @@ -16,31 +16,27 @@ type fileOrFolder={ permissionSet:PermissionSet size:number; type:string; - path?:string; isFolder:boolean + } export default function FileListItem(props: Props): ReactElement { - // this is really ugly :( + + + // @ts-ignore - let fileOrFolder:fileOrFolder={}; - if (props.file){ - for(let k in props.file) { // @ts-ignore - fileOrFolder[k]=props.file[k]; - } - fileOrFolder.isFolder=false; - } - else { - for(let k in props.folder) { // @ts-ignore - fileOrFolder[k]=props.folder[k]; - } - fileOrFolder.isFolder=true; - } - - - return (
dsad
) + return ( + <> + Checkbox + {props.fileListItem.type} + {props.fileListItem.name} + {props.fileListItem.createdByUserId} + {props.fileListItem.lastUpdated} + {props.fileListItem.size} + + ) } From b464e480a343984704b4352c115fabb811132281 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Sun, 29 Nov 2020 18:23:25 +0100 Subject: [PATCH 03/12] clicking is useless --- webapp_frontend/src/background/api/auth.ts | 6 ++- .../src/background/api/filesystem.tsx | 37 ++++++++++++++++++- .../components/pages/filesytem/FileList.tsx | 6 ++- .../pages/filesytem/FileListFolder.tsx | 8 +++- .../pages/filesytem/FileListItem.tsx | 14 +++++-- 5 files changed, 61 insertions(+), 10 deletions(-) diff --git a/webapp_frontend/src/background/api/auth.ts b/webapp_frontend/src/background/api/auth.ts index a76d8d4e..0b1afa73 100644 --- a/webapp_frontend/src/background/api/auth.ts +++ b/webapp_frontend/src/background/api/auth.ts @@ -78,12 +78,16 @@ export const getAccessTokenWithRefreshToken = () => { }, }; + + Axios.get(hostname + userPath + '/auth', config) .then((data) => { setAuthHeaderToAxios(data.data.tokenValue) store.dispatch(addAccessToken({token: data.data.tokenValue, timestamp: data.data.validUntil}as AccessToken)); + //TODO: also get User data here + }) .catch(((error) => { store.dispatch(removeTokens()as RemoveTokens); @@ -102,4 +106,4 @@ export const logout=()=>{ function setAuthHeaderToAxios(accessToken: string) { Axios.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`; -} \ No newline at end of file +} diff --git a/webapp_frontend/src/background/api/filesystem.tsx b/webapp_frontend/src/background/api/filesystem.tsx index 02e650a4..733dddc4 100644 --- a/webapp_frontend/src/background/api/filesystem.tsx +++ b/webapp_frontend/src/background/api/filesystem.tsx @@ -51,7 +51,42 @@ const exampleValue:BackendFolderContentsData={ "id": 0, "lastUpdated": 0, "name": "string", - "path": "string", + "path": "/bla", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + }, + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "string", + "path": "/fasel", "permissionSet": { "editableForGroups": [ "ADMIN" diff --git a/webapp_frontend/src/components/pages/filesytem/FileList.tsx b/webapp_frontend/src/components/pages/filesytem/FileList.tsx index d1ee8a84..9cd42dca 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileList.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileList.tsx @@ -15,6 +15,8 @@ export default function FileList(props: Props): ReactElement { const [files, setFiles] = useState(null) const [folders, setFolders] = useState(null) + + console.log("[FileList path]" + path) useEffect(() => { updateStates() }, []); @@ -31,8 +33,8 @@ export default function FileList(props: Props): ReactElement { } return ( - {folders?.map((folder:Folder,i:number)=>{return()})} - {files?.map((file:File,i:number)=>{return()})} + {folders?.map((folder:Folder,i:number)=>{return()})} + {files?.map((file:File,i:number)=>{return()})} ) } diff --git a/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx b/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx index 02c9913c..15e8acda 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx @@ -5,6 +5,7 @@ import FileListItem, {FileListEntity} from "./FileListItem"; type Props = { folder: Folder + SetPath:Function } export default function FileListFolder(props: Props): ReactElement { @@ -18,11 +19,14 @@ export default function FileListFolder(props: Props): ReactElement { permissionSet: props.folder.permissionSet, size: props.folder.size, type: props.folder.type, - isFolder:true + isFolder:true, + path:props.folder.path, + + }; - return () + return () } diff --git a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx index e6ce81c5..32d0f290 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx @@ -1,10 +1,11 @@ import {Folder, File, PermissionSet} from "../../../background/api/filesystemTypes"; import React, {ReactElement} from "react"; -import {Col} from "react-bootstrap"; +import {Button, Col} from "react-bootstrap"; type Props = { fileListItem:FileListEntity; + SetPath?:Function, } @@ -17,6 +18,7 @@ export interface FileListEntity{ size:number; type:string; isFolder:boolean + path?:string } @@ -24,15 +26,19 @@ export interface FileListEntity{ export default function FileListItem(props: Props): ReactElement { +const onClick=()=>{ + if (props.fileListItem.isFolder && props.SetPath){ + props.SetPath(props.fileListItem.path) + } +} - // @ts-ignore return ( <> - Checkbox - {props.fileListItem.type} + Checkbox + {props.fileListItem.name} {props.fileListItem.createdByUserId} {props.fileListItem.lastUpdated} From 3ad671f29787cad6f486a9d2b1ba22a58d67ead5 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Thu, 3 Dec 2020 18:21:21 +0100 Subject: [PATCH 04/12] first commit with new keyboard :D + added half the folder navigation --- webapp_frontend/src/background/api/auth.ts | 3 + .../src/background/api/filesystem.tsx | 160 +++++++++++++++++- webapp_frontend/src/components/App.tsx | 5 +- .../src/components/Router/Router.tsx | 3 +- .../src/components/pages/Health.tsx | 6 +- .../src/components/pages/errors/Error404.tsx | 7 +- .../components/pages/filesytem/FileList.tsx | 30 +++- .../pages/filesytem/FileListFolder.tsx | 11 +- .../pages/filesytem/FileListItem.tsx | 17 +- .../pages/filesytem/FilesBreadcrumb.tsx | 21 +++ .../components/pages/filesytem/Filesystem.tsx | 2 +- webapp_frontend/src/style/custom.scss | 1 + 12 files changed, 227 insertions(+), 39 deletions(-) create mode 100644 webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx diff --git a/webapp_frontend/src/background/api/auth.ts b/webapp_frontend/src/background/api/auth.ts index 0b1afa73..d261660b 100644 --- a/webapp_frontend/src/background/api/auth.ts +++ b/webapp_frontend/src/background/api/auth.ts @@ -98,6 +98,9 @@ export const getAccessTokenWithRefreshToken = () => { } + + + export const logout=()=>{ store.dispatch(removeTokens()); deleteCookie(cookieName); diff --git a/webapp_frontend/src/background/api/filesystem.tsx b/webapp_frontend/src/background/api/filesystem.tsx index 733dddc4..b0de8bae 100644 --- a/webapp_frontend/src/background/api/filesystem.tsx +++ b/webapp_frontend/src/background/api/filesystem.tsx @@ -1,15 +1,16 @@ import {BackendFolderContentsData} from "./filesystemTypes"; -export const getFolderContents=()=>new Promise((resolve, reject)=>resolve(exampleValue)) +export const getFolderContents=(path:string)=>new Promise((resolve, reject)=>resolve(exampleValue(path))) -const exampleValue:BackendFolderContentsData={ - "files": [ +const exampleValue=(path:string) :BackendFolderContentsData=> { + console.log(path) + if (path=="/")return { "files": [ { "createdByUserId": 0, "id": 0, @@ -50,7 +51,7 @@ const exampleValue:BackendFolderContentsData={ "createdByUserId": 0, "id": 0, "lastUpdated": 0, - "name": "string", + "name": "bla", "path": "/bla", "permissionSet": { "editableForGroups": [ @@ -85,7 +86,7 @@ const exampleValue:BackendFolderContentsData={ "createdByUserId": 0, "id": 0, "lastUpdated": 0, - "name": "string", + "name": "fasel", "path": "/fasel", "permissionSet": { "editableForGroups": [ @@ -117,4 +118,153 @@ const exampleValue:BackendFolderContentsData={ "type": "FOLDER" } ] +} + else if (path=="/fasel")return { "files": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "string", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ], + "folders": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "bla", + "path": "/bla", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + }, + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "fasel", + "path": "/fasel", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ] + } + else if (path=="/bla") return { "files": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "inBLA", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ], + "folders": [] + } + return {"files": [],"folders":[]} } diff --git a/webapp_frontend/src/components/App.tsx b/webapp_frontend/src/components/App.tsx index 57e56fce..04ad3b4d 100644 --- a/webapp_frontend/src/components/App.tsx +++ b/webapp_frontend/src/components/App.tsx @@ -16,7 +16,6 @@ import Login from "./basicElements/Login"; import {checkForCookie} from "../background/api/auth"; - // this takes the redux store and maps everything that is needed to the function props const mapState = (state: SystemState) => ({ tokens: {refreshToken: state.tokens.refreshToken, accessToken: state.tokens.accessToken, checkedCookies: state.tokens.checkedCookies}, @@ -51,9 +50,7 @@ function App(props: Props): ReactElement {
- - - +
diff --git a/webapp_frontend/src/components/Router/Router.tsx b/webapp_frontend/src/components/Router/Router.tsx index febddadb..dd9dd29e 100644 --- a/webapp_frontend/src/components/Router/Router.tsx +++ b/webapp_frontend/src/components/Router/Router.tsx @@ -5,6 +5,7 @@ import Error404 from "../pages/errors/Error404"; import Login from "../basicElements/Login"; import Registration from "../pages/Registration"; import FileList from "../pages/filesytem/FileList"; +import {filesBaseUrl} from "../pages/filesytem/Filesystem"; export default function Router(): ReactElement { @@ -12,7 +13,7 @@ export default function Router(): ReactElement { - + diff --git a/webapp_frontend/src/components/pages/Health.tsx b/webapp_frontend/src/components/pages/Health.tsx index 8a193d92..b83eb255 100644 --- a/webapp_frontend/src/components/pages/Health.tsx +++ b/webapp_frontend/src/components/pages/Health.tsx @@ -1,6 +1,6 @@ import React, {useEffect, useState} from "react"; import logo from "../../assets/images/logos/logo.png"; -import {Button, Table} from "react-bootstrap"; +import {Button, Table, Container} from "react-bootstrap"; import {callBackendHealth} from "../../background/api/api"; import {audioOnOff, setAudioVolumeByID} from "../../background/methods/sound" import {logout} from "../../background/api/auth"; @@ -23,7 +23,7 @@ export default function Health() { } return ( - <> +

FileFighter

@@ -60,6 +60,6 @@ export default function Health() {
- + ) } diff --git a/webapp_frontend/src/components/pages/errors/Error404.tsx b/webapp_frontend/src/components/pages/errors/Error404.tsx index 7709ca8c..fec7e663 100644 --- a/webapp_frontend/src/components/pages/errors/Error404.tsx +++ b/webapp_frontend/src/components/pages/errors/Error404.tsx @@ -1,10 +1,11 @@ import React from 'react'; import { Link } from 'react-router-dom'; +import { Container } from 'react-bootstrap'; export default function Error404() { - return
+ return

Go to Home

-
; -} \ No newline at end of file + ; +} diff --git a/webapp_frontend/src/components/pages/filesytem/FileList.tsx b/webapp_frontend/src/components/pages/filesytem/FileList.tsx index 9cd42dca..d8b654f6 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileList.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileList.tsx @@ -1,17 +1,21 @@ import React, {ReactElement, useEffect, useState} from "react"; import {getFolderContents} from "../../../background/api/filesystem"; import {Folder, File, BackendFolderContentsData} from "../../../background/api/filesystemTypes"; -import {Row} from "react-bootstrap"; +import {Row, Container} from "react-bootstrap"; +import { useLocation } from 'react-router-dom' import FileListItem from "./FileListItem"; import FileListFolder from "./FileListFolder"; import FileListFile from "./FileListFile"; +import {FilesBreadcrumb} from "./FilesBreadcrumb"; +import {filesBaseUrl} from "./Filesystem"; type Props = {} export default function FileList(props: Props): ReactElement { - const [path,SetPath] = useState("/") + + const [path, setPath] = useState(useLocation().pathname.slice(filesBaseUrl.length) || "/") const [files, setFiles] = useState(null) const [folders, setFolders] = useState(null) @@ -19,12 +23,12 @@ export default function FileList(props: Props): ReactElement { console.log("[FileList path]" + path) useEffect(() => { updateStates() - }, []); + }, [path]); function updateStates(): void { - getFolderContents() + getFolderContents(path) .then( - (response:BackendFolderContentsData) => { + (response: BackendFolderContentsData) => { setFiles(response.files) setFolders(response.folders) } @@ -32,9 +36,17 @@ export default function FileList(props: Props): ReactElement { } - return ( - {folders?.map((folder:Folder,i:number)=>{return()})} - {files?.map((file:File,i:number)=>{return()})} - ) + return ( + + + + {folders?.map((folder: Folder, i: number) => { + return () + })} + {files?.map((file: File, i: number) => { + return () + })} + + ) } diff --git a/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx b/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx index 15e8acda..d5772762 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx @@ -5,7 +5,8 @@ import FileListItem, {FileListEntity} from "./FileListItem"; type Props = { folder: Folder - SetPath:Function + setPath: Function + } export default function FileListFolder(props: Props): ReactElement { @@ -19,14 +20,12 @@ export default function FileListFolder(props: Props): ReactElement { permissionSet: props.folder.permissionSet, size: props.folder.size, type: props.folder.type, - isFolder:true, - path:props.folder.path, - - + isFolder: true, + path: props.folder.path, }; - return () + return () } diff --git a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx index 32d0f290..c2eeb1a4 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx @@ -1,11 +1,12 @@ import {Folder, File, PermissionSet} from "../../../background/api/filesystemTypes"; import React, {ReactElement} from "react"; -import {Button, Col} from "react-bootstrap"; +import {Button, Col, Form} from "react-bootstrap"; +import {Link} from "react-router-dom"; type Props = { fileListItem:FileListEntity; - SetPath?:Function, + setPath?:Function, } @@ -27,8 +28,8 @@ export default function FileListItem(props: Props): ReactElement { const onClick=()=>{ - if (props.fileListItem.isFolder && props.SetPath){ - props.SetPath(props.fileListItem.path) + if (props.fileListItem.isFolder && props.setPath){ + props.setPath(props.fileListItem.path) } } @@ -37,9 +38,11 @@ const onClick=()=>{ return ( <> - Checkbox - - {props.fileListItem.name} + + console.log(`[files] selected ${props.fileListItem.id}`)}/> + + {props.fileListItem.type} + onClick()}>{props.fileListItem.name} {props.fileListItem.createdByUserId} {props.fileListItem.lastUpdated} {props.fileListItem.size} diff --git a/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx b/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx new file mode 100644 index 00000000..72ef39bc --- /dev/null +++ b/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx @@ -0,0 +1,21 @@ +import React ,{ ReactElement} from "react"; +import {Breadcrumb} from "react-bootstrap"; +import { Link } from "react-router-dom"; +import {filesBaseUrl} from "./Filesystem"; + + +type Props={ + path:string, + setPath:Function +} + +export function FilesBreadcrumb(props:Props):ReactElement{ + + + return ( + props.setPath("/")}>root + {props.path.split('/').map((folder:string,i:number)=>{return( {folder} )})} + ) + + +} diff --git a/webapp_frontend/src/components/pages/filesytem/Filesystem.tsx b/webapp_frontend/src/components/pages/filesytem/Filesystem.tsx index 4618c01f..f3fb49c8 100644 --- a/webapp_frontend/src/components/pages/filesytem/Filesystem.tsx +++ b/webapp_frontend/src/components/pages/filesytem/Filesystem.tsx @@ -1 +1 @@ -export const bla = false; +export const filesBaseUrl = '/file'; diff --git a/webapp_frontend/src/style/custom.scss b/webapp_frontend/src/style/custom.scss index 2c2f4f67..7ff5c51b 100644 --- a/webapp_frontend/src/style/custom.scss +++ b/webapp_frontend/src/style/custom.scss @@ -26,5 +26,6 @@ $blue: #1a4965; @import "~bootstrap/scss/forms"; @import "~bootstrap/scss/spinners"; @import "~bootstrap/scss/alert"; +@import "~bootstrap/scss/breadcrumb"; From 416efe32d1aa32d830bd5b3b5730690f928f465d Mon Sep 17 00:00:00 2001 From: qvalentin Date: Thu, 3 Dec 2020 18:37:01 +0100 Subject: [PATCH 05/12] its working, don't click on files --- .../src/background/api/filesystem.tsx | 74 ++++++++++++++++++- .../components/pages/filesytem/FileList.tsx | 1 - .../pages/filesytem/FilesBreadcrumb.tsx | 25 ++++--- 3 files changed, 87 insertions(+), 13 deletions(-) diff --git a/webapp_frontend/src/background/api/filesystem.tsx b/webapp_frontend/src/background/api/filesystem.tsx index b0de8bae..8f139484 100644 --- a/webapp_frontend/src/background/api/filesystem.tsx +++ b/webapp_frontend/src/background/api/filesystem.tsx @@ -261,7 +261,79 @@ const exampleValue=(path:string) :BackendFolderContentsData=> { ] }, "size": 0, - "type": "FOLDER" + "type": "file" + } + ], + "folders": [{ + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "unterBla", + "path": "/bla/unterBla", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + }] + } + else if (path=="/bla/unterBla") return { "files": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "inBLA", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "file" } ], "folders": [] diff --git a/webapp_frontend/src/components/pages/filesytem/FileList.tsx b/webapp_frontend/src/components/pages/filesytem/FileList.tsx index d8b654f6..8a1b5dfa 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileList.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileList.tsx @@ -3,7 +3,6 @@ import {getFolderContents} from "../../../background/api/filesystem"; import {Folder, File, BackendFolderContentsData} from "../../../background/api/filesystemTypes"; import {Row, Container} from "react-bootstrap"; import { useLocation } from 'react-router-dom' -import FileListItem from "./FileListItem"; import FileListFolder from "./FileListFolder"; import FileListFile from "./FileListFile"; import {FilesBreadcrumb} from "./FilesBreadcrumb"; diff --git a/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx b/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx index 72ef39bc..da1f8fbd 100644 --- a/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx @@ -1,21 +1,24 @@ -import React ,{ ReactElement} from "react"; +import React, {ReactElement} from "react"; import {Breadcrumb} from "react-bootstrap"; -import { Link } from "react-router-dom"; +import {Link} from "react-router-dom"; import {filesBaseUrl} from "./Filesystem"; -type Props={ - path:string, - setPath:Function +type Props = { + path: string, + setPath: Function } -export function FilesBreadcrumb(props:Props):ReactElement{ - +export function FilesBreadcrumb(props: Props): ReactElement { + console.log(props.path.split('/')); return ( - props.setPath("/")}>root - {props.path.split('/').map((folder:string,i:number)=>{return( {folder} )})} - ) + props.setPath("/")}>root + {props.path.split('/').filter((s: String) => s).map((folder: string, i: number) => { + return ( props.setPath(props.path.split('/').slice(0, i + 2).join("/"))} key={i}>{folder} ) + })} + ) -} + } From 00a945a66355dd97e0f89015d6e53aa2a880407a Mon Sep 17 00:00:00 2001 From: qvalentin Date: Thu, 3 Dec 2020 18:39:17 +0100 Subject: [PATCH 06/12] formating --- .../src/background/api/filesystem.tsx | 604 +++++++++--------- .../src/components/Router/Router.tsx | 2 +- .../components/pages/filesytem/FileList.tsx | 2 +- .../pages/filesytem/FileListItem.tsx | 55 +- .../pages/filesytem/FilesBreadcrumb.tsx | 10 +- 5 files changed, 335 insertions(+), 338 deletions(-) diff --git a/webapp_frontend/src/background/api/filesystem.tsx b/webapp_frontend/src/background/api/filesystem.tsx index 8f139484..9359ac85 100644 --- a/webapp_frontend/src/background/api/filesystem.tsx +++ b/webapp_frontend/src/background/api/filesystem.tsx @@ -1,93 +1,274 @@ import {BackendFolderContentsData} from "./filesystemTypes"; -export const getFolderContents=(path:string)=>new Promise((resolve, reject)=>resolve(exampleValue(path))) +export const getFolderContents = (path: string) => new Promise((resolve, reject) => resolve(exampleValue(path))) - - - - -const exampleValue=(path:string) :BackendFolderContentsData=> { +const exampleValue = (path: string): BackendFolderContentsData => { console.log(path) - if (path=="/")return { "files": [ - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "string", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] + if (path == "/") return { + "files": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "string", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ], + "folders": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "bla", + "path": "/bla", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" }, - "size": 0, - "type": "FOLDER" - } - ], - "folders": [ - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "bla", - "path": "/bla", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "fasel", + "path": "/fasel", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ] + } + else if (path == "/fasel") return { + "files": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "string", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ], + "folders": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "bla", + "path": "/bla", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" }, - "size": 0, - "type": "FOLDER" - }, - { + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "fasel", + "path": "/fasel", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ] + } + else if (path == "/bla") return { + "files": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "inBLA", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "file" + } + ], + "folders": [{ "createdByUserId": 0, "id": 0, "lastUpdated": 0, - "name": "fasel", - "path": "/fasel", + "name": "unterBla", + "path": "/bla/unterBla", "permissionSet": { "editableForGroups": [ "ADMIN" @@ -116,227 +297,46 @@ const exampleValue=(path:string) :BackendFolderContentsData=> { }, "size": 0, "type": "FOLDER" - } - ] -} - else if (path=="/fasel")return { "files": [ - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "string", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "FOLDER" - } - ], - "folders": [ - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "bla", - "path": "/bla", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "FOLDER" - }, - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "fasel", - "path": "/fasel", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "FOLDER" - } - ] - } - else if (path=="/bla") return { "files": [ - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "inBLA", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "file" - } - ], - "folders": [{ - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "unterBla", - "path": "/bla/unterBla", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "FOLDER" - }] - } - else if (path=="/bla/unterBla") return { "files": [ - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "inBLA", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "file" - } - ], - "folders": [] - } - return {"files": [],"folders":[]} + }] + } + else if (path == "/bla/unterBla") return { + "files": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "inBLA", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "file" + } + ], + "folders": [] + } + return {"files": [], "folders": []} } diff --git a/webapp_frontend/src/components/Router/Router.tsx b/webapp_frontend/src/components/Router/Router.tsx index dd9dd29e..26b52aff 100644 --- a/webapp_frontend/src/components/Router/Router.tsx +++ b/webapp_frontend/src/components/Router/Router.tsx @@ -17,7 +17,7 @@ export default function Router(): ReactElement { - + ) diff --git a/webapp_frontend/src/components/pages/filesytem/FileList.tsx b/webapp_frontend/src/components/pages/filesytem/FileList.tsx index 8a1b5dfa..4c3b4830 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileList.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileList.tsx @@ -2,7 +2,7 @@ import React, {ReactElement, useEffect, useState} from "react"; import {getFolderContents} from "../../../background/api/filesystem"; import {Folder, File, BackendFolderContentsData} from "../../../background/api/filesystemTypes"; import {Row, Container} from "react-bootstrap"; -import { useLocation } from 'react-router-dom' +import {useLocation} from 'react-router-dom' import FileListFolder from "./FileListFolder"; import FileListFile from "./FileListFile"; import {FilesBreadcrumb} from "./FilesBreadcrumb"; diff --git a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx index c2eeb1a4..42ab353f 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx @@ -5,21 +5,21 @@ import {Link} from "react-router-dom"; type Props = { - fileListItem:FileListEntity; - setPath?:Function, + fileListItem: FileListEntity; + setPath?: Function, } -export interface FileListEntity{ - createdByUserId:number - id:number - lastUpdated:number - name:string - permissionSet:PermissionSet - size:number; - type:string; - isFolder:boolean - path?:string +export interface FileListEntity { + createdByUserId: number + id: number + lastUpdated: number + name: string + permissionSet: PermissionSet + size: number; + type: string; + isFolder: boolean + path?: string } @@ -27,25 +27,24 @@ export interface FileListEntity{ export default function FileListItem(props: Props): ReactElement { -const onClick=()=>{ - if (props.fileListItem.isFolder && props.setPath){ - props.setPath(props.fileListItem.path) - } - -} + const onClick = () => { + if (props.fileListItem.isFolder && props.setPath) { + props.setPath(props.fileListItem.path) + } + } return ( - <> - - console.log(`[files] selected ${props.fileListItem.id}`)}/> - - {props.fileListItem.type} - onClick()}>{props.fileListItem.name} - {props.fileListItem.createdByUserId} - {props.fileListItem.lastUpdated} - {props.fileListItem.size} - + <> + + console.log(`[files] selected ${props.fileListItem.id}`)}/> + + {props.fileListItem.type} + onClick()}>{props.fileListItem.name} + {props.fileListItem.createdByUserId} + {props.fileListItem.lastUpdated} + {props.fileListItem.size} + ) } diff --git a/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx b/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx index da1f8fbd..55876312 100644 --- a/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx @@ -16,9 +16,7 @@ export function FilesBreadcrumb(props: Props): ReactElement { props.setPath("/")}>root {props.path.split('/').filter((s: String) => s).map((folder: string, i: number) => { return ( props.setPath(props.path.split('/').slice(0, i + 2).join("/"))} key={i}>{folder} ) - })} - ) - - - } + onClick={() => props.setPath(props.path.split('/').slice(0, i + 2).join("/"))} key={i}>{folder} ) + })} + ) +} From 5f95895a078fae904dee425f891b88390042cff4 Mon Sep 17 00:00:00 2001 From: Gimleux Date: Thu, 3 Dec 2020 21:38:03 +0100 Subject: [PATCH 07/12] Removed Warnings --- webapp_frontend/package-lock.json | 11 +- webapp_frontend/package.json | 1 + .../src/background/api/filesystem.tsx | 338 ++++++------------ webapp_frontend/src/components/App.tsx | 1 - webapp_frontend/src/components/Health.tsx | 14 +- .../src/components/pages/Registration.tsx | 13 +- .../components/pages/filesytem/FileList.tsx | 23 +- .../pages/filesytem/FileListFolder.tsx | 3 +- .../pages/filesytem/FileListItem.tsx | 4 +- 9 files changed, 151 insertions(+), 257 deletions(-) diff --git a/webapp_frontend/package-lock.json b/webapp_frontend/package-lock.json index c936c2f0..6c81b16a 100644 --- a/webapp_frontend/package-lock.json +++ b/webapp_frontend/package-lock.json @@ -10816,9 +10816,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", - "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==" }, "eslint-scope": { "version": "5.1.1", @@ -18302,6 +18302,11 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, + "eslint-plugin-react-hooks": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", + "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" + }, "resolve": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", diff --git a/webapp_frontend/package.json b/webapp_frontend/package.json index f1f00bde..62be03df 100644 --- a/webapp_frontend/package.json +++ b/webapp_frontend/package.json @@ -16,6 +16,7 @@ "@types/react-router-dom": "^5.1.6", "axios": "^0.20.0", "bootstrap": "^4.5.3", + "eslint-plugin-react-hooks": "^4.2.0", "node-sass": "^4.14.1", "react": "^16.13.1", "react-bootstrap": "^1.4.0", diff --git a/webapp_frontend/src/background/api/filesystem.tsx b/webapp_frontend/src/background/api/filesystem.tsx index 9359ac85..077a1c1b 100644 --- a/webapp_frontend/src/background/api/filesystem.tsx +++ b/webapp_frontend/src/background/api/filesystem.tsx @@ -3,230 +3,11 @@ import {BackendFolderContentsData} from "./filesystemTypes"; export const getFolderContents = (path: string) => new Promise((resolve, reject) => resolve(exampleValue(path))) - const exampleValue = (path: string): BackendFolderContentsData => { console.log(path) - if (path == "/") return { - "files": [ - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "string", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "FOLDER" - } - ], - "folders": [ - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "bla", - "path": "/bla", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "FOLDER" - }, - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "fasel", - "path": "/fasel", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "FOLDER" - } - ] - } - else if (path == "/fasel") return { - "files": [ - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "string", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "FOLDER" - } - ], - "folders": [ - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "bla", - "path": "/bla", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "FOLDER" - }, - { - "createdByUserId": 0, - "id": 0, - "lastUpdated": 0, - "name": "fasel", - "path": "/fasel", - "permissionSet": { - "editableForGroups": [ - "ADMIN" - ], - "editableForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ], - "visibleForGroups": [ - "ADMIN" - ], - "visibleForUsers": [ - { - "groups": [ - "ADMIN" - ], - "id": 0, - "username": "string" - } - ] - }, - "size": 0, - "type": "FOLDER" - } - ] - } - else if (path == "/bla") return { + if (path === "/") return exampleFileSystem + else if (path === "/fasel") return exampleFileSystem + else if (path === "/bla") return { "files": [ { "createdByUserId": 0, @@ -299,7 +80,7 @@ const exampleValue = (path: string): BackendFolderContentsData => { "type": "FOLDER" }] } - else if (path == "/bla/unterBla") return { + else if (path === "/bla/unterBla") return { "files": [ { "createdByUserId": 0, @@ -340,3 +121,114 @@ const exampleValue = (path: string): BackendFolderContentsData => { } return {"files": [], "folders": []} } + +const exampleFileSystem = { + "files": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "string", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ], + "folders": [ + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "bla", + "path": "/bla", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + }, + { + "createdByUserId": 0, + "id": 0, + "lastUpdated": 0, + "name": "fasel", + "path": "/fasel", + "permissionSet": { + "editableForGroups": [ + "ADMIN" + ], + "editableForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ], + "visibleForGroups": [ + "ADMIN" + ], + "visibleForUsers": [ + { + "groups": [ + "ADMIN" + ], + "id": 0, + "username": "string" + } + ] + }, + "size": 0, + "type": "FOLDER" + } + ] +} \ No newline at end of file diff --git a/webapp_frontend/src/components/App.tsx b/webapp_frontend/src/components/App.tsx index 04ad3b4d..087440a0 100644 --- a/webapp_frontend/src/components/App.tsx +++ b/webapp_frontend/src/components/App.tsx @@ -1,6 +1,5 @@ import React, {ReactElement} from 'react'; import './App.css'; -import {Container} from 'react-bootstrap'; import Header from "./basicElements/Header"; import Footer from "./basicElements/Footer"; import {BrowserRouter} from "react-router-dom"; diff --git a/webapp_frontend/src/components/Health.tsx b/webapp_frontend/src/components/Health.tsx index 870bcd02..46032370 100644 --- a/webapp_frontend/src/components/Health.tsx +++ b/webapp_frontend/src/components/Health.tsx @@ -1,4 +1,4 @@ -import React, {ReactElement, useEffect, useState} from "react"; +import React, {ReactElement, useCallback, useEffect, useState} from "react"; import {callBackendHealth} from "../background/api/api"; import Header from "./basicElements/Header"; import {Button, Container, Table} from "react-bootstrap"; @@ -10,15 +10,13 @@ function Health(): ReactElement { const [backendLiveTime, setBackendLiveTime] = useState("not reachable"); const [backendUserCount, setBackendUserCount] = useState("not reachable"); + const callInitialBackendRequests = useCallback(():void => { + updateVariables() + },[]); useEffect(() => { callInitialBackendRequests() - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - function callInitialBackendRequests(): void { - updateVariables() - } + }, [callInitialBackendRequests]); function updateVariables(): void { Promise.all([callBackendHealth()]) @@ -30,7 +28,7 @@ function Health(): ReactElement { return (
-
+

FileFighter diff --git a/webapp_frontend/src/components/pages/Registration.tsx b/webapp_frontend/src/components/pages/Registration.tsx index 387db29a..98bbb1ca 100644 --- a/webapp_frontend/src/components/pages/Registration.tsx +++ b/webapp_frontend/src/components/pages/Registration.tsx @@ -1,4 +1,4 @@ -import React, {ChangeEvent, FormEvent, ReactElement, useEffect, useState} from "react"; +import React, {ChangeEvent, FormEvent, ReactElement, useCallback, useEffect, useState} from "react"; import {Container, Row, Col, Form, FormGroup, Button, Alert} from "react-bootstrap"; import {deleteSpaces} from "../../background/methods/strings"; import {biggerMaxStrLength, notMinStrLength} from "../../background/methods/checkInput"; @@ -23,10 +23,13 @@ export default function Registration(): ReactElement { const [alertVariant, setAlertColor] = useState<"primary" | "secondary" | "success" | "danger" | "warning" | "info" | "light" | "dark">("success"); const [alertVisibility, setAlertVisibility] = useState(false); + const reviewPasswordMatch = useCallback(():void => { + setPasswordsMatch(password === passwordConfirmation); + },[password, passwordConfirmation]); + useEffect(() => { reviewPasswordMatch() - // eslint-disable-next-line - },[passwordConfirmation, password]) + },[reviewPasswordMatch]) const handleSubmit = async (event: FormEvent) => { console.log("[REGISTRATION] handleSubmit") @@ -103,10 +106,6 @@ export default function Registration(): ReactElement { setPasswordConfirmation(value); } - const reviewPasswordMatch = ():void => { - setPasswordsMatch(password === passwordConfirmation); - } - return ( diff --git a/webapp_frontend/src/components/pages/filesytem/FileList.tsx b/webapp_frontend/src/components/pages/filesytem/FileList.tsx index 4c3b4830..3f03e381 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileList.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileList.tsx @@ -21,19 +21,20 @@ export default function FileList(props: Props): ReactElement { console.log("[FileList path]" + path) useEffect(() => { - updateStates() - }, [path]); + function updateStates(): void { + getFolderContents(path) + .then( + (response: BackendFolderContentsData) => { + setFiles(response.files) + setFolders(response.folders) + } + ) - function updateStates(): void { - getFolderContents(path) - .then( - (response: BackendFolderContentsData) => { - setFiles(response.files) - setFolders(response.folders) - } - ) + } - } + updateStates() + + }, [path]); return ( diff --git a/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx b/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx index d5772762..475a7fd7 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileListFolder.tsx @@ -1,7 +1,6 @@ import React, {ReactElement} from "react"; import {Folder} from "../../../background/api/filesystemTypes"; -import FileListFile from "./FileListFile"; -import FileListItem, {FileListEntity} from "./FileListItem"; +import FileListItem from "./FileListItem"; type Props = { folder: Folder diff --git a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx index 42ab353f..64f22905 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx @@ -1,6 +1,6 @@ -import {Folder, File, PermissionSet} from "../../../background/api/filesystemTypes"; +import {PermissionSet} from "../../../background/api/filesystemTypes"; import React, {ReactElement} from "react"; -import {Button, Col, Form} from "react-bootstrap"; +import {Col, Form} from "react-bootstrap"; import {Link} from "react-router-dom"; From 23ad96e517fc97f0d6c9ee8ffe2fe49fe33e5353 Mon Sep 17 00:00:00 2001 From: Gimleux Date: Thu, 3 Dec 2020 21:46:26 +0100 Subject: [PATCH 08/12] Added Table Head --- .../src/components/basicElements/Header.tsx | 2 +- .../src/components/pages/filesytem/FileList.tsx | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/webapp_frontend/src/components/basicElements/Header.tsx b/webapp_frontend/src/components/basicElements/Header.tsx index e778afb5..5b2e9f86 100644 --- a/webapp_frontend/src/components/basicElements/Header.tsx +++ b/webapp_frontend/src/components/basicElements/Header.tsx @@ -5,7 +5,7 @@ import {Button} from "react-bootstrap"; function Header():ReactElement { const history = useHistory(); - return(
) + return(
) } export default Header; \ No newline at end of file diff --git a/webapp_frontend/src/components/pages/filesytem/FileList.tsx b/webapp_frontend/src/components/pages/filesytem/FileList.tsx index 3f03e381..007128be 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileList.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileList.tsx @@ -1,8 +1,8 @@ import React, {ReactElement, useEffect, useState} from "react"; import {getFolderContents} from "../../../background/api/filesystem"; import {Folder, File, BackendFolderContentsData} from "../../../background/api/filesystemTypes"; -import {Row, Container} from "react-bootstrap"; -import {useLocation} from 'react-router-dom' +import {Row, Container, Col, Form} from "react-bootstrap"; +import {Link, useLocation} from 'react-router-dom' import FileListFolder from "./FileListFolder"; import FileListFile from "./FileListFile"; import {FilesBreadcrumb} from "./FilesBreadcrumb"; @@ -40,6 +40,18 @@ export default function FileList(props: Props): ReactElement { + + console.log(`selected all files` /*TODO*/)}/> + + {} + {"Name"} + {"Owner"} + {"Last changes"} + {"Size"} + +
+ + {folders?.map((folder: Folder, i: number) => { return () })} From bbd8e99669cb498ed87eb66c084b182f6a44d562 Mon Sep 17 00:00:00 2001 From: Gimleux Date: Thu, 3 Dec 2020 21:54:12 +0100 Subject: [PATCH 09/12] removed new warning --- webapp_frontend/src/components/pages/filesytem/FileList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp_frontend/src/components/pages/filesytem/FileList.tsx b/webapp_frontend/src/components/pages/filesytem/FileList.tsx index 007128be..7ca8f3fb 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileList.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileList.tsx @@ -2,7 +2,7 @@ import React, {ReactElement, useEffect, useState} from "react"; import {getFolderContents} from "../../../background/api/filesystem"; import {Folder, File, BackendFolderContentsData} from "../../../background/api/filesystemTypes"; import {Row, Container, Col, Form} from "react-bootstrap"; -import {Link, useLocation} from 'react-router-dom' +import {useLocation} from 'react-router-dom' import FileListFolder from "./FileListFolder"; import FileListFile from "./FileListFile"; import {FilesBreadcrumb} from "./FilesBreadcrumb"; From 00b8a09a25c0d1d4ea9b5b77e075312a8667eb14 Mon Sep 17 00:00:00 2001 From: Gimleux Date: Thu, 3 Dec 2020 22:44:39 +0100 Subject: [PATCH 10/12] Fixed missing render on manual change of view of file --- webapp_frontend/src/background/methods/redirect.ts | 4 ++-- .../src/components/pages/filesytem/FileList.tsx | 8 ++++++-- .../src/components/pages/filesytem/FileListItem.tsx | 4 +--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/webapp_frontend/src/background/methods/redirect.ts b/webapp_frontend/src/background/methods/redirect.ts index 900b9a50..a6aa7e95 100644 --- a/webapp_frontend/src/background/methods/redirect.ts +++ b/webapp_frontend/src/background/methods/redirect.ts @@ -1,5 +1,5 @@ -const internRedirect = (event: { preventDefault: () => void; }, history: any, path: string): void => { - event.preventDefault(); +const internRedirect = (history: any, path: string, event?: { preventDefault: () => void; }): void => { + if (event) event.preventDefault(); if (path) { const element = document.getElementById(path) if (element) { diff --git a/webapp_frontend/src/components/pages/filesytem/FileList.tsx b/webapp_frontend/src/components/pages/filesytem/FileList.tsx index 7ca8f3fb..eb9adcba 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileList.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileList.tsx @@ -13,13 +13,16 @@ type Props = {} export default function FileList(props: Props): ReactElement { + let location = useLocation(); - const [path, setPath] = useState(useLocation().pathname.slice(filesBaseUrl.length) || "/") + const [path, setPath] = useState(location.pathname.slice(filesBaseUrl.length) || "/") const [files, setFiles] = useState(null) const [folders, setFolders] = useState(null) + console.log("[FileList path]" + path) + useEffect(() => { function updateStates(): void { getFolderContents(path) @@ -32,9 +35,10 @@ export default function FileList(props: Props): ReactElement { } + setPath(location.pathname.slice(filesBaseUrl.length) || "/") updateStates() - }, [path]); + }, [path, location]); return ( diff --git a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx index 64f22905..3ac75791 100644 --- a/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FileListItem.tsx @@ -3,7 +3,6 @@ import React, {ReactElement} from "react"; import {Col, Form} from "react-bootstrap"; import {Link} from "react-router-dom"; - type Props = { fileListItem: FileListEntity; setPath?: Function, @@ -26,9 +25,8 @@ export interface FileListEntity { export default function FileListItem(props: Props): ReactElement { - const onClick = () => { - if (props.fileListItem.isFolder && props.setPath) { + if (props.fileListItem.isFolder && props.setPath && props.fileListItem.path) { props.setPath(props.fileListItem.path) } From 746319a7731b5eea1bec2cb5f87ae0248c9208b4 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Fri, 4 Dec 2020 12:58:05 +0100 Subject: [PATCH 11/12] use selfhosted cors anywhere --- webapp_frontend/src/background/constants.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp_frontend/src/background/constants.tsx b/webapp_frontend/src/background/constants.tsx index f77a3cd0..7bb02ead 100644 --- a/webapp_frontend/src/background/constants.tsx +++ b/webapp_frontend/src/background/constants.tsx @@ -11,7 +11,7 @@ const prod: constants = { const dev: constants = { url: { - API_URL: 'https://cors-anywhere.herokuapp.com/http://filefighter.ddns.net:3001', + API_URL: 'http://filefighter.ddns.net:1081/http://filefighter.ddns.net:3001', // API_URL: 'http://localhost:8080', } }; From 26557cd49be56692b61a85b29c2fc2fab276193a Mon Sep 17 00:00:00 2001 From: qvalentin Date: Fri, 4 Dec 2020 13:05:02 +0100 Subject: [PATCH 12/12] cleaning the logs --- webapp_frontend/src/background/api/filesystem.tsx | 8 +++++--- .../src/components/pages/filesytem/FilesBreadcrumb.tsx | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/webapp_frontend/src/background/api/filesystem.tsx b/webapp_frontend/src/background/api/filesystem.tsx index 077a1c1b..6655018d 100644 --- a/webapp_frontend/src/background/api/filesystem.tsx +++ b/webapp_frontend/src/background/api/filesystem.tsx @@ -1,10 +1,12 @@ import {BackendFolderContentsData} from "./filesystemTypes"; -export const getFolderContents = (path: string) => new Promise((resolve, reject) => resolve(exampleValue(path))) +export const getFolderContents = (path: string) => new Promise((resolve, reject) => { + console.log(`[filesytem api] request folder content of ${path}`); + resolve(exampleValue(path)) +}) const exampleValue = (path: string): BackendFolderContentsData => { - console.log(path) if (path === "/") return exampleFileSystem else if (path === "/fasel") return exampleFileSystem else if (path === "/bla") return { @@ -231,4 +233,4 @@ const exampleFileSystem = { "type": "FOLDER" } ] -} \ No newline at end of file +} diff --git a/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx b/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx index 55876312..dbb3554e 100644 --- a/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx +++ b/webapp_frontend/src/components/pages/filesytem/FilesBreadcrumb.tsx @@ -10,7 +10,6 @@ type Props = { } export function FilesBreadcrumb(props: Props): ReactElement { - console.log(props.path.split('/')); return ( props.setPath("/")}>root