From 6dbbfdd0b4d36d6952a729ea7357cb1387548bbb Mon Sep 17 00:00:00 2001 From: Niyonshuti Jean De Dieu <152473876+Jadowacu1@users.noreply.github.com> Date: Mon, 5 Aug 2024 00:28:05 +0200 Subject: [PATCH] ft Admin and Seller Static Graphs Dashboard (#58) --- package-lock.json | 280 +++++++++++++++++- package.json | 3 +- public/assets/images/greenLines.png | Bin 0 -> 45991 bytes public/assets/images/redLines.png | Bin 0 -> 41803 bytes src/App.scss | 2 + src/assets/styles/SellerLayout.scss | 91 +++++- src/assets/styles/adminDashboard.scss | 261 +++++++++++----- src/assets/styles/cards.scss | 46 +++ src/components/cards/cards.tsx | 35 +++ src/components/layout/SellerLayout.tsx | 4 +- src/pages/admin/Dashboard.tsx | 6 +- src/pages/admin/OverView.tsx | 237 ++++++++++++++- src/pages/seller/SellerDashboard.tsx | 204 ++++++++++++- src/store/features/admin/adminService.tsx | 13 + src/store/features/admin/adminSlice.tsx | 54 +++- src/store/features/product/productService.tsx | 12 +- .../product/sellerCollectionProductsSlice.tsx | 49 ++- 17 files changed, 1201 insertions(+), 96 deletions(-) create mode 100644 public/assets/images/greenLines.png create mode 100644 public/assets/images/redLines.png create mode 100644 src/assets/styles/cards.scss create mode 100644 src/components/cards/cards.tsx diff --git a/package-lock.json b/package-lock.json index 3af8300c..84689ae1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "react-router-dom": "^6.24.0", "react-spinners": "^0.14.1", "react-toastify": "^10.0.5", + "recharts": "^2.12.7", "save-dev": "0.0.1-security", "socket.io-client": "^4.7.5", "yup": "^1.4.0" @@ -7575,6 +7576,69 @@ "@types/node": "*" } }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, "node_modules/@types/detect-port": { "version": "1.3.5", "dev": true, @@ -11510,6 +11574,127 @@ "url": "https://github.com/imagemin/cwebp-bin?sponsor=1" } }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "dev": true, @@ -11642,6 +11827,12 @@ "dev": true, "license": "MIT" }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, "node_modules/decode-uri-component": { "version": "0.2.2", "dev": true, @@ -14073,7 +14264,6 @@ }, "node_modules/eventemitter3": { "version": "4.0.7", - "dev": true, "license": "MIT" }, "node_modules/events": { @@ -14386,6 +14576,15 @@ "version": "3.1.3", "license": "MIT" }, + "node_modules/fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/fast-glob": { "version": "3.3.2", "dev": true, @@ -16582,6 +16781,15 @@ "node": ">= 0.4" } }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/interpret": { "version": "3.1.1", "dev": true, @@ -22880,6 +23088,21 @@ "react": "^16.3.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/react-smooth": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz", + "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-spinners": { "version": "0.14.1", "license": "MIT", @@ -23094,6 +23317,38 @@ "node": ">= 4" } }, + "node_modules/recharts": { + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz", + "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^16.10.2", + "react-smooth": "^4.0.0", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, "node_modules/rechoir": { "version": "0.8.0", "dev": true, @@ -25108,7 +25363,6 @@ }, "node_modules/tiny-invariant": { "version": "1.3.3", - "dev": true, "license": "MIT" }, "node_modules/tiny-warning": { @@ -25987,6 +26241,28 @@ "dev": true, "license": "MIT" }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, "node_modules/vite": { "version": "5.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", diff --git a/package.json b/package.json index ba875b81..296ec452 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "scripts": { "dev": "webpack serve --config webpack.dev.config.ts", "test": "jest --watchAll=false --coverage", - "build": "webpack --config webpack.prod.config.ts", + "build": "node --max_old_space_size=4096 node_modules/webpack/bin/webpack.js --config webpack.prod.config.ts", "lint": "eslint src --ext ts,tsx --ignore-pattern 'node_modules'", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build" @@ -36,6 +36,7 @@ "react-router-dom": "^6.24.0", "react-spinners": "^0.14.1", "react-toastify": "^10.0.5", + "recharts": "^2.12.7", "save-dev": "0.0.1-security", "socket.io-client": "^4.7.5", "yup": "^1.4.0" diff --git a/public/assets/images/greenLines.png b/public/assets/images/greenLines.png new file mode 100644 index 0000000000000000000000000000000000000000..df48563e671a641a3d65f88265d1890a84323ee9 GIT binary patch literal 45991 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 A;{X5v literal 0 HcmV?d00001 diff --git a/src/App.scss b/src/App.scss index 55c86793..b109170a 100644 --- a/src/App.scss +++ b/src/App.scss @@ -33,3 +33,5 @@ @import "./assets/styles/liveChat.scss"; @import "./assets//styles/UserProfile.scss"; @import "./assets/styles/SellerSideProduct.scss"; +@import "./assets/styles/tables.scss"; +@import "./assets/styles/cards.scss"; diff --git a/src/assets/styles/SellerLayout.scss b/src/assets/styles/SellerLayout.scss index a4af7997..477a4cc4 100644 --- a/src/assets/styles/SellerLayout.scss +++ b/src/assets/styles/SellerLayout.scss @@ -1,6 +1,7 @@ .seller__wrapper { height: 100vh; display: flex; + .left__side { width: 26rem; @@ -56,7 +57,7 @@ height: 100%; width: 19.5rem; margin-left: .1rem; - + .dashboard__side { display: flex; flex-direction: column; @@ -110,6 +111,7 @@ flex-direction: column; flex: 1; max-height: 100vh; + } .main__seller__dashboard { @@ -120,19 +122,18 @@ max-height: calc(100vh - 120px); background-color: $container-color; padding: 20px; - + .outlet { - background-color: white; flex: 0 0 60%; border-radius: 20px; min-height: 95%; max-height: 95%; min-width: 70%; max-width: 70%; - box-shadow: 0 0 1rem rgba(0, 0, 0, 0.1); padding: 2rem; overflow-y: scroll; scroll-behavior: smooth; + background-color: white; &::-webkit-scrollbar { display: none; @@ -198,7 +199,7 @@ margin-top: 1rem; color: $text-color; .order-progress { - color: $primary-color; + color: #57ce57; margin-left: 0.5rem; margin-right: 0.5rem; } @@ -257,10 +258,88 @@ .seller-dashboard-container { display: flex; + flex-direction: column; justify-content: center; align-items: center; width: 100%; - height: 100vh; + gap: 30px; + + .statisticCards { + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + + .card { + transition: margin-top 0.3s ease; + } + + .card:hover { + margin-top: -20px; + } + } + .chart-container { + width: 95%; + height: auto; + border-radius: 30px; + background-color: #fff; + overflow: hidden; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); + + + .chart-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 20px; + background-color: #fff; + border-bottom: 1px solid #e0e0e0; + .sub-header { + display: flex; + flex-direction: column; + gap: 10px; + h1 { + margin-left: 2%; + } + .legend { + display: flex; + align-items: center; + flex-direction: row; + gap: 20px; + + .dot { + height: 10px; + width: 10px; + border-radius: 50%; + + &.completed { + background-color: #ff7300; + } + + &.cancelled { + background-color: #bfbfbf; + } + } + } + } + + .monthDropDown { + .dropdown-button { + background-color: #ff7300; + color: #fff; + border: none; + padding: 5px 10px; + border-radius: 5px; + cursor: pointer; + font-size: 14px; + + .arrow-down { + margin-left: 5px; + } + } + } + } + } } @media (max-width: 1024px) { diff --git a/src/assets/styles/adminDashboard.scss b/src/assets/styles/adminDashboard.scss index 4df73b24..dc90dee6 100644 --- a/src/assets/styles/adminDashboard.scss +++ b/src/assets/styles/adminDashboard.scss @@ -1,88 +1,207 @@ .admin__wrapper { - height: 100vh; - display: flex; + height: 100vh; + display: flex; + + .left__side { + width: 26rem; + + &::before { + position: absolute; + content: ""; + width: 6.5rem; + height: 100%; + background-color: $primary-color; + } - .left__side { - width: 26rem; + .icons { + position: relative; + display: flex; + flex-direction: column; + height: 100%; + width: 100%; + .dashboard, + .users, + .logout { + display: flex; + align-items: center; + padding-left: 1rem; + gap: 2.5rem; - &::before { - position: absolute; - content: ""; - width: 6.5rem; - height: 100%; - background-color: $primary-color; + .icon { + font-size: 1.6rem; + color: $white-color; } - .icons { - position: relative; + .icons__title__link { + .text_content { + color: $text-color; + font-size: 1.8rem; + transition: all 0.5s ease-in-out; + text-decoration: none; + cursor: pointer; + } + + .active { display: flex; - flex-direction: column; - height: 100%; - width: 100%; - .dashboard, - .users, - .logout { - display: flex; - align-items: center; - padding-left: 1rem; - gap: 2.5rem; - - .icon { - font-size: 1.6rem; - color: $white-color; - } - - .icons__title__link { - .text_content { - color: $text-color; - font-size: 1.8rem; - transition: all 0.5s ease-in-out; - text-decoration: none; - cursor: pointer; - - } - - .active { - display: flex; - background-color: $menu-hover; - width: 15rem; - padding: 1rem 1rem; - transition: all 0.5s ease-in-out; - align-items: center; - border-radius: .5rem; - } - } - } - .upper{ - display: flex; - flex-direction: column; - position: absolute; - top: 10rem; - gap: 2rem; - } - .logout{ - position: absolute; - bottom: 2rem; - } + background-color: $menu-hover; + width: 15rem; + padding: 1rem 1rem; + transition: all 0.5s ease-in-out; + align-items: center; + border-radius: 0.5rem; + } } + } + .upper { + display: flex; + flex-direction: column; + position: absolute; + top: 10rem; + gap: 2rem; + } + .logout { + position: absolute; + bottom: 2rem; + } } + } + .main__content__dashboard { + display: flex; + flex-direction: column; + flex: 1; + } - .main__content__dashboard { - display: flex; - flex-direction: column; - flex: 1; + .main__dashboard { + display: flex; + justify-content: center; + align-items: center; + flex: 1; + width: 100%; + background: #f0f0f0; + } +} + +.adminOverview { + display: flex; + flex-direction: column; + width: 100%; + gap: 10px; + + .statisticCards { + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + + .card { + transition: margin-top 0.3s ease; } + + .card:hover { + margin-top: -30px; + } + } + .chart-container { + width: 90%; + height: auto; + border-radius: 30px; + background-color: #fff; + overflow: hidden; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + margin-left: 5%; - .main__dashboard { + .chart-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 20px; + background-color: #fff; + border-bottom: 1px solid #e0e0e0; + .sub-header { display: flex; - justify-content: center; - align-items: center; - flex: 1; - width: 100%; - background-color: $container-color; + flex-direction: column; + gap: 10px; + h1 { + margin-left: 2%; + } + .legend { + display: flex; + align-items: center; + flex-direction: row; + gap: 20px; + + .dot { + height: 10px; + width: 10px; + border-radius: 50%; + + &.completed { + background-color: #ff7300; + } + + &.cancelled { + background-color: #bfbfbf; + } + } + } + } + + .monthDropDown { + .dropdown-button { + background-color: #ff7300; + color: #fff; + border: none; + padding: 5px 10px; + border-radius: 5px; + cursor: pointer; + font-size: 14px; + + .arrow-down { + margin-left: 5px; + } + } + } } + } +} +.monthDropDown { + position: relative; + display: inline-block; +} + +.dropdown-button { + background-color: #ffffff; + border: 1px solid #cccccc; + padding: 10px; + cursor: pointer; +} + +.arrow-down { + margin-left: 5px; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + background-color: #ffffff; + // border: 1px solid #cccccc; + box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); + z-index: 1; + list-style: none; + padding: 0; + margin: 0; + width: 100%; +} +.dropdown-item { + padding: 10px; + cursor: pointer; } -@media only screen and (min-width: 76.8rem) {} \ No newline at end of file +.dropdown-item:hover { + background-color: #f1f1f1; +} +@media only screen and (min-width: 76.8rem) { +} diff --git a/src/assets/styles/cards.scss b/src/assets/styles/cards.scss new file mode 100644 index 00000000..6ac1d619 --- /dev/null +++ b/src/assets/styles/cards.scss @@ -0,0 +1,46 @@ +.card { + background: #fff; + border-radius: 15px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px; + margin: 10px; + width: 180px; + + .card-content { + h3 { + margin: 0; + font-size: 16px; + color: #555; + } + + h1 { + margin: 10px 0; + font-size: 32px; + color: #333; + } + + p { + margin: 0; + font-size: 14px; + + &.positive { + color: #57ce57; + } + + &.negative { + color: red; + } + } + } + + .card-graph { + img { + width: 60px; + height: 40px; + } + } + } + \ No newline at end of file diff --git a/src/components/cards/cards.tsx b/src/components/cards/cards.tsx new file mode 100644 index 00000000..c509f70c --- /dev/null +++ b/src/components/cards/cards.tsx @@ -0,0 +1,35 @@ +/* eslint-disable */ +import React from 'react'; +import PropTypes from 'prop-types'; +import greenLines from "../../../public/assets/images/greenLines.png" +import redLines from "../../../public/assets/images/redLines.png" +const Card = ({ title, value, percentage, isPositive, onClick }) => { + return ( +
+
+

{title}

+

{value}

+

+ {isPositive ? '+' : '-'}{percentage}% +

+
+
+ graph +
+
+ ); + }; + + Card.propTypes = { + title: PropTypes.string.isRequired, + value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, + percentage: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, + isPositive: PropTypes.bool.isRequired, + onClick: PropTypes.func + }; + + Card.defaultProps = { + onClick: undefined + }; + + export default Card; diff --git a/src/components/layout/SellerLayout.tsx b/src/components/layout/SellerLayout.tsx index df0a9bff..4e72c5a9 100644 --- a/src/components/layout/SellerLayout.tsx +++ b/src/components/layout/SellerLayout.tsx @@ -56,7 +56,7 @@ export const SellerLayout = () => { .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()) .slice(0, 5); - const completionPercentage = 12; + const completionPercentage = 80; const getCompletionColor = (percentage) => { if (percentage >= 80) return "#00FF00"; @@ -185,4 +185,4 @@ export const SellerLayout = () => { ); -}; +}; \ No newline at end of file diff --git a/src/pages/admin/Dashboard.tsx b/src/pages/admin/Dashboard.tsx index 895d384a..8f4fbf85 100644 --- a/src/pages/admin/Dashboard.tsx +++ b/src/pages/admin/Dashboard.tsx @@ -11,6 +11,7 @@ import { toast } from "react-toastify"; import { Backdrop, Box, CircularProgress, Typography } from "@mui/material"; import { Meta } from "../../components/Meta"; + export const AdminDashboard = () => { const dispatch = useAppDispatch(); const { isLoading, message, isError } = useAppSelector( @@ -44,7 +45,7 @@ export const AdminDashboard = () => { return; } }, [isError, message, navigate]); - + return ( <> @@ -111,7 +112,8 @@ export const AdminDashboard = () => {
- + +
diff --git a/src/pages/admin/OverView.tsx b/src/pages/admin/OverView.tsx index 90358824..8613639a 100644 --- a/src/pages/admin/OverView.tsx +++ b/src/pages/admin/OverView.tsx @@ -1,12 +1,241 @@ /* eslint-disable */ -import React from "react"; +import React, { useEffect, useState } from "react"; import { Meta } from "../../components/Meta"; - +import { + BarChart, + Bar, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + ResponsiveContainer, +} from "recharts"; +import Card from "../../components/cards/cards"; +import { + getAllShops, + getAllUsers, + getOrderHistory, +} from "../../store/features/admin/adminSlice"; +import { useAppDispatch, useAppSelector } from "../../store/store"; +import { useNavigate } from 'react-router-dom'; export const OverViewDashboard = () => { + const getMonthName = (dateString) => { + const date = new Date(dateString); + return date.toLocaleString("default", { month: "short" }); + }; + + const predefinedMonths = [ + { name: "Jan", Completed: 0, Cancelled: 0 }, + { name: "Feb", Completed: 0, Cancelled: 0 }, + { name: "Mar", Completed: 0, Cancelled: 0 }, + { name: "Apr", Completed: 0, Cancelled: 0 }, + { name: "May", Completed: 0, Cancelled: 0 }, + { name: "Jun", Completed: 0, Cancelled: 0 }, + { name: "Jul", Completed: 0, Cancelled: 0 }, + { name: "Aug", Completed: 0, Cancelled: 0 }, + { name: "Sep", Completed: 0, Cancelled: 0 }, + { name: "Oct", Completed: 0, Cancelled: 0 }, + { name: "Nov", Completed: 0, Cancelled: 0 }, + { name: "Dec", Completed: 0, Cancelled: 0 }, + ]; + + const [orderStats, setOrderStats] = useState([]); + const [numberOfBuyers, setNumberOfBuyers] = useState(null); + const [numberOfSellers, setNumberOfSellers] = useState(null); + const [numberOfShops, setNumberOfShops] = useState(null); + const [selectedMonth, setSelectedMonth] = useState("All"); + const dispatch = useAppDispatch(); + const navigate = useNavigate(); + + useEffect(() => { + try { + const countUsers = async () => { + const usersResponse = await dispatch(getAllUsers()); + const shopResponse = await dispatch(getAllShops()); + const shopNumber = shopResponse.payload.data.shops.length; + const users = usersResponse.payload.data.user; + let buyerCount = 0; + let sellerCount = 0; + + users.forEach((user) => { + if (user.role === "buyer") { + buyerCount++; + } else if (user.role === "seller") { + sellerCount++; + } + }); + setNumberOfBuyers(buyerCount); + setNumberOfSellers(sellerCount); + setNumberOfShops(shopNumber); + }; + countUsers(); + } catch (error) { + console.error("Failed to fetch Users:", error); + } + }, [dispatch, getAllUsers]); + + useEffect(() => { + const fetchData = async () => { + try { + const response = await dispatch(getOrderHistory()).unwrap(); + const aggregatedData = response.data.OrderHistory.reduce( + (acc, order) => { + const monthName = getMonthName(order.orderDate); + const month = acc.find((m) => m.name === monthName); + if (month) { + if (order.status === "completed") { + month.Completed += 1; + } else if (order.status === "canceled") { + month.Cancelled += 1; + } + } + return acc; + }, + [...predefinedMonths] + ); + setOrderStats(aggregatedData); + } catch (error) { + console.error("Failed to fetch order history:", error); + } + }; + fetchData(); + }, [dispatch]); + + const MonthDropDown = () => { + const [isOpen, setIsOpen] = useState(false); + const months = [ + "All", + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December", + ]; + + const toggleDropdown = () => { + setIsOpen(!isOpen); + }; + + const handleMonthSelect = (month) => { + setSelectedMonth(month); + setIsOpen(false); + }; + + return ( +
+ + {isOpen && ( +
    + {months.map((month, index) => ( +
  • handleMonthSelect(month)} + > + {month} +
  • + ))} +
+ )} +
+ ); + }; + + const filteredOrderStats = + selectedMonth === "All" + ? orderStats + : orderStats.filter( + (stat) => stat.name === selectedMonth.substring(0, 3) + ); + return ( <> - -
OverViewDashboard
+
+ + +
+ navigate("/admin/dashboard/users")} + /> + + navigate("/admin/dashboard/users")} + /> + +
+ +
+
+
+

Overview sales

+
+ Completed + Cancelled +
+
+ + +
+ + + + + + + + + + + +
+
); }; diff --git a/src/pages/seller/SellerDashboard.tsx b/src/pages/seller/SellerDashboard.tsx index 5ddd2535..a92aa074 100644 --- a/src/pages/seller/SellerDashboard.tsx +++ b/src/pages/seller/SellerDashboard.tsx @@ -1,14 +1,208 @@ /* eslint-disable */ -import React from "react"; -import LiveChat from "../../components/live-chat/LiveChat"; +import React, { useEffect, useState } from "react"; +import Card from "../../components/cards/cards"; +import { + BarChart, + Bar, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + ResponsiveContainer, +} from "recharts"; +import { useAppDispatch, useAppSelector } from "../../store/store"; +import { + fetchSellerCollectionProduct, + sellerGetAllProducts, + sellerGetOrderHistory, +} from "../../store/features/product/sellerCollectionProductsSlice"; +import { useNavigate } from 'react-router-dom'; +import productSlice from "../../store/features/product/productSlice"; + + const SellerDashboard = () => { + + + const predefinedMonths = [ + { name: "Jan", Completed: 0, Cancelled: 0 }, + { name: "Feb", Completed: 0, Cancelled: 0 }, + { name: "Mar", Completed: 0, Cancelled: 0 }, + { name: "Apr", Completed: 0, Cancelled: 0 }, + { name: "May", Completed: 0, Cancelled: 0 }, + { name: "Jun", Completed: 0, Cancelled: 0 }, + { name: "Jul", Completed: 0, Cancelled: 0 }, + { name: "Aug", Completed: 0, Cancelled: 0 }, + { name: "Sep", Completed: 0, Cancelled: 0 }, + { name: "Oct", Completed: 0, Cancelled: 0 }, + { name: "Nov", Completed: 0, Cancelled: 0 }, + { name: "Dec", Completed: 0, Cancelled: 0 }, + ]; + + const getMonthName = (dateString) => { + const date = new Date(dateString); + return date.toLocaleString("default", { month: "short" }); + }; + + const dispatch = useAppDispatch(); + const navigate = useNavigate(); + const [numberOfProducts, setNumberOfProducts] = useState(null); + const [orderStats, setOrderStats] = useState([]); + const [numberOfOrders, setNumberOfOrders] = useState(null); + const [selectedMonth, setSelectedMonth] = useState("All"); + + + useEffect(() => { + try { + const countData = async () => { + const orderHistoryResponse = await dispatch(sellerGetOrderHistory()); + const orderNumber = orderHistoryResponse.payload.data.order.length; + setNumberOfOrders(orderNumber); + const porductResponse = await dispatch(fetchSellerCollectionProduct()); + const data:any = porductResponse.payload; + const numberOfProduct = data.data.products.length; + setNumberOfProducts(numberOfProduct); + + const aggregatedData = orderHistoryResponse.payload.data.order.reduce( + (acc, order) => { + const monthName = getMonthName(order.orderDate); + const month = acc.find((m) => m.name === monthName); + if (month) { + if (order.status === "completed") { + month.Completed += 1; + } else if (order.status === "canceled") { + month.Cancelled += 1; + } + } + return acc; + }, + [...predefinedMonths] + ); + setOrderStats(aggregatedData); + }; + countData(); + } catch (error) { + console.error("Failed to fetch data:", error); + } + }, [dispatch]); + + const MonthDropDown = () => { + const [isOpen, setIsOpen] = useState(false); + const months = [ + "All", + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December", + ]; + + const toggleDropdown = () => { + setIsOpen(!isOpen); + }; + + const handleMonthSelect = (month) => { + setSelectedMonth(month); + setIsOpen(false); + }; + + return ( +
+ + {isOpen && ( +
    + {months.map((month, index) => ( +
  • handleMonthSelect(month)} + > + {month} +
  • + ))} +
+ )} +
+ ); + }; + + const filteredOrderStats = + selectedMonth === "All" + ? orderStats + : orderStats.filter( + (stat) => stat.name === selectedMonth.substring(0, 3) + ); + return ( <> -
SellerDashboard
- {/* */} +
+
+ + + navigate("/seller/products")} +/> +
+
+
+
+

