From b4a95c7b6bb25726489c6fde2b28d04011cc2b84 Mon Sep 17 00:00:00 2001 From: Aswanth Vc Date: Sun, 20 Oct 2024 16:06:48 +0530 Subject: [PATCH] feat: Learning Circle Pages --- package-lock.json | 413 +++++++++++------- package.json | 2 + src/App.tsx | 15 + .../Authentication/pages/Onboarding.tsx | 4 - .../Onboarding/CollegePage/CollegePage.tsx | 1 - .../pages/Onboarding/SignIn/SignIn.tsx | 2 - .../Authentication/pages/ResetPassword.tsx | 1 - .../Dashboard/layouts/DashboardRootLayout.tsx | 8 +- .../pages/LcAdmin/LcAdmin.module.css | 0 .../LearningCircle/pages/LcAdmin/LcAdmin.tsx | 96 ++++ .../pages/LcDashboard/LcDashboard.module.css | 172 +++++++- .../components/LcAttendeeReport.tsx | 276 ++++++++++++ .../LcDashboard/components/LcHistory.tsx | 89 +++- .../pages/LcDashboard/components/LcHome.tsx | 161 +++++-- .../LcDashboard/components/LcMeetCreate.tsx | 23 +- .../LcDashboard/components/LcMeetups.tsx | 21 +- .../pages/LcDashboard/components/LcReport.tsx | 174 ++++++-- .../LcDashboard/components/YourMeetups.tsx | 108 +++++ .../pages/LearningCircle.module.css | 6 +- .../pages/LearningCircleLandingPage.tsx | 17 +- .../services/LearningCircleAPIs.ts | 109 ++++- .../services/LearningCircleInterface.d.ts | 17 +- src/services/endpoints.ts | 3 +- src/services/urls.ts | 5 + 24 files changed, 1407 insertions(+), 316 deletions(-) create mode 100644 src/modules/Dashboard/modules/LearningCircle/pages/LcAdmin/LcAdmin.module.css create mode 100644 src/modules/Dashboard/modules/LearningCircle/pages/LcAdmin/LcAdmin.tsx create mode 100644 src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcAttendeeReport.tsx create mode 100644 src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/YourMeetups.tsx diff --git a/package-lock.json b/package-lock.json index 0d96f7edc..74c81fa67 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@chakra-ui/react": "^2.6.1", "@emotion/react": "^11.10.6", "@emotion/styled": "^11.10.6", + "@types/react-star-ratings": "^2.3.3", "@types/react-tabs": "^5.0.5", "axios": "^1.3.4", "file-saver": "^2.0.5", @@ -32,6 +33,7 @@ "react-router-dom": "^6.9.0", "react-select": "^5.7.7", "react-spinners": "^0.13.8", + "react-star-ratings": "^2.3.0", "react-tabs": "^6.0.1", "react-tag-input-component": "^2.0.2", "react-tooltip": "^5.18.1", @@ -2102,16 +2104,21 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, "node_modules/@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", @@ -3332,21 +3339,21 @@ } }, "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==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", + "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", "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", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", "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" + "stylis": "4.2.0" } }, "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { @@ -3361,47 +3368,47 @@ } }, "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==", + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", + "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", "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" + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" } }, "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==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", "dependencies": { - "@emotion/memoize": "^0.8.0" + "@emotion/memoize": "^0.9.0" } }, "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==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" }, "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==", + "version": "11.13.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", + "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", "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", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { @@ -3414,33 +3421,33 @@ } }, "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==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz", + "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==", "dependencies": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.1", "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==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" }, "node_modules/@emotion/styled": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", - "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", + "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/is-prop-valid": "^1.2.0", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0" + "@emotion/babel-plugin": "^11.12.0", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0" }, "peerDependencies": { "@emotion/react": "^11.0.0-rc.0", @@ -3453,27 +3460,27 @@ } }, "node_modules/@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", "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==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz", + "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==" }, "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==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", @@ -4057,9 +4064,9 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.7", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", - "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -4410,9 +4417,9 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" }, "node_modules/@types/raf": { "version": "3.4.3", @@ -4448,6 +4455,14 @@ "@types/react": "*" } }, + "node_modules/@types/react-star-ratings": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/react-star-ratings/-/react-star-ratings-2.3.3.tgz", + "integrity": "sha512-8vLqJG1uRA2SmYBBMPWpv6QWHLvZ/a3XmELCIf4xh4VFXT7QkkrcthiLSMjQ4ibDiUtYYpyLB0JoR1lBHSHA2A==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-tabs": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@types/react-tabs/-/react-tabs-5.0.5.tgz", @@ -4458,9 +4473,9 @@ } }, "node_modules/@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", "dependencies": { "@types/react": "*" } @@ -5578,9 +5593,9 @@ } }, "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/d3-array": { "version": "3.2.4", @@ -8930,6 +8945,29 @@ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/react-star-ratings": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-star-ratings/-/react-star-ratings-2.3.0.tgz", + "integrity": "sha512-34Z/oFNDRRn4ZcX7F3t9ccnpo7SQ32gD/vsusQOBc6B6vlqaGR6tke1/Yx3jTDjemKRSmXqhKgpPTR7/JAXq6A==", + "dependencies": { + "classnames": "^2.2.1", + "prop-types": "^15.6.0", + "react": "^16.1.0" + } + }, + "node_modules/react-star-ratings/node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-style-singleton": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", @@ -9092,7 +9130,8 @@ "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "optional": true }, "node_modules/regenerator-transform": { "version": "0.15.2", @@ -9721,9 +9760,9 @@ } }, "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "node_modules/supports-color": { "version": "5.5.0", @@ -12011,11 +12050,18 @@ "dev": true }, "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", "requires": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + } } }, "@babel/template": { @@ -12943,21 +12989,21 @@ "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==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", + "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", "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", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", "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" + "stylis": "4.2.0" }, "dependencies": { "escape-string-regexp": { @@ -12968,100 +13014,100 @@ } }, "@emotion/cache": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", - "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", + "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", "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/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" } }, "@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" }, "@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", "requires": { - "@emotion/memoize": "^0.8.0" + "@emotion/memoize": "^0.9.0" } }, "@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==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" }, "@emotion/react": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", - "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "version": "11.13.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", + "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", "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", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.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==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz", + "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==", "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.1", "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==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" }, "@emotion/styled": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", - "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", + "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", "requires": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/is-prop-valid": "^1.2.0", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0" + "@emotion/babel-plugin": "^11.12.0", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0" } }, "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" }, "@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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", "requires": {} }, "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz", + "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==" }, "@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==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" }, "@esbuild/android-arm": { "version": "0.18.20", @@ -13384,9 +13430,9 @@ } }, "@popperjs/core": { - "version": "2.11.7", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", - "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==" + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" }, "@remix-run/router": { "version": "1.10.0", @@ -13727,9 +13773,9 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" }, "@types/raf": { "version": "3.4.3", @@ -13765,6 +13811,14 @@ "@types/react": "*" } }, + "@types/react-star-ratings": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/react-star-ratings/-/react-star-ratings-2.3.3.tgz", + "integrity": "sha512-8vLqJG1uRA2SmYBBMPWpv6QWHLvZ/a3XmELCIf4xh4VFXT7QkkrcthiLSMjQ4ibDiUtYYpyLB0JoR1lBHSHA2A==", + "requires": { + "@types/react": "*" + } + }, "@types/react-tabs": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@types/react-tabs/-/react-tabs-5.0.5.tgz", @@ -13774,9 +13828,9 @@ } }, "@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", "requires": { "@types/react": "*" } @@ -14584,9 +14638,9 @@ "dev": true }, "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "d3-array": { "version": "3.2.4", @@ -17034,6 +17088,28 @@ "integrity": "sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==", "requires": {} }, + "react-star-ratings": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-star-ratings/-/react-star-ratings-2.3.0.tgz", + "integrity": "sha512-34Z/oFNDRRn4ZcX7F3t9ccnpo7SQ32gD/vsusQOBc6B6vlqaGR6tke1/Yx3jTDjemKRSmXqhKgpPTR7/JAXq6A==", + "requires": { + "classnames": "^2.2.1", + "prop-types": "^15.6.0", + "react": "^16.1.0" + }, + "dependencies": { + "react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + } + } + }, "react-style-singleton": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", @@ -17149,7 +17225,8 @@ "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "optional": true }, "regenerator-transform": { "version": "0.15.2", @@ -17585,9 +17662,9 @@ "dev": true }, "stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "supports-color": { "version": "5.5.0", diff --git a/package.json b/package.json index 44c0dde72..f7a66458e 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@chakra-ui/react": "^2.6.1", "@emotion/react": "^11.10.6", "@emotion/styled": "^11.10.6", + "@types/react-star-ratings": "^2.3.3", "@types/react-tabs": "^5.0.5", "axios": "^1.3.4", "file-saver": "^2.0.5", @@ -35,6 +36,7 @@ "react-router-dom": "^6.9.0", "react-select": "^5.7.7", "react-spinners": "^0.13.8", + "react-star-ratings": "^2.3.0", "react-tabs": "^6.0.1", "react-tag-input-component": "^2.0.2", "react-tooltip": "^5.18.1", diff --git a/src/App.tsx b/src/App.tsx index 8b9c6c752..bd297dce5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -47,6 +47,8 @@ import UserInterest from "./modules/Common/Authentication/pages/Onboarding/UserI import LcMeetupIfo from "./modules/Dashboard/modules/LearningCircle/pages/Meetup/LcMeetup"; import OrganizationSetting from "./modules/Dashboard/modules/Settings/pages/Organization/Organization"; import SettingsHome from "./modules/Dashboard/modules/Settings/pages/Settings/SettingsHome"; +import LcReportAttendee from "./modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcAttendeeReport"; +import LcAdmin from "./modules/Dashboard/modules/LearningCircle/pages/LcAdmin/LcAdmin"; const Profile = lazy( () => import("./modules/Dashboard/modules/Profile/pages/Profile") @@ -365,6 +367,15 @@ function App() { /> ) }, + { + path: "lc-meetup-verification", + element: ( + } + /> + ) + }, { path: "campus-details", element: ( @@ -704,6 +715,10 @@ function App() { path: "learning-circle/meetup/:id", element: }, + { + path: "learning-circle/meetup/:id/attendee-report", + element: + }, { path: "learning-circle/details/:id", element: diff --git a/src/modules/Common/Authentication/pages/Onboarding.tsx b/src/modules/Common/Authentication/pages/Onboarding.tsx index ce6c5d71a..4c515e9d5 100644 --- a/src/modules/Common/Authentication/pages/Onboarding.tsx +++ b/src/modules/Common/Authentication/pages/Onboarding.tsx @@ -433,7 +433,6 @@ const Onboarding = (props: Props) => { setDefaultCommunity([ { value: foundCommunity.id, label: foundCommunity.title } ]); - console.log(defaultCommunity); } } }, [communityAPI]); @@ -1065,9 +1064,6 @@ const Onboarding = (props: Props) => { : null } onChange={OnChangeValue => { - console.log( - OnChangeValue - ); formik.setFieldValue( "community", OnChangeValue.map( diff --git a/src/modules/Common/Authentication/pages/Onboarding/CollegePage/CollegePage.tsx b/src/modules/Common/Authentication/pages/Onboarding/CollegePage/CollegePage.tsx index 54c7e4bf1..717600e19 100644 --- a/src/modules/Common/Authentication/pages/Onboarding/CollegePage/CollegePage.tsx +++ b/src/modules/Common/Authentication/pages/Onboarding/CollegePage/CollegePage.tsx @@ -113,7 +113,6 @@ export default function CollegePage() { } }); }; - // console.log(userData); return ( { - console.log(values); - if (!otpForm) { login( values.emailOrMuId, diff --git a/src/modules/Common/Authentication/pages/ResetPassword.tsx b/src/modules/Common/Authentication/pages/ResetPassword.tsx index f9a67cee7..c5e282cce 100644 --- a/src/modules/Common/Authentication/pages/ResetPassword.tsx +++ b/src/modules/Common/Authentication/pages/ResetPassword.tsx @@ -20,7 +20,6 @@ const ResetPassword = (props: Props) => { useEffect(() => { const paramToken = searchParams.get("token"); setToken(paramToken as string); - console.log(token); if (token.length > 0 && muid.length === 0) { getMuid(token, navigate, setMuID); } diff --git a/src/modules/Dashboard/layouts/DashboardRootLayout.tsx b/src/modules/Dashboard/layouts/DashboardRootLayout.tsx index a9f296452..628dea579 100644 --- a/src/modules/Dashboard/layouts/DashboardRootLayout.tsx +++ b/src/modules/Dashboard/layouts/DashboardRootLayout.tsx @@ -173,9 +173,15 @@ const DashboardRootLayout = (props: { component?: any }) => { url: "/dashboard/interest-groups", title: "Interest Groups", hasView: true, - roles: [roles.ADMIN] + roles: [roles.ADMIN, roles.FELLOW] // icon: }, + { + url: "/dashboard/lc-meetup-verification", + title: "LC Meetup Verification", + hasView: true, + roles: [roles.ADMIN] + }, { url: "/dashboard/college-levels", title: "College Levels", diff --git a/src/modules/Dashboard/modules/LearningCircle/pages/LcAdmin/LcAdmin.module.css b/src/modules/Dashboard/modules/LearningCircle/pages/LcAdmin/LcAdmin.module.css new file mode 100644 index 000000000..e69de29bb diff --git a/src/modules/Dashboard/modules/LearningCircle/pages/LcAdmin/LcAdmin.tsx b/src/modules/Dashboard/modules/LearningCircle/pages/LcAdmin/LcAdmin.tsx new file mode 100644 index 000000000..39b53d419 --- /dev/null +++ b/src/modules/Dashboard/modules/LearningCircle/pages/LcAdmin/LcAdmin.tsx @@ -0,0 +1,96 @@ +import Pagination from "@/MuLearnComponents/Pagination/Pagination"; +import Table, { Data } from "@/MuLearnComponents/Table/Table"; +import THead from "@/MuLearnComponents/Table/THead"; +import { dashboardRoutes } from "@/MuLearnServices/urls"; +import { ReactJSXElement } from "@emotion/react/types/jsx-namespace"; +import { ReactElement, useEffect, useState } from "react"; +import { getVerifiableMeetups } from "../../services/LearningCircleAPIs"; + +const LcAdmin = () => { + const [isLoading, setIsLoading] = useState(false); + const [data, setData] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [totalPages, setTotalPages] = useState(1); + const [perPage, setPerPage] = useState(20); + const [sort, setSort] = useState(""); + + useEffect(() => { + setIsLoading(true); + getVerifiableMeetups().then(res => { + console.log(res); + setData(res); + setIsLoading(false); + }); + }, []); + + const columnOrder: { + column: string; + Label: string; + isSortable: boolean; + wrap?: ( + data: string | ReactElement, + id: string, + row: Data + ) => ReactJSXElement; + }[] = [ + { + column: "learning_circle", + Label: "Learning Circle", + isSortable: false + }, + { column: "title", Label: "Meetup Title", isSortable: false }, + { column: "join_count", Label: "Join Count", isSortable: false }, + { + column: "interested_count", + Label: "Interest Count", + isSortable: false + }, + { + column: "report_submitted_attendees", + Label: "Report Submitted Attendees", + isSortable: false + }, + { + column: "held_on", + Label: "Started At", + isSortable: false + } + ]; + return ( + <> + {}} + > + {}} + action={false} + /> +
+ {!isLoading && ( + {}} + handlePreviousClick={() => {}} + onSearchText={() => {}} + onPerPageNumber={() => {}} + perPage={perPage} + setPerPage={setPerPage} + /> + )} +
+ {/*use when u don't need or cause
needs atleast 2 children*/} +
+ + ); +}; + +export default LcAdmin; diff --git a/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/LcDashboard.module.css b/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/LcDashboard.module.css index d55708f69..ec3342014 100644 --- a/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/LcDashboard.module.css +++ b/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/LcDashboard.module.css @@ -133,10 +133,11 @@ display: flex; align-items: flex-start; justify-content: space-between; + flex-direction: column; width: 100%; background-color: white; padding: 5%; - gap: 10px; + gap: 20px; height: 100%; } .ReportWrapper .DetailSection { @@ -146,6 +147,86 @@ justify-content: space-between; gap: 20px; width: 65%; + + .tasks { + width: 100%; + display: flex; + flex-direction: column; + gap: 10px; + width: 100%; + h4 { + text-align: start; + font-size: 18px; + font-weight: 500; + } + p { + font-size: 15px; + text-align: start; + font-weight: 400; + color: #3d5c9b; + margin-bottom: 10px; + } + .task { + width: 100%; + background: #fff; + box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15); + border-radius: 10px; + padding: 10px 20px; + display: flex; + flex-direction: column; + align-items: start; + justify-content: center; + .taskTitle { + font-size: 18px; + font-weight: 600; + gap: 10px; + display: flex; + align-items: center; + } + .taskPow { + display: none; + width: 100%; + flex-direction: row; + align-items: center; + justify-content: center; + gap: 10px; + .choosenFile { + display: none; + align-items: center; + gap: 10px; + &.active { + display: flex; + } + .file { + font-size: 15px; + font-weight: 600; + color: #456ff6; + display: flex; + align-items: center; + gap: 5px; + .icon { + font-size: 20px; + } + } + .delete { + color: red; + font-size: 15px; + font-weight: 600; + cursor: pointer; + } + } + &.active { + display: flex; + } + .input { + width: 100%; + clip-path: none; + padding: 20px 10px; + border-radius: 5px; + } + } + } + } } .ReportWrapper .DetailSection .Sectionone { display: flex; @@ -242,6 +323,77 @@ width: 100%; gap: 10px; align-items: flex-start; + + .attendees { + width: 100%; + width: 100%; + display: flex; + flex-direction: column; + gap: 10px; + .attendee { + width: 100%; + display: flex; + gap: 10px; + padding: 15px; + background-color: rgba(238, 242, 255, 1); + align-items: center; + justify-content: space-between; + border-radius: 10px; + font-size: 17px; + font-weight: 600; + cursor: pointer; + h4 { + font-size: 13px; + font-weight: 700; + } + .ratingHeading { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + .fullname { + display: flex; + align-items: center; + gap: 10px; + } + .rating { + display: flex; + align-items: center; + justify-content: center; + color: #456ff6; + } + } + .proof { + display: none; + flex-direction: column; + align-items: start; + width: 100%; + background: #fff; + padding: 10px; + border-radius: 10px; + &.active { + display: flex; + } + .reportText { + font-size: 13px; + color: #22222290; + } + .task { + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + gap: 10px; + align-items: center; + padding: 10px; + background: #fff; + box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.15); + border-radius: 5px; + font-weight: 500; + } + } + } + } } .ReportWrapper .DetailSection .SectionThree > p { color: black; @@ -416,6 +568,21 @@ .HistoryDataWrapper .Headings { width: 43%; text-align: left; + .qrcode { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + margin: 10px; + gap: 10px; + img { + padding: 20px; + background: white; + border-radius: 10px; + box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15); + } + } } .HistoryDataWrapper .detailedSection { width: 55%; @@ -434,11 +601,12 @@ } .meetupTags { display: flex; - flex-direction: row; + flex-direction: row !important; flex-wrap: wrap; width: 100%; .meetupInfoTag { + font-size: 13px; display: flex; gap: 10px; align-items: center; diff --git a/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcAttendeeReport.tsx b/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcAttendeeReport.tsx new file mode 100644 index 000000000..ff8f0d44d --- /dev/null +++ b/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcAttendeeReport.tsx @@ -0,0 +1,276 @@ +import { createRef, useEffect, useRef, useState } from "react"; +import styles from "../LcDashboard.module.css"; +import { + getMeetupInfo, + submitAttendeeReport, + submitAttendeeTaskImage +} from "../../../services/LearningCircleAPIs"; +import toast from "react-hot-toast"; +import { useNavigate, useParams } from "react-router-dom"; +import { Checkbox, Input } from "@chakra-ui/react"; +import { PowerfulButton } from "@/MuLearnComponents/MuButtons/MuButton"; + +const LcReportAttendee = () => { + const [reportText, setReportText] = useState(""); + const [meetup, setMeetup] = useState(); + const props = useParams<{ id: string }>(); + const filePickerRefs = useRef>({}); // Object to store refs by task.id + const [completedTasks, setCompletedTasks] = useState([]); + const [taskImages, setTaskImages] = useState<{ + [key: string]: File | null; + }>({}); + const [taskUrls, setTaskUrls] = useState<{ [key: string]: string }>({}); + const [submitedTasks, setSubmittedtasks] = useState([]); + const [isTaskPOWSubmitting, setIsTaskPOWSubmitting] = + useState(false); + const navigate = useNavigate(); + useEffect(() => { + getMeetupInfo(setMeetup, props.id ?? ""); + }, [props.id]); + useEffect(() => { + if (meetup?.is_attendee_report_submitted) { + toast.success("Report already submitted"); + navigate("/dashboard/learning-circle"); + return; + } + meetup?.tasks.forEach(task => { + if (task.is_completed) { + setSubmittedtasks([...submitedTasks, task.id ?? ""]); + } + }); + }, [meetup]); + const handleTaskSubmit = (taskId: string) => { + const formData = new FormData(); + formData.append("meet_task", taskId); + if (taskImages[taskId]) { + console.log(taskImages[taskId]); + formData.append("is_image", "1"); + formData.append( + "image_url", + taskImages[taskId] as any, + (taskImages[taskId] as any).name + ); + setIsTaskPOWSubmitting(true); + submitAttendeeTaskImage(props.id ?? "", taskId, formData).then( + res => { + if (res) { + setSubmittedtasks([...submitedTasks, taskId]); + setIsTaskPOWSubmitting(false); + } + } + ); + } else if (taskUrls[taskId]) { + formData.append("proof_url", taskUrls[taskId]); + setIsTaskPOWSubmitting(true); + submitAttendeeTaskImage(props.id ?? "", taskId, formData).then( + res => { + if (res) { + setSubmittedtasks([...submitedTasks, taskId]); + } + setIsTaskPOWSubmitting(false); + } + ); + } else { + toast.error("Please upload an image or provide a url"); + } + }; + const handleSubmit = (event: any) => { + event.preventDefault(); + const formData = new FormData(); + if (reportText.length > 0) { + formData.append("report", reportText); + if (submitedTasks.length === 0) { + toast.error( + "Hmmm, please submit proof of work for atleast one task you have done." + ); + return; + } + submitAttendeeReport(props.id ?? "", formData).then(() => { + navigate("/dashboard/learning-circle"); + }); + } else { + toast.error("Please provide a brief description"); + } + }; + return ( +
+
+
+

Brief description *

+ +
+
+

Meeting Tasks

+

+ Please check which tasks you've done, and upload an + image or a link that shows the work you have done. +

+ {meetup?.tasks.map((task, index) => ( +
+
+ { + e.target.checked + ? setCompletedTasks([ + ...(completedTasks as any), + task.id + ]) + : setCompletedTasks( + completedTasks.filter( + id => id !== task.id + ) + ); + }} + /> + + {task.title} + +
+
+
+ { + e.preventDefault(); + filePickerRefs.current[ + task.id ?? "" + ]?.click(); + }} + disabled={isTaskPOWSubmitting} + > + Upload Image + + + + {taskImages[task.id ?? ""]?.name ?? ""} + +
+ OR + { + setTaskUrls({ + ...taskUrls, + [task.id ?? ""]: e.target.value + }); + }} + className={styles.input} + disabled={isTaskPOWSubmitting} + placeholder="Enter URL" + /> + + (filePickerRefs.current[task.id ?? ""] = + el) + } + type="file" + onChange={e => { + if (e.target.files) { + if ( + e.target.files[0].size > 5000000 + ) { + toast.error( + "File size should not exceed 5MB" + ); + return; + } + if ( + e.target.files[0].type != + "image/jpeg" && + e.target.files[0].type != + "image/png" + ) { + toast.error( + "Please upload png or jpeg image" + ); + return; + } + setTaskImages({ + ...taskImages, + [task.id ?? ""]: + e.target.files[0] + }); + } + }} + style={{ display: "none" }} + className={styles.input} + placeholder="Upload File" + disabled={isTaskPOWSubmitting} + /> + + handleTaskSubmit(task.id ?? "") + } + > + Submit + +
+
+ ))} +
+
+ +
+ ); +}; + +export default LcReportAttendee; diff --git a/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcHistory.tsx b/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcHistory.tsx index 9a0b8292a..b41071d0e 100644 --- a/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcHistory.tsx +++ b/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcHistory.tsx @@ -1,5 +1,6 @@ import styles from "../LcDashboard.module.css"; import { + fetchURLQRCode, interestedMeetup, joinMeetup } from "../../../services/LearningCircleAPIs"; @@ -12,6 +13,8 @@ import { import MuLoader from "@/MuLearnComponents/MuLoader/MuLoader"; import { PowerfulButton } from "@/MuLearnComponents/MuButtons/MuButton"; import toast from "react-hot-toast"; +import { useNavigate, useSearchParams } from "react-router-dom"; +import { useEffect, useState } from "react"; type Props = { id: string | undefined; @@ -20,10 +23,33 @@ type Props = { }; const LcHistory = (props: Props) => { - console.log(props.lc); + const navigate = useNavigate(); + const [blob, setBlob] = useState(null); + const [meetupCode, setMeetupCode] = useState(""); + const [query, setQuery] = useSearchParams(); + useEffect(() => { + fetchURLQRCode( + setBlob, + (window.location.href ?? "unknown") + + "/?code=" + + props.lc?.meet_code + ); + }, [props.id]); + + useEffect(() => { + if (query.get("code")) { + const code = query.get("code"); + if (code) { + setMeetupCode(code); + } + } + }, [query]); const handleInterested = (e: any) => { e.preventDefault(); - if (props.lc?.is_lc_member) { + if ( + (props.lc?.is_lc_member || (props.lc?.is_started && meetupCode)) && + !props.lc?.joined_at + ) { joinMeetup(props.lc?.id ?? "").then(res => { props.setLc({ ...props.lc, @@ -82,8 +108,10 @@ const LcHistory = (props: Props) => { className={styles.meetupInfoTag} onClick={() => { navigator.clipboard.writeText( - window.location.href ?? - "NOTCOPIED" + (window.location.href ?? + "NOTCOPIED") + + "/?code=" + + props.lc?.meet_code ); toast.success("Link Copied"); }} @@ -110,6 +138,18 @@ const LcHistory = (props: Props) => {

)} + {props.lc.is_started && + props.lc.is_lc_member ? ( +
+ +

+ Share this QR Code for joining the + meet. +

+
+ ) : ( + <> + )} {

Venue:{" "} @@ -132,12 +172,20 @@ const LcHistory = (props: Props) => {

Agenda

{props.lc.agenda}

+ {props.lc.pre_requirements ? ( + <> +

Prerequisites

+

{props.lc.pre_requirements}

+ + ) : ( + <> + )}

Tasks

{props.lc.tasks.map((task, index) => (
{index + 1} - {task} + {task.title}
))}
@@ -150,6 +198,23 @@ const LcHistory = (props: Props) => {
) : null} + {props.lc.joined_at ? ( + { + e.preventDefault(); + navigate( + "/dashboard/learning-circle/meetup/" + + props.lc?.id + + "/attendee-report" + ); + }} + > + {props.lc.is_attendee_report_submitted + ? "Report Submitted" + : "Submit Report"} + + ) : null} { } disabled={props.lc.joined_at != null} > - {props.lc.is_lc_member - ? props.lc.is_started - ? "Join" - : "Join & Start meetup" - : props.lc.joined_at + {props.lc.joined_at ? "Joined" + : props.lc.is_started + ? props.lc.is_lc_member || meetupCode + ? "Join" + : "I'm Interested to Join" + : props.lc.is_lc_member + ? "Join & Start Meetup" : props.lc.is_interested - ? "Undo Interest" + ? "Undo Interested" : "I'm Interested Join"} diff --git a/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcHome.tsx b/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcHome.tsx index b2af21824..a8b0af1dd 100644 --- a/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcHome.tsx +++ b/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcHome.tsx @@ -23,6 +23,7 @@ type Props = { const LcHome = (props: Props) => { const [meetups, setMeetups] = useState([]); const [pastMeetups, setPastMeetups] = useState([]); + const [reportPending, setReportPending] = useState([]); const [selectedMeeting, setSelectedMeeting] = useState(""); useEffect(() => { getLcMeetups(props.id ?? "").then(res => { @@ -32,6 +33,7 @@ const LcHome = (props: Props) => { } else { setMeetups(res.meetups); setPastMeetups(res.past); + setReportPending(res.report_pending); } } }); @@ -257,55 +259,124 @@ const LcHome = (props: Props) => { {!props.temp.isSchedule && !props.temp.isTeam && !props.temp.isReport ? ( -
- {props.lc?.previous_meetings && - props.lc?.previous_meetings.length > 0 && ( -

Your past meetings

- )} -
- {pastMeetups.map((report, index) => ( -
{ - navigate( - "/dashboard/learning-circle/meetup/" + - report.id - ); - }} - > -
-

{index + 1}.

-

- {convertToFormatedDate( - report.meet_time - )} -

-
-
-

+ {(reportPending ?? []).length > 0 ? ( +

+

Pending Report Submissions

+
+ {reportPending.map((report, index) => ( +
- {convertToFormatedDate( - report.meet_time - )}{" "} - {convert24to12( - extract24hTimeFromDateTime( +
+

{index + 1}.

+

+ {convertToFormatedDate( + report.meet_time + )} +

+
+
+

+ {convertToFormatedDate( + report.meet_time + )}{" "} + {convert24to12( + extract24hTimeFromDateTime( + report.meet_time + ) + )} +

+ +
+
+ ))} +
+
+ ) : ( + <> + )} +
+ {props.lc?.previous_meetings && + props.lc?.previous_meetings.length > 0 && ( +

Your past meetings

+ )} +
+ {pastMeetups.map((report, index) => ( +
{ + navigate( + "/dashboard/learning-circle/meetup/" + + report.id + ); + }} + > +
+

{index + 1}.

+

+ {convertToFormatedDate( report.meet_time - ) - )} -

- + )} +

+
+
+

+ {convertToFormatedDate( + report.meet_time + )}{" "} + {convert24to12( + extract24hTimeFromDateTime( + report.meet_time + ) + )} +

+ +
-
- ))} + ))} +
-
+ ) : ( <> )} diff --git a/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcMeetCreate.tsx b/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcMeetCreate.tsx index 5bce1ad11..49888b147 100644 --- a/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcMeetCreate.tsx +++ b/src/modules/Dashboard/modules/LearningCircle/pages/LcDashboard/components/LcMeetCreate.tsx @@ -16,7 +16,7 @@ type Props = { }; const LcMeetCreate = (props: Props) => { - const [tasks, setTasks] = useState([]); + const [tasks, setTasks] = useState([]); const taskInputRef = createRef(); const [isLoading, setIsLoading] = useState(false); const formik = useFormik({ @@ -147,7 +147,7 @@ const LcMeetCreate = (props: Props) => {
{index + 1}. -

{task}

+

{task.title}

{ {formik.values.need_pre_requirements && (