From 77cf58e36c72e265bdc26125d8e8573691568733 Mon Sep 17 00:00:00 2001 From: lupusA Date: Thu, 2 Nov 2023 21:46:41 +0100 Subject: [PATCH 01/13] Move to new folder structure --- package-lock.json | 641 ++++++++++++++++++ package.json | 2 + src/App.jsx | 49 +- src/{ => components}/DirectoryBreadcrumbs.jsx | 0 src/{ => components}/DirectoryItems.jsx | 6 +- src/{TaskLogs.jsx => components/Logs.jsx} | 6 +- src/{ => components}/SetupRepository.jsx | 50 +- .../SetupRepositoryAzure.jsx} | 8 +- .../SetupRepositoryB2.jsx} | 8 +- .../SetupRepositoryFilesystem.jsx} | 6 +- .../SetupRepositoryGCS.jsx} | 8 +- .../SetupRepositoryRclone.jsx} | 8 +- .../SetupRepositoryS3.jsx} | 10 +- .../SetupRepositorySFTP.jsx} | 12 +- .../SetupRepositoryServer.jsx} | 8 +- .../SetupRepositoryToken.jsx} | 6 +- .../SetupRepositoryWebDAV.jsx} | 8 +- .../SnapshotEstimation.jsx} | 12 +- src/{PoliciesTable.jsx => pages/Policies.jsx} | 8 +- .../Policy.jsx} | 6 +- .../Preferences.jsx} | 6 +- src/{RepoStatus.jsx => pages/Repository.jsx} | 16 +- .../SnapshotCreate.jsx} | 12 +- .../SnapshotDirectory.jsx} | 8 +- .../SnapshotHistory.jsx} | 10 +- .../SnapshotRestore.jsx} | 12 +- src/{SourcesTable.jsx => pages/Snapshots.jsx} | 12 +- src/{TaskDetails.jsx => pages/Task.jsx} | 12 +- src/{TasksTable.jsx => pages/Tasks.jsx} | 8 +- src/test/test.js | 7 + src/tests/SetupRepository.test.jsx | 2 +- ...test.jsx => SetupRepositoryAzure.test.jsx} | 4 +- ...jsx => SetupRepositoryFilesystem.test.jsx} | 4 +- ...S.test.jsx => SetupRepositoryGCS.test.jsx} | 4 +- ...S3.test.jsx => SetupRepositoryS3.test.jsx} | 4 +- ....test.jsx => SetupRepositorySFTP.test.jsx} | 4 +- ...test.jsx => SetupRepositoryToken.test.jsx} | 4 +- ...est.jsx => SetupRepositoryWebDAV.test.jsx} | 4 +- 38 files changed, 825 insertions(+), 170 deletions(-) rename src/{ => components}/DirectoryBreadcrumbs.jsx (100%) rename src/{ => components}/DirectoryItems.jsx (93%) rename src/{TaskLogs.jsx => components/Logs.jsx} (96%) rename src/{ => components}/SetupRepository.jsx (94%) rename src/{SetupAzure.jsx => components/SetupRepositoryAzure.jsx} (85%) rename src/{SetupB2.jsx => components/SetupRepositoryB2.jsx} (81%) rename src/{SetupFilesystem.jsx => components/SetupRepositoryFilesystem.jsx} (76%) rename src/{SetupGCS.jsx => components/SetupRepositoryGCS.jsx} (81%) rename src/{SetupRclone.jsx => components/SetupRepositoryRclone.jsx} (76%) rename src/{SetupS3.jsx => components/SetupRepositoryS3.jsx} (85%) rename src/{SetupSFTP.jsx => components/SetupRepositorySFTP.jsx} (92%) rename src/{SetupKopiaServer.jsx => components/SetupRepositoryServer.jsx} (77%) rename src/{SetupToken.jsx => components/SetupRepositoryToken.jsx} (75%) rename src/{SetupWebDAV.jsx => components/SetupRepositoryWebDAV.jsx} (77%) rename src/{EstimateResults.jsx => components/SnapshotEstimation.jsx} (91%) rename src/{PoliciesTable.jsx => pages/Policies.jsx} (98%) rename src/{PolicyEditorPage.jsx => pages/Policy.jsx} (89%) rename src/{PreferencesView.jsx => pages/Preferences.jsx} (92%) rename src/{RepoStatus.jsx => pages/Repository.jsx} (96%) rename src/{NewSnapshot.jsx => pages/SnapshotCreate.jsx} (94%) rename src/{DirectoryObject.jsx => pages/SnapshotDirectory.jsx} (95%) rename src/{SnapshotsTable.jsx => pages/SnapshotHistory.jsx} (98%) rename src/{BeginRestore.jsx => pages/SnapshotRestore.jsx} (94%) rename src/{SourcesTable.jsx => pages/Snapshots.jsx} (97%) rename src/{TaskDetails.jsx => pages/Task.jsx} (95%) rename src/{TasksTable.jsx => pages/Tasks.jsx} (97%) create mode 100644 src/test/test.js rename src/tests/{SetupAzure.test.jsx => SetupRepositoryAzure.test.jsx} (88%) rename src/tests/{SetupFilesystem.test.jsx => SetupRepositoryFilesystem.test.jsx} (74%) rename src/tests/{SetupGCS.test.jsx => SetupRepositoryGCS.test.jsx} (86%) rename src/tests/{SetupS3.test.jsx => SetupRepositoryS3.test.jsx} (92%) rename src/tests/{SetupSFTP.test.jsx => SetupRepositorySFTP.test.jsx} (94%) rename src/tests/{SetupToken.test.jsx => SetupRepositoryToken.test.jsx} (76%) rename src/tests/{SetupWebDAV.test.jsx => SetupRepositoryWebDAV.test.jsx} (83%) diff --git a/package-lock.json b/package-lock.json index 58b7514..6570e43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,8 @@ "@types/react-dom": "^18.2.8", "axios": "^1.4.0", "axios-mock-adapter": "^1.21.5", + "chai": "^4.3.10", + "mocha": "^10.2.0", "react-scripts": "5.0.1", "typescript": "^4.8.4", "web-vitals": "^3.1.0" @@ -5493,6 +5495,15 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -5676,6 +5687,15 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -6188,6 +6208,12 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "node_modules/browserslist": { "version": "4.20.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", @@ -6342,6 +6368,24 @@ "node": ">=4" } }, + "node_modules/chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -6376,6 +6420,18 @@ "node": ">=6" } }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, "node_modules/check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -7295,6 +7351,18 @@ } } }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -7317,6 +7385,18 @@ } } }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -7481,6 +7561,15 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -8954,6 +9043,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -9230,6 +9328,15 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", @@ -10259,6 +10366,18 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -13579,6 +13698,22 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -13590,6 +13725,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -13895,6 +14039,188 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -14426,6 +14752,15 @@ "node": ">=8" } }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -20241,6 +20576,12 @@ "workbox-core": "6.5.3" } }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -20372,6 +20713,30 @@ "node": ">=12" } }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -24462,6 +24827,12 @@ "dev": true, "requires": {} }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -24591,6 +24962,12 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -24994,6 +25371,12 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "browserslist": { "version": "4.20.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", @@ -25095,6 +25478,21 @@ "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true }, + "chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -25117,6 +25515,15 @@ "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", "dev": true }, + "check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } + }, "check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -25795,6 +26202,12 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, "decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -25810,6 +26223,15 @@ "peer": true, "requires": {} }, + "deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -25932,6 +26354,12 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, "diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -27078,6 +27506,12 @@ "path-exists": "^4.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -27264,6 +27698,12 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true + }, "get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", @@ -27998,6 +28438,12 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -30730,6 +31176,16 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -30738,6 +31194,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "requires": { + "get-func-name": "^2.0.1" + } + }, "lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -30969,6 +31434,150 @@ "minimist": "^1.2.6" } }, + "mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + } + } + }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -31359,6 +31968,12 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -35674,6 +36289,12 @@ "workbox-core": "6.5.3" } }, + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -35770,6 +36391,26 @@ "optional": true, "peer": true }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 0c5bafe..7926125 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,8 @@ "@types/react-dom": "^18.2.8", "axios": "^1.4.0", "axios-mock-adapter": "^1.21.5", + "chai": "^4.3.10", + "mocha": "^10.2.0", "react-scripts": "5.0.1", "typescript": "^4.8.4", "web-vitals": "^3.1.0" diff --git a/src/App.jsx b/src/App.jsx index c8b5c46..701b44b 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -5,20 +5,25 @@ import axios from 'axios'; import { React, Component } from 'react'; import { Navbar, Nav, Container } from 'react-bootstrap'; import { BrowserRouter as Router, NavLink, Redirect, Route, Switch } from 'react-router-dom'; -import { BeginRestore } from './BeginRestore'; -import { DirectoryObject } from "./DirectoryObject"; -import { PoliciesTable } from "./PoliciesTable"; -import { RepoStatus } from "./RepoStatus"; -import { SnapshotsTable } from "./SnapshotsTable"; -import { SourcesTable } from "./SourcesTable"; -import { TaskDetails } from './TaskDetails'; -import { TasksTable } from './TasksTable'; -import { NewSnapshot } from './NewSnapshot'; -import { PolicyEditorPage } from './PolicyEditorPage'; -import { PreferencesView } from './PreferencesView'; + +import { SnapshotDirectory } from "./pages/SnapshotDirectory"; + +import { Policy } from './pages/Policy'; +import { Preferences } from './pages/Preferences'; +import { Policies } from "./pages/Policies"; +import { Repository } from "./pages/Repository"; +import { Task } from './pages/Task'; +import { Tasks } from './pages/Tasks'; +import { Snapshots } from "./pages/Snapshots"; + +import { SnapshotCreate } from './pages/SnapshotCreate'; +import { SnapshotHistory } from "./pages/SnapshotHistory"; +import { SnapshotRestore } from './pages/SnapshotRestore'; + import { AppContext } from './contexts/AppContext'; import { UIPreferenceProvider } from './contexts/UIPreferencesContext'; + export default class App extends Component { constructor() { super(); @@ -123,17 +128,17 @@ export default class App extends Component { - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/DirectoryBreadcrumbs.jsx b/src/components/DirectoryBreadcrumbs.jsx similarity index 100% rename from src/DirectoryBreadcrumbs.jsx rename to src/components/DirectoryBreadcrumbs.jsx diff --git a/src/DirectoryItems.jsx b/src/components/DirectoryItems.jsx similarity index 93% rename from src/DirectoryItems.jsx rename to src/components/DirectoryItems.jsx index 8fc2ce8..e368f57 100644 --- a/src/DirectoryItems.jsx +++ b/src/components/DirectoryItems.jsx @@ -1,8 +1,8 @@ import React, { Component } from 'react'; import { Link } from "react-router-dom"; -import MyTable from './Table'; -import { objectLink, rfc3339TimestampForDisplay, sizeWithFailures } from './uiutil'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import MyTable from '../Table'; +import { objectLink, rfc3339TimestampForDisplay, sizeWithFailures } from '../uiutil'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; function objectName(name, typeID) { if (typeID === "d") { diff --git a/src/TaskLogs.jsx b/src/components/Logs.jsx similarity index 96% rename from src/TaskLogs.jsx rename to src/components/Logs.jsx index d2c43f4..10f1fa4 100644 --- a/src/TaskLogs.jsx +++ b/src/components/Logs.jsx @@ -1,10 +1,10 @@ import axios from 'axios'; import React, { Component } from 'react'; import Table from 'react-bootstrap/Table'; -import { handleChange } from './forms'; -import { redirect } from './uiutil'; +import { handleChange } from '../forms'; +import { redirect } from '../uiutil'; -export class TaskLogs extends Component { +export class Logs extends Component { constructor() { super(); this.state = { diff --git a/src/SetupRepository.jsx b/src/components/SetupRepository.jsx similarity index 94% rename from src/SetupRepository.jsx rename to src/components/SetupRepository.jsx index d172d72..7a62bae 100644 --- a/src/SetupRepository.jsx +++ b/src/components/SetupRepository.jsx @@ -8,33 +8,33 @@ import Collapse from 'react-bootstrap/Collapse'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import Spinner from 'react-bootstrap/Spinner'; -import { AppContext } from './contexts/AppContext'; -import { handleChange, validateRequiredFields } from './forms'; -import { RequiredBoolean } from './forms/RequiredBoolean'; -import { RequiredField } from './forms/RequiredField'; -import { SetupAzure } from './SetupAzure'; -import { SetupB2 } from "./SetupB2"; -import { SetupFilesystem } from './SetupFilesystem'; -import { SetupGCS } from './SetupGCS'; -import { SetupKopiaServer } from './SetupKopiaServer'; -import { SetupRclone } from './SetupRclone'; -import { SetupS3 } from './SetupS3'; -import { SetupSFTP } from './SetupSFTP'; -import { SetupToken } from './SetupToken'; -import { SetupWebDAV } from './SetupWebDAV'; -import { toAlgorithmOption } from './uiutil'; +import { AppContext } from '../contexts/AppContext'; +import { handleChange, validateRequiredFields } from '../forms'; +import { RequiredBoolean } from '../forms/RequiredBoolean'; +import { RequiredField } from '../forms/RequiredField'; +import { SetupRepositoryAzure } from './SetupRepositoryAzure'; +import { SetupRepositoryB2 } from "./SetupRepositoryB2"; +import { SetupRepositoryFilesystem } from './SetupRepositoryFilesystem'; +import { SetupRepositoryGCS } from './SetupRepositoryGCS'; +import { SetupRepositoryServer } from './SetupRepositoryServer'; +import { SetupRepositoryRclone } from './SetupRepositoryRclone'; +import { SetupRepositoryS3 } from './SetupRepositoryS3'; +import { SetupRepositorySFTP } from './SetupRepositorySFTP'; +import { SetupRepositoryToken } from './SetupRepositoryToken'; +import { SetupRepositoryWebDAV } from './SetupRepositoryWebDAV'; +import { toAlgorithmOption } from '../uiutil'; const supportedProviders = [ - { provider: "filesystem", description: "Local Directory or NAS", component: SetupFilesystem }, - { provider: "gcs", description: "Google Cloud Storage", component: SetupGCS }, - { provider: "s3", description: "Amazon S3 or Compatible Storage", component: SetupS3 }, - { provider: "b2", description: "Backblaze B2", component: SetupB2 }, - { provider: "azureBlob", description: "Azure Blob Storage", component: SetupAzure }, - { provider: "sftp", description: "SFTP Server", component: SetupSFTP }, - { provider: "rclone", description: "Rclone Remote", component: SetupRclone }, - { provider: "webdav", description: "WebDAV Server", component: SetupWebDAV }, - { provider: "_server", description: "Kopia Repository Server", component: SetupKopiaServer }, - { provider: "_token", description: "Use Repository Token", component: SetupToken }, + { provider: "filesystem", description: "Local Directory or NAS", component: SetupRepositoryFilesystem }, + { provider: "gcs", description: "Google Cloud Storage", component: SetupRepositoryGCS }, + { provider: "s3", description: "Amazon S3 or Compatible Storage", component: SetupRepositoryS3 }, + { provider: "b2", description: "Backblaze B2", component: SetupRepositoryB2 }, + { provider: "azureBlob", description: "Azure Blob Storage", component: SetupRepositoryAzure }, + { provider: "sftp", description: "SFTP Server", component: SetupRepositorySFTP }, + { provider: "rclone", description: "Rclone Remote", component: SetupRepositoryRclone }, + { provider: "webdav", description: "WebDAV Server", component: SetupRepositoryWebDAV }, + { provider: "_server", description: "Kopia Repository Server", component: SetupRepositoryServer }, + { provider: "_token", description: "Use Repository Token", component: SetupRepositoryToken }, ]; export class SetupRepository extends Component { diff --git a/src/SetupAzure.jsx b/src/components/SetupRepositoryAzure.jsx similarity index 85% rename from src/SetupAzure.jsx rename to src/components/SetupRepositoryAzure.jsx index f1b50d0..b32e22c 100644 --- a/src/SetupAzure.jsx +++ b/src/components/SetupRepositoryAzure.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupAzure extends Component { +export class SetupRepositoryAzure extends Component { constructor(props) { super(); diff --git a/src/SetupB2.jsx b/src/components/SetupRepositoryB2.jsx similarity index 81% rename from src/SetupB2.jsx rename to src/components/SetupRepositoryB2.jsx index f62c744..73fffd1 100644 --- a/src/SetupB2.jsx +++ b/src/components/SetupRepositoryB2.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { RequiredField } from './forms/RequiredField'; -import { OptionalField } from './forms/OptionalField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { RequiredField } from '../forms/RequiredField'; +import { OptionalField } from '../forms/OptionalField'; -export class SetupB2 extends Component { +export class SetupRepositoryB2 extends Component { constructor(props) { super(); diff --git a/src/SetupFilesystem.jsx b/src/components/SetupRepositoryFilesystem.jsx similarity index 76% rename from src/SetupFilesystem.jsx rename to src/components/SetupRepositoryFilesystem.jsx index 97a471f..f5915ae 100644 --- a/src/SetupFilesystem.jsx +++ b/src/components/SetupRepositoryFilesystem.jsx @@ -1,9 +1,9 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupFilesystem extends Component { +export class SetupRepositoryFilesystem extends Component { constructor(props) { super(); diff --git a/src/SetupGCS.jsx b/src/components/SetupRepositoryGCS.jsx similarity index 81% rename from src/SetupGCS.jsx rename to src/components/SetupRepositoryGCS.jsx index c308c33..cb303e9 100644 --- a/src/SetupGCS.jsx +++ b/src/components/SetupRepositoryGCS.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupGCS extends Component { +export class SetupRepositoryGCS extends Component { constructor(props) { super(); diff --git a/src/SetupRclone.jsx b/src/components/SetupRepositoryRclone.jsx similarity index 76% rename from src/SetupRclone.jsx rename to src/components/SetupRepositoryRclone.jsx index a7d9d36..5a59e43 100644 --- a/src/SetupRclone.jsx +++ b/src/components/SetupRepositoryRclone.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupRclone extends Component { +export class SetupRepositoryRclone extends Component { constructor(props) { super(); diff --git a/src/SetupS3.jsx b/src/components/SetupRepositoryS3.jsx similarity index 85% rename from src/SetupS3.jsx rename to src/components/SetupRepositoryS3.jsx index d22e377..d05da1d 100644 --- a/src/SetupS3.jsx +++ b/src/components/SetupRepositoryS3.jsx @@ -1,11 +1,11 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredBoolean } from './forms/RequiredBoolean'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredBoolean } from '../forms/RequiredBoolean'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupS3 extends Component { +export class SetupRepositoryS3 extends Component { constructor(props) { super(); diff --git a/src/SetupSFTP.jsx b/src/components/SetupRepositorySFTP.jsx similarity index 92% rename from src/SetupSFTP.jsx rename to src/components/SetupRepositorySFTP.jsx index a93272f..3f9a58b 100644 --- a/src/SetupSFTP.jsx +++ b/src/components/SetupRepositorySFTP.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields, stateProperty } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { OptionalNumberField } from './forms/OptionalNumberField'; -import { RequiredBoolean } from './forms/RequiredBoolean'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields, stateProperty } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { OptionalNumberField } from '../forms/OptionalNumberField'; +import { RequiredBoolean } from '../forms/RequiredBoolean'; +import { RequiredField } from '../forms/RequiredField'; function hasExactlyOneOf(component, names) { let count = 0; @@ -18,7 +18,7 @@ function hasExactlyOneOf(component, names) { return count === 1; } -export class SetupSFTP extends Component { +export class SetupRepositorySFTP extends Component { constructor(props) { super(); diff --git a/src/SetupKopiaServer.jsx b/src/components/SetupRepositoryServer.jsx similarity index 77% rename from src/SetupKopiaServer.jsx rename to src/components/SetupRepositoryServer.jsx index e60ca1e..1bf7ab7 100644 --- a/src/SetupKopiaServer.jsx +++ b/src/components/SetupRepositoryServer.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupKopiaServer extends Component { +export class SetupRepositoryServer extends Component { constructor(props) { super(); diff --git a/src/SetupToken.jsx b/src/components/SetupRepositoryToken.jsx similarity index 75% rename from src/SetupToken.jsx rename to src/components/SetupRepositoryToken.jsx index 95e528c..b767a35 100644 --- a/src/SetupToken.jsx +++ b/src/components/SetupRepositoryToken.jsx @@ -1,9 +1,9 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupToken extends Component { +export class SetupRepositoryToken extends Component { constructor(props) { super(); diff --git a/src/SetupWebDAV.jsx b/src/components/SetupRepositoryWebDAV.jsx similarity index 77% rename from src/SetupWebDAV.jsx rename to src/components/SetupRepositoryWebDAV.jsx index fdceca5..5106763 100644 --- a/src/SetupWebDAV.jsx +++ b/src/components/SetupRepositoryWebDAV.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupWebDAV extends Component { +export class SetupRepositoryWebDAV extends Component { constructor(props) { super(); diff --git a/src/EstimateResults.jsx b/src/components/SnapshotEstimation.jsx similarity index 91% rename from src/EstimateResults.jsx rename to src/components/SnapshotEstimation.jsx index de128d3..8a0489f 100644 --- a/src/EstimateResults.jsx +++ b/src/components/SnapshotEstimation.jsx @@ -6,11 +6,11 @@ import React, { Component } from 'react'; import Button from 'react-bootstrap/Button'; import Spinner from 'react-bootstrap/esm/Spinner'; import Form from 'react-bootstrap/Form'; -import { TaskLogs } from './TaskLogs'; -import { cancelTask, redirect, sizeDisplayName } from './uiutil'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { Logs } from './Logs'; +import { cancelTask, redirect, sizeDisplayName } from '../uiutil'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; -export class EstimateResults extends Component { +export class SnapshotEstimation extends Component { constructor() { super(); this.state = { @@ -110,10 +110,10 @@ export class EstimateResults extends Component { } {this.state.showLog ? <> - + : } ; } } -EstimateResults.contextType = UIPreferencesContext \ No newline at end of file +SnapshotEstimation.contextType = UIPreferencesContext \ No newline at end of file diff --git a/src/PoliciesTable.jsx b/src/pages/Policies.jsx similarity index 98% rename from src/PoliciesTable.jsx rename to src/pages/Policies.jsx index 970a124..922f1a6 100644 --- a/src/PoliciesTable.jsx +++ b/src/pages/Policies.jsx @@ -9,9 +9,9 @@ import Dropdown from 'react-bootstrap/Dropdown'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { Link } from 'react-router-dom'; -import { handleChange } from './forms'; -import MyTable from './Table'; -import { CLIEquivalent, compare, DirectorySelector, isAbsolutePath, ownerName, policyEditorURL, redirect } from './uiutil'; +import { handleChange } from '../forms'; +import MyTable from '../Table'; +import { CLIEquivalent, compare, DirectorySelector, isAbsolutePath, ownerName, policyEditorURL, redirect } from '../uiutil'; const applicablePolicies = "Applicable Policies" const localPolicies = "Local Path Policies" @@ -20,7 +20,7 @@ const globalPolicy = "Global Policy" const perUserPolicies = "Per-User Policies" const perHostPolicies = "Per-Host Policies" -export class PoliciesTable extends Component { +export class Policies extends Component { constructor() { super(); this.state = { diff --git a/src/PolicyEditorPage.jsx b/src/pages/Policy.jsx similarity index 89% rename from src/PolicyEditorPage.jsx rename to src/pages/Policy.jsx index 206712e..86b29e6 100644 --- a/src/PolicyEditorPage.jsx +++ b/src/pages/Policy.jsx @@ -1,10 +1,10 @@ import React, { Component, createRef } from 'react'; import Col from 'react-bootstrap/esm/Col'; import Row from 'react-bootstrap/esm/Row'; -import { PolicyEditor } from './PolicyEditor'; -import { CLIEquivalent, GoBackButton, parseQuery, PolicyTypeName } from './uiutil'; +import { PolicyEditor } from '../PolicyEditor'; +import { CLIEquivalent, GoBackButton, parseQuery, PolicyTypeName } from '../uiutil'; -export class PolicyEditorPage extends Component { +export class Policy extends Component { constructor() { super(); diff --git a/src/PreferencesView.jsx b/src/pages/Preferences.jsx similarity index 92% rename from src/PreferencesView.jsx rename to src/pages/Preferences.jsx index 833212d..f8ec8c6 100644 --- a/src/PreferencesView.jsx +++ b/src/pages/Preferences.jsx @@ -1,7 +1,7 @@ import { Component } from 'react'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; -export class PreferencesView extends Component { +export class Preferences extends Component { render() { const { pageSize, theme, bytesStringBase2, setByteStringBase, setTheme } = this.context; return <> @@ -36,4 +36,4 @@ export class PreferencesView extends Component { } } -PreferencesView.contextType = UIPreferencesContext +Preferences.contextType = UIPreferencesContext diff --git a/src/RepoStatus.jsx b/src/pages/Repository.jsx similarity index 96% rename from src/RepoStatus.jsx rename to src/pages/Repository.jsx index c1d9265..017c0ca 100644 --- a/src/RepoStatus.jsx +++ b/src/pages/Repository.jsx @@ -7,15 +7,15 @@ import Row from 'react-bootstrap/Row'; import Form from 'react-bootstrap/Form'; import InputGroup from 'react-bootstrap/InputGroup'; import Spinner from 'react-bootstrap/Spinner'; -import { handleChange } from './forms'; -import { SetupRepository } from './SetupRepository'; -import { cancelTask, CLIEquivalent } from './uiutil'; +import { handleChange } from '../forms'; +import { SetupRepository } from '../components/SetupRepository'; +import { cancelTask, CLIEquivalent } from '../uiutil'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faCheck, faChevronCircleDown, faChevronCircleUp, faWindowClose } from '@fortawesome/free-solid-svg-icons'; -import { TaskLogs } from './TaskLogs'; -import { AppContext } from './contexts/AppContext'; +import { Logs } from '../components/Logs'; +import { AppContext } from '../contexts/AppContext'; -export class RepoStatus extends Component { +export class Repository extends Component { constructor() { super(); @@ -130,7 +130,7 @@ export class RepoStatus extends Component { return <>

 Initializing Repository...