Overview sales

+
+ Completed + Cancelled +
+
+ +
+ + + + + + + + + + +
+
); }; -export default SellerDashboard; +export default SellerDashboard; \ No newline at end of file diff --git a/src/store/features/admin/adminService.tsx b/src/store/features/admin/adminService.tsx index 2505caff..5bf1eba0 100644 --- a/src/store/features/admin/adminService.tsx +++ b/src/store/features/admin/adminService.tsx @@ -21,12 +21,25 @@ const updateUserStatus = async (userId: string, status: string) => { const response = await axiosInstance.put(`/api/user/admin-update-user-status/${userId}`, {status}); return response.data; } +const getOrderHistory = async () => { + const response = await axiosInstance.get(`/api/cart/admin-get-order-history`); + return response.data; +} +const getAllShops = async () => { + const response = await axiosInstance.get(`/api/shop/admin-get-shops`); + return response.data; +} + + + const adminService = { getAllUsers, getUserById, updateUserRole, updateUserStatus, + getOrderHistory, + getAllShops } export default adminService; \ No newline at end of file diff --git a/src/store/features/admin/adminSlice.tsx b/src/store/features/admin/adminSlice.tsx index d59d9a2d..8f106688 100644 --- a/src/store/features/admin/adminSlice.tsx +++ b/src/store/features/admin/adminSlice.tsx @@ -48,6 +48,22 @@ export const updateUserStatus = createAsyncThunk('admin/updateUserStatus',async( return thunkApi.rejectWithValue(getErrorMessage(error)); } }); +export const getOrderHistory = createAsyncThunk('admin/getOrderHistory', async (_, thunkApi) => { + try { + const response = await adminService.getOrderHistory(); + return response; + } catch (error) { + return thunkApi.rejectWithValue(getErrorMessage(error)); + } +}); +export const getAllShops = createAsyncThunk('admin/admin-get-shops', async (_, thunkApi) => { + try { + const response = await adminService.getAllShops(); + return response; + } catch (error) { + return thunkApi.rejectWithValue(getErrorMessage(error)); + } +}) const adminSlice = createSlice({ name: 'admin', @@ -110,7 +126,43 @@ const adminSlice = createSlice({ state.isLoading = false; state.message = action.payload.message; toast.error(state.message); - }); + }) + .addCase(getOrderHistory.pending, (state) => { + state.isLoading = true; + state.isError = false; + state.isSuccess = false; + }) + .addCase(getOrderHistory.fulfilled, (state, action:PayloadAction) => { + state.isLoading = false; + state.isError = false; + state.isSuccess = true; + state.users = action.payload.data.user; + state.message = action.payload.message; + + }) + .addCase(getOrderHistory.rejected, (state, action:PayloadAction) => { + state.isLoading = false; + state.isError = true; + state.message = action.payload || action.payload.message; + }) + .addCase(getAllShops.pending, (state) => { + state.isLoading = true; + state.isError = false; + state.isSuccess = false; + }) + .addCase(getAllShops.fulfilled, (state, action:PayloadAction) => { + state.isLoading = false; + state.isError = false; + state.isSuccess = true; + state.users = action.payload.data.user; + state.message = action.payload.message; + + }) + .addCase(getAllShops.rejected, (state, action:PayloadAction) => { + state.isLoading = false; + state.isError = true; + state.message = action.payload || action.payload.message; + }) }, }); diff --git a/src/store/features/product/productService.tsx b/src/store/features/product/productService.tsx index 7dc4ce90..0d221064 100644 --- a/src/store/features/product/productService.tsx +++ b/src/store/features/product/productService.tsx @@ -98,6 +98,14 @@ const addSellerProduct = async (newProductData: FormData) => { throw new Error(getErrorMessage(error)) } } +const sellerGetAllProducts = async () => { + const response = await axiosInstance.get(`/api/shop/seller-get-products`); + return response.data; +} +const sellerGetOrderHistory = async () => { + const response = await axiosInstance.get(`/api/shop/seller-get-orderHistory`); + return response.data; +} const productService = { fetchProducts, @@ -109,6 +117,8 @@ const productService = { fetchSellerSingleProduct, updateSellerProduct, addSellerProduct, - updateSellerProductStatus + updateSellerProductStatus, + sellerGetAllProducts, + sellerGetOrderHistory } export default productService; \ No newline at end of file diff --git a/src/store/features/product/sellerCollectionProductsSlice.tsx b/src/store/features/product/sellerCollectionProductsSlice.tsx index f9bea0b2..6e09d893 100644 --- a/src/store/features/product/sellerCollectionProductsSlice.tsx +++ b/src/store/features/product/sellerCollectionProductsSlice.tsx @@ -26,7 +26,22 @@ export const fetchSellerCollectionProduct = createAsyncThunk { + try { + const response = await productService.sellerGetAllProducts(); + return response; + } catch (error) { + return thunkApi.rejectWithValue(getErrorMessage(error)); + } +}) +export const sellerGetOrderHistory = createAsyncThunk('seller/seller-get-orderHisory', async (_, thunkApi) => { + try { + const response = await productService.sellerGetOrderHistory(); + return response; + } catch (error) { + return thunkApi.rejectWithValue(getErrorMessage(error)); + } +}) const sellerCollectionProductsSlice = createSlice({ name: "sellerCollectionProducts", @@ -49,6 +64,38 @@ const sellerCollectionProductsSlice = createSlice({ state.isError = false; state.isSuccess = false; state.message = action.payload.message || null + }) + .addCase(sellerGetAllProducts.pending, (state) => { + state.isLoading = true; + state.isError = null; + state.isSuccess = false; + }) + .addCase(sellerGetAllProducts.fulfilled, (state, action: PayloadAction) => { + state.isLoading = false; + state.isSuccess = true; + state.data = action.payload.data; + }) + .addCase(sellerGetAllProducts.rejected, (state, action: PayloadAction) => { + state.isLoading = false; + state.isError = false; + state.isSuccess = false; + state.message = action.payload.message || null + }) + .addCase(sellerGetOrderHistory.pending, (state) => { + state.isLoading = true; + state.isError = null; + state.isSuccess = false; + }) + .addCase(sellerGetOrderHistory.fulfilled, (state, action: PayloadAction) => { + state.isLoading = false; + state.isSuccess = true; + state.data = action.payload.data; + }) + .addCase(sellerGetOrderHistory.rejected, (state, action: PayloadAction) => { + state.isLoading = false; + state.isError = false; + state.isSuccess = false; + state.message = action.payload.message || null }); } })