Compare commits
1 Commits
Pratham
...
335bd0bddf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
335bd0bddf |
@@ -82,7 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict';
|
||||
"revision": "3ca0b8505b4bec776b69afdba2768812"
|
||||
}, {
|
||||
"url": "index.html",
|
||||
"revision": "0.s3ua6eoia6o"
|
||||
"revision": "0.jlpvaemfr1"
|
||||
}], {});
|
||||
workbox.cleanupOutdatedCaches();
|
||||
workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), {
|
||||
|
||||
159
package-lock.json
generated
159
package-lock.json
generated
@@ -1668,6 +1668,7 @@
|
||||
},
|
||||
"node_modules/@clack/prompts/node_modules/is-unicode-supported": {
|
||||
"version": "1.3.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -2859,9 +2860,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz",
|
||||
"integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.1.tgz",
|
||||
"integrity": "sha512-kwctwVlswSEsr4ljpmxKrRKp1eG1v2NAhlzFzDf1x1OdYaMjBYjDCbHkzWm57ZXzTwqn8stMXgROrnMw8dJK3w==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@@ -2872,9 +2873,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm64": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz",
|
||||
"integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.1.tgz",
|
||||
"integrity": "sha512-4H5ZtZitBPlbPsTv6HBB8zh1g5d0T8TzCmpndQdqq20Ugle/nroOyDMf9p7f88Gsu8vBLU78/cuh8FYHZqdXxw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2885,9 +2886,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz",
|
||||
"integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.1.tgz",
|
||||
"integrity": "sha512-f2AJ7Qwx9z25hikXvg+asco8Sfuc5NCLg8rmqQBIOUoWys5sb/ZX9RkMZDPdnnDevXAMJA5AWLnRBmgdXGEUiA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2898,9 +2899,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-x64": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz",
|
||||
"integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.1.tgz",
|
||||
"integrity": "sha512-+/2JBrRfISCsWE4aEFXxd+7k9nWGXA8+wh7ZUHn/u8UDXOU9LN+QYKKhd57sIn6WRcorOnlqPMYFIwie/OHXWw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2911,9 +2912,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-freebsd-arm64": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz",
|
||||
"integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.1.tgz",
|
||||
"integrity": "sha512-SUeB0pYjIXwT2vfAMQ7E4ERPq9VGRrPR7Z+S4AMssah5EHIilYqjWQoTn5dkDtuIJUSTs8H+C9dwoEcg3b0sCA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2924,9 +2925,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-freebsd-x64": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz",
|
||||
"integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.1.tgz",
|
||||
"integrity": "sha512-L3T66wAZiB/ooiPbxz0s6JEX6Sr2+HfgPSK+LMuZkaGZFAFCQAHiP3dbyqovYdNaiUXcl9TlgnIbcsIicAnOZg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2937,9 +2938,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz",
|
||||
"integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.1.tgz",
|
||||
"integrity": "sha512-UBXdQ4+ATARuFgsFrQ+tAsKvBi/Hly99aSVdeCUiHV9dRTTpMU7OrM3WXGys1l40wKVNiOl0QYY6cZQJ2xhKlQ==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@@ -2950,9 +2951,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz",
|
||||
"integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.1.tgz",
|
||||
"integrity": "sha512-m/yfZ25HGdcCSwmopEJm00GP7xAUyVcBPjttGLRAqZ60X/bB4Qn6gP7XTwCIU6bITeKmIhhwZ4AMh2XLro+4+w==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@@ -2963,9 +2964,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz",
|
||||
"integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.1.tgz",
|
||||
"integrity": "sha512-Wy+cUmFuvziNL9qWRRzboNprqSQ/n38orbjRvd6byYWridp5TJ3CD+0+HUsbcWVSNz9bxkDUkyASGP0zS7GAvg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2976,9 +2977,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz",
|
||||
"integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.1.tgz",
|
||||
"integrity": "sha512-CQ3MAGgiFmQW5XJX5W3wnxOBxKwFlUAgSXFA2SwgVRjrIiVt5LHfcQLeNSHKq5OEZwv+VCBwlD1+YKCjDG8cpg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2989,9 +2990,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz",
|
||||
"integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.1.tgz",
|
||||
"integrity": "sha512-rSzb1TsY4lSwH811cYC3OC2O2mzNMhM13vcnA7/0T6Mtreqr3/qs6WMDriMRs8yvHDI54qxHgOk8EV5YRAHFbw==",
|
||||
"cpu": [
|
||||
"loong64"
|
||||
],
|
||||
@@ -3002,9 +3003,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz",
|
||||
"integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.1.tgz",
|
||||
"integrity": "sha512-fwr0n6NS0pG3QxxlqVYpfiY64Fd1Dqd8Cecje4ILAV01ROMp4aEdCj5ssHjRY3UwU7RJmeWd5fi89DBqMaTawg==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
@@ -3015,9 +3016,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz",
|
||||
"integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.1.tgz",
|
||||
"integrity": "sha512-4uJb9qz7+Z/yUp5RPxDGGGUcoh0PnKF33QyWgEZ3X/GocpWb6Mb+skDh59FEt5d8+Skxqs9mng6Swa6B2AmQZg==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
@@ -3028,9 +3029,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz",
|
||||
"integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.1.tgz",
|
||||
"integrity": "sha512-QlIo8ndocWBEnfmkYqj8vVtIUpIqJjfqKggjy7IdUncnt8BGixte1wDON7NJEvLg3Kzvqxtbo8tk+U1acYEBlw==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
@@ -3041,9 +3042,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz",
|
||||
"integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.1.tgz",
|
||||
"integrity": "sha512-hzpleiKtq14GWjz3ahWvJXgU1DQC9DteiwcsY4HgqUJUGxZThlL66MotdUEK9zEo0PK/2ADeZGM9LIondE302A==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -3054,9 +3055,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz",
|
||||
"integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.1.tgz",
|
||||
"integrity": "sha512-jqtKrO715hDlvUcEsPn55tZt2TEiBvBtCMkUuU0R6fO/WPT7lO9AONjPbd8II7/asSiNVQHCMn4OLGigSuxVQA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -3067,9 +3068,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz",
|
||||
"integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.1.tgz",
|
||||
"integrity": "sha512-RnHy7yFf2Wz8Jj1+h8klB93N0NHNHXFhNwAmiy9zJdpY7DE01VbEVtPdrK1kkILeIbHGRJjvfBDBhnxBr8kD4g==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -3080,9 +3081,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz",
|
||||
"integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.1.tgz",
|
||||
"integrity": "sha512-i7aT5HdiZIcd7quhzvwQ2oAuX7zPYrYfkrd1QFfs28Po/i0q6kas/oRrzGlDhAEyug+1UfUtkWdmoVlLJj5x9Q==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
@@ -3093,9 +3094,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz",
|
||||
"integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.1.tgz",
|
||||
"integrity": "sha512-k3MVFD9Oq+laHkw2N2v7ILgoa9017ZMF/inTtHzyTVZjYs9cSH18sdyAf6spBAJIGwJ5UaC7et2ZH1WCdlhkMw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -9532,9 +9533,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vite/node_modules/rollup": {
|
||||
"version": "4.30.1",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz",
|
||||
"integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==",
|
||||
"version": "4.34.1",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.1.tgz",
|
||||
"integrity": "sha512-iYZ/+PcdLYSGfH3S+dGahlW/RWmsqDhLgj1BT9DH/xXJ0ggZN7xkdP9wipPNjjNLczI+fmMLmTB9pye+d2r4GQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/estree": "1.0.6"
|
||||
@@ -9547,25 +9548,25 @@
|
||||
"npm": ">=8.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@rollup/rollup-android-arm-eabi": "4.30.1",
|
||||
"@rollup/rollup-android-arm64": "4.30.1",
|
||||
"@rollup/rollup-darwin-arm64": "4.30.1",
|
||||
"@rollup/rollup-darwin-x64": "4.30.1",
|
||||
"@rollup/rollup-freebsd-arm64": "4.30.1",
|
||||
"@rollup/rollup-freebsd-x64": "4.30.1",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.30.1",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.30.1",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.30.1",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.30.1",
|
||||
"@rollup/rollup-linux-loongarch64-gnu": "4.30.1",
|
||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.30.1",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.30.1",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.30.1",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.30.1",
|
||||
"@rollup/rollup-linux-x64-musl": "4.30.1",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.30.1",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.30.1",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.30.1",
|
||||
"@rollup/rollup-android-arm-eabi": "4.34.1",
|
||||
"@rollup/rollup-android-arm64": "4.34.1",
|
||||
"@rollup/rollup-darwin-arm64": "4.34.1",
|
||||
"@rollup/rollup-darwin-x64": "4.34.1",
|
||||
"@rollup/rollup-freebsd-arm64": "4.34.1",
|
||||
"@rollup/rollup-freebsd-x64": "4.34.1",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.34.1",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.34.1",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.34.1",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.34.1",
|
||||
"@rollup/rollup-linux-loongarch64-gnu": "4.34.1",
|
||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.34.1",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.34.1",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.34.1",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.34.1",
|
||||
"@rollup/rollup-linux-x64-musl": "4.34.1",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.34.1",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.34.1",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.34.1",
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
|
||||
60
src/App.tsx
60
src/App.tsx
@@ -1,46 +1,24 @@
|
||||
import { useContext } from "react";
|
||||
import { useContext } from 'react';
|
||||
import { Route, BrowserRouter as Router, Routes } from "react-router-dom";
|
||||
import GlobalStateContext from "./Contexts/GlobalStateContext";
|
||||
import DefaultLayout from "./Layouts/DefaultLayout";
|
||||
import Login from "./Pages/Login";
|
||||
import { RouteLink } from "./Routes/Routes";
|
||||
import LoginOtp from "./Pages/OnBoarding/LoginOtp";
|
||||
import CreatePass from "./Pages/OnBoarding/CreatePass";
|
||||
import LoginWithPass from "./Pages/OnBoarding/LoginWithPass";
|
||||
import GlobalStateContext from './Contexts/GlobalStateContext';
|
||||
import DefaultLayout from './Layouts/DefaultLayout';
|
||||
import Login from './Pages/Login';
|
||||
import { RouteLink } from './Routes/Routes';
|
||||
|
||||
function App() {
|
||||
const context = useContext(GlobalStateContext);
|
||||
if (!context)
|
||||
throw new Error("App must be used within a GlobalStateProvider");
|
||||
const { isAuthenticate } = context;
|
||||
function App() {
|
||||
const context = useContext(GlobalStateContext);
|
||||
if (!context) throw new Error('App must be used within a GlobalStateProvider');
|
||||
const { isAuthenticate } = context;
|
||||
|
||||
return (
|
||||
<Router>
|
||||
<Routes>
|
||||
<Route path="/login" element={<LoginWithPass/>} />
|
||||
<Route path="/forgotPassword" element={<Login />} />
|
||||
<Route path="/login-otp" element={<LoginOtp />} />
|
||||
<Route path="/create-password" element={<CreatePass/>}/>
|
||||
<Route
|
||||
path="/*"
|
||||
element={
|
||||
isAuthenticate === true ? (
|
||||
<DefaultLayout>
|
||||
<Routes>
|
||||
{RouteLink.map(({ path, Component }, index) => (
|
||||
<Route key={index} path={path} element={<Component />} />
|
||||
))}
|
||||
</Routes>
|
||||
</DefaultLayout>
|
||||
) : (
|
||||
<LoginWithPass />
|
||||
)
|
||||
}
|
||||
/>
|
||||
<Route path="*" element={<LoginWithPass />} />
|
||||
</Routes>
|
||||
</Router>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<Router>
|
||||
<Routes>
|
||||
<Route path="/login" element={<Login />} />
|
||||
<Route path="/*" element={isAuthenticate === true ? (<DefaultLayout><Routes>{RouteLink.map(({ path, Component }, index) => (<Route key={index} path={path} element={<Component />} />))}</Routes></DefaultLayout>) : (<Login />)} />
|
||||
<Route path="*" element={<Login />} />
|
||||
</Routes>
|
||||
</Router>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
export const getTitle = (location: string): string => {
|
||||
const titles: { [key: string]: string } = {
|
||||
'/': 'Dashboard',
|
||||
'/manage-user/register-user': 'Manage User',
|
||||
'/manage-user/deactivate-accounts': 'Manage User',
|
||||
'/manage-post': 'Manage Post',
|
||||
'/manage-sub-admin': 'Manage Sub Admin',
|
||||
'/manage-jobs': 'Manage Jobs',
|
||||
'/manage-contact-us': 'Manage Contact Us',
|
||||
'/manage-cms/faq': 'Manage CMS',
|
||||
'/manage-cms/about-us': 'Manage CMS',
|
||||
'/manage-cms/privacy-policy': 'Manage CMS',
|
||||
'/manage-cms/terms-and-condition': 'Manage CMS',
|
||||
'/profile': 'My Profile',
|
||||
};
|
||||
|
||||
return titles[location] || 'Page Not Found';
|
||||
};
|
||||
|
||||
@@ -3,199 +3,44 @@ import React, { FC } from "react";
|
||||
import { RiNotificationLine } from "react-icons/ri";
|
||||
import { NavLink, useLocation, useNavigate } from "react-router-dom";
|
||||
import { nav } from "../Routes/Nav";
|
||||
import logo from "../assets/logo.svg";
|
||||
import {
|
||||
AccordionItem,
|
||||
AccordionItemContent,
|
||||
AccordionItemTrigger,
|
||||
AccordionRoot,
|
||||
} from "../components/ui/accordion";
|
||||
import logo from '../assets/logo.svg';
|
||||
import { AccordionItem, AccordionItemContent, AccordionItemTrigger, AccordionRoot } from "../components/ui/accordion";
|
||||
import { Avatar } from "../components/ui/avatar";
|
||||
import { getTitle } from "../Constants/Constants";
|
||||
|
||||
const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => {
|
||||
const navigate = useNavigate();
|
||||
const location = useLocation();
|
||||
const headerTitle = getTitle(location?.pathname);
|
||||
console.log(location);
|
||||
const navigate = useNavigate()
|
||||
const location = useLocation()
|
||||
|
||||
|
||||
|
||||
|
||||
return (
|
||||
<HStack
|
||||
position={"relative"}
|
||||
bg="#F2F2F2"
|
||||
backgroundPosition="center"
|
||||
backgroundRepeat="repeat"
|
||||
backgroundSize="cover"
|
||||
gap={0}
|
||||
pt={2}
|
||||
w="100%"
|
||||
h="100vh"
|
||||
>
|
||||
<VStack zIndex={1} gap={0} rounded={"lg"} h="100%" w="15%">
|
||||
<HStack w={"100%"} p={3} h={"6.5%"} justifyContent={"center"}>
|
||||
<HStack position={'relative'} bg="#F2F2F2" backgroundPosition="center" backgroundRepeat="repeat" backgroundSize="cover" gap={0} w="100%" h="100vh" p={0}>
|
||||
|
||||
<VStack zIndex={1} gap={0} rounded={'lg'} h="100%" w="16%" overflow={'scroll'} >
|
||||
<HStack w={'100%'} p={3} h={'8%'} justifyContent={'center'}>
|
||||
<Image w={55} src={logo} />
|
||||
</HStack>
|
||||
<VStack overflowY="scroll" w={"100%"} p={3}>
|
||||
{nav?.map(({ title, path, Icon, type, children, initPath }, index) =>
|
||||
type === "single" ? (
|
||||
<NavLink
|
||||
className="link"
|
||||
key={index}
|
||||
to={path}
|
||||
style={{
|
||||
cursor: "pointer",
|
||||
borderRadius: "8px",
|
||||
padding: "6px",
|
||||
width: "100%",
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
gap: 6,
|
||||
border: "1px solid #ffffff",
|
||||
backgroundColor: "#fff",
|
||||
color: "#000",
|
||||
boxShadow: "rgba(99, 99, 99, 0.2) 0px 2px 8px 0px",
|
||||
}}
|
||||
>
|
||||
<Icon
|
||||
style={{
|
||||
fontSize: "20px",
|
||||
backgroundColor: "#fff",
|
||||
width: 28,
|
||||
color: location?.pathname === path ? "#02A0A0" : "#000",
|
||||
padding: 2,
|
||||
borderRadius: "50%",
|
||||
}}
|
||||
/>{" "}
|
||||
<Text fontSize={"xs"} w={"100%"}>
|
||||
{title}
|
||||
</Text>
|
||||
</NavLink>
|
||||
) : (
|
||||
<AccordionRoot bg={"#fff"} rounded={"lg"} collapsible>
|
||||
<AccordionItem
|
||||
boxShadow={"rgba(99, 99, 99, 0.2) 0px 2px 8px 0px"}
|
||||
rounded={"lg"}
|
||||
borderBottom={"none"}
|
||||
p={0}
|
||||
key={index}
|
||||
value={title}
|
||||
>
|
||||
<AccordionItemTrigger
|
||||
className={`link ${location?.pathname.startsWith(initPath ?? "") && "active"}`}
|
||||
color={"#fff"}
|
||||
onClick={() => navigate(path)}
|
||||
gap={0}
|
||||
style={{
|
||||
cursor: "pointer",
|
||||
borderRadius: "8px",
|
||||
padding: "5px",
|
||||
width: "100%",
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
border: "1px solid #ffffff",
|
||||
backgroundColor: "#fff",
|
||||
color: "#000",
|
||||
fontSize: "14px",
|
||||
fontWeight: "normal",
|
||||
}}
|
||||
>
|
||||
{" "}
|
||||
<Text
|
||||
fontSize={"xs"}
|
||||
gap={1}
|
||||
display={"flex"}
|
||||
alignItems={"center"}
|
||||
>
|
||||
<Icon
|
||||
style={{
|
||||
fontSize: "20px",
|
||||
backgroundColor: "#fff",
|
||||
width: 23,
|
||||
color: location?.pathname.startsWith(initPath ?? "")
|
||||
? "#02A0A0"
|
||||
: "#000",
|
||||
padding: 2,
|
||||
borderRadius: "50%",
|
||||
}}
|
||||
/>
|
||||
{title}
|
||||
</Text>
|
||||
</AccordionItemTrigger>
|
||||
{children?.map(({ title, path, Icon }, index) => (
|
||||
<AccordionItemContent
|
||||
className={`linkChild ${location?.pathname === path && "activeChild"}`}
|
||||
key={index}
|
||||
onClick={() => navigate(path)}
|
||||
style={{
|
||||
marginTop: 6,
|
||||
cursor: "pointer",
|
||||
borderRadius: "8px",
|
||||
padding: "6px",
|
||||
width: "100%",
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
gap: 6,
|
||||
border: "1px solid #ffffff",
|
||||
backgroundColor: "#fff",
|
||||
color: "#000",
|
||||
}}
|
||||
>
|
||||
<Icon style={{ fontSize: "16px" }} />{" "}
|
||||
<Text fontSize={"xs"} w={"100%"}>
|
||||
{title}
|
||||
</Text>
|
||||
</AccordionItemContent>
|
||||
))}
|
||||
</AccordionItem>
|
||||
</AccordionRoot>
|
||||
)
|
||||
)}
|
||||
<VStack w={'100%'} p={4} pt={0}>
|
||||
{nav?.map(({ title, path, Icon, type, children }, index) => type === 'single' ?
|
||||
<NavLink className="link" key={index} to={path} style={{ cursor: 'pointer', borderRadius: '8px', padding: '6px', width: '100%', display: 'flex', alignItems: 'center', gap: 6, border: '1px solid #ffffff', backgroundColor:'#fff', color:'#000', boxShadow:'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px'}} ><Icon style={{ fontSize: '20px' }} /> <Text fontSize={'xs'} w={'100%'}>{title}</Text></NavLink> :
|
||||
<AccordionRoot bg={'#fff'} rounded={'lg'} collapsible>
|
||||
<AccordionItem boxShadow={'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px'} borderBottom={'none'} p={0} key={index} value={title}>
|
||||
<AccordionItemTrigger className="Oxygen" color={'#fff'} onClick={() => navigate(path)} gap={0} style={{ cursor: 'pointer', borderRadius: '8px', padding: '5px', width: '100%', display: 'flex', alignItems: 'center', border: '1px solid #ffffff', backgroundColor:'#fff',color:'#000', fontSize: '14px', }}> <Text fontSize={'xs'} gap={1} display={'flex'} alignItems={'center'} ><Icon style={{ fontSize: '20px' }} />{title}</Text></AccordionItemTrigger>
|
||||
{children?.map(({ title, path, Icon }, index) => <AccordionItemContent className={`linkChild Oxygen ${location?.pathname === path && 'activeChild'}`} key={index} onClick={()=>navigate(path)} style={{ marginTop: 6, cursor: 'pointer', borderRadius: '8px', padding: '6px', width: '100%', display: 'flex', alignItems: 'center', gap: 6, border: '1px solid #ffffff', backgroundColor:'#fff',color:'#919198' }} ><Icon style={{ fontSize: '20px' }} /> <Text fontSize={'xs'} w={'100%'}>{title}</Text></AccordionItemContent>)}
|
||||
</AccordionItem>
|
||||
</AccordionRoot>)}
|
||||
</VStack>
|
||||
</VStack>
|
||||
<VStack overflowY="hidden" gap={0} h="100%" w="85%">
|
||||
<HStack
|
||||
h={"6.5%"}
|
||||
w={"100%"}
|
||||
justifyContent={"space-between"}
|
||||
alignItems={"flex-end"}
|
||||
pe={3}
|
||||
gap={6}
|
||||
p={4}
|
||||
>
|
||||
<Text
|
||||
mb={1}
|
||||
fontSize={"sm"}
|
||||
ms={1}
|
||||
fontWeight={600}
|
||||
color={"#013e3e"}
|
||||
>
|
||||
{headerTitle}
|
||||
</Text>
|
||||
<HStack
|
||||
// bg={"#fff"}
|
||||
h={"100%"}
|
||||
justifyContent={"center"}
|
||||
p={2}
|
||||
rounded={"md"}
|
||||
// boxShadow={"rgba(99, 99, 99, 0.2) 0px 2px 8px 0px"}
|
||||
>
|
||||
<RiNotificationLine
|
||||
color="#013e3e"
|
||||
cursor={"pointer"}
|
||||
style={{ fontSize: "22px" }}
|
||||
/>
|
||||
<HStack cursor={"pointer"} onClick={() => navigate("/profile")}>
|
||||
<Avatar
|
||||
size={"sm"}
|
||||
src="https://i.pinimg.com/736x/d6/cd/0f/d6cd0ffd4634b0763d3958a7325ce26e.jpg"
|
||||
/>
|
||||
<VStack color={"#013e3e"} gap={0} alignItems={"flex-start"}>
|
||||
<Text fontSize={"sm"} fontWeight={"bold"}>
|
||||
Ritesh Pandey
|
||||
</Text>
|
||||
<Text fontSize={"xs"}>ritesh.pandey@wdimails.com</Text>
|
||||
</VStack>
|
||||
</HStack>
|
||||
<VStack gap={0} h="100%" w="85%" >
|
||||
<HStack h={'8%'} w={'100%'} justifyContent={'flex-end'} pe={3} gap={6}>
|
||||
<NavLink to={'/manage-notification'}><RiNotificationLine color="#013e3e" cursor={'pointer'} style={{ fontSize: '22px' }} /></NavLink>
|
||||
<HStack cursor={'pointer'} onClick={() => navigate('/profile')} >
|
||||
<Avatar size={'sm'} src="https://i.pinimg.com/736x/d6/cd/0f/d6cd0ffd4634b0763d3958a7325ce26e.jpg" />
|
||||
<VStack color={'#013e3e'} gap={0} alignItems={'flex-start'}>
|
||||
<Text fontSize={'sm'} fontWeight={'bold'}>Ritesh Pandey</Text>
|
||||
<Text fontSize={'xs'} >ritesh.pandey@wdimails.com</Text>
|
||||
</VStack>
|
||||
</HStack>
|
||||
</HStack>
|
||||
{children}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
const CMS = () => {
|
||||
return (
|
||||
<div>CMS</div>
|
||||
)
|
||||
}
|
||||
export default CMS
|
||||
@@ -1,10 +1,7 @@
|
||||
import MainFrame from "../../components/MainFrame"
|
||||
|
||||
const Dashboard = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
|
||||
</MainFrame>
|
||||
<div>Dashboard</div>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,136 +1,96 @@
|
||||
import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react";
|
||||
import { useContext, useState } from "react";
|
||||
import { useForm } from "react-hook-form";
|
||||
import GlobalStateContext from "../Contexts/GlobalStateContext";
|
||||
import logo from "../assets/logo.svg";
|
||||
import { Button } from "../components/ui/button";
|
||||
import { Field } from "../components/ui/field";
|
||||
import { Toaster, toaster } from "../components/ui/toaster";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react"
|
||||
import { useContext, useState } from "react"
|
||||
import { useForm } from "react-hook-form"
|
||||
import GlobalStateContext from "../Contexts/GlobalStateContext"
|
||||
import logo from '../assets/logo.svg'
|
||||
import { Button } from "../components/ui/button"
|
||||
import { Field } from "../components/ui/field"
|
||||
import { Toaster, toaster } from "../components/ui/toaster"
|
||||
|
||||
interface FormValues {
|
||||
mobileNumber: string;
|
||||
mobileNumber: number
|
||||
}
|
||||
|
||||
const Login = () => {
|
||||
const [isLoading, setIsLoading] = useState<boolean>(false);
|
||||
const context = useContext(GlobalStateContext);
|
||||
const navigate = useNavigate();
|
||||
|
||||
if (!context) {
|
||||
throw new Error("App must be used within a GlobalStateProvider");
|
||||
}
|
||||
|
||||
const [isLoading, setIsLoading] = useState<boolean>(false)
|
||||
const context = useContext(GlobalStateContext);
|
||||
if (!context) {
|
||||
throw new Error('App must be used within a GlobalStateProvider');
|
||||
}
|
||||
const { setIsAuthenticate } = context;
|
||||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
formState: { errors },
|
||||
} = useForm<FormValues>();
|
||||
} = useForm<FormValues>()
|
||||
|
||||
|
||||
const onSubmit = handleSubmit((data) => {
|
||||
setIsLoading(true);
|
||||
|
||||
if (data.mobileNumber === "1234567890") {
|
||||
setIsLoading(true)
|
||||
if (data?.mobileNumber === 1234567890) {
|
||||
setTimeout(() => {
|
||||
setIsAuthenticate(true);
|
||||
setIsLoading(false);
|
||||
navigate("/login-otp");
|
||||
}, 3000);
|
||||
setIsAuthenticate(true);
|
||||
setIsLoading(false)
|
||||
}, 3000); // 3-second delay
|
||||
|
||||
} else {
|
||||
toaster.create({
|
||||
title: `Invalid Credentials`,
|
||||
type: "error",
|
||||
});
|
||||
setIsLoading(false);
|
||||
})
|
||||
setIsLoading(false)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
return (
|
||||
<VStack w={"100%"} h={"100vh"} bg={"#ffffff"}>
|
||||
<HStack
|
||||
boxShadow={"rgba(99, 99, 99, 0.2) 0px 2px 8px 0px"}
|
||||
w={"100%"}
|
||||
ps={8}
|
||||
h={"7%"}
|
||||
justifyContent={"flex-start"}
|
||||
>
|
||||
<Image w={50} src={logo} />
|
||||
|
||||
|
||||
<VStack
|
||||
w={'100%'} h={'100vh'} bg={'#ffffff'} >
|
||||
|
||||
<HStack boxShadow={'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px'} w={'100%'} ps={8} h={'7%'} justifyContent={'flex-start'}>
|
||||
<Image w={50} src={logo} />
|
||||
|
||||
</HStack>
|
||||
|
||||
<HStack w={"100%"} h={"93%"} p={8} gap={8}>
|
||||
<Center
|
||||
display={{ base: "none", md: "flex" }}
|
||||
bg={"#02A0A033"}
|
||||
w={"50%"}
|
||||
h={"100%"}
|
||||
rounded={"3xl"}
|
||||
>
|
||||
|
||||
<HStack
|
||||
w={'100%'} h={'93%'} p={8} gap={8}>
|
||||
|
||||
|
||||
|
||||
|
||||
<Center display={{ base: 'none', md: 'flex' }} bg={'#02A0A033'} w={'50%'} h={'100%'} rounded={'3xl'}>
|
||||
<Image w={250} src={logo} />
|
||||
</Center>
|
||||
|
||||
<Center
|
||||
as={"form"}
|
||||
onSubmit={onSubmit}
|
||||
p={{ base: 4, md: 16 }}
|
||||
w={{ base: "100%", md: "50%" }}
|
||||
h={"100%"}
|
||||
>
|
||||
<VStack gap={2} w={"100%"} alignItems={"flex-start"}>
|
||||
<Text
|
||||
w={"100%"}
|
||||
textAlign={"center"}
|
||||
fontSize={"24px"}
|
||||
fontWeight={"normal"}
|
||||
color={"#313039"}
|
||||
>
|
||||
LOGIN
|
||||
</Text>
|
||||
|
||||
<VStack mt={6} gap={4} w={"full"}>
|
||||
<Field
|
||||
color={"#313039"}
|
||||
label={"Enter Mobile Number"}
|
||||
w={"100%"}
|
||||
invalid={!!errors.mobileNumber}
|
||||
errorText={errors.mobileNumber?.message}
|
||||
>
|
||||
<Input
|
||||
ps={3}
|
||||
{...register("mobileNumber", {
|
||||
required: "Mobile Number is required",
|
||||
pattern: {
|
||||
value: /^[0-9]{10}$/,
|
||||
message: "Invalid mobile number",
|
||||
},
|
||||
})}
|
||||
placeholder="Mobile Number"
|
||||
/>
|
||||
|
||||
|
||||
|
||||
<Center as={'form'} onSubmit={onSubmit} p={{ base: 4, md: 16 }} w={{ base: '100%', md: '50%' }} h={'100%'}>
|
||||
<VStack gap={2} w={'100%'} alignItems={'flex-start'}>
|
||||
<Text w={'100%'} textAlign={'center'} fontSize={'24px'} fontWeight={'normal'} color={'#313039'}>LOGIN</Text>
|
||||
|
||||
<VStack mt={6} gap={4} w={'full'}>
|
||||
<Field color={'#313039'} label={'Enter Mobile Number'} w={'100%'} invalid={!!errors.mobileNumber} errorText={errors.mobileNumber?.message} >
|
||||
<Input ps={3} {...register("mobileNumber", { required: "Mobile Number address is required" })} placeholder="Mobile Number Address" />
|
||||
{/* <Text as={'span'} w={'100%'} fontSize={'xs'} fontWeight={'normal'} color={'#686677'}>Forget password</Text> */}
|
||||
</Field>
|
||||
<Button loading={isLoading} mt={4} size={'sm'} bg={'#02A0A0'} rounded={'md'} w={'100%'} color={'#ffffff'} type="submit">Send OTP</Button>
|
||||
|
||||
<Button
|
||||
loading={isLoading}
|
||||
mt={4}
|
||||
size={"sm"}
|
||||
bg={"#02A0A0"}
|
||||
rounded={"md"}
|
||||
w={"100%"}
|
||||
color={"#ffffff"}
|
||||
type="submit"
|
||||
>
|
||||
Send OTP
|
||||
</Button>
|
||||
|
||||
<Text cursor="pointer" color="#02A0A0" fontSize="sm">
|
||||
Forgot password?
|
||||
</Text>
|
||||
<Text>Forgot password</Text>
|
||||
</VStack>
|
||||
|
||||
|
||||
</VStack>
|
||||
</Center>
|
||||
<Toaster />
|
||||
</HStack>
|
||||
</VStack>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Login;
|
||||
export default Login
|
||||
@@ -1,11 +1,12 @@
|
||||
import MainFrame from '../../../components/MainFrame'
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const AboutUs = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
|
||||
export default AboutUs
|
||||
return (
|
||||
|
||||
<MainFrame >
|
||||
AboutUs
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default AboutUs
|
||||
12
src/Pages/ManageCMS/FAQ/FAQ.tsx
Normal file
12
src/Pages/ManageCMS/FAQ/FAQ.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const FAQ = () => {
|
||||
return (
|
||||
|
||||
<MainFrame >
|
||||
FAQ
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default FAQ
|
||||
@@ -1,12 +0,0 @@
|
||||
import { Text } from '@chakra-ui/react'
|
||||
import MainFrame from '../../../components/MainFrame'
|
||||
|
||||
const FreqAskQuestion = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
<Text>hello</Text>
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
|
||||
export default FreqAskQuestion
|
||||
12
src/Pages/ManageCMS/Privacy/Privacy.tsx
Normal file
12
src/Pages/ManageCMS/Privacy/Privacy.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const Privacy = () => {
|
||||
return (
|
||||
|
||||
<MainFrame >
|
||||
Privacy
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default Privacy
|
||||
@@ -1,11 +1,12 @@
|
||||
import MainFrame from '../../../components/MainFrame'
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const PrivacyPolicy = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
|
||||
export default PrivacyPolicy
|
||||
return (
|
||||
|
||||
<MainFrame >
|
||||
PrivacyPolicy
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default PrivacyPolicy
|
||||
@@ -1,11 +0,0 @@
|
||||
import MainFrame from '../../../components/MainFrame'
|
||||
|
||||
const TermsAndCondition = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
|
||||
export default TermsAndCondition
|
||||
@@ -0,0 +1,12 @@
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const TermsAndConditions = () => {
|
||||
return (
|
||||
|
||||
<MainFrame >
|
||||
TermsAndConditions
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default TermsAndConditions
|
||||
11
src/Pages/ManageContact/ManageContact.tsx
Normal file
11
src/Pages/ManageContact/ManageContact.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import MainFrame from "../../components/MainFrame"
|
||||
|
||||
const ManageContact = () => {
|
||||
return (
|
||||
|
||||
<MainFrame >
|
||||
ManageContact
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default ManageContact
|
||||
@@ -1,11 +0,0 @@
|
||||
import MainFrame from '../../components/MainFrame'
|
||||
|
||||
const ManageContactUs = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
|
||||
export default ManageContactUs
|
||||
11
src/Pages/ManageGroups/ManageGroups.tsx
Normal file
11
src/Pages/ManageGroups/ManageGroups.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import MainFrame from "../../components/MainFrame"
|
||||
|
||||
const ManageGroups = () => {
|
||||
return (
|
||||
<MainFrame >
|
||||
ManageGroups
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
|
||||
export default ManageGroups
|
||||
@@ -1,11 +1,12 @@
|
||||
import MainFrame from "../../components/MainFrame"
|
||||
|
||||
const ManageJobs = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
|
||||
export default ManageJobs
|
||||
const ManageJobs = () => {
|
||||
return (
|
||||
|
||||
<MainFrame>
|
||||
ManageJobs
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default ManageJobs
|
||||
@@ -1,11 +1,12 @@
|
||||
import MainFrame from "../../components/MainFrame"
|
||||
|
||||
import MainFrame from '../../components/MainFrame'
|
||||
|
||||
const ManagePost = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
|
||||
ManagePost
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
|
||||
export default ManagePost
|
||||
export default ManagePost
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
import MainFrame from '../../components/MainFrame'
|
||||
|
||||
const ManageSubAdmin = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
|
||||
export default ManageSubAdmin
|
||||
@@ -1,91 +0,0 @@
|
||||
import {
|
||||
Box,
|
||||
HStack,
|
||||
Input,
|
||||
Text
|
||||
} from "@chakra-ui/react";
|
||||
import { LuSearch } from "react-icons/lu";
|
||||
import DataTable from "../../../components/DataTable";
|
||||
import MainFrame from "../../../components/MainFrame";
|
||||
import { InputGroup } from "../../../components/ui/input-group";
|
||||
import {
|
||||
PaginationItems,
|
||||
PaginationNextTrigger,
|
||||
PaginationPrevTrigger,
|
||||
PaginationRoot,
|
||||
} from "../../../components/ui/pagination";
|
||||
import { Switch } from "../../../components/ui/switch";
|
||||
|
||||
const tableHeadRow = [
|
||||
"Sr. No",
|
||||
"First Name",
|
||||
"Last Name",
|
||||
"Company name",
|
||||
"Activate/Deactivate",
|
||||
];
|
||||
|
||||
const usersData = [
|
||||
...Array.from({ length: 10 }, (_, i) => ({
|
||||
"Sr. No": i + 1,
|
||||
"First Name": "Ritesh",
|
||||
"Last Name": "Joshi",
|
||||
"Company name": "WDI",
|
||||
"Activate/Deactivate": (
|
||||
<HStack justifyContent="center">
|
||||
<Text>Yes</Text>
|
||||
<Switch size="sm" colorPalette="teal" />
|
||||
<Text>No</Text>
|
||||
</HStack>
|
||||
),
|
||||
})),
|
||||
];
|
||||
|
||||
const DeactivatedAccounts = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
<HStack w="100%" justifyContent="space-between" p={3}>
|
||||
<Text as="span" fontSize="sm" fontWeight="bolder" color="#000">
|
||||
Registered Users
|
||||
</Text>
|
||||
|
||||
<Box w="30%">
|
||||
<InputGroup
|
||||
bgSize="xs"
|
||||
flex="1"
|
||||
startElement={<LuSearch />}
|
||||
w="100%"
|
||||
color="#000"
|
||||
>
|
||||
<Input
|
||||
w="100%"
|
||||
bg="#EEEEEE"
|
||||
_focus={{ border: "1px #02A0A0 solid" }}
|
||||
border="1px #EEEEEE solid"
|
||||
rounded="full"
|
||||
size="sm"
|
||||
placeholder="Search..."
|
||||
/>
|
||||
</InputGroup>
|
||||
</Box>
|
||||
</HStack>
|
||||
|
||||
<DataTable tableHeadRow={tableHeadRow} data={usersData} />
|
||||
|
||||
<PaginationRoot
|
||||
p={4}
|
||||
mt={8}
|
||||
count={usersData.length}
|
||||
pageSize={3}
|
||||
defaultPage={1}
|
||||
>
|
||||
<HStack justifyContent="flex-end" mb={5}>
|
||||
<PaginationPrevTrigger />
|
||||
<PaginationItems />
|
||||
<PaginationNextTrigger />
|
||||
</HStack>
|
||||
</PaginationRoot>
|
||||
</MainFrame>
|
||||
);
|
||||
};
|
||||
|
||||
export default DeactivatedAccounts;
|
||||
@@ -1,82 +0,0 @@
|
||||
import React from "react";
|
||||
|
||||
import {
|
||||
DialogActionTrigger,
|
||||
DialogCloseTrigger,
|
||||
DialogContent,
|
||||
DialogFooter,
|
||||
DialogHeader,
|
||||
DialogRoot,
|
||||
DialogTitle,
|
||||
DialogTrigger,
|
||||
} from "../../../../components/ui/dialog";
|
||||
import { RiDeleteBin5Line } from "react-icons/ri";
|
||||
import { DialogBody, Image, Text } from "@chakra-ui/react";
|
||||
import { Button } from "../../../../components/ui/button";
|
||||
import DelteIcon from "../../../../assets/icons/delete.png";
|
||||
|
||||
interface DeleteConfirmationDialogProps {
|
||||
onConfirm: () => void;
|
||||
}
|
||||
|
||||
const DeleteConfirmationDialog: React.FC<DeleteConfirmationDialogProps> = ({
|
||||
onConfirm,
|
||||
}) => {
|
||||
return (
|
||||
<DialogRoot role="alertdialog">
|
||||
<DialogTrigger asChild>
|
||||
<RiDeleteBin5Line cursor="pointer" size="18px" />
|
||||
</DialogTrigger>
|
||||
<DialogContent bgColor="#fff">
|
||||
<DialogHeader display="flex" justifyContent="center">
|
||||
{/* <DialogTitle>Are you sure?</DialogTitle> */}
|
||||
|
||||
<Image src={DelteIcon} h={"80px"} width="64.97px" />
|
||||
</DialogHeader>
|
||||
<DialogBody
|
||||
display="flex"
|
||||
flexDirection="column"
|
||||
alignItems="center"
|
||||
color="black"
|
||||
>
|
||||
<Text
|
||||
fontWeight={600}
|
||||
fontSize="md"
|
||||
color="#000000"
|
||||
textAlign="center"
|
||||
>
|
||||
Delete User
|
||||
</Text>
|
||||
<p style={{ textAlign: "center", color: "#000000CC", width: "30%" }}>
|
||||
{" "}
|
||||
Are you sure you want to delete this user
|
||||
</p>
|
||||
</DialogBody>
|
||||
<DialogFooter width="100%">
|
||||
<DialogActionTrigger asChild>
|
||||
<Button
|
||||
width="50%"
|
||||
color="black"
|
||||
_hover={{ bgColor: "white" }}
|
||||
variant="outline"
|
||||
borderRadius="94px"
|
||||
>
|
||||
No
|
||||
</Button>
|
||||
</DialogActionTrigger>
|
||||
<Button
|
||||
borderRadius="94px"
|
||||
width="50%"
|
||||
colorPalette="teal"
|
||||
onClick={onConfirm}
|
||||
>
|
||||
Yes{" "}
|
||||
</Button>
|
||||
</DialogFooter>
|
||||
<DialogCloseTrigger />
|
||||
</DialogContent>
|
||||
</DialogRoot>
|
||||
);
|
||||
};
|
||||
|
||||
export default DeleteConfirmationDialog;
|
||||
@@ -1,77 +0,0 @@
|
||||
import React, { useRef } from "react";
|
||||
import { Input, Stack } from "@chakra-ui/react";
|
||||
import { Button } from "../../../../components/ui/button";
|
||||
import {
|
||||
DialogActionTrigger,
|
||||
DialogBody,
|
||||
DialogContent,
|
||||
DialogFooter,
|
||||
DialogHeader,
|
||||
DialogRoot,
|
||||
DialogTitle,
|
||||
DialogTrigger,
|
||||
} from "../../../../components/ui/dialog";
|
||||
import { Field } from "../../../../components/ui/field";
|
||||
import { FaRegEye } from "react-icons/fa";
|
||||
|
||||
interface EditRegisterUser {
|
||||
onConfirm: () => void;
|
||||
}
|
||||
|
||||
const EditRegisterUser: React.FC<EditRegisterUser> = ({ onConfirm }) => {
|
||||
const ref = useRef<HTMLInputElement>(null); // Initialize the ref properly
|
||||
|
||||
return (
|
||||
<div>
|
||||
<DialogRoot initialFocusEl={() => ref.current}>
|
||||
<DialogTrigger asChild>
|
||||
<FaRegEye cursor="pointer" size="18px" />
|
||||
</DialogTrigger>
|
||||
<DialogContent bgColor="#fff" color="black">
|
||||
<DialogHeader>
|
||||
<DialogTitle fontSize="md">Edit user Accounts</DialogTitle>
|
||||
</DialogHeader>
|
||||
<DialogBody pb="4">
|
||||
<Stack gap="4">
|
||||
<Field fontSize="sm" label="First Name">
|
||||
<Input
|
||||
fontSize="sm"
|
||||
bgColor="#EEEEEE"
|
||||
borderRadius="50px"
|
||||
placeholder="First Name"
|
||||
/>
|
||||
</Field>
|
||||
<Field fontSize="sm" label="Gender">
|
||||
<Input
|
||||
fontSize="sm"
|
||||
bgColor="#EEEEEE"
|
||||
borderRadius="50px"
|
||||
ref={ref}
|
||||
placeholder="Focus First"
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field fontSize="sm" label="Last Name">
|
||||
<Input
|
||||
fontSize="sm"
|
||||
bgColor="#EEEEEE"
|
||||
borderRadius="50px"
|
||||
ref={ref}
|
||||
placeholder="Focus First"
|
||||
/>
|
||||
</Field>
|
||||
</Stack>
|
||||
</DialogBody>
|
||||
<DialogFooter>
|
||||
<DialogActionTrigger asChild>
|
||||
<Button variant="outline">Cancel</Button>
|
||||
</DialogActionTrigger>
|
||||
<Button onClick={onConfirm}>Save</Button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</DialogRoot>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default EditRegisterUser;
|
||||
@@ -1,113 +0,0 @@
|
||||
import { Box, HStack, Input, Text } from "@chakra-ui/react";
|
||||
import { CiEdit } from "react-icons/ci";
|
||||
import { FaRegEye } from "react-icons/fa";
|
||||
import { LuSearch } from "react-icons/lu";
|
||||
import DataTable from "../../../components/DataTable";
|
||||
import MainFrame from "../../../components/MainFrame";
|
||||
import { InputGroup } from "../../../components/ui/input-group";
|
||||
import {
|
||||
PaginationItems,
|
||||
PaginationNextTrigger,
|
||||
PaginationRoot,
|
||||
} from "../../../components/ui/pagination";
|
||||
import { Switch } from "../../../components/ui/switch";
|
||||
import { Button } from "../../../components/ui/button";
|
||||
import DeleteConfirmationDialog from "./Component/DeleteConfirmationDialog";
|
||||
import EditRegisterUser from "./Component/EditRegisterUser";
|
||||
|
||||
// Table setup
|
||||
const tableHeadRow = [
|
||||
"Sr. No",
|
||||
"First Name",
|
||||
"Mobile number",
|
||||
"Gender",
|
||||
"DOB",
|
||||
"Type of User",
|
||||
"Language",
|
||||
"Activate/Deactivate",
|
||||
"Action",
|
||||
];
|
||||
|
||||
const usersData: any[] = [
|
||||
...Array.from({ length: 10 }, (_, i) => ({
|
||||
"Sr. No": i + 1,
|
||||
"First Name": "Ritesh",
|
||||
"Mobile number": "9876543210",
|
||||
Gender: "Male",
|
||||
DOB: "15-01-1990",
|
||||
"Type of User": "Admin",
|
||||
Language: "English",
|
||||
"Activate/Deactivate": (
|
||||
<HStack justifyContent="center">
|
||||
<Text>Yes</Text>
|
||||
<Switch size="sm" colorPalette="teal" />
|
||||
<Text>No</Text>
|
||||
</HStack>
|
||||
),
|
||||
Action: (
|
||||
<HStack justifyContent="center" gap={2}>
|
||||
{/* <FaRegEye cursor="pointer" size="18px" /> */}
|
||||
<EditRegisterUser
|
||||
onConfirm={() => {
|
||||
console.log("User deleted:", i + 1);
|
||||
}}
|
||||
/>
|
||||
<CiEdit cursor="pointer" size="18px" />
|
||||
<DeleteConfirmationDialog
|
||||
onConfirm={() => {
|
||||
console.log("User deleted:", i + 1);
|
||||
}}
|
||||
/>
|
||||
</HStack>
|
||||
),
|
||||
})),
|
||||
];
|
||||
|
||||
const RegisterUsers = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
<HStack w={"100%"} justifyContent={"space-between"} p={3}>
|
||||
<Text as={"span"} fontSize={"sm"} fontWeight={"bolder"} color={"#000"}>
|
||||
Register User
|
||||
</Text>
|
||||
|
||||
<Box w={"30%"}>
|
||||
<InputGroup
|
||||
bgSize={"xs"}
|
||||
flex="1"
|
||||
startElement={<LuSearch />}
|
||||
w={"100%"}
|
||||
color={"#000"}
|
||||
>
|
||||
<Input
|
||||
w={"100%"}
|
||||
bg={"#EEEEEE"}
|
||||
_focus={{ border: "1px #02A0A0 solid" }}
|
||||
border={"1px #EEEEEE solid"}
|
||||
rounded={"full"}
|
||||
size={"sm"}
|
||||
placeholder="Search..."
|
||||
/>
|
||||
</InputGroup>
|
||||
</Box>
|
||||
</HStack>
|
||||
|
||||
<DataTable tableHeadRow={tableHeadRow} data={usersData} />
|
||||
|
||||
<PaginationRoot
|
||||
p={4}
|
||||
mt={8}
|
||||
count={usersData.length}
|
||||
pageSize={3}
|
||||
defaultPage={1}
|
||||
>
|
||||
<HStack justifyContent="flex-end" mb={5}>
|
||||
<PaginationItems />
|
||||
<PaginationNextTrigger />
|
||||
</HStack>
|
||||
</PaginationRoot>
|
||||
</MainFrame>
|
||||
);
|
||||
};
|
||||
|
||||
export default RegisterUsers;
|
||||
@@ -0,0 +1,12 @@
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const DeactivatedAccounts = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
DeactivatedAccounts
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
|
||||
export default DeactivatedAccounts
|
||||
122
src/Pages/ManageUsers/RegisterUsers/RegisterUsers.tsx
Normal file
122
src/Pages/ManageUsers/RegisterUsers/RegisterUsers.tsx
Normal file
@@ -0,0 +1,122 @@
|
||||
import { Box, HStack, Image, Input, Text } from "@chakra-ui/react";
|
||||
import MainFrame from "../../../components/MainFrame";
|
||||
import AlertDailog from "../../../components/AlertDailog";
|
||||
import { FcCancel } from "react-icons/fc";
|
||||
import { NavLink } from "react-router-dom";
|
||||
import { MdOutlineRemoveRedEye } from "react-icons/md";
|
||||
import { RiDeleteBin5Line } from "react-icons/ri";
|
||||
import DataTable from "../../../components/DataTable";
|
||||
import { HiCheck } from "react-icons/hi2";
|
||||
import { HiX } from "react-icons/hi";
|
||||
import { Switch } from "../../../components/ui/switch";
|
||||
import { Button } from "../../../components/ui/button";
|
||||
import { InputGroup } from "../../../components/ui/input-group";
|
||||
import { LuSearch } from "react-icons/lu";
|
||||
|
||||
const tableHeadRow = [
|
||||
"Sr. No",
|
||||
"First Name",
|
||||
"Mobile Number ",
|
||||
"Gender",
|
||||
"DOB",
|
||||
"Type Of User",
|
||||
"Language",
|
||||
"Activate/Deactivate",
|
||||
"Action",
|
||||
];
|
||||
|
||||
const registerUser: any[] = [
|
||||
...Array.from({ length: 12 }, (_, i) => ({
|
||||
"Sr. No": i + 1,
|
||||
"First Name": "Ritesh",
|
||||
"Mobile Number ": "akanksha@gmail.com",
|
||||
"Gender": "9876543210",
|
||||
"DOB": "Female",
|
||||
"Type Of User": "15-01-1990",
|
||||
"Language": "Mumbai",
|
||||
"Activate/Deactivate": (
|
||||
<Box>
|
||||
<Switch colorPalette={'teal'} />
|
||||
</Box>
|
||||
),
|
||||
"Action": (
|
||||
<HStack justifyContent="center">
|
||||
<AlertDailog
|
||||
AltertTiggerIcon={FcCancel}
|
||||
alertText="Suspend User"
|
||||
alertIcon={<Image src={""} h={"39px"} />}
|
||||
alertCaption="Are you sure you want to deactivate this user?"
|
||||
onConfirm={() => {
|
||||
console.log("User deleted:", i + 1);
|
||||
}}
|
||||
/>
|
||||
<NavLink to="/manage-user/active-user/view-active-user">
|
||||
<MdOutlineRemoveRedEye
|
||||
style={{ cursor: "pointer", fontSize: "16px" }}
|
||||
/>
|
||||
</NavLink>
|
||||
|
||||
{/* <RiDeleteBin5Line style={{ cursor: "pointer" }} /> */}
|
||||
<AlertDailog
|
||||
AltertTiggerIcon={RiDeleteBin5Line}
|
||||
alertText="Delete Users"
|
||||
alertIcon={<Image src={"DeleteIcon"} h={"39px"} />}
|
||||
alertCaption="are you sure you want to delete ?"
|
||||
onConfirm={() => {
|
||||
console.log("User deleted:", i + 1);
|
||||
}}
|
||||
/>
|
||||
</HStack>
|
||||
),
|
||||
})),
|
||||
];
|
||||
|
||||
const RegisterUsers = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
<Box>
|
||||
<HStack
|
||||
w={"100%"}
|
||||
justifyContent={"space-between"}
|
||||
mb={4}
|
||||
py={0}
|
||||
px={3}
|
||||
>
|
||||
<Text as={"span"} fontSize={"sm"} fontWeight={500} color={"#000"}>
|
||||
Register Users
|
||||
</Text>
|
||||
|
||||
<HStack>
|
||||
<InputGroup
|
||||
startElement={
|
||||
<LuSearch fontSize={"xs"} style={{position:'relative',left:'10px'}} />
|
||||
}
|
||||
color={"#000"}
|
||||
>
|
||||
<Input
|
||||
p={4}
|
||||
w={300}
|
||||
bg={"#fff"}
|
||||
colorPalette={"blue"}
|
||||
_focus={{ border: "1px solid #02A0A0" }}
|
||||
rounded={"md"}
|
||||
size={"2xs"}
|
||||
fontSize={"2sm"}
|
||||
placeholder="Search..."
|
||||
bgColor={'#EEEEEE'}
|
||||
ps={8}
|
||||
/>
|
||||
</InputGroup>
|
||||
</HStack>
|
||||
</HStack>
|
||||
<DataTable
|
||||
sortableColumns={["Name", "Registration Date "]}
|
||||
tableHeadRow={tableHeadRow}
|
||||
data={registerUser}
|
||||
/>
|
||||
</Box>
|
||||
</MainFrame>
|
||||
);
|
||||
};
|
||||
|
||||
export default RegisterUsers;
|
||||
12
src/Pages/MasterModule/AgencyMaster/AgencyMaster.tsx
Normal file
12
src/Pages/MasterModule/AgencyMaster/AgencyMaster.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const AgencyMaster = () => {
|
||||
return (
|
||||
|
||||
<MainFrame>
|
||||
AgencyMaster
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default AgencyMaster
|
||||
12
src/Pages/MasterModule/Country/Country.tsx
Normal file
12
src/Pages/MasterModule/Country/Country.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const Country = () => {
|
||||
return (
|
||||
|
||||
<MainFrame>
|
||||
Country
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default Country
|
||||
12
src/Pages/MasterModule/JobStatus/JobStatus.tsx
Normal file
12
src/Pages/MasterModule/JobStatus/JobStatus.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const JobStatus = () => {
|
||||
return (
|
||||
|
||||
<MainFrame>
|
||||
JobStatus
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default JobStatus
|
||||
12
src/Pages/MasterModule/JobType/JobType.tsx
Normal file
12
src/Pages/MasterModule/JobType/JobType.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const JobType = () => {
|
||||
return (
|
||||
|
||||
<MainFrame>
|
||||
JobType
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default JobType
|
||||
12
src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx
Normal file
12
src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const TemplateMaster = () => {
|
||||
return (
|
||||
|
||||
<MainFrame>
|
||||
TemplateMaster
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default TemplateMaster
|
||||
12
src/Pages/MasterModule/WorkspaceMode/WorkspaceMode.tsx
Normal file
12
src/Pages/MasterModule/WorkspaceMode/WorkspaceMode.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import MainFrame from "../../../components/MainFrame"
|
||||
|
||||
|
||||
const WorkspaceMode = () => {
|
||||
return (
|
||||
|
||||
<MainFrame >
|
||||
WorkspaceMode
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default WorkspaceMode
|
||||
11
src/Pages/MyProfile/MyProfile.tsx
Normal file
11
src/Pages/MyProfile/MyProfile.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import MainFrame from "../../components/MainFrame"
|
||||
|
||||
const MyProfile = () => {
|
||||
return (
|
||||
|
||||
<MainFrame >
|
||||
MyProfile
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default MyProfile
|
||||
@@ -1,149 +0,0 @@
|
||||
import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react";
|
||||
import { useContext, useState } from "react";
|
||||
import { useForm } from "react-hook-form";
|
||||
import GlobalStateContext from "../../Contexts/GlobalStateContext";
|
||||
import logo from "../../assets/logo.svg";
|
||||
import { Button } from "../../components/ui/button";
|
||||
import { Field } from "../../components/ui/field";
|
||||
import { Toaster, toaster } from "../../components/ui/toaster";
|
||||
|
||||
interface FormValues {
|
||||
password: string;
|
||||
confirmPassword: string;
|
||||
}
|
||||
|
||||
const CreatePass = () => {
|
||||
const [isLoading, setIsLoading] = useState<boolean>(false);
|
||||
const context = useContext(GlobalStateContext);
|
||||
if (!context) {
|
||||
throw new Error("App must be used within a GlobalStateProvider");
|
||||
}
|
||||
const { setIsAuthenticate } = context;
|
||||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
formState: { errors },
|
||||
} = useForm<FormValues>();
|
||||
|
||||
const onSubmit = handleSubmit((data) => {
|
||||
setIsLoading(true);
|
||||
if (data?.password === "password123") {
|
||||
setTimeout(() => {
|
||||
setIsAuthenticate(true);
|
||||
setIsLoading(false);
|
||||
}, 3000);
|
||||
} else {
|
||||
toaster.create({
|
||||
title: `Invalid Credentials`,
|
||||
type: "error",
|
||||
});
|
||||
setIsLoading(false);
|
||||
}
|
||||
});
|
||||
|
||||
return (
|
||||
<VStack w={"100%"} h={"100vh"} bg={"#ffffff"}>
|
||||
<HStack
|
||||
boxShadow={"rgba(99, 99, 99, 0.2) 0px 2px 8px 0px"}
|
||||
w={"100%"}
|
||||
ps={8}
|
||||
h={"7%"}
|
||||
justifyContent={"flex-start"}
|
||||
>
|
||||
<Image w={50} src={logo} />
|
||||
</HStack>
|
||||
|
||||
<HStack w={"100%"} h={"93%"} p={8} gap={8}>
|
||||
<Center
|
||||
display={{ base: "none", md: "flex" }}
|
||||
bg={"#02A0A033"}
|
||||
w={"50%"}
|
||||
h={"100%"}
|
||||
rounded={"3xl"}
|
||||
>
|
||||
<Image w={250} src={logo} />
|
||||
</Center>
|
||||
|
||||
<Center
|
||||
as={"form"}
|
||||
onSubmit={onSubmit}
|
||||
p={{ base: 4, md: 16 }}
|
||||
w={{ base: "100%", md: "50%" }}
|
||||
h={"100%"}
|
||||
>
|
||||
<VStack gap={2} w={"100%"} alignItems={"flex-start"}>
|
||||
<Text
|
||||
w={"100%"}
|
||||
textAlign={"center"}
|
||||
fontSize={"24px"}
|
||||
fontWeight={"normal"}
|
||||
color={"#313039"}
|
||||
textTransform={"uppercase"}
|
||||
>
|
||||
create a password
|
||||
</Text>
|
||||
|
||||
<VStack mt={6} gap={4} w={"full"}>
|
||||
<Field
|
||||
color={"#313039"}
|
||||
label={"Enter password"}
|
||||
w={"100%"}
|
||||
invalid={!!errors.password}
|
||||
errorText={errors.password?.message}
|
||||
>
|
||||
<Input
|
||||
ps={3}
|
||||
type="password"
|
||||
{...register("password", {
|
||||
required: "Password is required",
|
||||
minLength: {
|
||||
value: 6,
|
||||
message: "Password must be at least 6 characters long",
|
||||
},
|
||||
})}
|
||||
placeholder="Enter your password"
|
||||
/>
|
||||
</Field>
|
||||
<Field
|
||||
color={"#313039"}
|
||||
label={"Confirm password"}
|
||||
w={"100%"}
|
||||
invalid={!!errors.confirmPassword}
|
||||
errorText={errors.confirmPassword?.message}
|
||||
>
|
||||
<Input
|
||||
ps={3}
|
||||
type="password"
|
||||
{...register("confirmPassword", {
|
||||
required: "Please confirm your password",
|
||||
validate: (value) =>
|
||||
value === getValues("password") || "Passwords do not match",
|
||||
})}
|
||||
placeholder="Confirm your password"
|
||||
/>
|
||||
</Field>
|
||||
<Button
|
||||
loading={isLoading}
|
||||
mt={4}
|
||||
size={"sm"}
|
||||
bg={"#02A0A0"}
|
||||
rounded={"md"}
|
||||
w={"100%"}
|
||||
color={"#ffffff"}
|
||||
type="submit"
|
||||
textTransform="capitalize"
|
||||
>
|
||||
Confirm Password
|
||||
</Button>
|
||||
|
||||
<Text>Forgot password</Text>
|
||||
</VStack>
|
||||
</VStack>
|
||||
</Center>
|
||||
<Toaster />
|
||||
</HStack>
|
||||
</VStack>
|
||||
);
|
||||
};
|
||||
|
||||
export default CreatePass;
|
||||
@@ -1,145 +0,0 @@
|
||||
import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react";
|
||||
import { useContext, useState } from "react";
|
||||
import { useForm } from "react-hook-form";
|
||||
import GlobalStateContext from "../../Contexts/GlobalStateContext";
|
||||
import logo from "../../assets/logo.svg";
|
||||
import uiEdit from "../../assets/icons/edit.png";
|
||||
import { Button } from "../../components/ui/button";
|
||||
import { Field } from "../../components/ui/field";
|
||||
import { Toaster, toaster } from "../../components/ui/toaster";
|
||||
import { PinInput } from "../../components/ui/pin-input";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
|
||||
interface FormValues {
|
||||
mobileNumber: number;
|
||||
}
|
||||
|
||||
const LoginOtp = () => {
|
||||
const [isLoading, setIsLoading] = useState<boolean>(false);
|
||||
const context = useContext(GlobalStateContext);
|
||||
const navigate = useNavigate();
|
||||
if (!context) {
|
||||
throw new Error("App must be used within a GlobalStateProvider");
|
||||
}
|
||||
const { setIsAuthenticate } = context;
|
||||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
formState: { errors },
|
||||
} = useForm<FormValues>();
|
||||
|
||||
const onSubmit = handleSubmit((data) => {
|
||||
setIsLoading(true);
|
||||
if (data?.mobileNumber === 1234567890) {
|
||||
setTimeout(() => {
|
||||
setIsAuthenticate(true);
|
||||
setIsLoading(false);
|
||||
}, 3000); // 3-second delay
|
||||
} else {
|
||||
toaster.create({
|
||||
title: `Invalid Credentials`,
|
||||
type: "error",
|
||||
});
|
||||
setIsLoading(false);
|
||||
}
|
||||
});
|
||||
|
||||
return (
|
||||
<VStack w={"100%"} h={"100vh"} bg={"#ffffff"}>
|
||||
<HStack
|
||||
boxShadow={"rgba(99, 99, 99, 0.2) 0px 2px 8px 0px"}
|
||||
w={"100%"}
|
||||
ps={8}
|
||||
h={"7%"}
|
||||
justifyContent={"flex-start"}
|
||||
>
|
||||
<Image w={50} src={logo} />
|
||||
</HStack>
|
||||
|
||||
<HStack w={"100%"} h={"93%"} p={8} gap={8}>
|
||||
<Center
|
||||
display={{ base: "none", md: "flex" }}
|
||||
bg={"#02A0A033"}
|
||||
w={"50%"}
|
||||
h={"100%"}
|
||||
rounded={"3xl"}
|
||||
>
|
||||
<Image w={250} src={logo} />
|
||||
</Center>
|
||||
|
||||
<Center
|
||||
as={"form"}
|
||||
onSubmit={onSubmit}
|
||||
p={{ base: 4, md: 16 }}
|
||||
w={{ base: "100%", md: "50%" }}
|
||||
h={"100%"}
|
||||
>
|
||||
<VStack gap={2} w={"100%"} alignItems={"center"}>
|
||||
<Text
|
||||
w={"100%"}
|
||||
textAlign={"center"}
|
||||
fontSize={"24px"}
|
||||
fontWeight={"normal"}
|
||||
color={"#313039"}
|
||||
>
|
||||
Enter otp
|
||||
</Text>
|
||||
<Text
|
||||
w={"100%"}
|
||||
textAlign={"center"}
|
||||
fontSize={"sm"}
|
||||
fontWeight={"normal"}
|
||||
color={"#49475A"}
|
||||
>
|
||||
OTP has been send to your E-mail Address
|
||||
</Text>
|
||||
<HStack>
|
||||
<Image src={uiEdit} h="24px" w="24px" />
|
||||
<Text
|
||||
w={"100%"}
|
||||
textAlign={"center"}
|
||||
fontSize={"sm"}
|
||||
fontWeight={"normal"}
|
||||
color={"#49475A"}
|
||||
>
|
||||
9619565889
|
||||
</Text>
|
||||
</HStack>
|
||||
|
||||
<VStack mt={6} gap={4} w={"full"}>
|
||||
<PinInput />
|
||||
<Text
|
||||
w={"100%"}
|
||||
textAlign={"center"}
|
||||
fontSize={"sm"}
|
||||
fontWeight={"600"}
|
||||
color={"#4746F4"}
|
||||
textDecoration="underline"
|
||||
>
|
||||
Resend OTP
|
||||
</Text>
|
||||
<Button
|
||||
// loading={isLoading}
|
||||
mt={4}
|
||||
size={"sm"}
|
||||
bg={"#02A0A0"}
|
||||
rounded={"md"}
|
||||
w={"100%"}
|
||||
color={"#ffffff"}
|
||||
type="submit"
|
||||
onClick={navigate("/create-password")}
|
||||
>
|
||||
Send OTP
|
||||
</Button>
|
||||
|
||||
<Text>Forgot password</Text>
|
||||
</VStack>
|
||||
</VStack>
|
||||
</Center>
|
||||
<Toaster />
|
||||
</HStack>
|
||||
</VStack>
|
||||
);
|
||||
};
|
||||
|
||||
export default LoginOtp;
|
||||
@@ -1,160 +0,0 @@
|
||||
import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react";
|
||||
import { useContext } from "react";
|
||||
import { useForm } from "react-hook-form";
|
||||
import GlobalStateContext from "../../Contexts/GlobalStateContext";
|
||||
import logo from "../../assets/logo.svg";
|
||||
import { Button } from "../../components/ui/button";
|
||||
import { Toaster, toaster } from "../../components/ui/toaster";
|
||||
import { NavLink, useNavigate } from "react-router-dom";
|
||||
import { Field } from "../../components/ui/field";
|
||||
|
||||
const LoginWithPass = () => {
|
||||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
formState: { errors },
|
||||
} = useForm();
|
||||
const context = useContext(GlobalStateContext);
|
||||
const navigate = useNavigate();
|
||||
|
||||
if (!context) {
|
||||
throw new Error("App must be used within a GlobalStateProvider");
|
||||
}
|
||||
|
||||
const { setIsAuthenticate } = context;
|
||||
|
||||
const onSubmit = (data: { mobileNumber: string; password: string }) => {
|
||||
const { mobileNumber, password } = data;
|
||||
|
||||
if (mobileNumber === "1231239870" && password === "admin@123") {
|
||||
navigate("/");
|
||||
setIsAuthenticate(true);
|
||||
} else {
|
||||
toaster.create({
|
||||
title: "Invalid Credentials",
|
||||
type: "error",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<VStack w={"100%"} h={"100vh"} bg={"#ffffff"}>
|
||||
<HStack
|
||||
boxShadow={"rgba(99, 99, 99, 0.2) 0px 2px 8px 0px"}
|
||||
w={"100%"}
|
||||
ps={8}
|
||||
h={"7%"}
|
||||
justifyContent={"flex-start"}
|
||||
>
|
||||
<Image w={50} src={logo} />
|
||||
</HStack>
|
||||
|
||||
<HStack w={"100%"} h={"93%"} p={8} gap={8}>
|
||||
<Center
|
||||
display={{ base: "none", md: "flex" }}
|
||||
bg={"#02A0A033"}
|
||||
w={"50%"}
|
||||
h={"100%"}
|
||||
rounded={"3xl"}
|
||||
>
|
||||
<Image w={250} src={logo} />
|
||||
</Center>
|
||||
|
||||
<Center
|
||||
as={"form"}
|
||||
p={{ base: 4, md: 16 }}
|
||||
w={{ base: "100%", md: "50%" }}
|
||||
h={"100%"}
|
||||
onSubmit={handleSubmit(onSubmit)}
|
||||
>
|
||||
<VStack gap={2} w={"100%"} alignItems={"flex-start"}>
|
||||
<Text
|
||||
w={"100%"}
|
||||
textAlign={"center"}
|
||||
fontSize={"24px"}
|
||||
fontWeight={"normal"}
|
||||
color={"#313039"}
|
||||
textTransform={"uppercase"}
|
||||
>
|
||||
LogIn
|
||||
</Text>
|
||||
|
||||
<VStack mt={6} gap={4} w={"full"}>
|
||||
<Field color={"#313039"} label={"Enter Mobile Number"} w={"100%"}>
|
||||
<Input
|
||||
ps={3}
|
||||
type="text"
|
||||
{...register("mobileNumber", {
|
||||
required: "Mobile Number is required",
|
||||
minLength: {
|
||||
value: 10,
|
||||
message: "Mobile Number must be 10 digits long",
|
||||
},
|
||||
maxLength: {
|
||||
value: 10,
|
||||
message: "Mobile Number must be 10 digits long",
|
||||
},
|
||||
})}
|
||||
placeholder="Enter your mobile number"
|
||||
/>
|
||||
{errors.mobileNumber && (
|
||||
<Text fontSize={"xs"} color={"red.500"}>
|
||||
{errors.mobileNumber.message}
|
||||
</Text>
|
||||
)}
|
||||
</Field>
|
||||
|
||||
<Field color={"#313039"} label={"Enter Password"} w={"100%"}>
|
||||
<Input
|
||||
ps={3}
|
||||
type="password"
|
||||
{...register("password", {
|
||||
required: "Password is required",
|
||||
minLength: {
|
||||
value: 6,
|
||||
message: "Password must be at least 6 characters long",
|
||||
},
|
||||
})}
|
||||
placeholder="Enter your password"
|
||||
/>
|
||||
{errors.password && (
|
||||
<Text fontSize={"xs"} color={"red.500"}>
|
||||
{errors.password.message}
|
||||
</Text>
|
||||
)}
|
||||
<NavLink to="/forgotPassword">
|
||||
<Text
|
||||
cursor="pointer"
|
||||
as={"span"}
|
||||
w={"100%"}
|
||||
fontSize={"xs"}
|
||||
fontWeight={"normal"}
|
||||
color={"#686677"}
|
||||
>
|
||||
Forget password
|
||||
</Text>
|
||||
</NavLink>
|
||||
</Field>
|
||||
|
||||
<Button
|
||||
mt={4}
|
||||
size={"sm"}
|
||||
bg={"#02A0A0"}
|
||||
rounded={"md"}
|
||||
w={"100%"}
|
||||
color={"#ffffff"}
|
||||
type="submit"
|
||||
textTransform="capitalize"
|
||||
>
|
||||
Confirm Password
|
||||
</Button>
|
||||
</VStack>
|
||||
</VStack>
|
||||
</Center>
|
||||
<Toaster />
|
||||
</HStack>
|
||||
</VStack>
|
||||
);
|
||||
};
|
||||
|
||||
export default LoginWithPass;
|
||||
@@ -1,110 +1,11 @@
|
||||
import { Circle, HStack, Image, Input, Text, VStack } from "@chakra-ui/react";
|
||||
import MainFrame from "../../components/MainFrame";
|
||||
import mypfp from "../../assets/profile-Avtars/mypfp.png";
|
||||
import { FaCamera } from "react-icons/fa";
|
||||
import { Field } from "../../components/ui/field";
|
||||
import { Button } from "../../components/ui/button";
|
||||
import { Editable } from "@chakra-ui/react";
|
||||
import MainFrame from "../../components/MainFrame"
|
||||
|
||||
const Profile = () => {
|
||||
return (
|
||||
<MainFrame>
|
||||
<VStack gap={4} p={4} alignItems="flex-start">
|
||||
<Circle height="113px" width="113px" position="relative">
|
||||
<Image src={mypfp} height="100%" />
|
||||
<span style={{ position: "absolute", right: "25px", bottom: "0" }}>
|
||||
<FaCamera color="black" />
|
||||
</span>
|
||||
</Circle>
|
||||
|
||||
<VStack alignItems="flex-start">
|
||||
<Text fontSize="sm" color="#1C1C1C" fontWeight={700}>
|
||||
Jackson David
|
||||
</Text>
|
||||
<Text color="#090909" fontWeight={400} fontSize={"sm"}>
|
||||
<span style={{ fontWeight: "600" }}>Employee ID:</span> #1245679
|
||||
</Text>
|
||||
</VStack>
|
||||
|
||||
<VStack alignItems="flex-start">
|
||||
<HStack>
|
||||
<VStack alignItems="flex-start">
|
||||
<Text fontSize="sm" color="black">
|
||||
First Name
|
||||
</Text>
|
||||
<Editable.Root
|
||||
border="0.5px solid #969696"
|
||||
borderRadius="4px"
|
||||
w="30vw"
|
||||
textAlign="start"
|
||||
color="black"
|
||||
bg="transparent"
|
||||
defaultValue="Jackson"
|
||||
>
|
||||
<Editable.Preview />
|
||||
<Editable.Input />
|
||||
</Editable.Root>
|
||||
</VStack>
|
||||
<VStack alignItems="flex-start">
|
||||
<Text fontSize="sm" color="black">
|
||||
Last Name
|
||||
</Text>
|
||||
<Editable.Root
|
||||
border="0.5px solid #969696"
|
||||
borderRadius="4px"
|
||||
w="30vw"
|
||||
textAlign="start"
|
||||
color="black"
|
||||
defaultValue="David"
|
||||
>
|
||||
<Editable.Preview />
|
||||
<Editable.Input />
|
||||
</Editable.Root>
|
||||
</VStack>
|
||||
{/* <Field color="black" w="30vw" label="First Name">
|
||||
<Input color="teal" _placeholder={{ color: "inherit" }} />
|
||||
</Field>
|
||||
<Field color="black" w="30vw" label="Last Name">
|
||||
<Input color="teal" _placeholder={{ color: "inherit" }} />
|
||||
</Field> */}
|
||||
</HStack>
|
||||
{/* <Field color="black" w="30vw" label="Phone Number">
|
||||
<Input color="teal" _placeholder={{ color: "inherit" }} />
|
||||
</Field> */}
|
||||
<VStack alignItems="flex-start">
|
||||
<Text fontSize="sm" color="black">
|
||||
Phone Number
|
||||
</Text>
|
||||
<Editable.Root
|
||||
_hover={{ bgColor: "white", color: "black" }}
|
||||
border="0.5px solid #969696"
|
||||
borderRadius="4px"
|
||||
w="30vw"
|
||||
textAlign="start"
|
||||
color="black"
|
||||
defaultValue="23435465543"
|
||||
>
|
||||
<Editable.Preview />
|
||||
<Editable.Input />
|
||||
</Editable.Root>
|
||||
</VStack>
|
||||
</VStack>
|
||||
<VStack alignItems="flex-start">
|
||||
<Text color="#1C1C1C" fontSize="sm" fontWeight={700}>
|
||||
Update Password
|
||||
</Text>
|
||||
<Button
|
||||
color="white"
|
||||
borderRadius="94px"
|
||||
bgColor="#02A0A0"
|
||||
w="227px"
|
||||
p={2}
|
||||
>
|
||||
Change Password
|
||||
</Button>
|
||||
</VStack>
|
||||
</VStack>
|
||||
<MainFrame >
|
||||
Profile
|
||||
</MainFrame>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Profile;
|
||||
export default Profile
|
||||
11
src/Pages/SubAdmin/SubAdmin.tsx
Normal file
11
src/Pages/SubAdmin/SubAdmin.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import MainFrame from "../../components/MainFrame"
|
||||
|
||||
const SubAdmin = () => {
|
||||
return (
|
||||
|
||||
<MainFrame >
|
||||
SubAdmin
|
||||
</MainFrame>
|
||||
)
|
||||
}
|
||||
export default SubAdmin
|
||||
@@ -1,137 +1,143 @@
|
||||
import { CgWorkAlt } from "react-icons/cg";
|
||||
import { LuBriefcaseBusiness} from "react-icons/lu";
|
||||
import { MdHeadsetMic, MdOutlineDashboard} from "react-icons/md";
|
||||
import { GoDotFill } from "react-icons/go";
|
||||
import { PiHeadphonesBold } from "react-icons/pi";
|
||||
import { RiUserSettingsLine } from "react-icons/ri";
|
||||
import { TbEdit, TbLayoutDashboard } from "react-icons/tb";
|
||||
import {
|
||||
TiDocumentText,
|
||||
TiUserAddOutline,
|
||||
TiUserOutline,
|
||||
} from "react-icons/ti";
|
||||
import { HiOutlinePencilSquare } from "react-icons/hi2";
|
||||
import { BiUser, BiUserPin } from "react-icons/bi";
|
||||
import { PiUsersThree } from "react-icons/pi";
|
||||
import { BsBoxes, BsPersonBadge } from "react-icons/bs";
|
||||
import { AiOutlineFileText } from "react-icons/ai";
|
||||
|
||||
export const nav = [
|
||||
{
|
||||
title: "Dashboard",
|
||||
path: "/",
|
||||
Icon: TbLayoutDashboard,
|
||||
type: "single",
|
||||
},
|
||||
{
|
||||
title: "Manage Users",
|
||||
path: "/manage-user/register-user",
|
||||
initPath: "/manage-user",
|
||||
Icon: TiUserOutline,
|
||||
type: "multiple",
|
||||
children: [
|
||||
{
|
||||
title: "Register Users",
|
||||
path: "/manage-user/register-user",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Deactivated Accounts",
|
||||
path: "/manage-user/deactivate-accounts",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Manage Post",
|
||||
path: "/manage-post",
|
||||
Icon: TbEdit,
|
||||
type: "single",
|
||||
},
|
||||
{
|
||||
title: "Manage Sub-Admin",
|
||||
path: "/manage-sub-admin",
|
||||
Icon: TiUserAddOutline,
|
||||
type: "single",
|
||||
},
|
||||
{
|
||||
title: "Manage Jobs",
|
||||
path: "/manage-jobs",
|
||||
Icon: CgWorkAlt,
|
||||
type: "single",
|
||||
},
|
||||
{
|
||||
title: "Manage Contact Us",
|
||||
path: "/manage-contact-us",
|
||||
Icon: PiHeadphonesBold,
|
||||
type: "single",
|
||||
},
|
||||
|
||||
{
|
||||
title: "Manage CMS",
|
||||
initPath: "/manage-cms",
|
||||
path: "/manage-cms/faq",
|
||||
Icon: TiDocumentText,
|
||||
type: "multiple",
|
||||
children: [
|
||||
{
|
||||
title: "FAQ",
|
||||
path: "/manage-cms/faq",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "About Us",
|
||||
path: "/manage-cms/about-us",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Privacy Policy",
|
||||
path: "/manage-cms/privacy-policy",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Terms And Conditions",
|
||||
path: "/manage-cms/terms-and-condition",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "My Profile",
|
||||
path: "/profile",
|
||||
Icon: RiUserSettingsLine,
|
||||
type: "single",
|
||||
},
|
||||
{
|
||||
title: "Master Module",
|
||||
initPath: "/master-module",
|
||||
path: "/master-module/agency-master",
|
||||
Icon: TiDocumentText,
|
||||
type: "multiple",
|
||||
children: [
|
||||
{
|
||||
title: "Agency Master",
|
||||
path: "/master-module/agency-master",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Template Master",
|
||||
path: "/master-module/template-master",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Job Type",
|
||||
path: "/master-module/job-type",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Workspace model",
|
||||
path: "/master-module/workspace-model",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Country",
|
||||
path: "/master-module/country",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Job Status",
|
||||
path: "/master-module/job-status",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
{
|
||||
title: "Dashboard",
|
||||
path: "/",
|
||||
Icon: MdOutlineDashboard,
|
||||
type:'single'
|
||||
},
|
||||
{
|
||||
title: "Manage Users",
|
||||
path: "/register-users",
|
||||
Icon: BiUserPin,
|
||||
type:'multiple',
|
||||
children: [
|
||||
{
|
||||
title: "Register Users",
|
||||
path: "/register-users",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Deactivated Accounts",
|
||||
path: "/deactivated-accounts",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Manage Post",
|
||||
path: "/manage-post",
|
||||
Icon: HiOutlinePencilSquare,
|
||||
type:'single'
|
||||
},
|
||||
{
|
||||
title: "Manage Sub-Admin",
|
||||
path: "/sub-admin",
|
||||
Icon: BiUser,
|
||||
type:'single'
|
||||
},
|
||||
{
|
||||
title: "Manage Jobs",
|
||||
path: "/manage-jobs",
|
||||
Icon: LuBriefcaseBusiness,
|
||||
type:'single'
|
||||
},
|
||||
{
|
||||
title: "Manage Groups",
|
||||
path: "/manage-groups",
|
||||
Icon: PiUsersThree,
|
||||
type:'single'
|
||||
},
|
||||
{
|
||||
title: "Manage Contact Us",
|
||||
path: "/manage-contact",
|
||||
Icon: MdHeadsetMic ,
|
||||
type:'single'
|
||||
},
|
||||
{
|
||||
title: "Manage CMS",
|
||||
path: "/faq",
|
||||
Icon: AiOutlineFileText,
|
||||
type:'multiple',
|
||||
children: [
|
||||
{
|
||||
title: "FAQs",
|
||||
path: "/faq",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "About Us",
|
||||
path: "/about-us",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Privacy Policy",
|
||||
path: "/privacy-policy",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Terms And Conditions",
|
||||
path: "/terms-conditions",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Privacy",
|
||||
path: "/privacy",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "My Profile",
|
||||
path: "/profile",
|
||||
Icon: BsPersonBadge,
|
||||
type:'single'
|
||||
},
|
||||
{
|
||||
title: "Master Module",
|
||||
path: "/agency-master",
|
||||
Icon: BsBoxes,
|
||||
type:'multiple',
|
||||
children: [
|
||||
{
|
||||
title: "Agency Master",
|
||||
path: "/agency-master",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Template Master",
|
||||
path: "/template-master",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Job Type",
|
||||
path: "/job-type",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Workspace Mode",
|
||||
path: "/workspace-mode",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Country",
|
||||
path: "/country",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
{
|
||||
title: "Job Status",
|
||||
path: "/job-status",
|
||||
Icon: GoDotFill,
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,31 +1,49 @@
|
||||
|
||||
|
||||
import Dashboard from "../Pages/Dashboard/Dashboard";
|
||||
import AboutUs from "../Pages/ManageCMS/AboutUs/AboutUs";
|
||||
import FreqAskQuestion from "../Pages/ManageCMS/FAQ/FreqAskQuestion";
|
||||
import PrivacyPolicy from "../Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy";
|
||||
import ManageContactUs from "../Pages/ManageContactUs/ManageContactUs";
|
||||
import ManageGroups from "../Pages/ManageGroups/ManageGroups";
|
||||
import ManageJobs from "../Pages/ManageJobs/ManageJobs";
|
||||
import ManagePost from "../Pages/ManagePost/ManagePost";
|
||||
import ManageSubAdmin from "../Pages/ManageSubAdmin/ManageSubAdmin";
|
||||
import DeactivatedAccounts from "../Pages/ManageUser/DeactivatedAccounts/DeactivatedAccounts";
|
||||
import RegisterUsers from "../Pages/ManageUser/RegisterUsers/RegisterUsers";
|
||||
import Profile from "../Pages/Profile/Profile";
|
||||
import SubAdmin from "../Pages/SubAdmin/SubAdmin";
|
||||
import ManageContact from "../Pages/ManageContact/ManageContact";
|
||||
import FAQ from "../Pages/ManageCMS/FAQ/FAQ";
|
||||
import AboutUs from "../Pages/ManageCMS/AboutUs/AboutUs";
|
||||
import PrivacyPolicy from "../Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy";
|
||||
import TermsAndConditions from "../Pages/ManageCMS/TermsAndConditions/TermsAndConditions";
|
||||
import Privacy from "../Pages/ManageCMS/Privacy/Privacy";
|
||||
import MyProfile from "../Pages/MyProfile/MyProfile";
|
||||
import Notification from "../Pages/Notification/Notification";
|
||||
import AgencyMaster from "../Pages/MasterModule/AgencyMaster/AgencyMaster";
|
||||
import TemplateMaster from "../Pages/MasterModule/TemplateMaster/TemplateMaster";
|
||||
import JobType from "../Pages/MasterModule/JobType/JobType";
|
||||
import WorkspaceMode from "../Pages/MasterModule/WorkspaceMode/WorkspaceMode";
|
||||
import Country from "../Pages/MasterModule/Country/Country";
|
||||
import JobStatus from "../Pages/MasterModule/JobStatus/JobStatus";
|
||||
import RegisterUsers from "../Pages/ManageUsers/RegisterUsers/RegisterUsers";
|
||||
import DeactivatedAccounts from "../Pages/ManageUsers/DeactivatedAccounts/DeactivatedAccounts";
|
||||
|
||||
export const RouteLink = [
|
||||
{ path: "/", Component: Dashboard },
|
||||
{ path: "/manage-user/register-user", Component: RegisterUsers },
|
||||
{ path: "/manage-user/deactivate-accounts", Component: DeactivatedAccounts },
|
||||
{ path: "/manage-post", Component: ManagePost },
|
||||
{ path: "/manage-sub-admin", Component: ManageSubAdmin },
|
||||
{ path: "/manage-jobs", Component: ManageJobs },
|
||||
{ path: "/manage-contact-us", Component: ManageContactUs },
|
||||
{ path: "/manage-cms/faq", Component: FreqAskQuestion },
|
||||
|
||||
{ path: "/manage-cms/about-us", Component: AboutUs },
|
||||
|
||||
{ path: "/manage-cms/privacy-policy", Component: PrivacyPolicy },
|
||||
|
||||
{ path: "/manage-cms/terms-and-condition", Component: PrivacyPolicy },
|
||||
|
||||
{ path: "/profile", Component: Profile },
|
||||
|
||||
{ path: "/my-profile", Component: Profile },
|
||||
];
|
||||
{ path: "/", Component: Dashboard },
|
||||
{ path: "/register-users", Component: RegisterUsers },
|
||||
{ path: "/deactivated-accounts", Component: DeactivatedAccounts },
|
||||
{ path: "/manage-post", Component: ManagePost },
|
||||
{ path: "/sub-admin", Component: SubAdmin},
|
||||
{ path: "/manage-jobs", Component: ManageJobs},
|
||||
{ path: "/manage-groups", Component: ManageGroups },
|
||||
{ path: "/manage-contact", Component: ManageContact},
|
||||
{ path: "/faq", Component: FAQ},
|
||||
{ path: "/about-us", Component: AboutUs},
|
||||
{ path: "/privacy-policy", Component: PrivacyPolicy},
|
||||
{ path: "/terms-conditions", Component: TermsAndConditions},
|
||||
{ path: "/privacy", Component: Privacy},
|
||||
{ path: "/my-profile", Component: MyProfile},
|
||||
{ path: "/manage-notification", Component: Notification},
|
||||
{ path: "/profile", Component: Profile},
|
||||
{ path: "/agency-master", Component: AgencyMaster},
|
||||
{ path: "/template-master", Component: TemplateMaster},
|
||||
{ path: "/job-type", Component: JobType},
|
||||
{ path: "/workspace-mode", Component: WorkspaceMode},
|
||||
{ path: "/country", Component: Country},
|
||||
{ path: "/job-status", Component: JobStatus},
|
||||
]
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 667 B |
Binary file not shown.
|
Before Width: | Height: | Size: 31 KiB |
125
src/components/AlertDailog.tsx
Normal file
125
src/components/AlertDailog.tsx
Normal file
@@ -0,0 +1,125 @@
|
||||
import React from "react";
|
||||
|
||||
import { DialogBody, HStack, Icon, Text } from "@chakra-ui/react";
|
||||
import { Button } from "./ui/button";
|
||||
import {
|
||||
DialogActionTrigger,
|
||||
DialogCloseTrigger,
|
||||
DialogContent,
|
||||
DialogRoot,
|
||||
DialogTrigger,
|
||||
} from "./ui/dialog";
|
||||
|
||||
interface DeleteConfirmationDialogProps {
|
||||
onConfirm?: () => void;
|
||||
alertText?: string;
|
||||
alertCaption?: string;
|
||||
alertIcon?: any;
|
||||
AltertTiggerIcon?: any;
|
||||
button?: any;
|
||||
iconColor?: string;
|
||||
}
|
||||
|
||||
const AlertDailog: React.FC<DeleteConfirmationDialogProps> = ({
|
||||
onConfirm,
|
||||
alertText,
|
||||
alertCaption,
|
||||
alertIcon,
|
||||
AltertTiggerIcon,
|
||||
button,
|
||||
iconColor,
|
||||
}) => {
|
||||
return (
|
||||
<DialogRoot
|
||||
placement={"center"}
|
||||
motionPreset="slide-in-bottom"
|
||||
size={"xs"}
|
||||
role="alertdialog"
|
||||
>
|
||||
<DialogTrigger asChild>
|
||||
{button ? (
|
||||
button
|
||||
) : (
|
||||
<Icon
|
||||
cursor={"pointer"}
|
||||
p={0.5}
|
||||
_hover={{ bg: "#00000015" }}
|
||||
rounded={"md"}
|
||||
boxSize={5}
|
||||
color={iconColor && iconColor}
|
||||
>
|
||||
<AltertTiggerIcon />
|
||||
</Icon>
|
||||
)}
|
||||
</DialogTrigger>
|
||||
<DialogContent bgColor="#fff">
|
||||
{/* <DialogHeader display="flex" justifyContent="center"> */}
|
||||
{/* <Image src={alertIcon} h={"39px"} /> */}
|
||||
|
||||
{/* </DialogHeader> */}
|
||||
<DialogBody
|
||||
display="flex"
|
||||
flexDirection="column"
|
||||
alignItems="center"
|
||||
color="black"
|
||||
p={8}
|
||||
gap={2}
|
||||
>
|
||||
{alertIcon && alertIcon}
|
||||
<Text
|
||||
mt={3}
|
||||
fontWeight={600}
|
||||
fontSize="sm"
|
||||
color="#000000"
|
||||
textAlign="center"
|
||||
as={"span"}
|
||||
>
|
||||
{alertText}
|
||||
</Text>
|
||||
<Text
|
||||
as={"span"}
|
||||
fontSize="sm"
|
||||
style={{ textAlign: "center", color: "#000000CC", width: "100%" }}
|
||||
>
|
||||
{" "}
|
||||
{alertCaption}
|
||||
</Text>
|
||||
<HStack mt={2} w={"100%"}>
|
||||
<DialogActionTrigger asChild>
|
||||
<Button
|
||||
width="50%"
|
||||
color="black"
|
||||
_hover={{ bgColor: "white" }}
|
||||
variant="outline"
|
||||
borderRadius="sm"
|
||||
border="1px solid #007F33"
|
||||
size={"xs"}
|
||||
>
|
||||
No
|
||||
</Button>
|
||||
</DialogActionTrigger>
|
||||
<Button
|
||||
borderRadius="sm"
|
||||
width="50%"
|
||||
bgColor="#007F33"
|
||||
color="white"
|
||||
// colorPalette="#007F33"
|
||||
onClick={onConfirm}
|
||||
size={"xs"}
|
||||
>
|
||||
Yes{" "}
|
||||
</Button>
|
||||
</HStack>
|
||||
</DialogBody>
|
||||
|
||||
<DialogCloseTrigger
|
||||
_hover={{ bg: "#00000010" }}
|
||||
color={"#000"}
|
||||
colorPalette={"bg"}
|
||||
/>
|
||||
</DialogContent>
|
||||
</DialogRoot>
|
||||
);
|
||||
};
|
||||
|
||||
export default AlertDailog;
|
||||
@@ -1,35 +1,130 @@
|
||||
import { Stack, Table } from "@chakra-ui/react"
|
||||
|
||||
import { useState } from "react";
|
||||
import { HStack, Stack, Table } from "@chakra-ui/react";
|
||||
import { PaginationItems, PaginationNextTrigger, PaginationPrevTrigger, PaginationRoot } from "./ui/pagination";
|
||||
// import {
|
||||
// PaginationItems,
|
||||
// PaginationNextTrigger,
|
||||
// PaginationPrevTrigger,
|
||||
// PaginationRoot,
|
||||
// } from "./ui/pagination";
|
||||
|
||||
interface TableProps {
|
||||
tableHeadRow: string[];
|
||||
data: Record<string, any>[];
|
||||
sortableColumns?: string[]; // Specify which columns are sortable
|
||||
}
|
||||
|
||||
const DataTable: React.FC<TableProps> = ({
|
||||
tableHeadRow,
|
||||
data,
|
||||
sortableColumns = [],
|
||||
}) => {
|
||||
const [sortedData, setSortedData] = useState(data);
|
||||
const [sortConfig, setSortConfig] = useState<{
|
||||
key: string;
|
||||
direction: "asc" | "desc";
|
||||
} | null>(null);
|
||||
|
||||
const handleSort = (column: string) => {
|
||||
if (!sortableColumns.includes(column)) return;
|
||||
|
||||
let direction: "asc" | "desc" = "asc";
|
||||
if (
|
||||
sortConfig &&
|
||||
sortConfig.key === column &&
|
||||
sortConfig.direction === "asc"
|
||||
) {
|
||||
direction = "desc";
|
||||
}
|
||||
|
||||
const sortedArray = [...sortedData].sort((a, b) => {
|
||||
if (a[column] < b[column]) return direction === "asc" ? -1 : 1;
|
||||
if (a[column] > b[column]) return direction === "asc" ? 1 : -1;
|
||||
return 0;
|
||||
});
|
||||
|
||||
setSortedData(sortedArray);
|
||||
setSortConfig({ key: column, direction });
|
||||
};
|
||||
|
||||
const DataTable: React.FC<TableProps> = ({ tableHeadRow, data }) => {
|
||||
return (
|
||||
<Stack mt={4} color={'#000000CC'} gap="10">
|
||||
<Table.Root key={'line'} size="sm" variant={'line'}>
|
||||
<Table.Header >
|
||||
<Table.Row bg={'#02A0A0'} >
|
||||
{tableHeadRow.map((item, index)=><Table.ColumnHeader textAlign="center" fontSize={'xs'} fontWeight={700} key={index} border={'none'}>{item}</Table.ColumnHeader>)}
|
||||
|
||||
<Stack mt={0} color={"#000000CC"}>
|
||||
<Table.ScrollArea mb={3}>
|
||||
<Table.Root size="sm" variant={"line"} stickyHeader>
|
||||
<Table.Header>
|
||||
<Table.Row bg={"#02A0A0"}>
|
||||
{tableHeadRow.map((item, index) => (
|
||||
<Table.ColumnHeader
|
||||
color="white"
|
||||
fontSize={"xs"}
|
||||
fontWeight={600}
|
||||
px={4}
|
||||
p={3}
|
||||
textAlign={
|
||||
index === tableHeadRow.length - 1 ? "center" : "left"
|
||||
}
|
||||
key={index}
|
||||
border={"none"}
|
||||
onClick={() => handleSort(item)}
|
||||
cursor={
|
||||
sortableColumns.includes(item) ? "pointer" : "default"
|
||||
}
|
||||
_hover={
|
||||
sortableColumns.includes(item)
|
||||
? { textDecoration: "underline" }
|
||||
: {}
|
||||
}
|
||||
>
|
||||
{item}
|
||||
{sortableColumns.includes(item) &&
|
||||
sortConfig?.key === item && (
|
||||
<span style={{ marginLeft: "4px" }}>
|
||||
{sortConfig.direction === "asc" ? "\u25B2" : "\u25BC"}
|
||||
</span>
|
||||
)}
|
||||
</Table.ColumnHeader>
|
||||
))}
|
||||
</Table.Row>
|
||||
</Table.Header>
|
||||
<Table.Body>
|
||||
{sortedData.map((item: any, index) => (
|
||||
<Table.Row
|
||||
key={index}
|
||||
bg={index % 2 === 0 ? "#fff" : "#007F3310"}
|
||||
>
|
||||
{tableHeadRow.map((heading, colIndex) => (
|
||||
<Table.Cell
|
||||
// className="oxygen"
|
||||
px={4}
|
||||
p={2}
|
||||
key={`${index}-${colIndex}`}
|
||||
fontSize={"xs"}
|
||||
fontWeight={500}
|
||||
border={"none"}
|
||||
>
|
||||
{item[heading]}
|
||||
</Table.Cell>
|
||||
))}
|
||||
</Table.Row>
|
||||
</Table.Header>
|
||||
<Table.Body>
|
||||
{data.map((item:any, index) => (
|
||||
<Table.Row
|
||||
bg={index % 2 === 0 ? "#fff" : "#02A0A020"} >
|
||||
{tableHeadRow.map((heading)=><Table.Cell textAlign="center" key={index} fontSize={'xs'} fontWeight={500} border={'none'}>{item[heading]}</Table.Cell> )}
|
||||
|
||||
</Table.Row>))}
|
||||
|
||||
</Table.Body>
|
||||
</Table.Root>
|
||||
</Stack>
|
||||
)
|
||||
}
|
||||
))}
|
||||
</Table.Body>
|
||||
</Table.Root>
|
||||
</Table.ScrollArea>
|
||||
<PaginationRoot
|
||||
size={"xs"}
|
||||
count={20}
|
||||
pageSize={2}
|
||||
defaultPage={1}
|
||||
mb={4}
|
||||
>
|
||||
<HStack justifyContent="flex-end">
|
||||
<PaginationPrevTrigger />
|
||||
<PaginationItems />
|
||||
<PaginationNextTrigger />
|
||||
</HStack>
|
||||
</PaginationRoot>
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
export default DataTable
|
||||
export default DataTable;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Box, VStack } from "@chakra-ui/react"
|
||||
import { Box, Text, VStack } from "@chakra-ui/react"
|
||||
import { motion } from "framer-motion"
|
||||
import React, { FC } from "react"
|
||||
import { OPACITY_ON_LOAD } from "../Layouts/animations"
|
||||
@@ -11,15 +11,17 @@ interface MainFrameProps {
|
||||
title?: string
|
||||
}
|
||||
|
||||
const MainFrame: FC<MainFrameProps> = ({ children }) => {
|
||||
const MainFrame: FC<MainFrameProps> = ({ children, title }) => {
|
||||
return (
|
||||
<MotionVStack overflowY="scroll" {...OPACITY_ON_LOAD} w="100%" h="94.5%" p={3} ps={1} pt={3} >
|
||||
<MotionVStack {...OPACITY_ON_LOAD} w="100%" h="90%" p={0} pb={0}>
|
||||
<Box
|
||||
w="100%"
|
||||
h="100vh"
|
||||
h="100%"
|
||||
bg="#ffffff"
|
||||
rounded="md"
|
||||
overflow={'scroll'}
|
||||
// rounded="md"
|
||||
boxShadow={'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px'}
|
||||
pt={3}
|
||||
>
|
||||
{children}
|
||||
</Box>
|
||||
|
||||
@@ -4,6 +4,7 @@ import type { ButtonProps, TextProps } from "@chakra-ui/react";
|
||||
import {
|
||||
Button,
|
||||
Pagination as ChakraPagination,
|
||||
HStack,
|
||||
IconButton,
|
||||
Text,
|
||||
createContext,
|
||||
@@ -93,8 +94,8 @@ export const PaginationItem = React.forwardRef<
|
||||
variant={variant}
|
||||
size={size}
|
||||
bg={current ? "#02A0A0" : "white"}
|
||||
color={current ? "white" : "black"}
|
||||
_hover={{ bg: "#02A0A0", color: "white" }}
|
||||
color={current ? "black" : "black"}
|
||||
_hover={{ bg: "#02A0A0", color: "black" }}
|
||||
>
|
||||
{props.value}
|
||||
</LinkButton>
|
||||
@@ -104,11 +105,11 @@ export const PaginationItem = React.forwardRef<
|
||||
return (
|
||||
<ChakraPagination.Item ref={ref} {...props} asChild>
|
||||
<Button
|
||||
bg={current ? "#02A0A0" : "white"}
|
||||
color={current ? "white" : "black"}
|
||||
bg={current ? "#F5F8FB" : "white"}
|
||||
color={current ? "black" : "black"}
|
||||
variant={variant}
|
||||
size={size}
|
||||
_hover={{ bg: "#02A0A0", color: "white" }}
|
||||
_hover={{ bg: "#F5F8FB", color: "black" }}
|
||||
border="none"
|
||||
>
|
||||
{props.value}
|
||||
@@ -130,7 +131,7 @@ export const PaginationPrevTrigger = React.forwardRef<
|
||||
href={previousPage != null ? getHref(previousPage) : undefined}
|
||||
variant={variantMap.default}
|
||||
size={size}
|
||||
_hover={{ bg: "#02A0A0", color: "white" }}
|
||||
_hover={{ bg: "#F5F8FB", color: "black" }}
|
||||
>
|
||||
<HiChevronLeft />
|
||||
</LinkButton>
|
||||
@@ -158,11 +159,12 @@ export const PaginationNextTrigger = React.forwardRef<
|
||||
<LinkButton
|
||||
href={nextPage != null ? getHref(nextPage) : undefined}
|
||||
variant={variantMap.default}
|
||||
size={size}
|
||||
// size={size}
|
||||
borderRadius="94px"
|
||||
bg="#02A0A0"
|
||||
bg="#F5F8FB"
|
||||
color="white"
|
||||
w="136px"
|
||||
fontSize="sm"
|
||||
_hover={{ bg: "#026060" }}
|
||||
>
|
||||
Next
|
||||
@@ -172,17 +174,24 @@ export const PaginationNextTrigger = React.forwardRef<
|
||||
|
||||
return (
|
||||
<ChakraPagination.NextTrigger ref={ref} asChild {...props}>
|
||||
<Button
|
||||
<Text
|
||||
w="136px"
|
||||
borderRadius="94px"
|
||||
bg="#02A0A0"
|
||||
color="white"
|
||||
variant={variantMap.default}
|
||||
size={size}
|
||||
_hover={{ bg: "#026060" }}
|
||||
// borderRadius="94px"
|
||||
// bg="#02A0A0"
|
||||
color="black"
|
||||
// variant={variantMap.default}
|
||||
// size={size}
|
||||
cursor="pointer"
|
||||
// _hover={{ bg: "#026060" }}
|
||||
display="flex"
|
||||
gap="12px"
|
||||
alignItems="center"
|
||||
fontSize="xs"
|
||||
justifyContent="center"
|
||||
>
|
||||
Next
|
||||
</Button>
|
||||
<HiChevronRight />
|
||||
</Text>
|
||||
</ChakraPagination.NextTrigger>
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
import { PinInput as ChakraPinInput, Group } from "@chakra-ui/react"
|
||||
import * as React from "react"
|
||||
|
||||
export interface PinInputProps extends ChakraPinInput.RootProps {
|
||||
rootRef?: React.Ref<HTMLDivElement>
|
||||
count?: number
|
||||
inputProps?: React.InputHTMLAttributes<HTMLInputElement>
|
||||
attached?: boolean
|
||||
}
|
||||
|
||||
export const PinInput = React.forwardRef<HTMLInputElement, PinInputProps>(
|
||||
function PinInput(props, ref) {
|
||||
const { count = 4, inputProps, rootRef, attached, ...rest } = props
|
||||
return (
|
||||
<ChakraPinInput.Root ref={rootRef} {...rest}>
|
||||
<ChakraPinInput.HiddenInput ref={ref} {...inputProps} />
|
||||
<ChakraPinInput.Control>
|
||||
<Group attached={attached}>
|
||||
{Array.from({ length: count }).map((_, index) => (
|
||||
<ChakraPinInput.Input color="black" key={index} index={index} />
|
||||
))}
|
||||
</Group>
|
||||
</ChakraPinInput.Control>
|
||||
</ChakraPinInput.Root>
|
||||
)
|
||||
},
|
||||
)
|
||||
106
src/index.css
106
src/index.css
@@ -1,10 +1,26 @@
|
||||
body{
|
||||
@import url('https://fonts.googleapis.com/css2?family=Oxygen:wght@300;400;700&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap');
|
||||
|
||||
|
||||
|
||||
*{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: "Roboto", serif;
|
||||
}
|
||||
|
||||
.Oxygen{
|
||||
font-family: "Oxygen", serif
|
||||
}
|
||||
|
||||
|
||||
.active {
|
||||
background-color: #02A0A0 !important;
|
||||
color: #fff !important;
|
||||
@@ -21,12 +37,7 @@ body{
|
||||
/* background-color: #e2e8f01c !important; */
|
||||
}
|
||||
|
||||
.active>.css-1ic543h {
|
||||
-webkit-transition: rotate 0.2s;
|
||||
transition: rotate 0.2s;
|
||||
transform-origin: center;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
.linkChild:hover{
|
||||
color: #02A0A0 !important;
|
||||
@@ -54,26 +65,99 @@ body{
|
||||
}
|
||||
|
||||
|
||||
/* Sphere.css */
|
||||
|
||||
/* ✅ Red Spheres */
|
||||
.red-sphere-1,
|
||||
.red-sphere-2,
|
||||
.red-sphere-3{
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
background-color: #D90B2E46;
|
||||
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
|
||||
filter: blur(100px);
|
||||
}
|
||||
|
||||
/* ✅ Blue Spheres */
|
||||
.blue-sphere-1,
|
||||
.blue-sphere-2,
|
||||
.blue-sphere-3{
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
background-color: #009DAB46;
|
||||
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
|
||||
filter: blur(100px);
|
||||
}
|
||||
|
||||
/* 🔧 Positioning for Spheres */
|
||||
.red-sphere-1 {
|
||||
width: 250px;
|
||||
height: 250px;
|
||||
top: 10%;
|
||||
left: 5%;
|
||||
}
|
||||
|
||||
.blue-sphere-1 {
|
||||
width: 320px;
|
||||
height: 320px;
|
||||
top: 30%;
|
||||
right: 0%;
|
||||
}
|
||||
|
||||
.red-sphere-2 {
|
||||
width: 180px;
|
||||
height: 180px;
|
||||
bottom: 15%;
|
||||
left: 20%;
|
||||
}
|
||||
|
||||
.blue-sphere-2 {
|
||||
width: 140px;
|
||||
height: 140px;
|
||||
bottom: 5%;
|
||||
right: 25%;
|
||||
}
|
||||
|
||||
.red-sphere-3 {
|
||||
width: 480px;
|
||||
height: 480px;
|
||||
bottom: 55%;
|
||||
left: 40%;
|
||||
}
|
||||
|
||||
.blue-sphere-3{
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
bottom: 10%;
|
||||
right: 40%;
|
||||
}
|
||||
|
||||
|
||||
/* Style the scrollbar */
|
||||
::-webkit-scrollbar {
|
||||
width: 12px; /* Width of the vertical scrollbar */
|
||||
width: 6px; /* Width of the vertical scrollbar */
|
||||
height: 12px; /* Height of the horizontal scrollbar */
|
||||
}
|
||||
|
||||
/* Style the scrollbar track (the background area) */
|
||||
::-webkit-scrollbar-track {
|
||||
background-color: #f1f1f1; /* Light gray track */
|
||||
background-color: #f1f1f1;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
/* Style the scrollbar thumb (the draggable part) */
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: #f3f3f3; /* Gray color for the thumb */
|
||||
background-color: #c8c8c8cf;
|
||||
/* Gray color for the thumb */
|
||||
border-radius: 10px;
|
||||
border: 3px solid #f1f1f1; /* Border around the thumb */
|
||||
border: 1px solid #f1f1f1; /* Border around the thumb */
|
||||
}
|
||||
|
||||
/* Style the scrollbar thumb on hover */
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #555; /* Darker gray when hovered */
|
||||
}
|
||||
|
||||
input:focus-visible {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user