{this.state.showLog ? <> - + : }
@@ -243,4 +243,4 @@ export class RepoStatus extends Component { } } -RepoStatus.contextType = AppContext; +Repository.contextType = AppContext; diff --git a/src/NewSnapshot.jsx b/src/pages/SnapshotCreate.jsx similarity index 94% rename from src/NewSnapshot.jsx rename to src/pages/SnapshotCreate.jsx index 1a62fd9..e064098 100644 --- a/src/NewSnapshot.jsx +++ b/src/pages/SnapshotCreate.jsx @@ -4,12 +4,12 @@ import Button from 'react-bootstrap/Button'; import Col from 'react-bootstrap/Col'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; -import { handleChange } from './forms'; -import { PolicyEditor } from './PolicyEditor'; -import { EstimateResults } from './EstimateResults'; -import { CLIEquivalent, DirectorySelector, errorAlert, GoBackButton, redirect } from './uiutil'; +import { handleChange } from '../forms'; +import { PolicyEditor } from '../PolicyEditor'; +import { SnapshotEstimation } from '../components/SnapshotEstimation'; +import { CLIEquivalent, DirectorySelector, errorAlert, GoBackButton, redirect } from '../uiutil'; -export class NewSnapshot extends Component { +export class SnapshotCreate extends Component { constructor() { super(); this.state = { @@ -179,7 +179,7 @@ export class NewSnapshot extends Component { {this.state.estimateTaskID && this.state.estimateTaskVisible && - + }
diff --git a/src/DirectoryObject.jsx b/src/pages/SnapshotDirectory.jsx similarity index 95% rename from src/DirectoryObject.jsx rename to src/pages/SnapshotDirectory.jsx index 96512e7..a33c6a8 100644 --- a/src/DirectoryObject.jsx +++ b/src/pages/SnapshotDirectory.jsx @@ -6,11 +6,11 @@ import Button from 'react-bootstrap/Button'; import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import Spinner from 'react-bootstrap/Spinner'; -import { DirectoryItems } from "./DirectoryItems"; -import { CLIEquivalent } from './uiutil'; -import { DirectoryBreadcrumbs } from "./DirectoryBreadcrumbs"; +import { DirectoryItems } from "../components/DirectoryItems"; +import { CLIEquivalent } from '../uiutil'; +import { DirectoryBreadcrumbs } from "../components/DirectoryBreadcrumbs"; -export class DirectoryObject extends Component { +export class SnapshotDirectory extends Component { constructor() { super(); diff --git a/src/SnapshotsTable.jsx b/src/pages/SnapshotHistory.jsx similarity index 98% rename from src/SnapshotsTable.jsx rename to src/pages/SnapshotHistory.jsx index 18e3184..3b8cf0c 100644 --- a/src/SnapshotsTable.jsx +++ b/src/pages/SnapshotHistory.jsx @@ -7,13 +7,13 @@ import Button from 'react-bootstrap/Button'; import Col from 'react-bootstrap/Col'; import Spinner from 'react-bootstrap/Spinner'; import { Link } from "react-router-dom"; -import MyTable from './Table'; -import { CLIEquivalent, compare, errorAlert, GoBackButton, objectLink, parseQuery, redirect, rfc3339TimestampForDisplay, sizeWithFailures, sourceQueryStringParams } from './uiutil'; +import MyTable from '../Table'; +import { CLIEquivalent, compare, errorAlert, GoBackButton, objectLink, parseQuery, redirect, rfc3339TimestampForDisplay, sizeWithFailures, sourceQueryStringParams } from '../uiutil'; import { faSync, faThumbtack } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import Modal from 'react-bootstrap/Modal'; import { faFileAlt } from '@fortawesome/free-regular-svg-icons'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; function pillVariant(tag) { if (tag.startsWith("latest-")) { @@ -34,7 +34,7 @@ function pillVariant(tag) { return "primary"; } -export class SnapshotsTable extends Component { +export class SnapshotHistory extends Component { constructor() { super(); this.state = { @@ -510,4 +510,4 @@ export class SnapshotsTable extends Component { ; } } -SnapshotsTable.contextType = UIPreferencesContext +SnapshotHistory.contextType = UIPreferencesContext diff --git a/src/BeginRestore.jsx b/src/pages/SnapshotRestore.jsx similarity index 94% rename from src/BeginRestore.jsx rename to src/pages/SnapshotRestore.jsx index d1d3140..34e80fa 100644 --- a/src/BeginRestore.jsx +++ b/src/pages/SnapshotRestore.jsx @@ -5,13 +5,13 @@ import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import { Link } from "react-router-dom"; -import { handleChange, validateRequiredFields } from './forms'; -import { RequiredBoolean } from './forms/RequiredBoolean'; -import { RequiredField } from './forms/RequiredField'; -import { RequiredNumberField } from './forms/RequiredNumberField'; -import { errorAlert, GoBackButton } from './uiutil'; +import { handleChange, validateRequiredFields } from '../forms'; +import { RequiredBoolean } from '../forms/RequiredBoolean'; +import { RequiredField } from '../forms/RequiredField'; +import { RequiredNumberField } from '../forms/RequiredNumberField'; +import { errorAlert, GoBackButton } from '../uiutil'; -export class BeginRestore extends Component { +export class SnapshotRestore extends Component { constructor(props) { super(); diff --git a/src/SourcesTable.jsx b/src/pages/Snapshots.jsx similarity index 97% rename from src/SourcesTable.jsx rename to src/pages/Snapshots.jsx index db3ebe0..bff3504 100644 --- a/src/SourcesTable.jsx +++ b/src/pages/Snapshots.jsx @@ -10,15 +10,15 @@ import Dropdown from 'react-bootstrap/Dropdown'; import Row from 'react-bootstrap/Row'; import Spinner from 'react-bootstrap/Spinner'; import { Link } from 'react-router-dom'; -import { handleChange } from './forms'; -import MyTable from './Table'; -import { CLIEquivalent, compare, errorAlert, ownerName, policyEditorURL, redirect, sizeDisplayName, sizeWithFailures, sourceQueryStringParams } from './uiutil'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { handleChange } from '../forms'; +import MyTable from '../Table'; +import { CLIEquivalent, compare, errorAlert, ownerName, policyEditorURL, redirect, sizeDisplayName, sizeWithFailures, sourceQueryStringParams } from '../uiutil'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; const localSnapshots = "Local Snapshots" const allSnapshots = "All Snapshots" -export class SourcesTable extends Component { +export class Snapshots extends Component { constructor() { super(); this.state = { @@ -328,4 +328,4 @@ export class SourcesTable extends Component { ; } } -SourcesTable.contextType = UIPreferencesContext +Snapshots.contextType = UIPreferencesContext diff --git a/src/TaskDetails.jsx b/src/pages/Task.jsx similarity index 95% rename from src/TaskDetails.jsx rename to src/pages/Task.jsx index 3c458c3..4f02cce 100644 --- a/src/TaskDetails.jsx +++ b/src/pages/Task.jsx @@ -10,11 +10,11 @@ import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import Table from 'react-bootstrap/Table'; import Spinner from 'react-bootstrap/Spinner'; -import { TaskLogs } from './TaskLogs'; -import { cancelTask, formatDuration, GoBackButton, redirect, sizeDisplayName } from './uiutil'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { Logs } from '../components/Logs'; +import { cancelTask, formatDuration, GoBackButton, redirect, sizeDisplayName } from '../uiutil'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; -export class TaskDetails extends Component { +export class Task extends Component { constructor() { super(); this.state = { @@ -216,11 +216,11 @@ export class TaskDetails extends Component { Logs - + ; } } -TaskDetails.contextType = UIPreferencesContext \ No newline at end of file +Task.contextType = UIPreferencesContext \ No newline at end of file diff --git a/src/TasksTable.jsx b/src/pages/Tasks.jsx similarity index 97% rename from src/TasksTable.jsx rename to src/pages/Tasks.jsx index d4a9198..618cc49 100644 --- a/src/TasksTable.jsx +++ b/src/pages/Tasks.jsx @@ -10,11 +10,11 @@ import Dropdown from 'react-bootstrap/Dropdown'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { Link } from 'react-router-dom'; -import { handleChange } from './forms'; -import MyTable from './Table'; -import { redirect, taskStatusSymbol } from './uiutil'; +import { handleChange } from '../forms'; +import MyTable from '../Table'; +import { redirect, taskStatusSymbol } from '../uiutil'; -export class TasksTable extends Component { +export class Tasks extends Component { constructor() { super(); this.state = { diff --git a/src/test/test.js b/src/test/test.js new file mode 100644 index 0000000..6a676b4 --- /dev/null +++ b/src/test/test.js @@ -0,0 +1,7 @@ +const assert = require('chai').assert; + +describe("sum", function() { + it("adds numbers", function() { + assert.equal(sum(6, 3), 9); + }); +}); \ No newline at end of file diff --git a/src/tests/SetupRepository.test.jsx b/src/tests/SetupRepository.test.jsx index b462ea8..538c71b 100644 --- a/src/tests/SetupRepository.test.jsx +++ b/src/tests/SetupRepository.test.jsx @@ -1,6 +1,6 @@ import { findByTestId, render, waitFor, act } from '@testing-library/react'; import React from 'react'; -import { SetupRepository } from '../SetupRepository'; +import { SetupRepository } from '../components/SetupRepository'; import { setupAPIMock } from './api_mocks'; import { changeControlValue, simulateClick } from './testutils'; diff --git a/src/tests/SetupAzure.test.jsx b/src/tests/SetupRepositoryAzure.test.jsx similarity index 88% rename from src/tests/SetupAzure.test.jsx rename to src/tests/SetupRepositoryAzure.test.jsx index 3eb50ba..07b7714 100644 --- a/src/tests/SetupAzure.test.jsx +++ b/src/tests/SetupRepositoryAzure.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupAzure } from '../SetupAzure'; +import { SetupRepositoryAzure } from '../components/SetupRepositoryAzure'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupFilesystem.test.jsx b/src/tests/SetupRepositoryFilesystem.test.jsx similarity index 74% rename from src/tests/SetupFilesystem.test.jsx rename to src/tests/SetupRepositoryFilesystem.test.jsx index eae2a65..b71d29d 100644 --- a/src/tests/SetupFilesystem.test.jsx +++ b/src/tests/SetupRepositoryFilesystem.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupFilesystem } from '../SetupFilesystem'; +import { SetupRepositoryFilesystem } from '../components/SetupRepositoryFilesystem'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupGCS.test.jsx b/src/tests/SetupRepositoryGCS.test.jsx similarity index 86% rename from src/tests/SetupGCS.test.jsx rename to src/tests/SetupRepositoryGCS.test.jsx index 927b7d9..29977b9 100644 --- a/src/tests/SetupGCS.test.jsx +++ b/src/tests/SetupRepositoryGCS.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupGCS } from '../SetupGCS'; +import { SetupRepositoryGCS } from '../components/SetupRepositoryGCS'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupS3.test.jsx b/src/tests/SetupRepositoryS3.test.jsx similarity index 92% rename from src/tests/SetupS3.test.jsx rename to src/tests/SetupRepositoryS3.test.jsx index 8557b97..6de0a2a 100644 --- a/src/tests/SetupS3.test.jsx +++ b/src/tests/SetupRepositoryS3.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupS3 } from '../SetupS3'; +import { SetupRepositoryS3 } from '../components/SetupRepositoryS3'; import { changeControlValue, toggleCheckbox } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupSFTP.test.jsx b/src/tests/SetupRepositorySFTP.test.jsx similarity index 94% rename from src/tests/SetupSFTP.test.jsx rename to src/tests/SetupRepositorySFTP.test.jsx index 75a8a18..7427242 100644 --- a/src/tests/SetupSFTP.test.jsx +++ b/src/tests/SetupRepositorySFTP.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupSFTP } from '../SetupSFTP'; +import { SetupRepositorySFTP } from '../components/SetupRepositorySFTP'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupToken.test.jsx b/src/tests/SetupRepositoryToken.test.jsx similarity index 76% rename from src/tests/SetupToken.test.jsx rename to src/tests/SetupRepositoryToken.test.jsx index edefa90..2c23f3f 100644 --- a/src/tests/SetupToken.test.jsx +++ b/src/tests/SetupRepositoryToken.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupToken } from '../SetupToken'; +import { SetupRepositoryToken } from '../components/SetupRepositoryToken'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(()=>expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupWebDAV.test.jsx b/src/tests/SetupRepositoryWebDAV.test.jsx similarity index 83% rename from src/tests/SetupWebDAV.test.jsx rename to src/tests/SetupRepositoryWebDAV.test.jsx index 087efc5..aefd6fd 100644 --- a/src/tests/SetupWebDAV.test.jsx +++ b/src/tests/SetupRepositoryWebDAV.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupWebDAV } from '../SetupWebDAV'; +import { SetupRepositoryWebDAV } from '../components/SetupRepositoryWebDAV'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); From 6412ee7c990ab1e402df05d958c5fe03569b863c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Nov 2023 08:32:13 -0700 Subject: [PATCH 02/13] build(deps): bump react-select from 5.7.4 to 5.7.7 (#207) Bumps [react-select](https://github.com/JedWatson/react-select) from 5.7.4 to 5.7.7. - [Release notes](https://github.com/JedWatson/react-select/releases) - [Changelog](https://github.com/JedWatson/react-select/blob/master/docs/CHANGELOG.md) - [Commits](https://github.com/JedWatson/react-select/compare/react-select@5.7.4...react-select@5.7.7) --- updated-dependencies: - dependency-name: react-select dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 58b7514..1dfc77c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "react-bootstrap": "^2.8.0", "react-dom": "^18.2.0", "react-router-dom": "^5.3.4", - "react-select": "^5.7.4", + "react-select": "^5.7.7", "react-table": "^7.8.0" }, "devDependencies": { @@ -17394,9 +17394,9 @@ } }, "node_modules/react-select": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.4.tgz", - "integrity": "sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ==", + "version": "5.7.7", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.7.tgz", + "integrity": "sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw==", "dependencies": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", @@ -33456,9 +33456,9 @@ } }, "react-select": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.4.tgz", - "integrity": "sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ==", + "version": "5.7.7", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.7.tgz", + "integrity": "sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw==", "requires": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", diff --git a/package.json b/package.json index 0c5bafe..8067fb5 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "react-bootstrap": "^2.8.0", "react-dom": "^18.2.0", "react-router-dom": "^5.3.4", - "react-select": "^5.7.4", + "react-select": "^5.7.7", "react-table": "^7.8.0" }, "scripts": { From ed101027f66f121d1b2d57a711fd2c60c7eccadb Mon Sep 17 00:00:00 2001 From: lupusA Date: Fri, 3 Nov 2023 16:36:21 +0100 Subject: [PATCH 03/13] Removed react-select dependency --- package-lock.json | 473 ++++++++++++---------------------------------- package.json | 1 - 2 files changed, 119 insertions(+), 355 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6570e43..da33f2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,6 @@ "react-bootstrap": "^2.8.0", "react-dom": "^18.2.0", "react-router-dom": "^5.3.4", - "react-select": "^5.7.4", "react-table": "^7.8.0" }, "devDependencies": { @@ -61,6 +60,7 @@ "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, "dependencies": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" @@ -73,6 +73,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -84,6 +85,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -97,6 +99,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -104,12 +107,14 @@ "node_modules/@babel/code-frame/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -118,6 +123,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -126,6 +132,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -447,6 +454,7 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, @@ -564,6 +572,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -572,6 +581,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -618,6 +628,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -631,6 +642,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -642,6 +654,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -655,6 +668,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -662,12 +676,14 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -676,6 +692,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -684,6 +701,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -2143,6 +2161,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -2395,117 +2414,6 @@ "postcss-selector-parser": "^6.0.10" } }, - "node_modules/@emotion/babel-plugin": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", - "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.1.3" - } - }, - "node_modules/@emotion/babel-plugin/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@emotion/cache": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", - "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", - "dependencies": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.1", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" - } - }, - "node_modules/@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" - }, - "node_modules/@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" - }, - "node_modules/@emotion/react": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", - "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "hoist-non-react-statics": "^3.3.1" - }, - "peerDependencies": { - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", - "dependencies": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "node_modules/@emotion/sheet": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", - "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" - }, - "node_modules/@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" - }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -2571,19 +2479,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@floating-ui/core": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.5.tgz", - "integrity": "sha512-qrcbyfnRVziRlB6IYwjCopYhO7Vud750JlJyuljruIXcPxr22y8zdckcJGsuOdnQ639uVD1tTXddrcH3t3QYIQ==" - }, - "node_modules/@floating-ui/dom": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.5.tgz", - "integrity": "sha512-+sAUfpQ3Frz+VCbPCqj+cZzvEESy3fjSeT/pDWkYCWOBXYNNKZfuVsHuv8/JO2zze8+Eb/Q7a6hZVgzS81fLbQ==", - "dependencies": { - "@floating-ui/core": "^1.2.4" - } - }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz", @@ -4764,7 +4659,8 @@ "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, "node_modules/@types/prettier": { "version": "2.7.3", @@ -5898,6 +5794,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -6296,6 +6193,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -6815,6 +6713,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } @@ -6889,6 +6788,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -7851,6 +7751,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -7958,6 +7859,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -9022,11 +8924,6 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -9275,7 +9172,8 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -9536,6 +9434,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -9938,6 +9837,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -9953,6 +9853,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "engines": { "node": ">=4" } @@ -10050,7 +9951,8 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-bigint": { "version": "1.0.4", @@ -10131,6 +10033,7 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -13480,7 +13383,8 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema": { "version": "0.4.0", @@ -13622,7 +13526,8 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "node_modules/loader-runner": { "version": "4.3.0", @@ -13833,11 +13738,6 @@ "node": ">= 4.0.0" } }, - "node_modules/memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" - }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -14655,6 +14555,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -14666,6 +14567,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -14734,7 +14636,8 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-to-regexp": { "version": "1.8.0", @@ -14748,6 +14651,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "engines": { "node": ">=8" } @@ -17728,26 +17632,6 @@ "node": ">=10" } }, - "node_modules/react-select": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.4.tgz", - "integrity": "sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ==", - "dependencies": { - "@babel/runtime": "^7.12.0", - "@emotion/cache": "^11.4.0", - "@emotion/react": "^11.8.1", - "@floating-ui/dom": "^1.0.1", - "@types/react-transition-group": "^4.4.0", - "memoize-one": "^6.0.0", - "prop-types": "^15.6.0", - "react-transition-group": "^4.3.0", - "use-isomorphic-layout-effect": "^1.1.2" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-table": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", @@ -17995,6 +17879,7 @@ "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, "dependencies": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", @@ -18206,7 +18091,8 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -18924,11 +18810,6 @@ "postcss": "^8.2.15" } }, - "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18958,6 +18839,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -19349,6 +19231,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, "engines": { "node": ">=4" } @@ -19676,19 +19559,6 @@ "requires-port": "^1.0.0" } }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -20678,6 +20548,7 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, "engines": { "node": ">= 6" } @@ -20771,6 +20642,7 @@ "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, "requires": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" @@ -20780,6 +20652,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -20788,6 +20661,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -20798,6 +20672,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -20805,22 +20680,26 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -21065,6 +20944,7 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, "requires": { "@babel/types": "^7.16.7" } @@ -21154,12 +21034,14 @@ "@babel/helper-string-parser": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true }, "@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true }, "@babel/helper-validator-option": { "version": "7.16.7", @@ -21194,6 +21076,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -21204,6 +21087,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -21212,6 +21096,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -21222,6 +21107,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -21229,22 +21115,26 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -22227,6 +22117,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "requires": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -22363,106 +22254,6 @@ "dev": true, "requires": {} }, - "@emotion/babel-plugin": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", - "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.1.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "@emotion/cache": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", - "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", - "requires": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.1", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" - } - }, - "@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" - }, - "@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" - }, - "@emotion/react": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", - "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "hoist-non-react-statics": "^3.3.1" - } - }, - "@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", - "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "@emotion/sheet": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", - "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" - }, - "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "requires": {} - }, - "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" - }, "@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -22512,19 +22303,6 @@ } } }, - "@floating-ui/core": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.5.tgz", - "integrity": "sha512-qrcbyfnRVziRlB6IYwjCopYhO7Vud750JlJyuljruIXcPxr22y8zdckcJGsuOdnQ639uVD1tTXddrcH3t3QYIQ==" - }, - "@floating-ui/dom": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.5.tgz", - "integrity": "sha512-+sAUfpQ3Frz+VCbPCqj+cZzvEESy3fjSeT/pDWkYCWOBXYNNKZfuVsHuv8/JO2zze8+Eb/Q7a6hZVgzS81fLbQ==", - "requires": { - "@floating-ui/core": "^1.2.4" - } - }, "@fortawesome/fontawesome-common-types": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz", @@ -24248,7 +24026,8 @@ "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, "@types/prettier": { "version": "2.7.3", @@ -25118,6 +24897,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, "requires": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -25430,7 +25210,8 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, "camel-case": { "version": "4.1.2", @@ -25829,6 +25610,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -25885,6 +25667,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -26580,6 +26363,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -26671,7 +26455,8 @@ "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "escodegen": { "version": "2.1.0", @@ -27491,11 +27276,6 @@ "pkg-dir": "^4.1.0" } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -27660,7 +27440,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "function.prototype.name": { "version": "1.1.5", @@ -27854,6 +27635,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -28160,6 +27942,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -28168,7 +27951,8 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true } } }, @@ -28244,7 +28028,8 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "is-bigint": { "version": "1.0.4", @@ -28290,6 +28075,7 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, "requires": { "has": "^1.0.3" } @@ -31002,7 +30788,8 @@ "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "json-schema": { "version": "0.4.0", @@ -31112,7 +30899,8 @@ "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "loader-runner": { "version": "4.3.0", @@ -31283,11 +31071,6 @@ "fs-monkey": "1.0.3" } }, - "memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -31895,6 +31678,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "requires": { "callsites": "^3.0.0" } @@ -31903,6 +31687,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -31953,7 +31738,8 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "path-to-regexp": { "version": "1.8.0", @@ -31966,7 +31752,8 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pathval": { "version": "1.1.1", @@ -34070,22 +33857,6 @@ } } }, - "react-select": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.4.tgz", - "integrity": "sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ==", - "requires": { - "@babel/runtime": "^7.12.0", - "@emotion/cache": "^11.4.0", - "@emotion/react": "^11.8.1", - "@floating-ui/dom": "^1.0.1", - "@types/react-transition-group": "^4.4.0", - "memoize-one": "^6.0.0", - "prop-types": "^15.6.0", - "react-transition-group": "^4.3.0", - "use-isomorphic-layout-effect": "^1.1.2" - } - }, "react-table": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", @@ -34280,6 +34051,7 @@ "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, "requires": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", @@ -34419,7 +34191,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -34976,11 +34749,6 @@ "postcss-selector-parser": "^6.0.4" } }, - "stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -35003,7 +34771,8 @@ "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true }, "svg-parser": { "version": "2.0.4", @@ -35304,7 +35073,8 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true }, "to-regex-range": { "version": "5.0.1", @@ -35555,12 +35325,6 @@ "requires-port": "^1.0.0" } }, - "use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "requires": {} - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -36364,7 +36128,8 @@ "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true }, "yargs": { "version": "17.7.2", diff --git a/package.json b/package.json index 7926125..aadb777 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "react-bootstrap": "^2.8.0", "react-dom": "^18.2.0", "react-router-dom": "^5.3.4", - "react-select": "^5.7.4", "react-table": "^7.8.0" }, "scripts": { From 1ae4204795786bf99e1b56320cbc02e48be1450b Mon Sep 17 00:00:00 2001 From: lupusA Date: Fri, 3 Nov 2023 17:58:00 +0100 Subject: [PATCH 04/13] Further moved to the new structure --- src/App.jsx | 7 +------ src/components/DirectoryItems.jsx | 6 +++--- src/components/Logs.jsx | 2 +- src/components/SetupRepository.jsx | 2 +- src/components/SnapshotEstimation.jsx | 2 +- .../policy-editor}/ActionRowMode.jsx | 2 +- .../policy-editor}/ActionRowScript.jsx | 2 +- .../policy-editor}/ActionRowTimeout.jsx | 2 +- .../policy-editor}/EffectiveBooleanValue.jsx | 2 +- .../policy-editor}/EffectiveListValue.jsx | 2 +- .../policy-editor}/EffectiveTextAreaValue.jsx | 2 +- .../EffectiveTimesOfDayValue.jsx | 4 ++-- .../policy-editor}/EffectiveValue.jsx | 2 +- .../policy-editor}/EffectiveValueColumn.jsx | 0 .../policy-editor}/LabelColumn.jsx | 0 .../policy-editor/PolicyEditor.jsx} | 16 +++++++-------- .../policy-editor}/SectionHeaderRow.jsx | 0 .../policy-editor}/UpcomingSnapshotTimes.jsx | 0 .../policy-editor}/ValueColumn.jsx | 0 .../policy-editor}/WideValueColumn.jsx | 0 src/forms/index.jsx | 2 +- src/pages/Policies.jsx | 6 +++--- src/pages/Policy.jsx | 4 ++-- src/pages/Repository.jsx | 2 +- src/pages/SnapshotCreate.jsx | 4 ++-- src/pages/SnapshotDirectory.jsx | 2 +- src/pages/SnapshotHistory.jsx | 6 +++--- src/pages/SnapshotRestore.jsx | 2 +- src/pages/Snapshots.jsx | 6 +++--- src/pages/Task.jsx | 2 +- src/pages/Tasks.jsx | 6 +++--- src/{Table.jsx => utils/KopiaTable.jsx} | 4 ++-- src/{ => utils}/deepstate.js | 0 src/{ => utils}/setupProxy.js | 20 +++++++++---------- src/{ => utils}/uiutil.jsx | 0 35 files changed, 57 insertions(+), 62 deletions(-) rename src/{PolicyEditor => components/policy-editor}/ActionRowMode.jsx (96%) rename src/{PolicyEditor => components/policy-editor}/ActionRowScript.jsx (87%) rename src/{PolicyEditor => components/policy-editor}/ActionRowTimeout.jsx (88%) rename src/{PolicyEditor => components/policy-editor}/EffectiveBooleanValue.jsx (92%) rename src/{PolicyEditor => components/policy-editor}/EffectiveListValue.jsx (93%) rename src/{PolicyEditor => components/policy-editor}/EffectiveTextAreaValue.jsx (93%) rename src/{PolicyEditor => components/policy-editor}/EffectiveTimesOfDayValue.jsx (83%) rename src/{PolicyEditor => components/policy-editor}/EffectiveValue.jsx (92%) rename src/{PolicyEditor => components/policy-editor}/EffectiveValueColumn.jsx (100%) rename src/{PolicyEditor => components/policy-editor}/LabelColumn.jsx (100%) rename src/{PolicyEditor/index.jsx => components/policy-editor/PolicyEditor.jsx} (98%) rename src/{PolicyEditor => components/policy-editor}/SectionHeaderRow.jsx (100%) rename src/{PolicyEditor => components/policy-editor}/UpcomingSnapshotTimes.jsx (100%) rename src/{PolicyEditor => components/policy-editor}/ValueColumn.jsx (100%) rename src/{PolicyEditor => components/policy-editor}/WideValueColumn.jsx (100%) rename src/{Table.jsx => utils/KopiaTable.jsx} (96%) rename src/{ => utils}/deepstate.js (100%) rename src/{ => utils}/setupProxy.js (95%) rename src/{ => utils}/uiutil.jsx (100%) diff --git a/src/App.jsx b/src/App.jsx index 701b44b..00c456a 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -5,9 +5,6 @@ import axios from 'axios'; import { React, Component } from 'react'; import { Navbar, Nav, Container } from 'react-bootstrap'; import { BrowserRouter as Router, NavLink, Redirect, Route, Switch } from 'react-router-dom'; - -import { SnapshotDirectory } from "./pages/SnapshotDirectory"; - import { Policy } from './pages/Policy'; import { Preferences } from './pages/Preferences'; import { Policies } from "./pages/Policies"; @@ -15,15 +12,13 @@ import { Repository } from "./pages/Repository"; import { Task } from './pages/Task'; import { Tasks } from './pages/Tasks'; import { Snapshots } from "./pages/Snapshots"; - import { SnapshotCreate } from './pages/SnapshotCreate'; +import { SnapshotDirectory } from "./pages/SnapshotDirectory"; import { SnapshotHistory } from "./pages/SnapshotHistory"; import { SnapshotRestore } from './pages/SnapshotRestore'; - import { AppContext } from './contexts/AppContext'; import { UIPreferenceProvider } from './contexts/UIPreferencesContext'; - export default class App extends Component { constructor() { super(); diff --git a/src/components/DirectoryItems.jsx b/src/components/DirectoryItems.jsx index e368f57..fac5eea 100644 --- a/src/components/DirectoryItems.jsx +++ b/src/components/DirectoryItems.jsx @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import { Link } from "react-router-dom"; -import MyTable from '../Table'; -import { objectLink, rfc3339TimestampForDisplay, sizeWithFailures } from '../uiutil'; +import KopiaTable from '../utils/KopiaTable'; +import { objectLink, rfc3339TimestampForDisplay, sizeWithFailures } from '../utils/uiutil'; import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; function objectName(name, typeID) { @@ -64,7 +64,7 @@ export class DirectoryItems extends Component { width: 100, }] - return ; + return ; } } DirectoryItems.contextType = UIPreferencesContext \ No newline at end of file diff --git a/src/components/Logs.jsx b/src/components/Logs.jsx index 10f1fa4..72c66e6 100644 --- a/src/components/Logs.jsx +++ b/src/components/Logs.jsx @@ -2,7 +2,7 @@ import axios from 'axios'; import React, { Component } from 'react'; import Table from 'react-bootstrap/Table'; import { handleChange } from '../forms'; -import { redirect } from '../uiutil'; +import { redirect } from '../utils/uiutil'; export class Logs extends Component { constructor() { diff --git a/src/components/SetupRepository.jsx b/src/components/SetupRepository.jsx index 7a62bae..485c153 100644 --- a/src/components/SetupRepository.jsx +++ b/src/components/SetupRepository.jsx @@ -22,7 +22,7 @@ import { SetupRepositoryS3 } from './SetupRepositoryS3'; import { SetupRepositorySFTP } from './SetupRepositorySFTP'; import { SetupRepositoryToken } from './SetupRepositoryToken'; import { SetupRepositoryWebDAV } from './SetupRepositoryWebDAV'; -import { toAlgorithmOption } from '../uiutil'; +import { toAlgorithmOption } from '../utils/uiutil'; const supportedProviders = [ { provider: "filesystem", description: "Local Directory or NAS", component: SetupRepositoryFilesystem }, diff --git a/src/components/SnapshotEstimation.jsx b/src/components/SnapshotEstimation.jsx index 8a0489f..86b07b7 100644 --- a/src/components/SnapshotEstimation.jsx +++ b/src/components/SnapshotEstimation.jsx @@ -7,7 +7,7 @@ import Button from 'react-bootstrap/Button'; import Spinner from 'react-bootstrap/esm/Spinner'; import Form from 'react-bootstrap/Form'; import { Logs } from './Logs'; -import { cancelTask, redirect, sizeDisplayName } from '../uiutil'; +import { cancelTask, redirect, sizeDisplayName } from '../utils/uiutil'; import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; export class SnapshotEstimation extends Component { diff --git a/src/PolicyEditor/ActionRowMode.jsx b/src/components/policy-editor/ActionRowMode.jsx similarity index 96% rename from src/PolicyEditor/ActionRowMode.jsx rename to src/components/policy-editor/ActionRowMode.jsx index fd955ef..43600de 100644 --- a/src/PolicyEditor/ActionRowMode.jsx +++ b/src/components/policy-editor/ActionRowMode.jsx @@ -1,7 +1,7 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; -import { stateProperty } from '../forms'; +import { stateProperty } from '../../forms'; import { LabelColumn } from './LabelColumn'; import { WideValueColumn } from './WideValueColumn'; import { EffectiveValue } from './EffectiveValue'; diff --git a/src/PolicyEditor/ActionRowScript.jsx b/src/components/policy-editor/ActionRowScript.jsx similarity index 87% rename from src/PolicyEditor/ActionRowScript.jsx rename to src/components/policy-editor/ActionRowScript.jsx index 37ddef9..50a7570 100644 --- a/src/PolicyEditor/ActionRowScript.jsx +++ b/src/components/policy-editor/ActionRowScript.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Row from 'react-bootstrap/Row'; -import { OptionalFieldNoLabel } from '../forms/OptionalFieldNoLabel'; +import { OptionalFieldNoLabel } from '../../forms/OptionalFieldNoLabel'; import { LabelColumn } from './LabelColumn'; import { WideValueColumn } from './WideValueColumn'; import { EffectiveValue } from './EffectiveValue'; diff --git a/src/PolicyEditor/ActionRowTimeout.jsx b/src/components/policy-editor/ActionRowTimeout.jsx similarity index 88% rename from src/PolicyEditor/ActionRowTimeout.jsx rename to src/components/policy-editor/ActionRowTimeout.jsx index cd2d0dc..fbbf341 100644 --- a/src/PolicyEditor/ActionRowTimeout.jsx +++ b/src/components/policy-editor/ActionRowTimeout.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Row from 'react-bootstrap/Row'; -import { OptionalNumberField } from '../forms/OptionalNumberField'; +import { OptionalNumberField } from '../../forms/OptionalNumberField'; import { LabelColumn } from './LabelColumn'; import { WideValueColumn } from './WideValueColumn'; import { EffectiveValue } from './EffectiveValue'; diff --git a/src/PolicyEditor/EffectiveBooleanValue.jsx b/src/components/policy-editor/EffectiveBooleanValue.jsx similarity index 92% rename from src/PolicyEditor/EffectiveBooleanValue.jsx rename to src/components/policy-editor/EffectiveBooleanValue.jsx index db82173..9781a3d 100644 --- a/src/PolicyEditor/EffectiveBooleanValue.jsx +++ b/src/components/policy-editor/EffectiveBooleanValue.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; -import { getDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty } from '../../utils/deepstate'; import { EffectiveValueColumn } from "./EffectiveValueColumn"; export function EffectiveBooleanValue(component, policyField) { diff --git a/src/PolicyEditor/EffectiveListValue.jsx b/src/components/policy-editor/EffectiveListValue.jsx similarity index 93% rename from src/PolicyEditor/EffectiveListValue.jsx rename to src/components/policy-editor/EffectiveListValue.jsx index 0a9cd70..8eb72a9 100644 --- a/src/PolicyEditor/EffectiveListValue.jsx +++ b/src/components/policy-editor/EffectiveListValue.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; -import { getDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty } from '../../utils/deepstate'; import { EffectiveValueColumn } from "./EffectiveValueColumn"; export function EffectiveListValue(component, policyField) { diff --git a/src/PolicyEditor/EffectiveTextAreaValue.jsx b/src/components/policy-editor/EffectiveTextAreaValue.jsx similarity index 93% rename from src/PolicyEditor/EffectiveTextAreaValue.jsx rename to src/components/policy-editor/EffectiveTextAreaValue.jsx index 1babef2..d98e5da 100644 --- a/src/PolicyEditor/EffectiveTextAreaValue.jsx +++ b/src/components/policy-editor/EffectiveTextAreaValue.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; -import { getDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty } from '../../utils/deepstate'; import { EffectiveValueColumn } from "./EffectiveValueColumn"; export function EffectiveTextAreaValue(component, policyField) { diff --git a/src/PolicyEditor/EffectiveTimesOfDayValue.jsx b/src/components/policy-editor/EffectiveTimesOfDayValue.jsx similarity index 83% rename from src/PolicyEditor/EffectiveTimesOfDayValue.jsx rename to src/components/policy-editor/EffectiveTimesOfDayValue.jsx index cef915a..5f4afe9 100644 --- a/src/PolicyEditor/EffectiveTimesOfDayValue.jsx +++ b/src/components/policy-editor/EffectiveTimesOfDayValue.jsx @@ -1,8 +1,8 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; -import { getDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty } from '../../utils/deepstate'; import { EffectiveValueColumn } from "./EffectiveValueColumn"; -import { TimesOfDayList } from '../forms/TimesOfDayList'; +import { TimesOfDayList } from '../../forms/TimesOfDayList'; export function EffectiveTimesOfDayValue(component, policyField) { return diff --git a/src/PolicyEditor/EffectiveValue.jsx b/src/components/policy-editor/EffectiveValue.jsx similarity index 92% rename from src/PolicyEditor/EffectiveValue.jsx rename to src/components/policy-editor/EffectiveValue.jsx index 2f62f1f..1f05345 100644 --- a/src/PolicyEditor/EffectiveValue.jsx +++ b/src/components/policy-editor/EffectiveValue.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; -import { getDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty } from '../../utils/deepstate'; import { EffectiveValueColumn } from "./EffectiveValueColumn"; export function EffectiveValue(component, policyField) { diff --git a/src/PolicyEditor/EffectiveValueColumn.jsx b/src/components/policy-editor/EffectiveValueColumn.jsx similarity index 100% rename from src/PolicyEditor/EffectiveValueColumn.jsx rename to src/components/policy-editor/EffectiveValueColumn.jsx diff --git a/src/PolicyEditor/LabelColumn.jsx b/src/components/policy-editor/LabelColumn.jsx similarity index 100% rename from src/PolicyEditor/LabelColumn.jsx rename to src/components/policy-editor/LabelColumn.jsx diff --git a/src/PolicyEditor/index.jsx b/src/components/policy-editor/PolicyEditor.jsx similarity index 98% rename from src/PolicyEditor/index.jsx rename to src/components/policy-editor/PolicyEditor.jsx index 75faaa7..b61554e 100644 --- a/src/PolicyEditor/index.jsx +++ b/src/components/policy-editor/PolicyEditor.jsx @@ -7,14 +7,14 @@ import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import Spinner from 'react-bootstrap/Spinner'; import Accordion from 'react-bootstrap/Accordion'; -import { handleChange, stateProperty, valueToNumber } from '../forms'; -import { StringList } from '../forms/StringList'; -import { LogDetailSelector } from '../forms/LogDetailSelector'; -import { OptionalBoolean } from '../forms/OptionalBoolean'; -import { OptionalNumberField } from '../forms/OptionalNumberField'; -import { RequiredBoolean } from '../forms/RequiredBoolean'; -import { TimesOfDayList } from '../forms/TimesOfDayList'; -import { errorAlert, PolicyEditorLink, sourceQueryStringParams, toAlgorithmOption } from '../uiutil'; +import { handleChange, stateProperty, valueToNumber } from '../../forms'; +import { StringList } from '../../forms/StringList'; +import { LogDetailSelector } from '../../forms/LogDetailSelector'; +import { OptionalBoolean } from '../../forms/OptionalBoolean'; +import { OptionalNumberField } from '../../forms/OptionalNumberField'; +import { RequiredBoolean } from '../../forms/RequiredBoolean'; +import { TimesOfDayList } from '../../forms/TimesOfDayList'; +import { errorAlert, PolicyEditorLink, sourceQueryStringParams, toAlgorithmOption } from '../../utils/uiutil'; import { LabelColumn } from './LabelColumn'; import { ValueColumn } from './ValueColumn'; import { WideValueColumn } from './WideValueColumn'; diff --git a/src/PolicyEditor/SectionHeaderRow.jsx b/src/components/policy-editor/SectionHeaderRow.jsx similarity index 100% rename from src/PolicyEditor/SectionHeaderRow.jsx rename to src/components/policy-editor/SectionHeaderRow.jsx diff --git a/src/PolicyEditor/UpcomingSnapshotTimes.jsx b/src/components/policy-editor/UpcomingSnapshotTimes.jsx similarity index 100% rename from src/PolicyEditor/UpcomingSnapshotTimes.jsx rename to src/components/policy-editor/UpcomingSnapshotTimes.jsx diff --git a/src/PolicyEditor/ValueColumn.jsx b/src/components/policy-editor/ValueColumn.jsx similarity index 100% rename from src/PolicyEditor/ValueColumn.jsx rename to src/components/policy-editor/ValueColumn.jsx diff --git a/src/PolicyEditor/WideValueColumn.jsx b/src/components/policy-editor/WideValueColumn.jsx similarity index 100% rename from src/PolicyEditor/WideValueColumn.jsx rename to src/components/policy-editor/WideValueColumn.jsx diff --git a/src/forms/index.jsx b/src/forms/index.jsx index 010fb00..ec5c418 100644 --- a/src/forms/index.jsx +++ b/src/forms/index.jsx @@ -1,4 +1,4 @@ -import { getDeepStateProperty, setDeepStateProperty } from '../deepstate.js'; +import { getDeepStateProperty, setDeepStateProperty } from '../utils/deepstate'; export function validateRequiredFields(component, fields) { let updateState = {}; diff --git a/src/pages/Policies.jsx b/src/pages/Policies.jsx index 922f1a6..9f7ff37 100644 --- a/src/pages/Policies.jsx +++ b/src/pages/Policies.jsx @@ -10,8 +10,8 @@ import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { Link } from 'react-router-dom'; import { handleChange } from '../forms'; -import MyTable from '../Table'; -import { CLIEquivalent, compare, DirectorySelector, isAbsolutePath, ownerName, policyEditorURL, redirect } from '../uiutil'; +import KopiaTable from '../utils/KopiaTable'; +import { CLIEquivalent, compare, DirectorySelector, isAbsolutePath, ownerName, policyEditorURL, redirect } from '../utils/uiutil'; const applicablePolicies = "Applicable Policies" const localPolicies = "Local Path Policies" @@ -288,7 +288,7 @@ export class Policies extends Component { {policies.length > 0 ?

Found {policies.length} policies matching criteria.

- +
: ((this.state.selectedOwner === localPolicies && this.state.policyPath) ?

No policy found for directory {this.state.policyPath}. Click Set Policy to define it.

:

No policies found.

)} diff --git a/src/pages/Policy.jsx b/src/pages/Policy.jsx index 86b29e6..e759e78 100644 --- a/src/pages/Policy.jsx +++ b/src/pages/Policy.jsx @@ -1,8 +1,8 @@ import React, { Component, createRef } from 'react'; import Col from 'react-bootstrap/esm/Col'; import Row from 'react-bootstrap/esm/Row'; -import { PolicyEditor } from '../PolicyEditor'; -import { CLIEquivalent, GoBackButton, parseQuery, PolicyTypeName } from '../uiutil'; +import { PolicyEditor } from '../components/policy-editor/PolicyEditor'; +import { CLIEquivalent, GoBackButton, parseQuery, PolicyTypeName } from '../utils/uiutil'; export class Policy extends Component { constructor() { diff --git a/src/pages/Repository.jsx b/src/pages/Repository.jsx index 017c0ca..5e646cb 100644 --- a/src/pages/Repository.jsx +++ b/src/pages/Repository.jsx @@ -9,7 +9,7 @@ import InputGroup from 'react-bootstrap/InputGroup'; import Spinner from 'react-bootstrap/Spinner'; import { handleChange } from '../forms'; import { SetupRepository } from '../components/SetupRepository'; -import { cancelTask, CLIEquivalent } from '../uiutil'; +import { cancelTask, CLIEquivalent } from '../utils/uiutil'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faCheck, faChevronCircleDown, faChevronCircleUp, faWindowClose } from '@fortawesome/free-solid-svg-icons'; import { Logs } from '../components/Logs'; diff --git a/src/pages/SnapshotCreate.jsx b/src/pages/SnapshotCreate.jsx index e064098..7a85f1b 100644 --- a/src/pages/SnapshotCreate.jsx +++ b/src/pages/SnapshotCreate.jsx @@ -5,9 +5,9 @@ import Col from 'react-bootstrap/Col'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { handleChange } from '../forms'; -import { PolicyEditor } from '../PolicyEditor'; +import { PolicyEditor } from '../components/policy-editor/PolicyEditor'; import { SnapshotEstimation } from '../components/SnapshotEstimation'; -import { CLIEquivalent, DirectorySelector, errorAlert, GoBackButton, redirect } from '../uiutil'; +import { CLIEquivalent, DirectorySelector, errorAlert, GoBackButton, redirect } from '../utils/uiutil'; export class SnapshotCreate extends Component { constructor() { diff --git a/src/pages/SnapshotDirectory.jsx b/src/pages/SnapshotDirectory.jsx index a33c6a8..a51b3f1 100644 --- a/src/pages/SnapshotDirectory.jsx +++ b/src/pages/SnapshotDirectory.jsx @@ -7,7 +7,7 @@ import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import Spinner from 'react-bootstrap/Spinner'; import { DirectoryItems } from "../components/DirectoryItems"; -import { CLIEquivalent } from '../uiutil'; +import { CLIEquivalent } from '../utils/uiutil'; import { DirectoryBreadcrumbs } from "../components/DirectoryBreadcrumbs"; export class SnapshotDirectory extends Component { diff --git a/src/pages/SnapshotHistory.jsx b/src/pages/SnapshotHistory.jsx index 3b8cf0c..cf6324f 100644 --- a/src/pages/SnapshotHistory.jsx +++ b/src/pages/SnapshotHistory.jsx @@ -7,8 +7,8 @@ import Button from 'react-bootstrap/Button'; import Col from 'react-bootstrap/Col'; import Spinner from 'react-bootstrap/Spinner'; import { Link } from "react-router-dom"; -import MyTable from '../Table'; -import { CLIEquivalent, compare, errorAlert, GoBackButton, objectLink, parseQuery, redirect, rfc3339TimestampForDisplay, sizeWithFailures, sourceQueryStringParams } from '../uiutil'; +import KopiaTable from '../utils/KopiaTable'; +import { CLIEquivalent, compare, errorAlert, GoBackButton, objectLink, parseQuery, redirect, rfc3339TimestampForDisplay, sizeWithFailures, sourceQueryStringParams } from '../utils/uiutil'; import { faSync, faThumbtack } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import Modal from 'react-bootstrap/Modal'; @@ -429,7 +429,7 @@ export class SnapshotHistory extends Component { } - + diff --git a/src/pages/SnapshotRestore.jsx b/src/pages/SnapshotRestore.jsx index 34e80fa..1041fea 100644 --- a/src/pages/SnapshotRestore.jsx +++ b/src/pages/SnapshotRestore.jsx @@ -9,7 +9,7 @@ import { handleChange, validateRequiredFields } from '../forms'; import { RequiredBoolean } from '../forms/RequiredBoolean'; import { RequiredField } from '../forms/RequiredField'; import { RequiredNumberField } from '../forms/RequiredNumberField'; -import { errorAlert, GoBackButton } from '../uiutil'; +import { errorAlert, GoBackButton } from '../utils/uiutil'; export class SnapshotRestore extends Component { constructor(props) { diff --git a/src/pages/Snapshots.jsx b/src/pages/Snapshots.jsx index bff3504..de4de36 100644 --- a/src/pages/Snapshots.jsx +++ b/src/pages/Snapshots.jsx @@ -11,8 +11,8 @@ import Row from 'react-bootstrap/Row'; import Spinner from 'react-bootstrap/Spinner'; import { Link } from 'react-router-dom'; import { handleChange } from '../forms'; -import MyTable from '../Table'; -import { CLIEquivalent, compare, errorAlert, ownerName, policyEditorURL, redirect, sizeDisplayName, sizeWithFailures, sourceQueryStringParams } from '../uiutil'; +import KopiaTable from '../utils/KopiaTable'; +import { CLIEquivalent, compare, errorAlert, ownerName, policyEditorURL, redirect, sizeDisplayName, sizeWithFailures, sourceQueryStringParams } from '../utils/uiutil'; import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; const localSnapshots = "Local Snapshots" @@ -323,7 +323,7 @@ export class Snapshots extends Component { - + ; } diff --git a/src/pages/Task.jsx b/src/pages/Task.jsx index 4f02cce..df4bbf9 100644 --- a/src/pages/Task.jsx +++ b/src/pages/Task.jsx @@ -11,7 +11,7 @@ import Row from 'react-bootstrap/Row'; import Table from 'react-bootstrap/Table'; import Spinner from 'react-bootstrap/Spinner'; import { Logs } from '../components/Logs'; -import { cancelTask, formatDuration, GoBackButton, redirect, sizeDisplayName } from '../uiutil'; +import { cancelTask, formatDuration, GoBackButton, redirect, sizeDisplayName } from '../utils/uiutil'; import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; export class Task extends Component { diff --git a/src/pages/Tasks.jsx b/src/pages/Tasks.jsx index 618cc49..427df65 100644 --- a/src/pages/Tasks.jsx +++ b/src/pages/Tasks.jsx @@ -11,8 +11,8 @@ import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { Link } from 'react-router-dom'; import { handleChange } from '../forms'; -import MyTable from '../Table'; -import { redirect, taskStatusSymbol } from '../uiutil'; +import KopiaTable from '../utils/KopiaTable'; +import { redirect, taskStatusSymbol } from '../utils/uiutil'; export class Tasks extends Component { constructor() { @@ -160,7 +160,7 @@ export class Tasks extends Component { {!items.length ? A list of tasks will appear here when you create snapshots, restore, run maintenance, etc. - : } + : } diff --git a/src/Table.jsx b/src/utils/KopiaTable.jsx similarity index 96% rename from src/Table.jsx rename to src/utils/KopiaTable.jsx index 93e6c2f..0ce6574 100644 --- a/src/Table.jsx +++ b/src/utils/KopiaTable.jsx @@ -3,7 +3,7 @@ import Dropdown from 'react-bootstrap/Dropdown'; import Pagination from 'react-bootstrap/Pagination'; import Table from 'react-bootstrap/Table'; import { usePagination, useSortBy, useTable } from 'react-table'; -import { PAGE_SIZES, UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { PAGE_SIZES, UIPreferencesContext } from '../contexts/UIPreferencesContext'; function paginationItems(count, active, gotoPage) { let items = []; @@ -46,7 +46,7 @@ function paginationItems(count, active, gotoPage) { return items; } -export default function MyTable({ columns, data }) { +export default function KopiaTable({ columns, data }) { const { pageSize, setPageSize } = useContext(UIPreferencesContext); const { diff --git a/src/deepstate.js b/src/utils/deepstate.js similarity index 100% rename from src/deepstate.js rename to src/utils/deepstate.js diff --git a/src/setupProxy.js b/src/utils/setupProxy.js similarity index 95% rename from src/setupProxy.js rename to src/utils/setupProxy.js index 3c170f2..f4ab648 100644 --- a/src/setupProxy.js +++ b/src/utils/setupProxy.js @@ -1,11 +1,11 @@ -const { createProxyMiddleware } = require('http-proxy-middleware'); - -module.exports = function(app) { - app.use( - '/api', - createProxyMiddleware({ - target: 'http://127.0.0.1:51515', - changeOrigin: true, - }) - ); +const { createProxyMiddleware } = require('http-proxy-middleware'); + +module.exports = function(app) { + app.use( + '/api', + createProxyMiddleware({ + target: 'http://127.0.0.1:51515', + changeOrigin: true, + }) + ); }; \ No newline at end of file diff --git a/src/uiutil.jsx b/src/utils/uiutil.jsx similarity index 100% rename from src/uiutil.jsx rename to src/utils/uiutil.jsx From 89631c5aa2ce901c0da0b1020f7b31772a912aba Mon Sep 17 00:00:00 2001 From: lupusA Date: Thu, 2 Nov 2023 21:46:41 +0100 Subject: [PATCH 05/13] Move to new folder structure --- package-lock.json | 641 ++++++++++++++++++ package.json | 2 + src/App.jsx | 49 +- src/{ => components}/DirectoryBreadcrumbs.jsx | 0 src/{ => components}/DirectoryItems.jsx | 6 +- src/{TaskLogs.jsx => components/Logs.jsx} | 6 +- src/{ => components}/SetupRepository.jsx | 50 +- .../SetupRepositoryAzure.jsx} | 8 +- .../SetupRepositoryB2.jsx} | 8 +- .../SetupRepositoryFilesystem.jsx} | 6 +- .../SetupRepositoryGCS.jsx} | 8 +- .../SetupRepositoryRclone.jsx} | 8 +- .../SetupRepositoryS3.jsx} | 10 +- .../SetupRepositorySFTP.jsx} | 12 +- .../SetupRepositoryServer.jsx} | 8 +- .../SetupRepositoryToken.jsx} | 6 +- .../SetupRepositoryWebDAV.jsx} | 8 +- .../SnapshotEstimation.jsx} | 12 +- src/{PoliciesTable.jsx => pages/Policies.jsx} | 8 +- .../Policy.jsx} | 6 +- .../Preferences.jsx} | 6 +- src/{RepoStatus.jsx => pages/Repository.jsx} | 16 +- .../SnapshotCreate.jsx} | 12 +- .../SnapshotDirectory.jsx} | 8 +- .../SnapshotHistory.jsx} | 10 +- .../SnapshotRestore.jsx} | 12 +- src/{SourcesTable.jsx => pages/Snapshots.jsx} | 12 +- src/{TaskDetails.jsx => pages/Task.jsx} | 12 +- src/{TasksTable.jsx => pages/Tasks.jsx} | 8 +- src/test/test.js | 7 + src/tests/SetupRepository.test.jsx | 2 +- ...test.jsx => SetupRepositoryAzure.test.jsx} | 4 +- ...jsx => SetupRepositoryFilesystem.test.jsx} | 4 +- ...S.test.jsx => SetupRepositoryGCS.test.jsx} | 4 +- ...S3.test.jsx => SetupRepositoryS3.test.jsx} | 4 +- ....test.jsx => SetupRepositorySFTP.test.jsx} | 4 +- ...test.jsx => SetupRepositoryToken.test.jsx} | 4 +- ...est.jsx => SetupRepositoryWebDAV.test.jsx} | 4 +- 38 files changed, 825 insertions(+), 170 deletions(-) rename src/{ => components}/DirectoryBreadcrumbs.jsx (100%) rename src/{ => components}/DirectoryItems.jsx (93%) rename src/{TaskLogs.jsx => components/Logs.jsx} (96%) rename src/{ => components}/SetupRepository.jsx (94%) rename src/{SetupAzure.jsx => components/SetupRepositoryAzure.jsx} (85%) rename src/{SetupB2.jsx => components/SetupRepositoryB2.jsx} (81%) rename src/{SetupFilesystem.jsx => components/SetupRepositoryFilesystem.jsx} (76%) rename src/{SetupGCS.jsx => components/SetupRepositoryGCS.jsx} (81%) rename src/{SetupRclone.jsx => components/SetupRepositoryRclone.jsx} (76%) rename src/{SetupS3.jsx => components/SetupRepositoryS3.jsx} (85%) rename src/{SetupSFTP.jsx => components/SetupRepositorySFTP.jsx} (92%) rename src/{SetupKopiaServer.jsx => components/SetupRepositoryServer.jsx} (77%) rename src/{SetupToken.jsx => components/SetupRepositoryToken.jsx} (75%) rename src/{SetupWebDAV.jsx => components/SetupRepositoryWebDAV.jsx} (77%) rename src/{EstimateResults.jsx => components/SnapshotEstimation.jsx} (91%) rename src/{PoliciesTable.jsx => pages/Policies.jsx} (98%) rename src/{PolicyEditorPage.jsx => pages/Policy.jsx} (89%) rename src/{PreferencesView.jsx => pages/Preferences.jsx} (92%) rename src/{RepoStatus.jsx => pages/Repository.jsx} (96%) rename src/{NewSnapshot.jsx => pages/SnapshotCreate.jsx} (94%) rename src/{DirectoryObject.jsx => pages/SnapshotDirectory.jsx} (95%) rename src/{SnapshotsTable.jsx => pages/SnapshotHistory.jsx} (98%) rename src/{BeginRestore.jsx => pages/SnapshotRestore.jsx} (94%) rename src/{SourcesTable.jsx => pages/Snapshots.jsx} (97%) rename src/{TaskDetails.jsx => pages/Task.jsx} (95%) rename src/{TasksTable.jsx => pages/Tasks.jsx} (97%) create mode 100644 src/test/test.js rename src/tests/{SetupAzure.test.jsx => SetupRepositoryAzure.test.jsx} (88%) rename src/tests/{SetupFilesystem.test.jsx => SetupRepositoryFilesystem.test.jsx} (74%) rename src/tests/{SetupGCS.test.jsx => SetupRepositoryGCS.test.jsx} (86%) rename src/tests/{SetupS3.test.jsx => SetupRepositoryS3.test.jsx} (92%) rename src/tests/{SetupSFTP.test.jsx => SetupRepositorySFTP.test.jsx} (94%) rename src/tests/{SetupToken.test.jsx => SetupRepositoryToken.test.jsx} (76%) rename src/tests/{SetupWebDAV.test.jsx => SetupRepositoryWebDAV.test.jsx} (83%) diff --git a/package-lock.json b/package-lock.json index 1dfc77c..b8356f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,8 @@ "@types/react-dom": "^18.2.8", "axios": "^1.4.0", "axios-mock-adapter": "^1.21.5", + "chai": "^4.3.10", + "mocha": "^10.2.0", "react-scripts": "5.0.1", "typescript": "^4.8.4", "web-vitals": "^3.1.0" @@ -5493,6 +5495,15 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -5676,6 +5687,15 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -6188,6 +6208,12 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "node_modules/browserslist": { "version": "4.20.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", @@ -6342,6 +6368,24 @@ "node": ">=4" } }, + "node_modules/chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -6376,6 +6420,18 @@ "node": ">=6" } }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, "node_modules/check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -7295,6 +7351,18 @@ } } }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -7317,6 +7385,18 @@ } } }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -7481,6 +7561,15 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -8954,6 +9043,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -9230,6 +9328,15 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", @@ -10259,6 +10366,18 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -13579,6 +13698,22 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -13590,6 +13725,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -13895,6 +14039,188 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -14426,6 +14752,15 @@ "node": ">=8" } }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -20241,6 +20576,12 @@ "workbox-core": "6.5.3" } }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -20372,6 +20713,30 @@ "node": ">=12" } }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -24462,6 +24827,12 @@ "dev": true, "requires": {} }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -24591,6 +24962,12 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -24994,6 +25371,12 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "browserslist": { "version": "4.20.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", @@ -25095,6 +25478,21 @@ "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true }, + "chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -25117,6 +25515,15 @@ "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", "dev": true }, + "check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } + }, "check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -25795,6 +26202,12 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, "decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -25810,6 +26223,15 @@ "peer": true, "requires": {} }, + "deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -25932,6 +26354,12 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, "diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -27078,6 +27506,12 @@ "path-exists": "^4.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -27264,6 +27698,12 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true + }, "get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", @@ -27998,6 +28438,12 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -30730,6 +31176,16 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -30738,6 +31194,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "requires": { + "get-func-name": "^2.0.1" + } + }, "lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -30969,6 +31434,150 @@ "minimist": "^1.2.6" } }, + "mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + } + } + }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -31359,6 +31968,12 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -35674,6 +36289,12 @@ "workbox-core": "6.5.3" } }, + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -35770,6 +36391,26 @@ "optional": true, "peer": true }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 8067fb5..7f9f43f 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,8 @@ "@types/react-dom": "^18.2.8", "axios": "^1.4.0", "axios-mock-adapter": "^1.21.5", + "chai": "^4.3.10", + "mocha": "^10.2.0", "react-scripts": "5.0.1", "typescript": "^4.8.4", "web-vitals": "^3.1.0" diff --git a/src/App.jsx b/src/App.jsx index c8b5c46..701b44b 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -5,20 +5,25 @@ import axios from 'axios'; import { React, Component } from 'react'; import { Navbar, Nav, Container } from 'react-bootstrap'; import { BrowserRouter as Router, NavLink, Redirect, Route, Switch } from 'react-router-dom'; -import { BeginRestore } from './BeginRestore'; -import { DirectoryObject } from "./DirectoryObject"; -import { PoliciesTable } from "./PoliciesTable"; -import { RepoStatus } from "./RepoStatus"; -import { SnapshotsTable } from "./SnapshotsTable"; -import { SourcesTable } from "./SourcesTable"; -import { TaskDetails } from './TaskDetails'; -import { TasksTable } from './TasksTable'; -import { NewSnapshot } from './NewSnapshot'; -import { PolicyEditorPage } from './PolicyEditorPage'; -import { PreferencesView } from './PreferencesView'; + +import { SnapshotDirectory } from "./pages/SnapshotDirectory"; + +import { Policy } from './pages/Policy'; +import { Preferences } from './pages/Preferences'; +import { Policies } from "./pages/Policies"; +import { Repository } from "./pages/Repository"; +import { Task } from './pages/Task'; +import { Tasks } from './pages/Tasks'; +import { Snapshots } from "./pages/Snapshots"; + +import { SnapshotCreate } from './pages/SnapshotCreate'; +import { SnapshotHistory } from "./pages/SnapshotHistory"; +import { SnapshotRestore } from './pages/SnapshotRestore'; + import { AppContext } from './contexts/AppContext'; import { UIPreferenceProvider } from './contexts/UIPreferencesContext'; + export default class App extends Component { constructor() { super(); @@ -123,17 +128,17 @@ export default class App extends Component { - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/DirectoryBreadcrumbs.jsx b/src/components/DirectoryBreadcrumbs.jsx similarity index 100% rename from src/DirectoryBreadcrumbs.jsx rename to src/components/DirectoryBreadcrumbs.jsx diff --git a/src/DirectoryItems.jsx b/src/components/DirectoryItems.jsx similarity index 93% rename from src/DirectoryItems.jsx rename to src/components/DirectoryItems.jsx index 8fc2ce8..e368f57 100644 --- a/src/DirectoryItems.jsx +++ b/src/components/DirectoryItems.jsx @@ -1,8 +1,8 @@ import React, { Component } from 'react'; import { Link } from "react-router-dom"; -import MyTable from './Table'; -import { objectLink, rfc3339TimestampForDisplay, sizeWithFailures } from './uiutil'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import MyTable from '../Table'; +import { objectLink, rfc3339TimestampForDisplay, sizeWithFailures } from '../uiutil'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; function objectName(name, typeID) { if (typeID === "d") { diff --git a/src/TaskLogs.jsx b/src/components/Logs.jsx similarity index 96% rename from src/TaskLogs.jsx rename to src/components/Logs.jsx index d2c43f4..10f1fa4 100644 --- a/src/TaskLogs.jsx +++ b/src/components/Logs.jsx @@ -1,10 +1,10 @@ import axios from 'axios'; import React, { Component } from 'react'; import Table from 'react-bootstrap/Table'; -import { handleChange } from './forms'; -import { redirect } from './uiutil'; +import { handleChange } from '../forms'; +import { redirect } from '../uiutil'; -export class TaskLogs extends Component { +export class Logs extends Component { constructor() { super(); this.state = { diff --git a/src/SetupRepository.jsx b/src/components/SetupRepository.jsx similarity index 94% rename from src/SetupRepository.jsx rename to src/components/SetupRepository.jsx index d172d72..7a62bae 100644 --- a/src/SetupRepository.jsx +++ b/src/components/SetupRepository.jsx @@ -8,33 +8,33 @@ import Collapse from 'react-bootstrap/Collapse'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import Spinner from 'react-bootstrap/Spinner'; -import { AppContext } from './contexts/AppContext'; -import { handleChange, validateRequiredFields } from './forms'; -import { RequiredBoolean } from './forms/RequiredBoolean'; -import { RequiredField } from './forms/RequiredField'; -import { SetupAzure } from './SetupAzure'; -import { SetupB2 } from "./SetupB2"; -import { SetupFilesystem } from './SetupFilesystem'; -import { SetupGCS } from './SetupGCS'; -import { SetupKopiaServer } from './SetupKopiaServer'; -import { SetupRclone } from './SetupRclone'; -import { SetupS3 } from './SetupS3'; -import { SetupSFTP } from './SetupSFTP'; -import { SetupToken } from './SetupToken'; -import { SetupWebDAV } from './SetupWebDAV'; -import { toAlgorithmOption } from './uiutil'; +import { AppContext } from '../contexts/AppContext'; +import { handleChange, validateRequiredFields } from '../forms'; +import { RequiredBoolean } from '../forms/RequiredBoolean'; +import { RequiredField } from '../forms/RequiredField'; +import { SetupRepositoryAzure } from './SetupRepositoryAzure'; +import { SetupRepositoryB2 } from "./SetupRepositoryB2"; +import { SetupRepositoryFilesystem } from './SetupRepositoryFilesystem'; +import { SetupRepositoryGCS } from './SetupRepositoryGCS'; +import { SetupRepositoryServer } from './SetupRepositoryServer'; +import { SetupRepositoryRclone } from './SetupRepositoryRclone'; +import { SetupRepositoryS3 } from './SetupRepositoryS3'; +import { SetupRepositorySFTP } from './SetupRepositorySFTP'; +import { SetupRepositoryToken } from './SetupRepositoryToken'; +import { SetupRepositoryWebDAV } from './SetupRepositoryWebDAV'; +import { toAlgorithmOption } from '../uiutil'; const supportedProviders = [ - { provider: "filesystem", description: "Local Directory or NAS", component: SetupFilesystem }, - { provider: "gcs", description: "Google Cloud Storage", component: SetupGCS }, - { provider: "s3", description: "Amazon S3 or Compatible Storage", component: SetupS3 }, - { provider: "b2", description: "Backblaze B2", component: SetupB2 }, - { provider: "azureBlob", description: "Azure Blob Storage", component: SetupAzure }, - { provider: "sftp", description: "SFTP Server", component: SetupSFTP }, - { provider: "rclone", description: "Rclone Remote", component: SetupRclone }, - { provider: "webdav", description: "WebDAV Server", component: SetupWebDAV }, - { provider: "_server", description: "Kopia Repository Server", component: SetupKopiaServer }, - { provider: "_token", description: "Use Repository Token", component: SetupToken }, + { provider: "filesystem", description: "Local Directory or NAS", component: SetupRepositoryFilesystem }, + { provider: "gcs", description: "Google Cloud Storage", component: SetupRepositoryGCS }, + { provider: "s3", description: "Amazon S3 or Compatible Storage", component: SetupRepositoryS3 }, + { provider: "b2", description: "Backblaze B2", component: SetupRepositoryB2 }, + { provider: "azureBlob", description: "Azure Blob Storage", component: SetupRepositoryAzure }, + { provider: "sftp", description: "SFTP Server", component: SetupRepositorySFTP }, + { provider: "rclone", description: "Rclone Remote", component: SetupRepositoryRclone }, + { provider: "webdav", description: "WebDAV Server", component: SetupRepositoryWebDAV }, + { provider: "_server", description: "Kopia Repository Server", component: SetupRepositoryServer }, + { provider: "_token", description: "Use Repository Token", component: SetupRepositoryToken }, ]; export class SetupRepository extends Component { diff --git a/src/SetupAzure.jsx b/src/components/SetupRepositoryAzure.jsx similarity index 85% rename from src/SetupAzure.jsx rename to src/components/SetupRepositoryAzure.jsx index f1b50d0..b32e22c 100644 --- a/src/SetupAzure.jsx +++ b/src/components/SetupRepositoryAzure.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupAzure extends Component { +export class SetupRepositoryAzure extends Component { constructor(props) { super(); diff --git a/src/SetupB2.jsx b/src/components/SetupRepositoryB2.jsx similarity index 81% rename from src/SetupB2.jsx rename to src/components/SetupRepositoryB2.jsx index f62c744..73fffd1 100644 --- a/src/SetupB2.jsx +++ b/src/components/SetupRepositoryB2.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { RequiredField } from './forms/RequiredField'; -import { OptionalField } from './forms/OptionalField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { RequiredField } from '../forms/RequiredField'; +import { OptionalField } from '../forms/OptionalField'; -export class SetupB2 extends Component { +export class SetupRepositoryB2 extends Component { constructor(props) { super(); diff --git a/src/SetupFilesystem.jsx b/src/components/SetupRepositoryFilesystem.jsx similarity index 76% rename from src/SetupFilesystem.jsx rename to src/components/SetupRepositoryFilesystem.jsx index 97a471f..f5915ae 100644 --- a/src/SetupFilesystem.jsx +++ b/src/components/SetupRepositoryFilesystem.jsx @@ -1,9 +1,9 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupFilesystem extends Component { +export class SetupRepositoryFilesystem extends Component { constructor(props) { super(); diff --git a/src/SetupGCS.jsx b/src/components/SetupRepositoryGCS.jsx similarity index 81% rename from src/SetupGCS.jsx rename to src/components/SetupRepositoryGCS.jsx index c308c33..cb303e9 100644 --- a/src/SetupGCS.jsx +++ b/src/components/SetupRepositoryGCS.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupGCS extends Component { +export class SetupRepositoryGCS extends Component { constructor(props) { super(); diff --git a/src/SetupRclone.jsx b/src/components/SetupRepositoryRclone.jsx similarity index 76% rename from src/SetupRclone.jsx rename to src/components/SetupRepositoryRclone.jsx index a7d9d36..5a59e43 100644 --- a/src/SetupRclone.jsx +++ b/src/components/SetupRepositoryRclone.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupRclone extends Component { +export class SetupRepositoryRclone extends Component { constructor(props) { super(); diff --git a/src/SetupS3.jsx b/src/components/SetupRepositoryS3.jsx similarity index 85% rename from src/SetupS3.jsx rename to src/components/SetupRepositoryS3.jsx index d22e377..d05da1d 100644 --- a/src/SetupS3.jsx +++ b/src/components/SetupRepositoryS3.jsx @@ -1,11 +1,11 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredBoolean } from './forms/RequiredBoolean'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredBoolean } from '../forms/RequiredBoolean'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupS3 extends Component { +export class SetupRepositoryS3 extends Component { constructor(props) { super(); diff --git a/src/SetupSFTP.jsx b/src/components/SetupRepositorySFTP.jsx similarity index 92% rename from src/SetupSFTP.jsx rename to src/components/SetupRepositorySFTP.jsx index a93272f..3f9a58b 100644 --- a/src/SetupSFTP.jsx +++ b/src/components/SetupRepositorySFTP.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields, stateProperty } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { OptionalNumberField } from './forms/OptionalNumberField'; -import { RequiredBoolean } from './forms/RequiredBoolean'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields, stateProperty } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { OptionalNumberField } from '../forms/OptionalNumberField'; +import { RequiredBoolean } from '../forms/RequiredBoolean'; +import { RequiredField } from '../forms/RequiredField'; function hasExactlyOneOf(component, names) { let count = 0; @@ -18,7 +18,7 @@ function hasExactlyOneOf(component, names) { return count === 1; } -export class SetupSFTP extends Component { +export class SetupRepositorySFTP extends Component { constructor(props) { super(); diff --git a/src/SetupKopiaServer.jsx b/src/components/SetupRepositoryServer.jsx similarity index 77% rename from src/SetupKopiaServer.jsx rename to src/components/SetupRepositoryServer.jsx index e60ca1e..1bf7ab7 100644 --- a/src/SetupKopiaServer.jsx +++ b/src/components/SetupRepositoryServer.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupKopiaServer extends Component { +export class SetupRepositoryServer extends Component { constructor(props) { super(); diff --git a/src/SetupToken.jsx b/src/components/SetupRepositoryToken.jsx similarity index 75% rename from src/SetupToken.jsx rename to src/components/SetupRepositoryToken.jsx index 95e528c..b767a35 100644 --- a/src/SetupToken.jsx +++ b/src/components/SetupRepositoryToken.jsx @@ -1,9 +1,9 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupToken extends Component { +export class SetupRepositoryToken extends Component { constructor(props) { super(); diff --git a/src/SetupWebDAV.jsx b/src/components/SetupRepositoryWebDAV.jsx similarity index 77% rename from src/SetupWebDAV.jsx rename to src/components/SetupRepositoryWebDAV.jsx index fdceca5..5106763 100644 --- a/src/SetupWebDAV.jsx +++ b/src/components/SetupRepositoryWebDAV.jsx @@ -1,10 +1,10 @@ import React, { Component } from 'react'; import Row from 'react-bootstrap/Row'; -import { handleChange, validateRequiredFields } from './forms'; -import { OptionalField } from './forms/OptionalField'; -import { RequiredField } from './forms/RequiredField'; +import { handleChange, validateRequiredFields } from '../forms'; +import { OptionalField } from '../forms/OptionalField'; +import { RequiredField } from '../forms/RequiredField'; -export class SetupWebDAV extends Component { +export class SetupRepositoryWebDAV extends Component { constructor(props) { super(); diff --git a/src/EstimateResults.jsx b/src/components/SnapshotEstimation.jsx similarity index 91% rename from src/EstimateResults.jsx rename to src/components/SnapshotEstimation.jsx index de128d3..8a0489f 100644 --- a/src/EstimateResults.jsx +++ b/src/components/SnapshotEstimation.jsx @@ -6,11 +6,11 @@ import React, { Component } from 'react'; import Button from 'react-bootstrap/Button'; import Spinner from 'react-bootstrap/esm/Spinner'; import Form from 'react-bootstrap/Form'; -import { TaskLogs } from './TaskLogs'; -import { cancelTask, redirect, sizeDisplayName } from './uiutil'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { Logs } from './Logs'; +import { cancelTask, redirect, sizeDisplayName } from '../uiutil'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; -export class EstimateResults extends Component { +export class SnapshotEstimation extends Component { constructor() { super(); this.state = { @@ -110,10 +110,10 @@ export class EstimateResults extends Component { } {this.state.showLog ? <> - + : } ; } } -EstimateResults.contextType = UIPreferencesContext \ No newline at end of file +SnapshotEstimation.contextType = UIPreferencesContext \ No newline at end of file diff --git a/src/PoliciesTable.jsx b/src/pages/Policies.jsx similarity index 98% rename from src/PoliciesTable.jsx rename to src/pages/Policies.jsx index 970a124..922f1a6 100644 --- a/src/PoliciesTable.jsx +++ b/src/pages/Policies.jsx @@ -9,9 +9,9 @@ import Dropdown from 'react-bootstrap/Dropdown'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { Link } from 'react-router-dom'; -import { handleChange } from './forms'; -import MyTable from './Table'; -import { CLIEquivalent, compare, DirectorySelector, isAbsolutePath, ownerName, policyEditorURL, redirect } from './uiutil'; +import { handleChange } from '../forms'; +import MyTable from '../Table'; +import { CLIEquivalent, compare, DirectorySelector, isAbsolutePath, ownerName, policyEditorURL, redirect } from '../uiutil'; const applicablePolicies = "Applicable Policies" const localPolicies = "Local Path Policies" @@ -20,7 +20,7 @@ const globalPolicy = "Global Policy" const perUserPolicies = "Per-User Policies" const perHostPolicies = "Per-Host Policies" -export class PoliciesTable extends Component { +export class Policies extends Component { constructor() { super(); this.state = { diff --git a/src/PolicyEditorPage.jsx b/src/pages/Policy.jsx similarity index 89% rename from src/PolicyEditorPage.jsx rename to src/pages/Policy.jsx index 206712e..86b29e6 100644 --- a/src/PolicyEditorPage.jsx +++ b/src/pages/Policy.jsx @@ -1,10 +1,10 @@ import React, { Component, createRef } from 'react'; import Col from 'react-bootstrap/esm/Col'; import Row from 'react-bootstrap/esm/Row'; -import { PolicyEditor } from './PolicyEditor'; -import { CLIEquivalent, GoBackButton, parseQuery, PolicyTypeName } from './uiutil'; +import { PolicyEditor } from '../PolicyEditor'; +import { CLIEquivalent, GoBackButton, parseQuery, PolicyTypeName } from '../uiutil'; -export class PolicyEditorPage extends Component { +export class Policy extends Component { constructor() { super(); diff --git a/src/PreferencesView.jsx b/src/pages/Preferences.jsx similarity index 92% rename from src/PreferencesView.jsx rename to src/pages/Preferences.jsx index 833212d..f8ec8c6 100644 --- a/src/PreferencesView.jsx +++ b/src/pages/Preferences.jsx @@ -1,7 +1,7 @@ import { Component } from 'react'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; -export class PreferencesView extends Component { +export class Preferences extends Component { render() { const { pageSize, theme, bytesStringBase2, setByteStringBase, setTheme } = this.context; return <> @@ -36,4 +36,4 @@ export class PreferencesView extends Component { } } -PreferencesView.contextType = UIPreferencesContext +Preferences.contextType = UIPreferencesContext diff --git a/src/RepoStatus.jsx b/src/pages/Repository.jsx similarity index 96% rename from src/RepoStatus.jsx rename to src/pages/Repository.jsx index c1d9265..017c0ca 100644 --- a/src/RepoStatus.jsx +++ b/src/pages/Repository.jsx @@ -7,15 +7,15 @@ import Row from 'react-bootstrap/Row'; import Form from 'react-bootstrap/Form'; import InputGroup from 'react-bootstrap/InputGroup'; import Spinner from 'react-bootstrap/Spinner'; -import { handleChange } from './forms'; -import { SetupRepository } from './SetupRepository'; -import { cancelTask, CLIEquivalent } from './uiutil'; +import { handleChange } from '../forms'; +import { SetupRepository } from '../components/SetupRepository'; +import { cancelTask, CLIEquivalent } from '../uiutil'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faCheck, faChevronCircleDown, faChevronCircleUp, faWindowClose } from '@fortawesome/free-solid-svg-icons'; -import { TaskLogs } from './TaskLogs'; -import { AppContext } from './contexts/AppContext'; +import { Logs } from '../components/Logs'; +import { AppContext } from '../contexts/AppContext'; -export class RepoStatus extends Component { +export class Repository extends Component { constructor() { super(); @@ -130,7 +130,7 @@ export class RepoStatus extends Component { return <>

 Initializing Repository...

