diff --git a/package-lock.json b/package-lock.json index f3c08cf..40f095f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,6 +40,7 @@ "lint-staged": "^10.5.4", "prettier": "^2.0.5", "react-hot-loader": "^4.12.21", + "react-moment": "^1.1.1", "style-loader": "^1.2.1", "typescript": "^3.9.7", "webpack": "^4.44.0", @@ -1312,8 +1313,7 @@ "version": "4.0.0", "resolved": "http://nexus.entgra.io/repository/npm-group/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/prop-types": { "version": "15.7.3", @@ -1813,7 +1813,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -1860,15 +1859,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-escapes/node_modules/type-fest": { @@ -1876,12 +1871,8 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-html": { @@ -2832,7 +2823,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -2842,7 +2832,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -2855,16 +2844,12 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, - "license": "MIT", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate/node_modules/ansi-regex": { @@ -2872,7 +2857,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/ansi-regex/-/ansi-regex-5.0.0.tgz", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -2882,15 +2866,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/cli-truncate/node_modules/astral-regex": { @@ -2898,7 +2878,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -2908,7 +2887,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2920,22 +2898,19 @@ "version": "1.1.4", "resolved": "http://nexus.entgra.io/repository/npm-group/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/cli-truncate/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "http://nexus.entgra.io/repository/npm-group/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "http://nexus.entgra.io/repository/npm-group/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -2945,7 +2920,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -2960,7 +2934,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2975,7 +2948,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.0" }, @@ -3235,7 +3207,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/cosmiconfig/-/cosmiconfig-7.0.0.tgz", "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, - "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -3467,8 +3438,7 @@ "version": "0.7.0", "resolved": "http://nexus.entgra.io/repository/npm-group/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/deep-equal": { "version": "1.1.1", @@ -3914,7 +3884,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -4738,15 +4707,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/file-entry-cache": { @@ -5066,8 +5031,7 @@ "version": "3.0.2", "resolved": "http://nexus.entgra.io/repository/npm-group/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/get-stdin": { "version": "6.0.0", @@ -5569,7 +5533,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8.12.0" } @@ -5579,12 +5542,8 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/husky/-/husky-6.0.0.tgz", "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", "dev": true, - "license": "MIT", "bin": { "husky": "lib/bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" } }, "node_modules/iconv-lite": { @@ -5697,7 +5656,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -5859,8 +5817,7 @@ "version": "0.2.1", "resolved": "http://nexus.entgra.io/repository/npm-group/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/is-binary-path": { "version": "1.0.1", @@ -6022,7 +5979,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6089,7 +6045,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6129,12 +6084,8 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-windows": { @@ -6216,8 +6167,7 @@ "version": "2.3.1", "resolved": "http://nexus.entgra.io/repository/npm-group/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -6389,15 +6339,13 @@ "version": "1.1.6", "resolved": "http://nexus.entgra.io/repository/npm-group/lines-and-columns/-/lines-and-columns-1.1.6.tgz", "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lint-staged": { "version": "10.5.4", "resolved": "http://nexus.entgra.io/repository/npm-group/lint-staged/-/lint-staged-10.5.4.tgz", "integrity": "sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "cli-truncate": "^2.1.0", @@ -6417,9 +6365,6 @@ }, "bin": { "lint-staged": "bin/lint-staged.js" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" } }, "node_modules/lint-staged/node_modules/ansi-styles": { @@ -6427,15 +6372,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/lint-staged/node_modules/braces": { @@ -6443,7 +6384,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -6456,16 +6396,12 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/lint-staged/node_modules/color-convert": { @@ -6473,7 +6409,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6485,15 +6420,13 @@ "version": "1.1.4", "resolved": "http://nexus.entgra.io/repository/npm-group/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lint-staged/node_modules/commander": { "version": "6.2.1", "resolved": "http://nexus.entgra.io/repository/npm-group/commander/-/commander-6.2.1.tgz", "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6" } @@ -6503,7 +6436,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6518,17 +6450,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/debug/-/debug-4.3.1.tgz", "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/lint-staged/node_modules/execa": { @@ -6536,7 +6462,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -6550,9 +6475,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/lint-staged/node_modules/fill-range": { @@ -6560,7 +6482,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6573,15 +6494,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lint-staged/node_modules/has-flag": { @@ -6589,7 +6506,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6599,7 +6515,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -6609,7 +6524,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6619,7 +6533,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/micromatch/-/micromatch-4.0.2.tgz", "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.1", "picomatch": "^2.0.5" @@ -6632,15 +6545,13 @@ "version": "2.1.2", "resolved": "http://nexus.entgra.io/repository/npm-group/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lint-staged/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "http://nexus.entgra.io/repository/npm-group/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -6653,7 +6564,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6663,7 +6573,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6676,7 +6585,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6686,7 +6594,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6699,7 +6606,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -6712,7 +6618,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -6728,7 +6633,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/listr2/-/listr2-3.6.2.tgz", "integrity": "sha512-B2vlu7Zx/2OAMVUovJ7Tv1kQ2v2oXd0nZKzkSAcRCej269d8gkS/gupDEdNl23KQ3ZjVD8hQmifrrBFbx8F9LA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "cli-truncate": "^2.1.0", @@ -6742,9 +6646,6 @@ }, "engines": { "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" } }, "node_modules/listr2/node_modules/ansi-regex": { @@ -6752,7 +6653,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/ansi-regex/-/ansi-regex-5.0.0.tgz", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6762,15 +6662,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/listr2/node_modules/chalk": { @@ -6778,16 +6674,12 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/listr2/node_modules/color-convert": { @@ -6795,7 +6687,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6807,22 +6698,19 @@ "version": "1.1.4", "resolved": "http://nexus.entgra.io/repository/npm-group/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/listr2/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "http://nexus.entgra.io/repository/npm-group/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/listr2/node_modules/has-flag": { "version": "4.0.0", "resolved": "http://nexus.entgra.io/repository/npm-group/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6832,7 +6720,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6842,15 +6729,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, - "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/listr2/node_modules/string-width": { @@ -6858,7 +6741,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6873,7 +6755,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.0" }, @@ -6886,7 +6767,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6899,7 +6779,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6907,9 +6786,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/loader-runner": { @@ -6970,16 +6846,12 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-symbols/node_modules/ansi-styles": { @@ -6987,15 +6859,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-symbols/node_modules/chalk": { @@ -7003,16 +6871,12 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/log-symbols/node_modules/color-convert": { @@ -7020,7 +6884,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7032,15 +6895,13 @@ "version": "1.1.4", "resolved": "http://nexus.entgra.io/repository/npm-group/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", "resolved": "http://nexus.entgra.io/repository/npm-group/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7050,7 +6911,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7063,7 +6923,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/log-update/-/log-update-4.0.0.tgz", "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -7072,9 +6931,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/ansi-regex": { @@ -7082,7 +6938,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/ansi-regex/-/ansi-regex-5.0.0.tgz", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7092,15 +6947,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-update/node_modules/astral-regex": { @@ -7108,7 +6959,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7118,7 +6968,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7130,22 +6979,19 @@ "version": "1.1.4", "resolved": "http://nexus.entgra.io/repository/npm-group/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/log-update/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "http://nexus.entgra.io/repository/npm-group/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "http://nexus.entgra.io/repository/npm-group/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7155,7 +7001,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -7163,9 +7008,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/log-update/node_modules/string-width": { @@ -7173,7 +7015,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7188,7 +7029,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.0" }, @@ -7201,7 +7041,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7329,8 +7168,7 @@ "version": "2.0.0", "resolved": "http://nexus.entgra.io/repository/npm-group/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/methods": { "version": "1.1.2", @@ -7422,7 +7260,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -8026,15 +7863,11 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/opn": { @@ -8208,7 +8041,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -8217,9 +8049,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/parse-passwd": { @@ -8327,7 +8156,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -8409,7 +8237,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, - "license": "MIT", "dependencies": { "semver-compare": "^1.0.0" } @@ -9272,6 +9099,12 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true }, + "node_modules/react-moment": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/react-moment/-/react-moment-1.1.1.tgz", + "integrity": "sha512-WjwvxBSnmLMRcU33do0KixDB+9vP3e84eCse+rd+HNklAMNWyRgZTDEQlay/qK6lcXFPRuEIASJTpEt6pyK7Ww==", + "dev": true + }, "node_modules/react-router": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", @@ -9628,7 +9461,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -9691,7 +9523,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -9779,8 +9610,7 @@ "version": "1.0.0", "resolved": "http://nexus.entgra.io/repository/npm-group/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/send": { "version": "0.17.1", @@ -10428,7 +10258,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/string-argv/-/string-argv-0.3.1.tgz", "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6.19" } @@ -10491,7 +10320,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -10527,7 +10355,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -10689,8 +10516,7 @@ "version": "2.3.8", "resolved": "http://nexus.entgra.io/repository/npm-group/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/through2": { "version": "2.0.5", @@ -11752,7 +11578,6 @@ "resolved": "http://nexus.entgra.io/repository/npm-group/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 6" } @@ -19617,6 +19442,12 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true }, + "react-moment": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/react-moment/-/react-moment-1.1.1.tgz", + "integrity": "sha512-WjwvxBSnmLMRcU33do0KixDB+9vP3e84eCse+rd+HNklAMNWyRgZTDEQlay/qK6lcXFPRuEIASJTpEt6pyK7Ww==", + "dev": true + }, "react-router": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", diff --git a/package.json b/package.json index e6188d1..38f048b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "main": "index.js", "scripts": { "start": "webpack-dev-server --mode development", - "build": "webpack", + "build": "webpack --mode production", "lint": "eslint --ext .js,.jsx,.ts,.tsx src --color", "lint-fix": "eslint --ext .js,.jsx,.ts,.tsx src --color --fix", "prepare": "husky install" @@ -36,6 +36,7 @@ "lint-staged": "^10.5.4", "prettier": "^2.0.5", "react-hot-loader": "^4.12.21", + "react-moment": "^1.1.1", "style-loader": "^1.2.1", "typescript": "^3.9.7", "webpack": "^4.44.0", diff --git a/src/constants.ts b/src/constants.ts index a332619..00f65d9 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,3 +1,5 @@ export const API_URL = '/api'; export const AUTH_URL = '/login'; export const LOGOUT_URL = '/logout'; +export const APPLICATION_TEMPLATE = + 'https://docs.google.com/document/d/1pRd2Mml7ejjY9rbgQS0PEo3AWooenHWKsXWBAQmnw9Q/edit?usp=sharing'; diff --git a/src/interfaces.ts b/src/interfaces.ts index cd1499c..5536024 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -8,11 +8,19 @@ export interface Profile { headline: string; linkedinUrl: string; type: string; + name: string; + attributes: string; + authorities: [ + { + authority: string, + } + ]; } export interface SavedProgram extends UnsavedProgram { id: number; state: string; + imageUrl: string; } export interface UnsavedProgram { @@ -38,6 +46,38 @@ export interface Mentee { } export interface Application { - application: string; - prerequisites: string; + response: string; + question: { + id: number, + }; +} +export interface Question { + id: number; + question: string; + category: string; +} +export interface MentorQuestion extends Question { + program: SavedProgram; +} +export interface QuestionResponse { + id: { + questionId: number, + mentorId: number, + }; + question: MentorQuestion; + mentor: Mentor; + response: string; +} + +export interface UpdateQuestion { + id: { + questionId: number, + mentorId: number, + }; + response: string; +} + +export interface FormData { + key: number; + value: string; } diff --git a/src/scenes/Dashboard/index.tsx b/src/scenes/Dashboard/index.tsx index 114ed1d..2348c51 100644 --- a/src/scenes/Dashboard/index.tsx +++ b/src/scenes/Dashboard/index.tsx @@ -4,6 +4,7 @@ import { AppstoreOutlined, EditOutlined, TeamOutlined, + ProfileOutlined, } from '@ant-design/icons'; import { Link, @@ -23,6 +24,8 @@ import { Profile } from '../../interfaces'; import { UserContext } from '../../index'; import LogInModal from '../../components/LogInModal'; import { LOGOUT_URL } from '../../constants'; +import MentorQuestions from './scenes/MentorQuestions'; +import MenteeQuestions from './scenes/MenteeQuestions'; const { Content, Sider, Header } = Layout; @@ -66,6 +69,16 @@ function Dashboard() { Manage Mentees + + + Mentor Questions + + + + + Mentee Questions + + @@ -78,7 +91,7 @@ function Dashboard() { > - logout + Logout @@ -111,6 +124,16 @@ function Dashboard() { path="/dashboard/:programId/manage-mentees" component={ManageMentees} /> + + diff --git a/src/scenes/Dashboard/scenes/ChangeState/index.tsx b/src/scenes/Dashboard/scenes/ChangeState/index.tsx index 16196d2..9833fb8 100644 --- a/src/scenes/Dashboard/scenes/ChangeState/index.tsx +++ b/src/scenes/Dashboard/scenes/ChangeState/index.tsx @@ -9,6 +9,7 @@ import { Progress, Modal, notification, + Spin, } from 'antd'; import { State } from './interfaces'; import { ExclamationCircleOutlined } from '@ant-design/icons'; @@ -86,6 +87,7 @@ function ChangeState() { const { programId } = useParams(); const [programTitle, setProgramTitle] = useState(''); const [currentStep, setCurrentStep] = useState(0); + const [isLoading, setIsLoading] = useState(false); useEffect(() => { axios .get(`${API_URL}/programs/${programId}`, { @@ -107,12 +109,14 @@ function ChangeState() { }); }); const handleStepChange = () => { + setIsLoading(true); axios({ method: 'put', url: `${API_URL}/admin/programs/${programId}/state`, withCredentials: true, }) .then((result) => { + setIsLoading(false); if (result.status == 200) { setCurrentStep(currentStep + 1); notification.success({ @@ -124,6 +128,7 @@ function ChangeState() { } }) .catch(() => { + setIsLoading(false); notification.warning({ message: 'Warning!', description: 'Something went wrong when changing the state', @@ -148,49 +153,51 @@ function ChangeState() { }); }; return ( -
- Change State - - - - {programTitle} - - - Current State: {' '} - {programStates[currentStep].name} - - {programStates[currentStep].description} - - -
- -
-
- - {programStates.map((step: State) => { - return ( - +
+ Change State + + + + {programTitle} + - ); - })} - + + Current State: {' '} + {programStates[currentStep].name} + + {programStates[currentStep].description} + + +
+ +
+
+ + {programStates.map((step: State) => { + return ( + + ); + })} + +
-
+ ); } diff --git a/src/scenes/Dashboard/scenes/ManageMentees/index.tsx b/src/scenes/Dashboard/scenes/ManageMentees/index.tsx index 92af934..fcce081 100644 --- a/src/scenes/Dashboard/scenes/ManageMentees/index.tsx +++ b/src/scenes/Dashboard/scenes/ManageMentees/index.tsx @@ -13,6 +13,7 @@ import { Mentee } from './interfaces'; import { useParams } from 'react-router'; import axios, { AxiosResponse } from 'axios'; import { API_URL } from '../../../../constants'; +import styles from '../../styles.css'; const { Title } = Typography; const { confirm } = Modal; @@ -76,7 +77,7 @@ function ManageMentees() { }; return ( -
+
Manage Mentees (props.mentor.state); + const { programId } = useParams(); + const [isDrawerVisible, setIsDrawerVisible] = useState(false); + const [mentorState, setMentorState] = useState(mentor.state); + const [mentorResponse, setMentorResponse] = useState([]); const updateMentorState = (mentorState: string) => { let successMessage: string; @@ -27,7 +48,7 @@ function MentorRow(props: { mentor: Mentor, programState: string }) { axios .put( - `${API_URL}/admin/mentors/${props.mentor.id}/state`, + `${API_URL}/admin/mentors/${mentor.id}/state`, { state: mentorState, }, @@ -87,12 +108,48 @@ function MentorRow(props: { mentor: Mentor, programState: string }) { }); }; - if (props.programState === 'MENTOR_SELECTION') { + const getMentorResponse = () => { + axios + .get( + `${API_URL}/programs/${programId}/responses/mentor?mentorId=${mentor.id}`, + { + withCredentials: true, + } + ) + .then((result: AxiosResponse) => { + if (result.status == 200) { + setMentorResponse(result.data); + } else { + throw new Error(); + } + }) + .catch(() => { + notification.error({ + message: 'Error!', + description: 'Something went wrong when fetching mentor response', + }); + }); + }; + + if (programState === 'MENTOR_SELECTION') { const isApproveDisabled: boolean = mentorState == 'APPROVED' || mentorState == 'REMOVED'; const isRejectDisabled: boolean = mentorState == 'REJECTED' || mentorState == 'REMOVED'; + actions.push( + + ); + actions.push( + + + + + + ); +} + +export default AddQuestions; diff --git a/src/scenes/Dashboard/scenes/MenteeQuestions/components/EditQuestions/index.tsx b/src/scenes/Dashboard/scenes/MenteeQuestions/components/EditQuestions/index.tsx new file mode 100644 index 0000000..707a601 --- /dev/null +++ b/src/scenes/Dashboard/scenes/MenteeQuestions/components/EditQuestions/index.tsx @@ -0,0 +1,102 @@ +import React, { useEffect, useState } from 'react'; +import { useParams } from 'react-router'; +import axios, { AxiosResponse } from 'axios'; +import { Button, Input, Spin, notification, Form } from 'antd'; +import { API_URL } from '../../../../../../constants'; +import { Question } from '../../../../../../interfaces'; + +function EditQuestions() { + const { programId } = useParams(); + const [questions, setQuestions] = useState([]); + const [isLoading, setIsLoading] = useState(false); + const [form] = Form.useForm(); + + useEffect(() => { + setIsLoading(true); + getQuestions(); + }, []); + + const getQuestions = () => { + axios + .get(`${API_URL}/programs/${programId}/questions/MENTEE`, { + withCredentials: true, + }) + .then((result: AxiosResponse) => { + if (result.status == 200) { + setIsLoading(false); + setQuestions(result.data); + } else { + throw new Error(); + } + }) + .catch(() => { + setIsLoading(false); + notification.warning({ + message: 'Error!', + description: 'Something went wrong when fetching the questions', + }); + }); + }; + + const editQuestion = (values: any) => { + setIsLoading(true); + const editedQuestions: Question[] = []; + for (var i in values) { + const question: Question = {}; + question.id = i; + question.question = values[i]; + editedQuestions.push(question); + } + + axios + .put(`${API_URL}/admin/questions`, editedQuestions, { + withCredentials: true, + }) + + .then((result: AxiosResponse) => { + if (result.status == 200) { + setIsLoading(false); + getQuestions(); + notification.success({ + message: 'Success!!', + description: 'Questions saved', + }); + } else { + throw new Error(); + } + }) + + .catch(() => { + setIsLoading(false); + notification.error({ + message: 'Error!', + description: 'Something went wrong while saving questions', + }); + }); + }; + + return ( + <> + +
+ {questions.map((question) => ( + + + + ))} + + + + +
+ + ); +} + +export default EditQuestions; diff --git a/src/scenes/Dashboard/scenes/MenteeQuestions/index.tsx b/src/scenes/Dashboard/scenes/MenteeQuestions/index.tsx new file mode 100644 index 0000000..7201ea6 --- /dev/null +++ b/src/scenes/Dashboard/scenes/MenteeQuestions/index.tsx @@ -0,0 +1,40 @@ +import React, { useState } from 'react'; +import { Typography, Row, Col, Switch } from 'antd'; +import AddQuestions from './components/AddQuestions'; +import EditQuestions from './components/EditQuestions'; +import styles from '../styles.css'; + +const { Title } = Typography; + +function MenteeQuestions() { + const [isEditOn, setIsEditOn] = useState(false); + + const onSwitch = (checked: boolean) => { + setIsEditOn(checked); + }; + + return ( + +
+ + + Mentee Questions + + + + + +
+ {isEditOn ? : } +
+ + + ); +} + +export default MenteeQuestions; diff --git a/src/scenes/Dashboard/scenes/MentorQuestions/components/AddQuestions/index.tsx b/src/scenes/Dashboard/scenes/MentorQuestions/components/AddQuestions/index.tsx new file mode 100644 index 0000000..68c2b97 --- /dev/null +++ b/src/scenes/Dashboard/scenes/MentorQuestions/components/AddQuestions/index.tsx @@ -0,0 +1,110 @@ +import React, { useEffect, useState } from 'react'; +import { useParams } from 'react-router'; +import axios, { AxiosResponse } from 'axios'; +import { Button, Table, Row, Col, Input, Spin, notification, Form } from 'antd'; +import { API_URL } from '../../../../../../constants'; +import { Question } from '../../../../../../interfaces'; +import styles from '../../../styles.css'; + +const columns = [ + { + title: 'Question', + dataIndex: 'question', + key: 'question', + }, +]; + +function AddQuestions() { + const { programId } = useParams(); + const [questions, setQuestions] = useState([]); + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + setIsLoading(true); + getMentorQuestions(); + }, []); + + const getMentorQuestions = () => { + axios + .get(`${API_URL}/programs/${programId}/questions/MENTOR`, { + withCredentials: true, + }) + .then((response: AxiosResponse) => { + if (response.status == 200) { + setIsLoading(false); + setQuestions(response.data); + } else { + throw new Error(); + } + }) + .catch(() => { + setIsLoading(false); + notification.error({ + message: 'Error!', + description: 'Something went wrong when fetching questions', + }); + }); + }; + + const addQuestion = (values: Question) => { + setIsLoading(true); + const questions = [ + { + question: values.question, + }, + ]; + axios + .post( + `${API_URL}/admin/programs/${programId}/questions/MENTOR`, + questions, + { + withCredentials: true, + } + ) + .then((response: AxiosResponse) => { + if (response.status == 200) { + notification.success({ + message: 'Success!!', + description: 'Question saved', + }); + getMentorQuestions(); + } else { + throw new Error(); + } + }) + .catch(() => { + setIsLoading(false); + notification.error({ + message: 'Error!', + description: 'Something went wrong while adding questions', + }); + }); + }; + + return ( + + +
+ + + + + + + + +
+ + ); +} + +export default AddQuestions; diff --git a/src/scenes/Dashboard/scenes/MentorQuestions/components/EditQuestions/index.tsx b/src/scenes/Dashboard/scenes/MentorQuestions/components/EditQuestions/index.tsx new file mode 100644 index 0000000..56722dc --- /dev/null +++ b/src/scenes/Dashboard/scenes/MentorQuestions/components/EditQuestions/index.tsx @@ -0,0 +1,103 @@ +import React, { useEffect, useState } from 'react'; +import { useParams } from 'react-router'; +import axios, { AxiosResponse } from 'axios'; +import { Button, Input, Spin, notification, Form } from 'antd'; +import { API_URL } from '../../../../../../constants'; +import { Question } from '../../../../../../interfaces'; + +function EditQuestions() { + const { programId } = useParams(); + const [questions, setQuestions] = useState([]); + const [isLoading, setIsLoading] = useState(false); + const [form] = Form.useForm(); + + useEffect(() => { + setIsLoading(true); + getQuestions(); + }, []); + + const getQuestions = () => { + axios + .get(`${API_URL}/programs/${programId}/questions/MENTOR`, { + withCredentials: true, + }) + .then((result: AxiosResponse) => { + if (result.status == 200) { + setIsLoading(false); + setQuestions(result.data); + } else { + throw new Error(); + } + }) + .catch(() => { + setIsLoading(false); + notification.warning({ + message: 'Error!', + description: 'Something went wrong when fetching the questions', + }); + }); + }; + + const editQuestion = (values: any) => { + setIsLoading(true); + const editedQuestions: Question[] = []; + for (var i in values) { + const question: Question = {}; + question.id = i; + question.question = values[i]; + editedQuestions.push(question); + } + + setIsLoading(true); + axios + .put(`${API_URL}/admin/questions`, editedQuestions, { + withCredentials: true, + }) + + .then((result: AxiosResponse) => { + if (result.status == 200) { + setIsLoading(false); + getQuestions(); + notification.success({ + message: 'Success!!', + description: 'Questions saved', + }); + } else { + throw new Error(); + } + }) + + .catch(() => { + setIsLoading(false); + notification.error({ + message: 'Error!', + description: 'Something went wrong while saving questions', + }); + }); + }; + + return ( + <> + +
+ {questions.map((question) => ( + + + + ))} + + + + +
+ + ); +} + +export default EditQuestions; diff --git a/src/scenes/Dashboard/scenes/MentorQuestions/index.tsx b/src/scenes/Dashboard/scenes/MentorQuestions/index.tsx new file mode 100644 index 0000000..f2d0aad --- /dev/null +++ b/src/scenes/Dashboard/scenes/MentorQuestions/index.tsx @@ -0,0 +1,40 @@ +import React, { useState } from 'react'; +import { Typography, Row, Col, Switch } from 'antd'; +import AddQuestions from './components/AddQuestions'; +import EditQuestions from './components/EditQuestions'; +import styles from '../styles.css'; + +const { Title } = Typography; + +function MentorQuestions() { + const [isEditOn, setIsEditOn] = useState(false); + + const onSwitch = (checked: boolean) => { + setIsEditOn(checked); + }; + + return ( + +
+ + + Mentor Questions + + + + + +
+ {isEditOn ? : } +
+ + + ); +} + +export default MentorQuestions; diff --git a/src/scenes/Dashboard/scenes/styles.css b/src/scenes/Dashboard/scenes/styles.css new file mode 100644 index 0000000..c6ae9b8 --- /dev/null +++ b/src/scenes/Dashboard/scenes/styles.css @@ -0,0 +1,36 @@ +.logo { + margin: 16px; +} + +.logo img{ + width: 90%; + padding-bottom: 24px; +} + +.header { + background: white; + padding-right: 0; + z-index: 1; + box-shadow: 0 2px 8px #f0f1f2; +} + +.avatar { + background-color: #F27781; +} + +.rightAlignedMenu { + float: right; +} + +.content { + min-height: 100vh; + background-color: white; + padding-left: 240px; + padding-top: 40px; +} + +.siderPosition { + height: 100vh; + position: fixed; + z-index: 2; +} diff --git a/src/scenes/Dashboard/styles.css b/src/scenes/Dashboard/styles.css index c6ae9b8..f1dccfc 100644 --- a/src/scenes/Dashboard/styles.css +++ b/src/scenes/Dashboard/styles.css @@ -34,3 +34,12 @@ position: fixed; z-index: 2; } + +.mentorRow { + display: initial; +} + +.container { + padding-right: 40px; +} + diff --git a/src/scenes/Home/components/ActivePrograms/index.tsx b/src/scenes/Home/components/ActivePrograms/index.tsx index a158d3f..5e6e6f6 100644 --- a/src/scenes/Home/components/ActivePrograms/index.tsx +++ b/src/scenes/Home/components/ActivePrograms/index.tsx @@ -1,5 +1,14 @@ import React, { useContext, useEffect, useState } from 'react'; -import { Button, Card, Col, notification, Row, Spin, Typography } from 'antd'; +import { + Button, + Card, + Col, + notification, + Row, + Spin, + Typography, + Tag, +} from 'antd'; import styles from '../../styles.css'; import axios, { AxiosResponse } from 'axios'; import { Profile, SavedProgram } from '../../../../interfaces'; @@ -83,11 +92,17 @@ function ActivePrograms() { {programs.map((program: SavedProgram) => ( <> {program.state !== 'COMPLETED' && program.state !== 'REMOVED' ? ( -
+ } + cover={ + {program.title} + } > @@ -162,6 +177,16 @@ function ActivePrograms() { )} + {program.state === 'MENTOR_SELECTION' && !isUserAdmin && ( + + Mentor Selection Period + + )} + {program.state === 'MENTEE_SELECTION' && !isUserAdmin && ( + + Mentee Selection Period + + )} {program.headline} diff --git a/src/scenes/Home/components/CompletedPrograms/index.tsx b/src/scenes/Home/components/CompletedPrograms/index.tsx new file mode 100644 index 0000000..9be88ec --- /dev/null +++ b/src/scenes/Home/components/CompletedPrograms/index.tsx @@ -0,0 +1,136 @@ +import React, { useEffect, useState } from 'react'; +import { + Button, + Card, + Col, + notification, + Result, + Row, + Spin, + Typography, +} from 'antd'; +import styles from '../../styles.css'; +import axios, { AxiosResponse } from 'axios'; +import { SavedProgram } from '../../../../interfaces'; +import { API_URL } from '../../../../constants'; +import { SmileOutlined } from '@ant-design/icons'; + +const { Paragraph, Title } = Typography; + +function CompletedPrograms() { + const [isLoading, setIsLoading] = useState(false); + const [programs, setPrograms] = useState([]); + + useEffect(() => { + getMentoredPrograms(); + getMenteePrograms(); + }, []); + // Get the programs that user mentored as a mentor. + const getMentoredPrograms = () => { + const mentoredPrograms: SavedProgram[] = []; + setIsLoading(true); + axios + .get(`${API_URL}/me/programs/mentor`, { + withCredentials: true, + }) + .then((response: AxiosResponse) => { + response.data.map((program) => { + if (program.state === 'COMPLETED') { + mentoredPrograms.push(program); + } + }); + setPrograms(mentoredPrograms); + setIsLoading(false); + }) + .catch((error) => { + setIsLoading(false); + if (error.response.status != 401) { + notification.error({ + message: 'Something went wrong when fetching the user', + description: error.toString(), + }); + } + }); + }; + // Get the programs that user was a mentee. + const getMenteePrograms = () => { + const menteePrograms: SavedProgram[] = []; + setIsLoading(true); + axios + .get(`${API_URL}/me/programs/mentee`, { + withCredentials: true, + }) + .then((response: AxiosResponse) => { + response.data.map((program) => { + if (program.state === 'COMPLETED') { + menteePrograms.push(program); + } + }); + setPrograms(menteePrograms); + setIsLoading(false); + }) + .catch((error) => { + setIsLoading(false); + if (error.response.status != 401) { + notification.error({ + message: 'Something went wrong when fetching the program', + description: error.toString(), + }); + } + }); + }; + return ( + + {programs.length == 0 ? ( + + + } + title="You haven't completed any programs" + extra={ + + } + /> + + + ) : ( + + {programs.map((program: SavedProgram) => ( + + + } + > + + + + <a + target={'_blank'} + rel={'noreferrer'} + href={program.landingPageUrl} + > + {program.title} + </a> + + + + {program.headline} + + + ))} + + )} + + ); +} + +export default CompletedPrograms; diff --git a/src/scenes/Home/components/Footer/index.tsx b/src/scenes/Home/components/Footer/index.tsx new file mode 100644 index 0000000..8d758f6 --- /dev/null +++ b/src/scenes/Home/components/Footer/index.tsx @@ -0,0 +1,18 @@ +import styles from './styles.css'; +import Moment from 'react-moment'; +import React from 'react'; +import { Layout } from 'antd'; + +const date = new Date(); +const footer = () => { + const { Footer } = Layout; + return ( + + ); +}; +export default footer; diff --git a/src/scenes/Home/components/Footer/styles.css b/src/scenes/Home/components/Footer/styles.css new file mode 100644 index 0000000..120799f --- /dev/null +++ b/src/scenes/Home/components/Footer/styles.css @@ -0,0 +1,19 @@ +.footer { + z-index: 1; + text-align : center; + margin-top: 60px; +} + +.footerLink { + margin-left: 5px; +} + +@media screen and (min-height: 800px){ + .footer{ + position: fixed; + width: 100%; + bottom: 0; + } +} + + diff --git a/src/scenes/Home/components/MenteePrograms/index.tsx b/src/scenes/Home/components/MenteePrograms/index.tsx index 1cc936b..a137d22 100644 --- a/src/scenes/Home/components/MenteePrograms/index.tsx +++ b/src/scenes/Home/components/MenteePrograms/index.tsx @@ -121,11 +121,17 @@ function MenteePrograms() { ) : ( {programs.map((program: SavedProgram) => ( - + } + cover={ + {program.title} + } > diff --git a/src/scenes/Home/components/MentorPrograms/components/MentorProgramCard/index.tsx b/src/scenes/Home/components/MentorPrograms/components/MentorProgramCard/index.tsx index 21b5bda..b7ed227 100644 --- a/src/scenes/Home/components/MentorPrograms/components/MentorProgramCard/index.tsx +++ b/src/scenes/Home/components/MentorPrograms/components/MentorProgramCard/index.tsx @@ -7,11 +7,17 @@ const { Paragraph, Title, Text } = Typography; function MentorProgramCard(props: MentorProgramCardProps) { return ( - + } + cover={ + {props.program.title} + } > diff --git a/src/scenes/Home/components/NavigationBar/index.tsx b/src/scenes/Home/components/NavigationBar/index.tsx index 382be98..5a37a42 100644 --- a/src/scenes/Home/components/NavigationBar/index.tsx +++ b/src/scenes/Home/components/NavigationBar/index.tsx @@ -21,7 +21,7 @@ const NavigationBar = () => { href={LOGOUT_URL} type={'text'} > - logout + Logout diff --git a/src/scenes/Home/components/PastPrograms/index.tsx b/src/scenes/Home/components/PastPrograms/index.tsx index 5184f61..3463ad1 100644 --- a/src/scenes/Home/components/PastPrograms/index.tsx +++ b/src/scenes/Home/components/PastPrograms/index.tsx @@ -42,11 +42,17 @@ function PastPrograms() { {programs.map((program: SavedProgram) => ( - + } + cover={ + {program.title} + } > diff --git a/src/scenes/Home/components/ResultScreen/index.tsx b/src/scenes/Home/components/ResultScreen/index.tsx new file mode 100644 index 0000000..1e88006 --- /dev/null +++ b/src/scenes/Home/components/ResultScreen/index.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { Result, Button } from 'antd'; +import { useHistory } from 'react-router-dom'; + +const result = (props) => { + const { programId, type } = props; + const history = useHistory(); + return ( + history.push('/home')}> + Go Home + , + <> + {type === 'apply' ? ( + + ) : ( + <> + )} + , + ]} + /> + ); +}; +export default result; diff --git a/src/scenes/Home/index.tsx b/src/scenes/Home/index.tsx index 9c33809..e529612 100644 --- a/src/scenes/Home/index.tsx +++ b/src/scenes/Home/index.tsx @@ -1,5 +1,6 @@ import React, { useContext } from 'react'; import NavigationBar from './components/NavigationBar'; +import Footer from './components/Footer'; import styles from './styles.css'; import logo from './scholarx.png'; import { Col, Row, Tabs, Typography } from 'antd'; @@ -7,6 +8,7 @@ import MentorPrograms from './components/MentorPrograms'; import MenteePrograms from './components/MenteePrograms'; import ActivePrograms from './components/ActivePrograms'; import PastPrograms from './components/PastPrograms'; +import CompletedPrograms from './components/CompletedPrograms'; import { UserContext } from '../../index'; import { Profile } from '../../interfaces'; @@ -16,56 +18,67 @@ const { Paragraph } = Typography; const Home = () => { const user: Partial = useContext(UserContext); return ( -
- - -
- - - {'ScholarX - - ScholarX is an exclusive program aimed at providing mentoring - support to a selected pool of high Potential undergraduate - students based in Sri Lanka ideally by a Sri Lankan expat - currently engaged with one of the world’s top universities or - Fortune 500 companies. It’s our free premium mentoring platform - by Sri Lankans for Sri Lankans working towards creating a - culture of knowledge and expertise sharing without the - limitation of geographical borders. - - - - - -
- -
-
- {user == null || user.type == 'ADMIN' ? ( - '' - ) : ( - <> - -
- -
-
- -
- -
-
- - )} - -
- -
-
-
- - - + <> +
+ + +
+ + + {'ScholarX + + ScholarX is an exclusive program aimed at providing mentoring + support to a selected pool of high Potential undergraduate + students based in Sri Lanka ideally by a Sri Lankan expat + currently engaged with one of the world’s top universities or + Fortune 500 companies. It’s our free premium mentoring + platform by Sri Lankans for Sri Lankans working towards + creating a culture of knowledge and expertise sharing without + the limitation of geographical borders. + + + + + +
+ +
+
+ {user == null || user.type == 'ADMIN' ? ( + '' + ) : ( + <> + +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ + )} + +
+ +
+
+
+ + +
+
+
+
+
+ ); }; diff --git a/src/scenes/Home/scenes/EditMentorApplication/index.tsx b/src/scenes/Home/scenes/EditMentorApplication/index.tsx index 0fef4ff..9900046 100644 --- a/src/scenes/Home/scenes/EditMentorApplication/index.tsx +++ b/src/scenes/Home/scenes/EditMentorApplication/index.tsx @@ -1,118 +1,90 @@ import React, { useContext, useEffect, useState } from 'react'; -import { - Button, - Row, - Col, - Input, - Form, - notification, - Spin, - Typography, -} from 'antd'; -import styles from './styles.css'; +import { Button, Row, Col, Input, Form, Spin, Typography, Card } from 'antd'; import { useHistory, useParams } from 'react-router'; -import axios, { AxiosResponse } from 'axios'; +import { AxiosResponse } from 'axios'; + +import Footer from '../../components/Footer'; +import Result from '../../components/ResultScreen'; + import { - Mentor, - Application, - SavedProgram, Profile, + QuestionResponse, + UpdateQuestion, + FormData, } from '../../../../interfaces'; +import { getProgramDetails } from '../../../../util/program-services'; +import { + getResponses, + updateApplication, +} from '../../../../util/mentor-services'; + import mainStyles from '../../styles.css'; +import styles from './styles.css'; + import { ArrowLeftOutlined } from '@ant-design/icons'; import NavigationBar from '../../components/NavigationBar'; -import { API_URL } from '../../../../constants'; import LogInModal from '../../../../components/LogInModal'; import { UserContext } from '../../../../index'; const { TextArea } = Input; const { Title } = Typography; -function EditMentorApplication() { +function MentorApplication() { const [form] = Form.useForm(); const { programId } = useParams(); const [programTitle, setProgramTitle] = useState(''); + const [responses, setResponses] = useState([]); const [isLoading, setIsLoading] = useState(false); + const [isApplySuccess, setIsApplySuccess] = useState(false); const user: Partial = useContext(UserContext); const history = useHistory(); useEffect(() => { setIsLoading(true); - axios - .get(`${API_URL}/programs/${programId}/mentor`, { - withCredentials: true, - }) - .then((result: AxiosResponse) => { - if (result.status == 200) { - setIsLoading(false); - form.setFieldsValue({ - application: result.data.application, - prerequisites: result.data.prerequisites, - }); - } else { - throw new Error(); - } - }) - .catch(() => { - setIsLoading(false); - notification.warning({ - message: 'Warning!', - description: 'Something went wrong when fetching the program', - }); - }); getProgram(); }, []); - const getProgram = () => { - axios - .get(`${API_URL}/programs/${programId}`, { - withCredentials: true, - }) - .then((result: AxiosResponse) => { - if (result.status == 200) { - setProgramTitle(result.data.title); - setIsLoading(false); - } else { - throw new Error(); - } - }) - .catch(() => { - setIsLoading(false); - notification.error({ - message: 'Error!', - description: 'Something went wrong when fetching the program detail', - }); - }); + const getProgram = async () => { + const program = await getProgramDetails(programId); + if (program) { + setProgramTitle(program.title); + const responses = await getResponses(programId); + if (responses) { + setResponses(responses); + } + } + setIsLoading(false); }; - const apply = (values: any) => { + const apply = async (values: FormData) => { setIsLoading(true); - const application: Application = { - application: values.application, - prerequisites: values.prerequisites, - }; - axios - .put(`${API_URL}/programs/${programId}/application`, application, { - withCredentials: true, - }) - .then((result: AxiosResponse) => { - if (result.status == 200) { - setIsLoading(false); - notification.success({ - message: 'Success!', - description: 'Successfully applied!', - }); - } else { - throw new Error(); + const application: UpdateQuestion[] = []; + for (const [key, value] of Object.entries(values)) { + const questionId: number = parseInt(key, 10); + const response: QuestionResponse[] = responses.filter( + (element: QuestionResponse) => { + if (element.id.questionId === questionId) { + return element.id.mentorId; + } } - }) - .catch(() => { - setIsLoading(false); - notification.warning({ - message: 'Warning!', - description: 'Something went wrong when applying for the program', - }); - }); + ); + const question: UpdateQuestion = { + id: { + questionId: parseInt(key, 10), + mentorId: response[0].id.mentorId, + }, + response: value, + }; + application.push(question); + } + const response: AxiosResponse = await updateApplication( + programId, + application + ); + if (response.status === 200) { + setIsApplySuccess(true); + } + setIsLoading(false); }; return ( @@ -122,9 +94,9 @@ function EditMentorApplication() {
- + - - {programTitle} - Edit Mentor Application + + Mentor Application | {programTitle} -
-
- -
- - - Why do you think you are suitable as a mentor in this - program? - - -