{this.state.showLog ? <> - + : }
@@ -243,4 +243,4 @@ export class RepoStatus extends Component { } } -RepoStatus.contextType = AppContext; +Repository.contextType = AppContext; diff --git a/src/NewSnapshot.jsx b/src/pages/SnapshotCreate.jsx similarity index 94% rename from src/NewSnapshot.jsx rename to src/pages/SnapshotCreate.jsx index 1a62fd9..e064098 100644 --- a/src/NewSnapshot.jsx +++ b/src/pages/SnapshotCreate.jsx @@ -4,12 +4,12 @@ import Button from 'react-bootstrap/Button'; import Col from 'react-bootstrap/Col'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; -import { handleChange } from './forms'; -import { PolicyEditor } from './PolicyEditor'; -import { EstimateResults } from './EstimateResults'; -import { CLIEquivalent, DirectorySelector, errorAlert, GoBackButton, redirect } from './uiutil'; +import { handleChange } from '../forms'; +import { PolicyEditor } from '../PolicyEditor'; +import { SnapshotEstimation } from '../components/SnapshotEstimation'; +import { CLIEquivalent, DirectorySelector, errorAlert, GoBackButton, redirect } from '../uiutil'; -export class NewSnapshot extends Component { +export class SnapshotCreate extends Component { constructor() { super(); this.state = { @@ -179,7 +179,7 @@ export class NewSnapshot extends Component { {this.state.estimateTaskID && this.state.estimateTaskVisible && - + }
diff --git a/src/DirectoryObject.jsx b/src/pages/SnapshotDirectory.jsx similarity index 95% rename from src/DirectoryObject.jsx rename to src/pages/SnapshotDirectory.jsx index 96512e7..a33c6a8 100644 --- a/src/DirectoryObject.jsx +++ b/src/pages/SnapshotDirectory.jsx @@ -6,11 +6,11 @@ import Button from 'react-bootstrap/Button'; import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import Spinner from 'react-bootstrap/Spinner'; -import { DirectoryItems } from "./DirectoryItems"; -import { CLIEquivalent } from './uiutil'; -import { DirectoryBreadcrumbs } from "./DirectoryBreadcrumbs"; +import { DirectoryItems } from "../components/DirectoryItems"; +import { CLIEquivalent } from '../uiutil'; +import { DirectoryBreadcrumbs } from "../components/DirectoryBreadcrumbs"; -export class DirectoryObject extends Component { +export class SnapshotDirectory extends Component { constructor() { super(); diff --git a/src/SnapshotsTable.jsx b/src/pages/SnapshotHistory.jsx similarity index 98% rename from src/SnapshotsTable.jsx rename to src/pages/SnapshotHistory.jsx index 18e3184..3b8cf0c 100644 --- a/src/SnapshotsTable.jsx +++ b/src/pages/SnapshotHistory.jsx @@ -7,13 +7,13 @@ import Button from 'react-bootstrap/Button'; import Col from 'react-bootstrap/Col'; import Spinner from 'react-bootstrap/Spinner'; import { Link } from "react-router-dom"; -import MyTable from './Table'; -import { CLIEquivalent, compare, errorAlert, GoBackButton, objectLink, parseQuery, redirect, rfc3339TimestampForDisplay, sizeWithFailures, sourceQueryStringParams } from './uiutil'; +import MyTable from '../Table'; +import { CLIEquivalent, compare, errorAlert, GoBackButton, objectLink, parseQuery, redirect, rfc3339TimestampForDisplay, sizeWithFailures, sourceQueryStringParams } from '../uiutil'; import { faSync, faThumbtack } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import Modal from 'react-bootstrap/Modal'; import { faFileAlt } from '@fortawesome/free-regular-svg-icons'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; function pillVariant(tag) { if (tag.startsWith("latest-")) { @@ -34,7 +34,7 @@ function pillVariant(tag) { return "primary"; } -export class SnapshotsTable extends Component { +export class SnapshotHistory extends Component { constructor() { super(); this.state = { @@ -510,4 +510,4 @@ export class SnapshotsTable extends Component { ; } } -SnapshotsTable.contextType = UIPreferencesContext +SnapshotHistory.contextType = UIPreferencesContext diff --git a/src/BeginRestore.jsx b/src/pages/SnapshotRestore.jsx similarity index 94% rename from src/BeginRestore.jsx rename to src/pages/SnapshotRestore.jsx index d1d3140..34e80fa 100644 --- a/src/BeginRestore.jsx +++ b/src/pages/SnapshotRestore.jsx @@ -5,13 +5,13 @@ import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import { Link } from "react-router-dom"; -import { handleChange, validateRequiredFields } from './forms'; -import { RequiredBoolean } from './forms/RequiredBoolean'; -import { RequiredField } from './forms/RequiredField'; -import { RequiredNumberField } from './forms/RequiredNumberField'; -import { errorAlert, GoBackButton } from './uiutil'; +import { handleChange, validateRequiredFields } from '../forms'; +import { RequiredBoolean } from '../forms/RequiredBoolean'; +import { RequiredField } from '../forms/RequiredField'; +import { RequiredNumberField } from '../forms/RequiredNumberField'; +import { errorAlert, GoBackButton } from '../uiutil'; -export class BeginRestore extends Component { +export class SnapshotRestore extends Component { constructor(props) { super(); diff --git a/src/SourcesTable.jsx b/src/pages/Snapshots.jsx similarity index 97% rename from src/SourcesTable.jsx rename to src/pages/Snapshots.jsx index db3ebe0..bff3504 100644 --- a/src/SourcesTable.jsx +++ b/src/pages/Snapshots.jsx @@ -10,15 +10,15 @@ import Dropdown from 'react-bootstrap/Dropdown'; import Row from 'react-bootstrap/Row'; import Spinner from 'react-bootstrap/Spinner'; import { Link } from 'react-router-dom'; -import { handleChange } from './forms'; -import MyTable from './Table'; -import { CLIEquivalent, compare, errorAlert, ownerName, policyEditorURL, redirect, sizeDisplayName, sizeWithFailures, sourceQueryStringParams } from './uiutil'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { handleChange } from '../forms'; +import MyTable from '../Table'; +import { CLIEquivalent, compare, errorAlert, ownerName, policyEditorURL, redirect, sizeDisplayName, sizeWithFailures, sourceQueryStringParams } from '../uiutil'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; const localSnapshots = "Local Snapshots" const allSnapshots = "All Snapshots" -export class SourcesTable extends Component { +export class Snapshots extends Component { constructor() { super(); this.state = { @@ -328,4 +328,4 @@ export class SourcesTable extends Component { ; } } -SourcesTable.contextType = UIPreferencesContext +Snapshots.contextType = UIPreferencesContext diff --git a/src/TaskDetails.jsx b/src/pages/Task.jsx similarity index 95% rename from src/TaskDetails.jsx rename to src/pages/Task.jsx index 3c458c3..4f02cce 100644 --- a/src/TaskDetails.jsx +++ b/src/pages/Task.jsx @@ -10,11 +10,11 @@ import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import Table from 'react-bootstrap/Table'; import Spinner from 'react-bootstrap/Spinner'; -import { TaskLogs } from './TaskLogs'; -import { cancelTask, formatDuration, GoBackButton, redirect, sizeDisplayName } from './uiutil'; -import { UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { Logs } from '../components/Logs'; +import { cancelTask, formatDuration, GoBackButton, redirect, sizeDisplayName } from '../uiutil'; +import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; -export class TaskDetails extends Component { +export class Task extends Component { constructor() { super(); this.state = { @@ -216,11 +216,11 @@ export class TaskDetails extends Component { Logs - + ; } } -TaskDetails.contextType = UIPreferencesContext \ No newline at end of file +Task.contextType = UIPreferencesContext \ No newline at end of file diff --git a/src/TasksTable.jsx b/src/pages/Tasks.jsx similarity index 97% rename from src/TasksTable.jsx rename to src/pages/Tasks.jsx index d4a9198..618cc49 100644 --- a/src/TasksTable.jsx +++ b/src/pages/Tasks.jsx @@ -10,11 +10,11 @@ import Dropdown from 'react-bootstrap/Dropdown'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { Link } from 'react-router-dom'; -import { handleChange } from './forms'; -import MyTable from './Table'; -import { redirect, taskStatusSymbol } from './uiutil'; +import { handleChange } from '../forms'; +import MyTable from '../Table'; +import { redirect, taskStatusSymbol } from '../uiutil'; -export class TasksTable extends Component { +export class Tasks extends Component { constructor() { super(); this.state = { diff --git a/src/test/test.js b/src/test/test.js new file mode 100644 index 0000000..6a676b4 --- /dev/null +++ b/src/test/test.js @@ -0,0 +1,7 @@ +const assert = require('chai').assert; + +describe("sum", function() { + it("adds numbers", function() { + assert.equal(sum(6, 3), 9); + }); +}); \ No newline at end of file diff --git a/src/tests/SetupRepository.test.jsx b/src/tests/SetupRepository.test.jsx index b462ea8..538c71b 100644 --- a/src/tests/SetupRepository.test.jsx +++ b/src/tests/SetupRepository.test.jsx @@ -1,6 +1,6 @@ import { findByTestId, render, waitFor, act } from '@testing-library/react'; import React from 'react'; -import { SetupRepository } from '../SetupRepository'; +import { SetupRepository } from '../components/SetupRepository'; import { setupAPIMock } from './api_mocks'; import { changeControlValue, simulateClick } from './testutils'; diff --git a/src/tests/SetupAzure.test.jsx b/src/tests/SetupRepositoryAzure.test.jsx similarity index 88% rename from src/tests/SetupAzure.test.jsx rename to src/tests/SetupRepositoryAzure.test.jsx index 3eb50ba..07b7714 100644 --- a/src/tests/SetupAzure.test.jsx +++ b/src/tests/SetupRepositoryAzure.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupAzure } from '../SetupAzure'; +import { SetupRepositoryAzure } from '../components/SetupRepositoryAzure'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupFilesystem.test.jsx b/src/tests/SetupRepositoryFilesystem.test.jsx similarity index 74% rename from src/tests/SetupFilesystem.test.jsx rename to src/tests/SetupRepositoryFilesystem.test.jsx index eae2a65..b71d29d 100644 --- a/src/tests/SetupFilesystem.test.jsx +++ b/src/tests/SetupRepositoryFilesystem.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupFilesystem } from '../SetupFilesystem'; +import { SetupRepositoryFilesystem } from '../components/SetupRepositoryFilesystem'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupGCS.test.jsx b/src/tests/SetupRepositoryGCS.test.jsx similarity index 86% rename from src/tests/SetupGCS.test.jsx rename to src/tests/SetupRepositoryGCS.test.jsx index 927b7d9..29977b9 100644 --- a/src/tests/SetupGCS.test.jsx +++ b/src/tests/SetupRepositoryGCS.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupGCS } from '../SetupGCS'; +import { SetupRepositoryGCS } from '../components/SetupRepositoryGCS'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupS3.test.jsx b/src/tests/SetupRepositoryS3.test.jsx similarity index 92% rename from src/tests/SetupS3.test.jsx rename to src/tests/SetupRepositoryS3.test.jsx index 8557b97..6de0a2a 100644 --- a/src/tests/SetupS3.test.jsx +++ b/src/tests/SetupRepositoryS3.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupS3 } from '../SetupS3'; +import { SetupRepositoryS3 } from '../components/SetupRepositoryS3'; import { changeControlValue, toggleCheckbox } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupSFTP.test.jsx b/src/tests/SetupRepositorySFTP.test.jsx similarity index 94% rename from src/tests/SetupSFTP.test.jsx rename to src/tests/SetupRepositorySFTP.test.jsx index 75a8a18..7427242 100644 --- a/src/tests/SetupSFTP.test.jsx +++ b/src/tests/SetupRepositorySFTP.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupSFTP } from '../SetupSFTP'; +import { SetupRepositorySFTP } from '../components/SetupRepositorySFTP'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupToken.test.jsx b/src/tests/SetupRepositoryToken.test.jsx similarity index 76% rename from src/tests/SetupToken.test.jsx rename to src/tests/SetupRepositoryToken.test.jsx index edefa90..2c23f3f 100644 --- a/src/tests/SetupToken.test.jsx +++ b/src/tests/SetupRepositoryToken.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupToken } from '../SetupToken'; +import { SetupRepositoryToken } from '../components/SetupRepositoryToken'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(()=>expect(ref.current.validate()).toBe(false)); // required diff --git a/src/tests/SetupWebDAV.test.jsx b/src/tests/SetupRepositoryWebDAV.test.jsx similarity index 83% rename from src/tests/SetupWebDAV.test.jsx rename to src/tests/SetupRepositoryWebDAV.test.jsx index 087efc5..aefd6fd 100644 --- a/src/tests/SetupWebDAV.test.jsx +++ b/src/tests/SetupRepositoryWebDAV.test.jsx @@ -1,11 +1,11 @@ import { render, act } from '@testing-library/react'; import React from 'react'; -import { SetupWebDAV } from '../SetupWebDAV'; +import { SetupRepositoryWebDAV } from '../components/SetupRepositoryWebDAV'; import { changeControlValue } from './testutils'; it('can set fields', async () => { let ref = React.createRef(); - const { getByTestId } = render() + const { getByTestId } = render() act(() => expect(ref.current.validate()).toBe(false)); From 01887ec01c823d6e5eb4a61820fdcefd4f759839 Mon Sep 17 00:00:00 2001 From: lupusA Date: Fri, 3 Nov 2023 16:36:21 +0100 Subject: [PATCH 06/13] Removed react-select dependency --- package-lock.json | 473 ++++++++++++---------------------------------- package.json | 1 - 2 files changed, 119 insertions(+), 355 deletions(-) diff --git a/package-lock.json b/package-lock.json index b8356f6..da33f2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,6 @@ "react-bootstrap": "^2.8.0", "react-dom": "^18.2.0", "react-router-dom": "^5.3.4", - "react-select": "^5.7.7", "react-table": "^7.8.0" }, "devDependencies": { @@ -61,6 +60,7 @@ "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, "dependencies": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" @@ -73,6 +73,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -84,6 +85,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -97,6 +99,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -104,12 +107,14 @@ "node_modules/@babel/code-frame/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -118,6 +123,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -126,6 +132,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -447,6 +454,7 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, @@ -564,6 +572,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -572,6 +581,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -618,6 +628,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -631,6 +642,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -642,6 +654,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -655,6 +668,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -662,12 +676,14 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -676,6 +692,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -684,6 +701,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -2143,6 +2161,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -2395,117 +2414,6 @@ "postcss-selector-parser": "^6.0.10" } }, - "node_modules/@emotion/babel-plugin": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", - "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.1.3" - } - }, - "node_modules/@emotion/babel-plugin/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@emotion/cache": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", - "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", - "dependencies": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.1", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" - } - }, - "node_modules/@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" - }, - "node_modules/@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" - }, - "node_modules/@emotion/react": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", - "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "hoist-non-react-statics": "^3.3.1" - }, - "peerDependencies": { - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", - "dependencies": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "node_modules/@emotion/sheet": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", - "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" - }, - "node_modules/@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" - }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -2571,19 +2479,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@floating-ui/core": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.5.tgz", - "integrity": "sha512-qrcbyfnRVziRlB6IYwjCopYhO7Vud750JlJyuljruIXcPxr22y8zdckcJGsuOdnQ639uVD1tTXddrcH3t3QYIQ==" - }, - "node_modules/@floating-ui/dom": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.5.tgz", - "integrity": "sha512-+sAUfpQ3Frz+VCbPCqj+cZzvEESy3fjSeT/pDWkYCWOBXYNNKZfuVsHuv8/JO2zze8+Eb/Q7a6hZVgzS81fLbQ==", - "dependencies": { - "@floating-ui/core": "^1.2.4" - } - }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz", @@ -4764,7 +4659,8 @@ "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, "node_modules/@types/prettier": { "version": "2.7.3", @@ -5898,6 +5794,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -6296,6 +6193,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -6815,6 +6713,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } @@ -6889,6 +6788,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -7851,6 +7751,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -7958,6 +7859,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -9022,11 +8924,6 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -9275,7 +9172,8 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -9536,6 +9434,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -9938,6 +9837,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -9953,6 +9853,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "engines": { "node": ">=4" } @@ -10050,7 +9951,8 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-bigint": { "version": "1.0.4", @@ -10131,6 +10033,7 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -13480,7 +13383,8 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema": { "version": "0.4.0", @@ -13622,7 +13526,8 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "node_modules/loader-runner": { "version": "4.3.0", @@ -13833,11 +13738,6 @@ "node": ">= 4.0.0" } }, - "node_modules/memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" - }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -14655,6 +14555,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -14666,6 +14567,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -14734,7 +14636,8 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-to-regexp": { "version": "1.8.0", @@ -14748,6 +14651,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "engines": { "node": ">=8" } @@ -17728,26 +17632,6 @@ "node": ">=10" } }, - "node_modules/react-select": { - "version": "5.7.7", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.7.tgz", - "integrity": "sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw==", - "dependencies": { - "@babel/runtime": "^7.12.0", - "@emotion/cache": "^11.4.0", - "@emotion/react": "^11.8.1", - "@floating-ui/dom": "^1.0.1", - "@types/react-transition-group": "^4.4.0", - "memoize-one": "^6.0.0", - "prop-types": "^15.6.0", - "react-transition-group": "^4.3.0", - "use-isomorphic-layout-effect": "^1.1.2" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-table": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", @@ -17995,6 +17879,7 @@ "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, "dependencies": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", @@ -18206,7 +18091,8 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -18924,11 +18810,6 @@ "postcss": "^8.2.15" } }, - "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18958,6 +18839,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -19349,6 +19231,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, "engines": { "node": ">=4" } @@ -19676,19 +19559,6 @@ "requires-port": "^1.0.0" } }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -20678,6 +20548,7 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, "engines": { "node": ">= 6" } @@ -20771,6 +20642,7 @@ "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, "requires": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" @@ -20780,6 +20652,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -20788,6 +20661,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -20798,6 +20672,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -20805,22 +20680,26 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -21065,6 +20944,7 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, "requires": { "@babel/types": "^7.16.7" } @@ -21154,12 +21034,14 @@ "@babel/helper-string-parser": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true }, "@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true }, "@babel/helper-validator-option": { "version": "7.16.7", @@ -21194,6 +21076,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -21204,6 +21087,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -21212,6 +21096,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -21222,6 +21107,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -21229,22 +21115,26 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -22227,6 +22117,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "requires": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -22363,106 +22254,6 @@ "dev": true, "requires": {} }, - "@emotion/babel-plugin": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", - "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.1.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "@emotion/cache": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", - "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", - "requires": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.1", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" - } - }, - "@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" - }, - "@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" - }, - "@emotion/react": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", - "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "hoist-non-react-statics": "^3.3.1" - } - }, - "@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", - "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "@emotion/sheet": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", - "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" - }, - "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "requires": {} - }, - "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" - }, "@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -22512,19 +22303,6 @@ } } }, - "@floating-ui/core": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.5.tgz", - "integrity": "sha512-qrcbyfnRVziRlB6IYwjCopYhO7Vud750JlJyuljruIXcPxr22y8zdckcJGsuOdnQ639uVD1tTXddrcH3t3QYIQ==" - }, - "@floating-ui/dom": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.5.tgz", - "integrity": "sha512-+sAUfpQ3Frz+VCbPCqj+cZzvEESy3fjSeT/pDWkYCWOBXYNNKZfuVsHuv8/JO2zze8+Eb/Q7a6hZVgzS81fLbQ==", - "requires": { - "@floating-ui/core": "^1.2.4" - } - }, "@fortawesome/fontawesome-common-types": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz", @@ -24248,7 +24026,8 @@ "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, "@types/prettier": { "version": "2.7.3", @@ -25118,6 +24897,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, "requires": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -25430,7 +25210,8 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, "camel-case": { "version": "4.1.2", @@ -25829,6 +25610,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -25885,6 +25667,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -26580,6 +26363,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -26671,7 +26455,8 @@ "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "escodegen": { "version": "2.1.0", @@ -27491,11 +27276,6 @@ "pkg-dir": "^4.1.0" } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -27660,7 +27440,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "function.prototype.name": { "version": "1.1.5", @@ -27854,6 +27635,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -28160,6 +27942,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -28168,7 +27951,8 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true } } }, @@ -28244,7 +28028,8 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "is-bigint": { "version": "1.0.4", @@ -28290,6 +28075,7 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, "requires": { "has": "^1.0.3" } @@ -31002,7 +30788,8 @@ "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "json-schema": { "version": "0.4.0", @@ -31112,7 +30899,8 @@ "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "loader-runner": { "version": "4.3.0", @@ -31283,11 +31071,6 @@ "fs-monkey": "1.0.3" } }, - "memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -31895,6 +31678,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "requires": { "callsites": "^3.0.0" } @@ -31903,6 +31687,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -31953,7 +31738,8 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "path-to-regexp": { "version": "1.8.0", @@ -31966,7 +31752,8 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pathval": { "version": "1.1.1", @@ -34070,22 +33857,6 @@ } } }, - "react-select": { - "version": "5.7.7", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.7.tgz", - "integrity": "sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw==", - "requires": { - "@babel/runtime": "^7.12.0", - "@emotion/cache": "^11.4.0", - "@emotion/react": "^11.8.1", - "@floating-ui/dom": "^1.0.1", - "@types/react-transition-group": "^4.4.0", - "memoize-one": "^6.0.0", - "prop-types": "^15.6.0", - "react-transition-group": "^4.3.0", - "use-isomorphic-layout-effect": "^1.1.2" - } - }, "react-table": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", @@ -34280,6 +34051,7 @@ "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, "requires": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", @@ -34419,7 +34191,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -34976,11 +34749,6 @@ "postcss-selector-parser": "^6.0.4" } }, - "stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -35003,7 +34771,8 @@ "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true }, "svg-parser": { "version": "2.0.4", @@ -35304,7 +35073,8 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true }, "to-regex-range": { "version": "5.0.1", @@ -35555,12 +35325,6 @@ "requires-port": "^1.0.0" } }, - "use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "requires": {} - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -36364,7 +36128,8 @@ "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true }, "yargs": { "version": "17.7.2", diff --git a/package.json b/package.json index 7f9f43f..aadb777 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "react-bootstrap": "^2.8.0", "react-dom": "^18.2.0", "react-router-dom": "^5.3.4", - "react-select": "^5.7.7", "react-table": "^7.8.0" }, "scripts": { From 1882405efb4275419b9b2b4c665cf2fde4adfe5f Mon Sep 17 00:00:00 2001 From: lupusA Date: Fri, 3 Nov 2023 17:58:00 +0100 Subject: [PATCH 07/13] Further moved to the new structure --- src/App.jsx | 7 +------ src/components/DirectoryItems.jsx | 6 +++--- src/components/Logs.jsx | 2 +- src/components/SetupRepository.jsx | 2 +- src/components/SnapshotEstimation.jsx | 2 +- .../policy-editor}/ActionRowMode.jsx | 2 +- .../policy-editor}/ActionRowScript.jsx | 2 +- .../policy-editor}/ActionRowTimeout.jsx | 2 +- .../policy-editor}/EffectiveBooleanValue.jsx | 2 +- .../policy-editor}/EffectiveListValue.jsx | 2 +- .../policy-editor}/EffectiveTextAreaValue.jsx | 2 +- .../EffectiveTimesOfDayValue.jsx | 4 ++-- .../policy-editor}/EffectiveValue.jsx | 2 +- .../policy-editor}/EffectiveValueColumn.jsx | 0 .../policy-editor}/LabelColumn.jsx | 0 .../policy-editor/PolicyEditor.jsx} | 16 +++++++-------- .../policy-editor}/SectionHeaderRow.jsx | 0 .../policy-editor}/UpcomingSnapshotTimes.jsx | 0 .../policy-editor}/ValueColumn.jsx | 0 .../policy-editor}/WideValueColumn.jsx | 0 src/forms/index.jsx | 2 +- src/pages/Policies.jsx | 6 +++--- src/pages/Policy.jsx | 4 ++-- src/pages/Repository.jsx | 2 +- src/pages/SnapshotCreate.jsx | 4 ++-- src/pages/SnapshotDirectory.jsx | 2 +- src/pages/SnapshotHistory.jsx | 6 +++--- src/pages/SnapshotRestore.jsx | 2 +- src/pages/Snapshots.jsx | 6 +++--- src/pages/Task.jsx | 2 +- src/pages/Tasks.jsx | 6 +++--- src/{Table.jsx => utils/KopiaTable.jsx} | 4 ++-- src/{ => utils}/deepstate.js | 0 src/{ => utils}/setupProxy.js | 20 +++++++++---------- src/{ => utils}/uiutil.jsx | 0 35 files changed, 57 insertions(+), 62 deletions(-) rename src/{PolicyEditor => components/policy-editor}/ActionRowMode.jsx (96%) rename src/{PolicyEditor => components/policy-editor}/ActionRowScript.jsx (87%) rename src/{PolicyEditor => components/policy-editor}/ActionRowTimeout.jsx (88%) rename src/{PolicyEditor => components/policy-editor}/EffectiveBooleanValue.jsx (92%) rename src/{PolicyEditor => components/policy-editor}/EffectiveListValue.jsx (93%) rename src/{PolicyEditor => components/policy-editor}/EffectiveTextAreaValue.jsx (93%) rename src/{PolicyEditor => components/policy-editor}/EffectiveTimesOfDayValue.jsx (83%) rename src/{PolicyEditor => components/policy-editor}/EffectiveValue.jsx (92%) rename src/{PolicyEditor => components/policy-editor}/EffectiveValueColumn.jsx (100%) rename src/{PolicyEditor => components/policy-editor}/LabelColumn.jsx (100%) rename src/{PolicyEditor/index.jsx => components/policy-editor/PolicyEditor.jsx} (98%) rename src/{PolicyEditor => components/policy-editor}/SectionHeaderRow.jsx (100%) rename src/{PolicyEditor => components/policy-editor}/UpcomingSnapshotTimes.jsx (100%) rename src/{PolicyEditor => components/policy-editor}/ValueColumn.jsx (100%) rename src/{PolicyEditor => components/policy-editor}/WideValueColumn.jsx (100%) rename src/{Table.jsx => utils/KopiaTable.jsx} (96%) rename src/{ => utils}/deepstate.js (100%) rename src/{ => utils}/setupProxy.js (95%) rename src/{ => utils}/uiutil.jsx (100%) diff --git a/src/App.jsx b/src/App.jsx index 701b44b..00c456a 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -5,9 +5,6 @@ import axios from 'axios'; import { React, Component } from 'react'; import { Navbar, Nav, Container } from 'react-bootstrap'; import { BrowserRouter as Router, NavLink, Redirect, Route, Switch } from 'react-router-dom'; - -import { SnapshotDirectory } from "./pages/SnapshotDirectory"; - import { Policy } from './pages/Policy'; import { Preferences } from './pages/Preferences'; import { Policies } from "./pages/Policies"; @@ -15,15 +12,13 @@ import { Repository } from "./pages/Repository"; import { Task } from './pages/Task'; import { Tasks } from './pages/Tasks'; import { Snapshots } from "./pages/Snapshots"; - import { SnapshotCreate } from './pages/SnapshotCreate'; +import { SnapshotDirectory } from "./pages/SnapshotDirectory"; import { SnapshotHistory } from "./pages/SnapshotHistory"; import { SnapshotRestore } from './pages/SnapshotRestore'; - import { AppContext } from './contexts/AppContext'; import { UIPreferenceProvider } from './contexts/UIPreferencesContext'; - export default class App extends Component { constructor() { super(); diff --git a/src/components/DirectoryItems.jsx b/src/components/DirectoryItems.jsx index e368f57..fac5eea 100644 --- a/src/components/DirectoryItems.jsx +++ b/src/components/DirectoryItems.jsx @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import { Link } from "react-router-dom"; -import MyTable from '../Table'; -import { objectLink, rfc3339TimestampForDisplay, sizeWithFailures } from '../uiutil'; +import KopiaTable from '../utils/KopiaTable'; +import { objectLink, rfc3339TimestampForDisplay, sizeWithFailures } from '../utils/uiutil'; import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; function objectName(name, typeID) { @@ -64,7 +64,7 @@ export class DirectoryItems extends Component { width: 100, }] - return ; + return ; } } DirectoryItems.contextType = UIPreferencesContext \ No newline at end of file diff --git a/src/components/Logs.jsx b/src/components/Logs.jsx index 10f1fa4..72c66e6 100644 --- a/src/components/Logs.jsx +++ b/src/components/Logs.jsx @@ -2,7 +2,7 @@ import axios from 'axios'; import React, { Component } from 'react'; import Table from 'react-bootstrap/Table'; import { handleChange } from '../forms'; -import { redirect } from '../uiutil'; +import { redirect } from '../utils/uiutil'; export class Logs extends Component { constructor() { diff --git a/src/components/SetupRepository.jsx b/src/components/SetupRepository.jsx index 7a62bae..485c153 100644 --- a/src/components/SetupRepository.jsx +++ b/src/components/SetupRepository.jsx @@ -22,7 +22,7 @@ import { SetupRepositoryS3 } from './SetupRepositoryS3'; import { SetupRepositorySFTP } from './SetupRepositorySFTP'; import { SetupRepositoryToken } from './SetupRepositoryToken'; import { SetupRepositoryWebDAV } from './SetupRepositoryWebDAV'; -import { toAlgorithmOption } from '../uiutil'; +import { toAlgorithmOption } from '../utils/uiutil'; const supportedProviders = [ { provider: "filesystem", description: "Local Directory or NAS", component: SetupRepositoryFilesystem }, diff --git a/src/components/SnapshotEstimation.jsx b/src/components/SnapshotEstimation.jsx index 8a0489f..86b07b7 100644 --- a/src/components/SnapshotEstimation.jsx +++ b/src/components/SnapshotEstimation.jsx @@ -7,7 +7,7 @@ import Button from 'react-bootstrap/Button'; import Spinner from 'react-bootstrap/esm/Spinner'; import Form from 'react-bootstrap/Form'; import { Logs } from './Logs'; -import { cancelTask, redirect, sizeDisplayName } from '../uiutil'; +import { cancelTask, redirect, sizeDisplayName } from '../utils/uiutil'; import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; export class SnapshotEstimation extends Component { diff --git a/src/PolicyEditor/ActionRowMode.jsx b/src/components/policy-editor/ActionRowMode.jsx similarity index 96% rename from src/PolicyEditor/ActionRowMode.jsx rename to src/components/policy-editor/ActionRowMode.jsx index fd955ef..43600de 100644 --- a/src/PolicyEditor/ActionRowMode.jsx +++ b/src/components/policy-editor/ActionRowMode.jsx @@ -1,7 +1,7 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; -import { stateProperty } from '../forms'; +import { stateProperty } from '../../forms'; import { LabelColumn } from './LabelColumn'; import { WideValueColumn } from './WideValueColumn'; import { EffectiveValue } from './EffectiveValue'; diff --git a/src/PolicyEditor/ActionRowScript.jsx b/src/components/policy-editor/ActionRowScript.jsx similarity index 87% rename from src/PolicyEditor/ActionRowScript.jsx rename to src/components/policy-editor/ActionRowScript.jsx index 37ddef9..50a7570 100644 --- a/src/PolicyEditor/ActionRowScript.jsx +++ b/src/components/policy-editor/ActionRowScript.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Row from 'react-bootstrap/Row'; -import { OptionalFieldNoLabel } from '../forms/OptionalFieldNoLabel'; +import { OptionalFieldNoLabel } from '../../forms/OptionalFieldNoLabel'; import { LabelColumn } from './LabelColumn'; import { WideValueColumn } from './WideValueColumn'; import { EffectiveValue } from './EffectiveValue'; diff --git a/src/PolicyEditor/ActionRowTimeout.jsx b/src/components/policy-editor/ActionRowTimeout.jsx similarity index 88% rename from src/PolicyEditor/ActionRowTimeout.jsx rename to src/components/policy-editor/ActionRowTimeout.jsx index cd2d0dc..fbbf341 100644 --- a/src/PolicyEditor/ActionRowTimeout.jsx +++ b/src/components/policy-editor/ActionRowTimeout.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Row from 'react-bootstrap/Row'; -import { OptionalNumberField } from '../forms/OptionalNumberField'; +import { OptionalNumberField } from '../../forms/OptionalNumberField'; import { LabelColumn } from './LabelColumn'; import { WideValueColumn } from './WideValueColumn'; import { EffectiveValue } from './EffectiveValue'; diff --git a/src/PolicyEditor/EffectiveBooleanValue.jsx b/src/components/policy-editor/EffectiveBooleanValue.jsx similarity index 92% rename from src/PolicyEditor/EffectiveBooleanValue.jsx rename to src/components/policy-editor/EffectiveBooleanValue.jsx index db82173..9781a3d 100644 --- a/src/PolicyEditor/EffectiveBooleanValue.jsx +++ b/src/components/policy-editor/EffectiveBooleanValue.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; -import { getDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty } from '../../utils/deepstate'; import { EffectiveValueColumn } from "./EffectiveValueColumn"; export function EffectiveBooleanValue(component, policyField) { diff --git a/src/PolicyEditor/EffectiveListValue.jsx b/src/components/policy-editor/EffectiveListValue.jsx similarity index 93% rename from src/PolicyEditor/EffectiveListValue.jsx rename to src/components/policy-editor/EffectiveListValue.jsx index 0a9cd70..8eb72a9 100644 --- a/src/PolicyEditor/EffectiveListValue.jsx +++ b/src/components/policy-editor/EffectiveListValue.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; -import { getDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty } from '../../utils/deepstate'; import { EffectiveValueColumn } from "./EffectiveValueColumn"; export function EffectiveListValue(component, policyField) { diff --git a/src/PolicyEditor/EffectiveTextAreaValue.jsx b/src/components/policy-editor/EffectiveTextAreaValue.jsx similarity index 93% rename from src/PolicyEditor/EffectiveTextAreaValue.jsx rename to src/components/policy-editor/EffectiveTextAreaValue.jsx index 1babef2..d98e5da 100644 --- a/src/PolicyEditor/EffectiveTextAreaValue.jsx +++ b/src/components/policy-editor/EffectiveTextAreaValue.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; -import { getDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty } from '../../utils/deepstate'; import { EffectiveValueColumn } from "./EffectiveValueColumn"; export function EffectiveTextAreaValue(component, policyField) { diff --git a/src/PolicyEditor/EffectiveTimesOfDayValue.jsx b/src/components/policy-editor/EffectiveTimesOfDayValue.jsx similarity index 83% rename from src/PolicyEditor/EffectiveTimesOfDayValue.jsx rename to src/components/policy-editor/EffectiveTimesOfDayValue.jsx index cef915a..5f4afe9 100644 --- a/src/PolicyEditor/EffectiveTimesOfDayValue.jsx +++ b/src/components/policy-editor/EffectiveTimesOfDayValue.jsx @@ -1,8 +1,8 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; -import { getDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty } from '../../utils/deepstate'; import { EffectiveValueColumn } from "./EffectiveValueColumn"; -import { TimesOfDayList } from '../forms/TimesOfDayList'; +import { TimesOfDayList } from '../../forms/TimesOfDayList'; export function EffectiveTimesOfDayValue(component, policyField) { return diff --git a/src/PolicyEditor/EffectiveValue.jsx b/src/components/policy-editor/EffectiveValue.jsx similarity index 92% rename from src/PolicyEditor/EffectiveValue.jsx rename to src/components/policy-editor/EffectiveValue.jsx index 2f62f1f..1f05345 100644 --- a/src/PolicyEditor/EffectiveValue.jsx +++ b/src/components/policy-editor/EffectiveValue.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Form from 'react-bootstrap/Form'; -import { getDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty } from '../../utils/deepstate'; import { EffectiveValueColumn } from "./EffectiveValueColumn"; export function EffectiveValue(component, policyField) { diff --git a/src/PolicyEditor/EffectiveValueColumn.jsx b/src/components/policy-editor/EffectiveValueColumn.jsx similarity index 100% rename from src/PolicyEditor/EffectiveValueColumn.jsx rename to src/components/policy-editor/EffectiveValueColumn.jsx diff --git a/src/PolicyEditor/LabelColumn.jsx b/src/components/policy-editor/LabelColumn.jsx similarity index 100% rename from src/PolicyEditor/LabelColumn.jsx rename to src/components/policy-editor/LabelColumn.jsx diff --git a/src/PolicyEditor/index.jsx b/src/components/policy-editor/PolicyEditor.jsx similarity index 98% rename from src/PolicyEditor/index.jsx rename to src/components/policy-editor/PolicyEditor.jsx index 75faaa7..b61554e 100644 --- a/src/PolicyEditor/index.jsx +++ b/src/components/policy-editor/PolicyEditor.jsx @@ -7,14 +7,14 @@ import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import Spinner from 'react-bootstrap/Spinner'; import Accordion from 'react-bootstrap/Accordion'; -import { handleChange, stateProperty, valueToNumber } from '../forms'; -import { StringList } from '../forms/StringList'; -import { LogDetailSelector } from '../forms/LogDetailSelector'; -import { OptionalBoolean } from '../forms/OptionalBoolean'; -import { OptionalNumberField } from '../forms/OptionalNumberField'; -import { RequiredBoolean } from '../forms/RequiredBoolean'; -import { TimesOfDayList } from '../forms/TimesOfDayList'; -import { errorAlert, PolicyEditorLink, sourceQueryStringParams, toAlgorithmOption } from '../uiutil'; +import { handleChange, stateProperty, valueToNumber } from '../../forms'; +import { StringList } from '../../forms/StringList'; +import { LogDetailSelector } from '../../forms/LogDetailSelector'; +import { OptionalBoolean } from '../../forms/OptionalBoolean'; +import { OptionalNumberField } from '../../forms/OptionalNumberField'; +import { RequiredBoolean } from '../../forms/RequiredBoolean'; +import { TimesOfDayList } from '../../forms/TimesOfDayList'; +import { errorAlert, PolicyEditorLink, sourceQueryStringParams, toAlgorithmOption } from '../../utils/uiutil'; import { LabelColumn } from './LabelColumn'; import { ValueColumn } from './ValueColumn'; import { WideValueColumn } from './WideValueColumn'; diff --git a/src/PolicyEditor/SectionHeaderRow.jsx b/src/components/policy-editor/SectionHeaderRow.jsx similarity index 100% rename from src/PolicyEditor/SectionHeaderRow.jsx rename to src/components/policy-editor/SectionHeaderRow.jsx diff --git a/src/PolicyEditor/UpcomingSnapshotTimes.jsx b/src/components/policy-editor/UpcomingSnapshotTimes.jsx similarity index 100% rename from src/PolicyEditor/UpcomingSnapshotTimes.jsx rename to src/components/policy-editor/UpcomingSnapshotTimes.jsx diff --git a/src/PolicyEditor/ValueColumn.jsx b/src/components/policy-editor/ValueColumn.jsx similarity index 100% rename from src/PolicyEditor/ValueColumn.jsx rename to src/components/policy-editor/ValueColumn.jsx diff --git a/src/PolicyEditor/WideValueColumn.jsx b/src/components/policy-editor/WideValueColumn.jsx similarity index 100% rename from src/PolicyEditor/WideValueColumn.jsx rename to src/components/policy-editor/WideValueColumn.jsx diff --git a/src/forms/index.jsx b/src/forms/index.jsx index 010fb00..ec5c418 100644 --- a/src/forms/index.jsx +++ b/src/forms/index.jsx @@ -1,4 +1,4 @@ -import { getDeepStateProperty, setDeepStateProperty } from '../deepstate.js'; +import { getDeepStateProperty, setDeepStateProperty } from '../utils/deepstate'; export function validateRequiredFields(component, fields) { let updateState = {}; diff --git a/src/pages/Policies.jsx b/src/pages/Policies.jsx index 922f1a6..9f7ff37 100644 --- a/src/pages/Policies.jsx +++ b/src/pages/Policies.jsx @@ -10,8 +10,8 @@ import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { Link } from 'react-router-dom'; import { handleChange } from '../forms'; -import MyTable from '../Table'; -import { CLIEquivalent, compare, DirectorySelector, isAbsolutePath, ownerName, policyEditorURL, redirect } from '../uiutil'; +import KopiaTable from '../utils/KopiaTable'; +import { CLIEquivalent, compare, DirectorySelector, isAbsolutePath, ownerName, policyEditorURL, redirect } from '../utils/uiutil'; const applicablePolicies = "Applicable Policies" const localPolicies = "Local Path Policies" @@ -288,7 +288,7 @@ export class Policies extends Component { {policies.length > 0 ?

Found {policies.length} policies matching criteria.

- +
: ((this.state.selectedOwner === localPolicies && this.state.policyPath) ?

No policy found for directory {this.state.policyPath}. Click Set Policy to define it.

:

No policies found.

)} diff --git a/src/pages/Policy.jsx b/src/pages/Policy.jsx index 86b29e6..e759e78 100644 --- a/src/pages/Policy.jsx +++ b/src/pages/Policy.jsx @@ -1,8 +1,8 @@ import React, { Component, createRef } from 'react'; import Col from 'react-bootstrap/esm/Col'; import Row from 'react-bootstrap/esm/Row'; -import { PolicyEditor } from '../PolicyEditor'; -import { CLIEquivalent, GoBackButton, parseQuery, PolicyTypeName } from '../uiutil'; +import { PolicyEditor } from '../components/policy-editor/PolicyEditor'; +import { CLIEquivalent, GoBackButton, parseQuery, PolicyTypeName } from '../utils/uiutil'; export class Policy extends Component { constructor() { diff --git a/src/pages/Repository.jsx b/src/pages/Repository.jsx index 017c0ca..5e646cb 100644 --- a/src/pages/Repository.jsx +++ b/src/pages/Repository.jsx @@ -9,7 +9,7 @@ import InputGroup from 'react-bootstrap/InputGroup'; import Spinner from 'react-bootstrap/Spinner'; import { handleChange } from '../forms'; import { SetupRepository } from '../components/SetupRepository'; -import { cancelTask, CLIEquivalent } from '../uiutil'; +import { cancelTask, CLIEquivalent } from '../utils/uiutil'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faCheck, faChevronCircleDown, faChevronCircleUp, faWindowClose } from '@fortawesome/free-solid-svg-icons'; import { Logs } from '../components/Logs'; diff --git a/src/pages/SnapshotCreate.jsx b/src/pages/SnapshotCreate.jsx index e064098..7a85f1b 100644 --- a/src/pages/SnapshotCreate.jsx +++ b/src/pages/SnapshotCreate.jsx @@ -5,9 +5,9 @@ import Col from 'react-bootstrap/Col'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { handleChange } from '../forms'; -import { PolicyEditor } from '../PolicyEditor'; +import { PolicyEditor } from '../components/policy-editor/PolicyEditor'; import { SnapshotEstimation } from '../components/SnapshotEstimation'; -import { CLIEquivalent, DirectorySelector, errorAlert, GoBackButton, redirect } from '../uiutil'; +import { CLIEquivalent, DirectorySelector, errorAlert, GoBackButton, redirect } from '../utils/uiutil'; export class SnapshotCreate extends Component { constructor() { diff --git a/src/pages/SnapshotDirectory.jsx b/src/pages/SnapshotDirectory.jsx index a33c6a8..a51b3f1 100644 --- a/src/pages/SnapshotDirectory.jsx +++ b/src/pages/SnapshotDirectory.jsx @@ -7,7 +7,7 @@ import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import Spinner from 'react-bootstrap/Spinner'; import { DirectoryItems } from "../components/DirectoryItems"; -import { CLIEquivalent } from '../uiutil'; +import { CLIEquivalent } from '../utils/uiutil'; import { DirectoryBreadcrumbs } from "../components/DirectoryBreadcrumbs"; export class SnapshotDirectory extends Component { diff --git a/src/pages/SnapshotHistory.jsx b/src/pages/SnapshotHistory.jsx index 3b8cf0c..cf6324f 100644 --- a/src/pages/SnapshotHistory.jsx +++ b/src/pages/SnapshotHistory.jsx @@ -7,8 +7,8 @@ import Button from 'react-bootstrap/Button'; import Col from 'react-bootstrap/Col'; import Spinner from 'react-bootstrap/Spinner'; import { Link } from "react-router-dom"; -import MyTable from '../Table'; -import { CLIEquivalent, compare, errorAlert, GoBackButton, objectLink, parseQuery, redirect, rfc3339TimestampForDisplay, sizeWithFailures, sourceQueryStringParams } from '../uiutil'; +import KopiaTable from '../utils/KopiaTable'; +import { CLIEquivalent, compare, errorAlert, GoBackButton, objectLink, parseQuery, redirect, rfc3339TimestampForDisplay, sizeWithFailures, sourceQueryStringParams } from '../utils/uiutil'; import { faSync, faThumbtack } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import Modal from 'react-bootstrap/Modal'; @@ -429,7 +429,7 @@ export class SnapshotHistory extends Component { } - + diff --git a/src/pages/SnapshotRestore.jsx b/src/pages/SnapshotRestore.jsx index 34e80fa..1041fea 100644 --- a/src/pages/SnapshotRestore.jsx +++ b/src/pages/SnapshotRestore.jsx @@ -9,7 +9,7 @@ import { handleChange, validateRequiredFields } from '../forms'; import { RequiredBoolean } from '../forms/RequiredBoolean'; import { RequiredField } from '../forms/RequiredField'; import { RequiredNumberField } from '../forms/RequiredNumberField'; -import { errorAlert, GoBackButton } from '../uiutil'; +import { errorAlert, GoBackButton } from '../utils/uiutil'; export class SnapshotRestore extends Component { constructor(props) { diff --git a/src/pages/Snapshots.jsx b/src/pages/Snapshots.jsx index bff3504..de4de36 100644 --- a/src/pages/Snapshots.jsx +++ b/src/pages/Snapshots.jsx @@ -11,8 +11,8 @@ import Row from 'react-bootstrap/Row'; import Spinner from 'react-bootstrap/Spinner'; import { Link } from 'react-router-dom'; import { handleChange } from '../forms'; -import MyTable from '../Table'; -import { CLIEquivalent, compare, errorAlert, ownerName, policyEditorURL, redirect, sizeDisplayName, sizeWithFailures, sourceQueryStringParams } from '../uiutil'; +import KopiaTable from '../utils/KopiaTable'; +import { CLIEquivalent, compare, errorAlert, ownerName, policyEditorURL, redirect, sizeDisplayName, sizeWithFailures, sourceQueryStringParams } from '../utils/uiutil'; import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; const localSnapshots = "Local Snapshots" @@ -323,7 +323,7 @@ export class Snapshots extends Component { - + ; } diff --git a/src/pages/Task.jsx b/src/pages/Task.jsx index 4f02cce..df4bbf9 100644 --- a/src/pages/Task.jsx +++ b/src/pages/Task.jsx @@ -11,7 +11,7 @@ import Row from 'react-bootstrap/Row'; import Table from 'react-bootstrap/Table'; import Spinner from 'react-bootstrap/Spinner'; import { Logs } from '../components/Logs'; -import { cancelTask, formatDuration, GoBackButton, redirect, sizeDisplayName } from '../uiutil'; +import { cancelTask, formatDuration, GoBackButton, redirect, sizeDisplayName } from '../utils/uiutil'; import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; export class Task extends Component { diff --git a/src/pages/Tasks.jsx b/src/pages/Tasks.jsx index 618cc49..427df65 100644 --- a/src/pages/Tasks.jsx +++ b/src/pages/Tasks.jsx @@ -11,8 +11,8 @@ import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { Link } from 'react-router-dom'; import { handleChange } from '../forms'; -import MyTable from '../Table'; -import { redirect, taskStatusSymbol } from '../uiutil'; +import KopiaTable from '../utils/KopiaTable'; +import { redirect, taskStatusSymbol } from '../utils/uiutil'; export class Tasks extends Component { constructor() { @@ -160,7 +160,7 @@ export class Tasks extends Component { {!items.length ? A list of tasks will appear here when you create snapshots, restore, run maintenance, etc. - : } + : } diff --git a/src/Table.jsx b/src/utils/KopiaTable.jsx similarity index 96% rename from src/Table.jsx rename to src/utils/KopiaTable.jsx index 93e6c2f..0ce6574 100644 --- a/src/Table.jsx +++ b/src/utils/KopiaTable.jsx @@ -3,7 +3,7 @@ import Dropdown from 'react-bootstrap/Dropdown'; import Pagination from 'react-bootstrap/Pagination'; import Table from 'react-bootstrap/Table'; import { usePagination, useSortBy, useTable } from 'react-table'; -import { PAGE_SIZES, UIPreferencesContext } from './contexts/UIPreferencesContext'; +import { PAGE_SIZES, UIPreferencesContext } from '../contexts/UIPreferencesContext'; function paginationItems(count, active, gotoPage) { let items = []; @@ -46,7 +46,7 @@ function paginationItems(count, active, gotoPage) { return items; } -export default function MyTable({ columns, data }) { +export default function KopiaTable({ columns, data }) { const { pageSize, setPageSize } = useContext(UIPreferencesContext); const { diff --git a/src/deepstate.js b/src/utils/deepstate.js similarity index 100% rename from src/deepstate.js rename to src/utils/deepstate.js diff --git a/src/setupProxy.js b/src/utils/setupProxy.js similarity index 95% rename from src/setupProxy.js rename to src/utils/setupProxy.js index 3c170f2..f4ab648 100644 --- a/src/setupProxy.js +++ b/src/utils/setupProxy.js @@ -1,11 +1,11 @@ -const { createProxyMiddleware } = require('http-proxy-middleware'); - -module.exports = function(app) { - app.use( - '/api', - createProxyMiddleware({ - target: 'http://127.0.0.1:51515', - changeOrigin: true, - }) - ); +const { createProxyMiddleware } = require('http-proxy-middleware'); + +module.exports = function(app) { + app.use( + '/api', + createProxyMiddleware({ + target: 'http://127.0.0.1:51515', + changeOrigin: true, + }) + ); }; \ No newline at end of file diff --git a/src/uiutil.jsx b/src/utils/uiutil.jsx similarity index 100% rename from src/uiutil.jsx rename to src/utils/uiutil.jsx From ba679076be3e7d5708ada62dc5612f9ed6cd5716 Mon Sep 17 00:00:00 2001 From: lupusA Date: Fri, 3 Nov 2023 19:09:55 +0100 Subject: [PATCH 08/13] Fixed tests --- src/tests/deepstate.test.js | 2 +- src/tests/uiutil.test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/deepstate.test.js b/src/tests/deepstate.test.js index 1baf49a..9b14204 100644 --- a/src/tests/deepstate.test.js +++ b/src/tests/deepstate.test.js @@ -1,4 +1,4 @@ -import { getDeepStateProperty, setDeepStateProperty } from '../deepstate'; +import { getDeepStateProperty, setDeepStateProperty } from '../utils/deepstate'; it('can get fields', async () => { const comp = { diff --git a/src/tests/uiutil.test.js b/src/tests/uiutil.test.js index bb2816e..7cc0192 100644 --- a/src/tests/uiutil.test.js +++ b/src/tests/uiutil.test.js @@ -1,4 +1,4 @@ -import { formatMilliseconds, separateMillisecondsIntoMagnitudes, formatMagnitudesUsingMultipleUnits } from "../uiutil"; +import { formatMilliseconds, separateMillisecondsIntoMagnitudes, formatMagnitudesUsingMultipleUnits } from "../utils/uiutil"; describe("formatMilliseconds", () => { it("uses 'XXs' format by default", () => { From 9815a2da94e12a43bfa1eeb40f75c7b0494d573a Mon Sep 17 00:00:00 2001 From: lupusA Date: Fri, 3 Nov 2023 19:11:32 +0100 Subject: [PATCH 09/13] Fixed another test --- src/tests/PolicyEditor.test.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/PolicyEditor.test.jsx b/src/tests/PolicyEditor.test.jsx index b7a6f4a..3c6ab38 100644 --- a/src/tests/PolicyEditor.test.jsx +++ b/src/tests/PolicyEditor.test.jsx @@ -1,6 +1,6 @@ import { render, waitFor, logDOM } from '@testing-library/react'; import React from 'react'; -import { PolicyEditor } from '../PolicyEditor/.'; +import { PolicyEditor } from '../components/policy-editor/PolicyEditor/PolicyEditor'; import { MemoryRouter } from 'react-router-dom'; import { setupAPIMock } from '../tests/api_mocks'; import moment from 'moment'; From e900160e2b1b2221c07c2eeef276cf669bf520a4 Mon Sep 17 00:00:00 2001 From: lupusA Date: Fri, 3 Nov 2023 19:16:19 +0100 Subject: [PATCH 10/13] Fix for PolicyEditor.test --- src/tests/PolicyEditor.test.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/PolicyEditor.test.jsx b/src/tests/PolicyEditor.test.jsx index 3c6ab38..4ea2825 100644 --- a/src/tests/PolicyEditor.test.jsx +++ b/src/tests/PolicyEditor.test.jsx @@ -1,6 +1,6 @@ import { render, waitFor, logDOM } from '@testing-library/react'; import React from 'react'; -import { PolicyEditor } from '../components/policy-editor/PolicyEditor/PolicyEditor'; +import { PolicyEditor } from '../components/policy-editor/PolicyEditor'; import { MemoryRouter } from 'react-router-dom'; import { setupAPIMock } from '../tests/api_mocks'; import moment from 'moment'; From ffc74ca40ffe3fe41018cee1f4a43be3fb642f0f Mon Sep 17 00:00:00 2001 From: lupusA Date: Fri, 3 Nov 2023 19:42:49 +0100 Subject: [PATCH 11/13] Removed mocha and chai dependency --- package-lock.json | 641 ----------------------------- package.json | 2 - src/test/test.js | 7 - src/tests/PolicyEditor.test.jsx | 13 +- src/tests/SetupRepository.test.jsx | 14 +- 5 files changed, 18 insertions(+), 659 deletions(-) delete mode 100644 src/test/test.js diff --git a/package-lock.json b/package-lock.json index da33f2c..33c4326 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,8 +30,6 @@ "@types/react-dom": "^18.2.8", "axios": "^1.4.0", "axios-mock-adapter": "^1.21.5", - "chai": "^4.3.10", - "mocha": "^10.2.0", "react-scripts": "5.0.1", "typescript": "^4.8.4", "web-vitals": "^3.1.0" @@ -5391,15 +5389,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -5583,15 +5572,6 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -6105,12 +6085,6 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, "node_modules/browserslist": { "version": "4.20.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", @@ -6266,24 +6240,6 @@ "node": ">=4" } }, - "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -6318,18 +6274,6 @@ "node": ">=6" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, "node_modules/check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -7251,18 +7195,6 @@ } } }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -7285,18 +7217,6 @@ } } }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -7461,15 +7381,6 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -8940,15 +8851,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -9226,15 +9128,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", @@ -10269,18 +10162,6 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -13603,22 +13484,6 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -13630,15 +13495,6 @@ "loose-envify": "cli.js" } }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -13939,188 +13795,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -14656,15 +14330,6 @@ "node": ">=8" } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -20446,12 +20111,6 @@ "workbox-core": "6.5.3" } }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -20584,30 +20243,6 @@ "node": ">=12" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -24606,12 +24241,6 @@ "dev": true, "requires": {} }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -24741,12 +24370,6 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -25151,12 +24774,6 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, "browserslist": { "version": "4.20.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", @@ -25259,21 +24876,6 @@ "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true }, - "chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -25296,15 +24898,6 @@ "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", "dev": true }, - "check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "requires": { - "get-func-name": "^2.0.2" - } - }, "check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -25985,12 +25578,6 @@ "ms": "2.1.2" } }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, "decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -26006,15 +25593,6 @@ "peer": true, "requires": {} }, - "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -26137,12 +25715,6 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, "diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -27286,12 +26858,6 @@ "path-exists": "^4.0.0" } }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -27479,12 +27045,6 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true - }, "get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", @@ -28224,12 +27784,6 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -30964,16 +30518,6 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -30982,15 +30526,6 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.1" - } - }, "lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -31217,150 +30752,6 @@ "minimist": "^1.2.6" } }, - "mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } - } - }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -31755,12 +31146,6 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -36053,12 +35438,6 @@ "workbox-core": "6.5.3" } }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -36156,26 +35535,6 @@ "optional": true, "peer": true }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } - } - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index aadb777..517fe3d 100644 --- a/package.json +++ b/package.json @@ -45,8 +45,6 @@ "@types/react-dom": "^18.2.8", "axios": "^1.4.0", "axios-mock-adapter": "^1.21.5", - "chai": "^4.3.10", - "mocha": "^10.2.0", "react-scripts": "5.0.1", "typescript": "^4.8.4", "web-vitals": "^3.1.0" diff --git a/src/test/test.js b/src/test/test.js deleted file mode 100644 index 6a676b4..0000000 --- a/src/test/test.js +++ /dev/null @@ -1,7 +0,0 @@ -const assert = require('chai').assert; - -describe("sum", function() { - it("adds numbers", function() { - assert.equal(sum(6, 3), 9); - }); -}); \ No newline at end of file diff --git a/src/tests/PolicyEditor.test.jsx b/src/tests/PolicyEditor.test.jsx index 4ea2825..c27e461 100644 --- a/src/tests/PolicyEditor.test.jsx +++ b/src/tests/PolicyEditor.test.jsx @@ -6,10 +6,17 @@ import { setupAPIMock } from '../tests/api_mocks'; import moment from 'moment'; import { changeControlValue, simulateClick } from '../tests/testutils'; -it('e2e', async () => { - let ref = React.createRef(); - let serverMock = setupAPIMock(); +// Mockup for the server +let serverMock; +let ref; + +// Initialize the server mock before each test +beforeEach(() => { + serverMock = setupAPIMock(); + ref = React.createRef(); +}); +it('e2e', async () => { const ust1 = "2021-01-01T12:00:00Z"; const ust2 = "2021-01-01T13:00:00Z"; diff --git a/src/tests/SetupRepository.test.jsx b/src/tests/SetupRepository.test.jsx index 538c71b..376711e 100644 --- a/src/tests/SetupRepository.test.jsx +++ b/src/tests/SetupRepository.test.jsx @@ -4,9 +4,15 @@ import { SetupRepository } from '../components/SetupRepository'; import { setupAPIMock } from './api_mocks'; import { changeControlValue, simulateClick } from './testutils'; -it('can create new repository when not initialized', async () => { - let serverMock = setupAPIMock(); +// Mockup for the server +let serverMock; + +// Initialize the server mock before each test +beforeEach(() => { + serverMock = setupAPIMock(); +}); +it('can create new repository when not initialized', async () => { // first attempt to connect says - NOT_INITIALIZED serverMock.onPost('/api/v1/repo/exists', { storage: { type: 'filesystem', config: { path: 'some-path' } }, @@ -43,8 +49,6 @@ it('can create new repository when not initialized', async () => { }); it('can connect to existing repository when already initialized', async () => { - let serverMock = setupAPIMock(); - // first attempt to connect is immediately successful. serverMock.onPost('/api/v1/repo/exists', { storage: { type: 'filesystem', config: { path: 'some-path' } }, @@ -61,8 +65,6 @@ it('can connect to existing repository when already initialized', async () => { }); it('can connect to existing repository using token', async () => { - let serverMock = setupAPIMock(); - serverMock.onPost('/api/v1/repo/connect', { token: "my-token", }).reply(200, {}); From e3e5d7d1da25d770c326e31b633ba01ca7e40a95 Mon Sep 17 00:00:00 2001 From: lupusA Date: Wed, 8 Nov 2023 06:19:12 +0100 Subject: [PATCH 12/13] Further working on the tests --- .vscode/settings.json | 2 + package.json | 1 + src/pages/Preferences.jsx | 7 +- src/{utils => }/setupProxy.js | 0 src/tests/Preferences.test.js | 75 + src/tests/RepositoryUI.test.jsx | 22 + .../__snapshots__/Preferences.test.js.snap | 1366 +++++++++++++++++ .../__snapshots__/RepositoryUI.test.jsx.snap | 232 +++ src/tests/testutils.js | 2 +- 9 files changed, 1704 insertions(+), 3 deletions(-) create mode 100644 .vscode/settings.json rename src/{utils => }/setupProxy.js (100%) create mode 100644 src/tests/Preferences.test.js create mode 100644 src/tests/RepositoryUI.test.jsx create mode 100644 src/tests/__snapshots__/Preferences.test.js.snap create mode 100644 src/tests/__snapshots__/RepositoryUI.test.jsx.snap diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/package.json b/package.json index 517fe3d..057bbe9 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --coverage --transformIgnorePatterns \"node_modules/(?!axios)/\"", + "test:update": "react-scripts test --updateSnapshot --coverage --transformIgnorePatterns \"node_modules/(?!axios)/\"", "eject": "react-scripts eject" }, "eslintConfig": { diff --git a/src/pages/Preferences.jsx b/src/pages/Preferences.jsx index f8ec8c6..958d0f3 100644 --- a/src/pages/Preferences.jsx +++ b/src/pages/Preferences.jsx @@ -1,13 +1,16 @@ import { Component } from 'react'; import { UIPreferencesContext } from '../contexts/UIPreferencesContext'; +/** + * Class that exports preferences + */ export class Preferences extends Component { render() { const { pageSize, theme, bytesStringBase2, setByteStringBase, setTheme } = this.context; return <>
- + setByteStringBase(e.target.value)}> diff --git a/src/utils/setupProxy.js b/src/setupProxy.js similarity index 100% rename from src/utils/setupProxy.js rename to src/setupProxy.js diff --git a/src/tests/Preferences.test.js b/src/tests/Preferences.test.js new file mode 100644 index 0000000..2ee444e --- /dev/null +++ b/src/tests/Preferences.test.js @@ -0,0 +1,75 @@ +import { render, screen } from '@testing-library/react' +import { expect, test } from '@jest/globals'; +import userEvent from "@testing-library/user-event"; +import { Preferences } from '../pages/Preferences'; +const { setTheme } = jest.requireActual('../pages/Preferences'); +// Wrapper +let wrapper; + +/** + * + */ +beforeEach(() => { + wrapper = render() +}); + +/** + * + */ +describe('Calling the preference page', () => { + test('Should render preferences', () => { + expect(wrapper).toMatchSnapshot(); + }) +}) + +/** + * + */ +describe('Select the light theme', () => { + test('Should select light theme', () => { + userEvent.selectOptions( + screen.getByRole('combobox', { name: "Theme" }), + screen.getByRole('option', { name: 'light' })); + + expect(screen.getByRole('option', { name: 'light' }).selected).toBe(true) + + expect(wrapper).toMatchSnapshot(); + }) +}) + +/** + * + */ +describe('Select the dark theme', () => { + test('Should select dark theme', () => { + userEvent.selectOptions( + screen.getByRole('combobox', { name: "Theme" }), + screen.getByRole('option', { name: 'dark' })); + + expect(screen.getByRole('option', { name: 'dark' }).selected).toBe(true) + + expect(wrapper).toMatchSnapshot(); + }) +}) + +/** + * + */ +describe('Test number of themes', () => { + test('Should have four themes', () => { + let theme = screen.getByRole('combobox', { name: "Theme" }); + expect(theme).toHaveLength(4); + expect(wrapper).toMatchSnapshot(); + }) +}) + +/** + * + */ +describe('Test byte representation', () => { + test('Should have two options', () => { + let theme = screen.getByRole('combobox', { name: "Byte representation" }); + expect(theme).toHaveLength(2); + expect(wrapper).toMatchSnapshot(); + }) +}) \ No newline at end of file diff --git a/src/tests/RepositoryUI.test.jsx b/src/tests/RepositoryUI.test.jsx new file mode 100644 index 0000000..d21dd0c --- /dev/null +++ b/src/tests/RepositoryUI.test.jsx @@ -0,0 +1,22 @@ +import axios from 'axios'; +import React from 'react'; +import App from '../App'; +import { render } from '@testing-library/react'; + +jest.mock('axios'); + +// Wrapper +let wrapper; + +/** + * + */ +beforeEach(() => { + wrapper = render() +}); + +describe('Testing the app', () => { + test('Should render the app', () => { + expect(wrapper).toMatchSnapshot(); + }) +}) diff --git a/src/tests/__snapshots__/Preferences.test.js.snap b/src/tests/__snapshots__/Preferences.test.js.snap new file mode 100644 index 0000000..478258e --- /dev/null +++ b/src/tests/__snapshots__/Preferences.test.js.snap @@ -0,0 +1,1366 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Calling the preference page Should render preferences 1`] = ` +Object { + "asFragment": [Function], + "baseElement": +
+ +
+ + + + The current active theme + +
+
+
+ + + + Specifies the representation of bytes + +
+
+
+ + + + Specifies the pagination size in tables + +
+ +
+ , + "container":
+
+
+ + + + The current active theme + +
+
+
+ + + + Specifies the representation of bytes + +
+
+
+ + + + Specifies the pagination size in tables + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`Select the dark theme Should select dark theme 1`] = ` +Object { + "asFragment": [Function], + "baseElement": +
+
+
+ + + + The current active theme + +
+
+
+ + + + Specifies the representation of bytes + +
+
+
+ + + + Specifies the pagination size in tables + +
+
+
+ , + "container":
+
+
+ + + + The current active theme + +
+
+
+ + + + Specifies the representation of bytes + +
+
+
+ + + + Specifies the pagination size in tables + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`Select the light theme Should select light theme 1`] = ` +Object { + "asFragment": [Function], + "baseElement": +
+
+
+ + + + The current active theme + +
+
+
+ + + + Specifies the representation of bytes + +
+
+
+ + + + Specifies the pagination size in tables + +
+
+
+ , + "container":
+
+
+ + + + The current active theme + +
+
+
+ + + + Specifies the representation of bytes + +
+
+
+ + + + Specifies the pagination size in tables + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`Test byte representation Should have two options 1`] = ` +Object { + "asFragment": [Function], + "baseElement": +
+
+
+ + + + The current active theme + +
+
+
+ + + + Specifies the representation of bytes + +
+
+
+ + + + Specifies the pagination size in tables + +
+
+
+ , + "container":
+
+
+ + + + The current active theme + +
+
+
+ + + + Specifies the representation of bytes + +
+
+
+ + + + Specifies the pagination size in tables + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`Test number of themes Should have four themes 1`] = ` +Object { + "asFragment": [Function], + "baseElement": +
+
+
+ + + + The current active theme + +
+
+
+ + + + Specifies the representation of bytes + +
+
+
+ + + + Specifies the pagination size in tables + +
+
+
+ , + "container":
+
+
+ + + + The current active theme + +
+
+
+ + + + Specifies the representation of bytes + +
+
+
+ + + + Specifies the pagination size in tables + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; diff --git a/src/tests/__snapshots__/RepositoryUI.test.jsx.snap b/src/tests/__snapshots__/RepositoryUI.test.jsx.snap new file mode 100644 index 0000000..5ba4d4f --- /dev/null +++ b/src/tests/__snapshots__/RepositoryUI.test.jsx.snap @@ -0,0 +1,232 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Testing the app Should render the app 1`] = ` +Object { + "asFragment": [Function], + "baseElement": +
+ +
+ +
+ +
+
+
+ , + "container":
+ +
+ +
+ +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; diff --git a/src/tests/testutils.js b/src/tests/testutils.js index 72f6c3a..79c87e9 100644 --- a/src/tests/testutils.js +++ b/src/tests/testutils.js @@ -1,4 +1,4 @@ -import { fireEvent, act } from '@testing-library/react'; +import { fireEvent } from '@testing-library/react'; export function changeControlValue(selector, value) { fireEvent.change(selector, { target: { value: value } }) From cdd6f87caac69a76fde061bf9e00b158f31d7ee4 Mon Sep 17 00:00:00 2001 From: lupusA Date: Sun, 12 Nov 2023 07:36:12 +0100 Subject: [PATCH 13/13] Finalize PR to implement the new structure --- src/tests/Preferences.test.js | 15 - src/tests/RepositoryUI.test.jsx | 22 -- .../__snapshots__/Preferences.test.js.snap | 273 ------------------ .../__snapshots__/RepositoryUI.test.jsx.snap | 232 --------------- 4 files changed, 542 deletions(-) delete mode 100644 src/tests/RepositoryUI.test.jsx delete mode 100644 src/tests/__snapshots__/RepositoryUI.test.jsx.snap diff --git a/src/tests/Preferences.test.js b/src/tests/Preferences.test.js index 2ee444e..2660571 100644 --- a/src/tests/Preferences.test.js +++ b/src/tests/Preferences.test.js @@ -37,21 +37,6 @@ describe('Select the light theme', () => { }) }) -/** - * - */ -describe('Select the dark theme', () => { - test('Should select dark theme', () => { - userEvent.selectOptions( - screen.getByRole('combobox', { name: "Theme" }), - screen.getByRole('option', { name: 'dark' })); - - expect(screen.getByRole('option', { name: 'dark' }).selected).toBe(true) - - expect(wrapper).toMatchSnapshot(); - }) -}) - /** * */ diff --git a/src/tests/RepositoryUI.test.jsx b/src/tests/RepositoryUI.test.jsx deleted file mode 100644 index d21dd0c..0000000 --- a/src/tests/RepositoryUI.test.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import axios from 'axios'; -import React from 'react'; -import App from '../App'; -import { render } from '@testing-library/react'; - -jest.mock('axios'); - -// Wrapper -let wrapper; - -/** - * - */ -beforeEach(() => { - wrapper = render() -}); - -describe('Testing the app', () => { - test('Should render the app', () => { - expect(wrapper).toMatchSnapshot(); - }) -}) diff --git a/src/tests/__snapshots__/Preferences.test.js.snap b/src/tests/__snapshots__/Preferences.test.js.snap index 478258e..2298024 100644 --- a/src/tests/__snapshots__/Preferences.test.js.snap +++ b/src/tests/__snapshots__/Preferences.test.js.snap @@ -273,279 +273,6 @@ Object { } `; -exports[`Select the dark theme Should select dark theme 1`] = ` -Object { - "asFragment": [Function], - "baseElement": -
-
-
- - - - The current active theme - -
-
-
- - - - Specifies the representation of bytes - -
-
-
- - - - Specifies the pagination size in tables - -
-
-
- , - "container":
-
-
- - - - The current active theme - -
-
-
- - - - Specifies the representation of bytes - -
-
-
- - - - Specifies the pagination size in tables - -
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - exports[`Select the light theme Should select light theme 1`] = ` Object { "asFragment": [Function], diff --git a/src/tests/__snapshots__/RepositoryUI.test.jsx.snap b/src/tests/__snapshots__/RepositoryUI.test.jsx.snap deleted file mode 100644 index 5ba4d4f..0000000 --- a/src/tests/__snapshots__/RepositoryUI.test.jsx.snap +++ /dev/null @@ -1,232 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Testing the app Should render the app 1`] = ` -Object { - "asFragment": [Function], - "baseElement": -
- -
- -
- -
-
-
- , - "container":
- -
- -
- -
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`;