diff --git a/Frontend/package-lock.json b/Frontend/package-lock.json
index d73232c..1d26866 100644
--- a/Frontend/package-lock.json
+++ b/Frontend/package-lock.json
@@ -14,6 +14,7 @@
"@testing-library/jest-dom": "^5.16.3",
"@testing-library/react": "^12.1.4",
"@testing-library/user-event": "^13.5.0",
+ "aos": "^2.3.4",
"axios": "^0.26.1",
"d3": "^7.4.4",
"framer-motion": "^3.10.6",
@@ -21,11 +22,14 @@
"node-sass": "^7.0.1",
"react": "^18.0.0",
"react-chartjs-2": "^4.1.0",
+ "react-datepicker": "^4.7.0",
"react-dom": "^18.0.0",
"react-icons": "^4.3.1",
"react-router-dom": "^6.3.0",
"react-scripts": "5.0.0",
+ "react-toastify": "^8.2.0",
"sweetalert": "^2.1.2",
+ "validator": "^13.7.0",
"web-vitals": "^2.1.4"
}
},
@@ -5622,6 +5626,16 @@
"node": ">= 8"
}
},
+ "node_modules/aos": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/aos/-/aos-2.3.4.tgz",
+ "integrity": "sha512-zh/ahtR2yME4I51z8IttIt4lC1Nw0ktsFtmeDzID1m9naJnWXhCoARaCgNOGXb5CLy3zm+wqmRAEgMYB5E2HUw==",
+ "dependencies": {
+ "classlist-polyfill": "^1.0.3",
+ "lodash.debounce": "^4.0.6",
+ "lodash.throttle": "^4.0.1"
+ }
+ },
"node_modules/aproba": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
@@ -6564,12 +6578,6 @@
"node": ">=6"
}
},
- "node_modules/chart.js": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.7.1.tgz",
- "integrity": "sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==",
- "peer": true
- },
"node_modules/check-types": {
"version": "11.1.2",
"resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz",
@@ -6638,6 +6646,16 @@
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
"integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA=="
},
+ "node_modules/classlist-polyfill": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz",
+ "integrity": "sha1-k1vC39lFiodrJ5YXUUY4vKqWSi4="
+ },
+ "node_modules/classnames": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
+ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
+ },
"node_modules/clean-css": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz",
@@ -6675,6 +6693,14 @@
"wrap-ansi": "^7.0.0"
}
},
+ "node_modules/clsx": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
+ "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -7806,6 +7832,18 @@
"node": ">=10"
}
},
+ "node_modules/date-fns": {
+ "version": "2.28.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz",
+ "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==",
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -13121,6 +13159,11 @@
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
},
+ "node_modules/lodash.throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+ },
"node_modules/lodash.uniq": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
@@ -15859,6 +15902,36 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/react-datepicker": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.7.0.tgz",
+ "integrity": "sha512-FS8KgbwqpxmJBv/bUdA42MYqYZa+fEYcpc746DZiHvVE2nhjrW/dg7c5B5fIUuI8gZET6FOzuDgezNcj568Czw==",
+ "dependencies": {
+ "@popperjs/core": "^2.9.2",
+ "classnames": "^2.2.6",
+ "date-fns": "^2.24.0",
+ "prop-types": "^15.7.2",
+ "react-onclickoutside": "^6.12.0",
+ "react-popper": "^2.2.5"
+ },
+ "peerDependencies": {
+ "react": "^16.9.0 || ^17",
+ "react-dom": "^16.9.0 || ^17"
+ }
+ },
+ "node_modules/react-datepicker/node_modules/react-onclickoutside": {
+ "version": "6.12.1",
+ "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.12.1.tgz",
+ "integrity": "sha512-a5Q7CkWznBRUWPmocCvE8b6lEYw1s6+opp/60dCunhO+G6E4tDTO2Sd2jKE+leEnnrLAE2Wj5DlDHNqj5wPv1Q==",
+ "funding": {
+ "type": "individual",
+ "url": "https://github.com/Pomax/react-onclickoutside/blob/master/FUNDING.md"
+ },
+ "peerDependencies": {
+ "react": "^15.5.x || ^16.x || ^17.x",
+ "react-dom": "^15.5.x || ^16.x || ^17.x"
+ }
+ },
"node_modules/react-dev-utils": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz",
@@ -16011,6 +16084,20 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
},
+ "node_modules/react-popper": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz",
+ "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==",
+ "dependencies": {
+ "react-fast-compare": "^3.0.1",
+ "warning": "^4.0.2"
+ },
+ "peerDependencies": {
+ "@popperjs/core": "^2.0.0",
+ "react": "^16.8.0 || ^17 || ^18",
+ "react-dom": "^16.8.0 || ^17 || ^18"
+ }
+ },
"node_modules/react-refresh": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz",
@@ -16115,6 +16202,18 @@
}
}
},
+ "node_modules/react-toastify": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-8.2.0.tgz",
+ "integrity": "sha512-Pg2Ju7NngAamarFvLwqrFomJ57u/Ay6i6zfLurt/qPynWkAkOthu6vxfqYpJCyNhHRhR4hu7+bySSeWWJu6PAg==",
+ "dependencies": {
+ "clsx": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": ">=16",
+ "react-dom": ">=16"
+ }
+ },
"node_modules/read-pkg": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
@@ -18258,19 +18357,6 @@
"is-typedarray": "^1.0.0"
}
},
- "node_modules/typescript": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
- "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
"node_modules/unbox-primitive": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
@@ -18461,6 +18547,14 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "node_modules/validator": {
+ "version": "13.7.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz",
+ "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -23394,6 +23488,16 @@
"picomatch": "^2.0.4"
}
},
+ "aos": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/aos/-/aos-2.3.4.tgz",
+ "integrity": "sha512-zh/ahtR2yME4I51z8IttIt4lC1Nw0ktsFtmeDzID1m9naJnWXhCoARaCgNOGXb5CLy3zm+wqmRAEgMYB5E2HUw==",
+ "requires": {
+ "classlist-polyfill": "^1.0.3",
+ "lodash.debounce": "^4.0.6",
+ "lodash.throttle": "^4.0.1"
+ }
+ },
"aproba": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
@@ -24099,12 +24203,6 @@
"resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz",
"integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ=="
},
- "chart.js": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.7.1.tgz",
- "integrity": "sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==",
- "peer": true
- },
"check-types": {
"version": "11.1.2",
"resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz",
@@ -24155,6 +24253,16 @@
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
"integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA=="
},
+ "classlist-polyfill": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz",
+ "integrity": "sha1-k1vC39lFiodrJ5YXUUY4vKqWSi4="
+ },
+ "classnames": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
+ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
+ },
"clean-css": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz",
@@ -24185,6 +24293,11 @@
"wrap-ansi": "^7.0.0"
}
},
+ "clsx": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
+ "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA=="
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -25002,6 +25115,11 @@
"whatwg-url": "^8.0.0"
}
},
+ "date-fns": {
+ "version": "2.28.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz",
+ "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw=="
+ },
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -28885,6 +29003,11 @@
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
},
+ "lodash.throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+ },
"lodash.uniq": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
@@ -30745,6 +30868,27 @@
"integrity": "sha512-AsUihxEp8Jm1oBhbEovE+w50m9PVNhz1sfwEIT4hZduRC0m14gHWHd0cUaxkFDb8HNkdMIGzsNlmVqKiOpU74g==",
"requires": {}
},
+ "react-datepicker": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.7.0.tgz",
+ "integrity": "sha512-FS8KgbwqpxmJBv/bUdA42MYqYZa+fEYcpc746DZiHvVE2nhjrW/dg7c5B5fIUuI8gZET6FOzuDgezNcj568Czw==",
+ "requires": {
+ "@popperjs/core": "^2.9.2",
+ "classnames": "^2.2.6",
+ "date-fns": "^2.24.0",
+ "prop-types": "^15.7.2",
+ "react-onclickoutside": "^6.12.0",
+ "react-popper": "^2.2.5"
+ },
+ "dependencies": {
+ "react-onclickoutside": {
+ "version": "6.12.1",
+ "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.12.1.tgz",
+ "integrity": "sha512-a5Q7CkWznBRUWPmocCvE8b6lEYw1s6+opp/60dCunhO+G6E4tDTO2Sd2jKE+leEnnrLAE2Wj5DlDHNqj5wPv1Q==",
+ "requires": {}
+ }
+ }
+ },
"react-dev-utils": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz",
@@ -30861,6 +31005,15 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
},
+ "react-popper": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz",
+ "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==",
+ "requires": {
+ "react-fast-compare": "^3.0.1",
+ "warning": "^4.0.2"
+ }
+ },
"react-refresh": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz",
@@ -30938,6 +31091,14 @@
"workbox-webpack-plugin": "^6.4.1"
}
},
+ "react-toastify": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-8.2.0.tgz",
+ "integrity": "sha512-Pg2Ju7NngAamarFvLwqrFomJ57u/Ay6i6zfLurt/qPynWkAkOthu6vxfqYpJCyNhHRhR4hu7+bySSeWWJu6PAg==",
+ "requires": {
+ "clsx": "^1.1.1"
+ }
+ },
"read-pkg": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
@@ -32565,12 +32726,6 @@
"is-typedarray": "^1.0.0"
}
},
- "typescript": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
- "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
- "peer": true
- },
"unbox-primitive": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
@@ -32720,6 +32875,11 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "validator": {
+ "version": "13.7.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz",
+ "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw=="
+ },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
diff --git a/Frontend/package.json b/Frontend/package.json
index 7fd9eca..2678a9c 100644
--- a/Frontend/package.json
+++ b/Frontend/package.json
@@ -9,6 +9,7 @@
"@testing-library/jest-dom": "^5.16.3",
"@testing-library/react": "^12.1.4",
"@testing-library/user-event": "^13.5.0",
+ "aos": "^2.3.4",
"axios": "^0.26.1",
"d3": "^7.4.4",
"framer-motion": "^3.10.6",
@@ -16,11 +17,14 @@
"node-sass": "^7.0.1",
"react": "^18.0.0",
"react-chartjs-2": "^4.1.0",
+ "react-datepicker": "^4.7.0",
"react-dom": "^18.0.0",
"react-icons": "^4.3.1",
"react-router-dom": "^6.3.0",
"react-scripts": "5.0.0",
+ "react-toastify": "^8.2.0",
"sweetalert": "^2.1.2",
+ "validator": "^13.7.0",
"web-vitals": "^2.1.4"
},
"scripts": {
diff --git a/Frontend/public/favicon.ico b/Frontend/public/favicon.ico
index a11777c..606623b 100644
Binary files a/Frontend/public/favicon.ico and b/Frontend/public/favicon.ico differ
diff --git a/Frontend/public/index.html b/Frontend/public/index.html
index aa069f2..6cf570b 100644
--- a/Frontend/public/index.html
+++ b/Frontend/public/index.html
@@ -7,7 +7,7 @@
-
React App
+ DebtFix
You need to enable JavaScript to run this app.
diff --git a/Frontend/public/logo192.png b/Frontend/public/logo192.png
index fc44b0a..2945d70 100644
Binary files a/Frontend/public/logo192.png and b/Frontend/public/logo192.png differ
diff --git a/Frontend/src/Pages/ListofCreditors/ListofCreditors.css b/Frontend/src/Pages/ListofCreditors/ListofCreditors.css
index 60cd929..0c60986 100644
--- a/Frontend/src/Pages/ListofCreditors/ListofCreditors.css
+++ b/Frontend/src/Pages/ListofCreditors/ListofCreditors.css
@@ -19,7 +19,7 @@
@media screen and (max-width:450px) {
.glow-on-hover{
- font-size: 12px;
+ font-size: 14px;
}
}
@@ -28,13 +28,11 @@
@media screen and (max-width:344px) {
.glow-on-hover{
- font-size: 10px;
+ font-size: 14px;
}
}
@media screen and (max-width:300px) {
- .glow-on-hover{
- font-size: 10px;
- }
+
}
\ No newline at end of file
diff --git a/Frontend/src/Pages/ListofCreditors/ListofCreditors.jsx b/Frontend/src/Pages/ListofCreditors/ListofCreditors.jsx
index 98ad278..eb011de 100644
--- a/Frontend/src/Pages/ListofCreditors/ListofCreditors.jsx
+++ b/Frontend/src/Pages/ListofCreditors/ListofCreditors.jsx
@@ -2,7 +2,6 @@ import React, {useState, useEffect} from 'react'
import {Box, Flex, Text, Spacer, Grid, GridItem, Icon, Center} from '@chakra-ui/react'
import {BsSearch, BsBell} from 'react-icons/bs'
import {AiOutlineUsergroupAdd, AiOutlineTeam, AiOutlinePlus, AiOutlineEdit, AiOutlineDelete} from 'react-icons/ai'
-import {MdPayments} from 'react-icons/md'
import {GiHamburgerMenu } from 'react-icons/gi'
import {Table,Thead,Tbody,Tfoot,Tr,Th,Td,TableCaption,TableContainer, HStack} from '@chakra-ui/react'
import {BsWallet} from 'react-icons/bs'
@@ -17,6 +16,27 @@ import Signin from '../Signin/Signin'
const ListofCreditors = () => {
+
+ const [screenSize, setScreenSize] = useState(window.innerWidth)
+
+ /*const checkSize = ()=>{
+ //console.log(window.innerWidth)
+ return setScreenSize(window.innerWidth)
+ }
+ useEffect(()=>{
+ window.addEventListener('resize', checkSize)
+ return ()=>{
+ window.removeEventListener('resize', checkSize)
+ }
+ })
+ useEffect(()=>{
+ if (screenSize >=815) {
+ document.getElementById("sidenav").style.width = "16rem";
+ document.getElementById("links-cont").style.display = "block";
+ }
+ })
+ */
+
const [addCreditorModal, setAddcreditorModal] = useState(false)
const [showEditModal, setShowEditModal] = useState(false)
const [payCreditorModal, setPaycreditorModal] = useState(false)
@@ -97,56 +117,54 @@ const ListofCreditors = () => {
const payCreditor =()=>{
setPaycreditorModal(true)
}
- if (!token) {
- return
- }
- if (loading) {
- return <>
-
-
- >
- }
- const openSidebar = ()=>{
+ const openSidebar = ()=>{
document.getElementById("sidenav").style.width = "16rem";
document.getElementById("links-cont").style.display = "block";
- //document.getElementById("dashboard-details").style.width = "0";
-
+
+ }
+ if (loading) {
+
+ return( <>
+
+
+ >)
}
-
- return (
- <>
-
-
-
-
-
-
-
+return(
+ <>
+
+
+
+ {/*
+
+
+ */}
List of Creditors
View creditors
Quick Actions
@@ -158,7 +176,7 @@ const ListofCreditors = () => {
{
Creditor
AmountOwned
AccountNo
- Date Due
+ Date Added
Status
Activity
@@ -207,14 +225,16 @@ const ListofCreditors = () => {
{
creditors?.map((creditor)=>{
const {id,name,amount_owned, account_number,status, bank_code, date_due} = creditor
- //console.log(id)
+ //console.log(date_due,'date due')
+ //const c = { time: date_due };
+ //console.log(new Date(c.time).toLocaleDateString(), "converted")
return (
{name}
{amount_owned}
{account_number}
- {date_due}
+ {new Date (date_due).toLocaleDateString()}
{status}
editDebtorDetails(id,name,amount_owned,account_number, bank_code)} className='edit' color='green' as={AiOutlineEdit}>
diff --git a/Frontend/src/Pages/Sign-up/Signup.jsx b/Frontend/src/Pages/Sign-up/Signup.jsx
index f2a6f7f..55ac3cb 100644
--- a/Frontend/src/Pages/Sign-up/Signup.jsx
+++ b/Frontend/src/Pages/Sign-up/Signup.jsx
@@ -1,10 +1,22 @@
import React, { useEffect, useState } from 'react'
import {AiOutlineArrowLeft} from 'react-icons/ai'
-import {Box, Flex, Text,Spacer} from'@chakra-ui/react'
+import {Box, Flex, Text,Spacer, Spinner} from'@chakra-ui/react'
import Logo from '../../Images/Logosign.svg'
import './Signup.css'
import { useNavigate, Link } from 'react-router-dom'
+import {toast, ToastContainer} from 'react-toastify'
+import 'react-toastify/dist/ReactToastify.css';
+import validator from 'validator'
+
+
+import AOS from "aos";
+import "aos/dist/aos.css";
+
+
+
const Signup = () => {
+
+ const [pending,setPending] = useState(false)
const baseUrl = "https://debt-fix.herokuapp.com/register/"
const [email, setEmail] = useState()
const [password, setPassword] = useState('')
@@ -29,27 +41,36 @@ const Signup = () => {
const handleSubmit = async (e) =>{
e.preventDefault();
const details = {email, password, username}
- //setIspending(true)
+
if(email && password && username){
+
+ setPending(true)
+ if (!validator.isEmail(email)) {
+ setPending(false)
+ return toast.error('Enter a valid mail')
+ }
try {
const response = await SignupUser(details)
console.log(response)
if("id" in response){
+ toast.success("Successfully registered")
console.log(response)
+ setPending(false)
navigate("/signin", { replace: true })
}
else{
+ toast.error('Email or username already exists!')
setAlert({message1:'User with the email or Username already exist',message2:'Sign in instead?'})
+ setPending(false)
}
} catch (error) {
setAlert({message1:'Unkown Error', message2:''})
-
- console.log(error)
- console.log('errorrrrrrrrrrrrrrrr')
+ setPending(false)
}
}else{
setAlert({message1:'Fill in every field correctly', message2:''})
+ toast.error("Please fill every details")
}
@@ -58,27 +79,35 @@ const Signup = () => {
useEffect(
() => {
console.log(alert)
- let timer1 = setTimeout(() => setAlert({message1:'',message2:''}), 5000);
+ let timer1 = setTimeout(() => setAlert({message1:'',message2:''}), 2000);
return () => {
clearTimeout(timer1);
};
},
[alert]);
-
+
+ useEffect(() => {
+ AOS.init();
+ AOS.refresh();
+ }, []);
return (
<>
-
+
+
-
+
-
-
+
+
{
>Create an Account
{
onChange={e => setPassword(e.target.value)}/>
-
+
- {alert.message1} {alert.message2}
+ {alert.message1} {alert.message2}
- Create an account
+ {pending? : "Create an account"}
{
const baseUrl = "https://debt-fix.herokuapp.com/login/"
+
+ const [pending,setPending] = useState(false)
const [email, setEmail] = useState()
const [password, setPassword] = useState()
const [isPending, setIspending] = useState(false)
@@ -37,48 +44,79 @@ const Signin = () => {
setAlert({link: "", text:''})
e.preventDefault();
const details = {email, password}
- try {
- const response = await loginUser(details)
- if ('token' in response) {
- //console.log("successful")
- console.log('SUCCESS')
- localStorage.setItem('accessToken', response.token);
- localStorage.setItem('useremail', JSON.stringify(response.email));
- localStorage.setItem('ID', JSON.stringify(response.id));
- localStorage.setItem('username', JSON.stringify(response.username));
- setPassword('')
- setEmail('')
- navigate("/profile/dashboard", { replace: true })
- } else{
- console.log("erorrrrrrrr")
- setAlert({link: "Signup Instead?", text:`Invalid login details`})
+ if(email && password){
+ setPending(true)
+ console.log("email and password valid")
+ try {
+
+ const response = await loginUser(details)
- }
- console.log(response)
- } catch (error) {
- console.log('erorrrrrrrrr')
- setAlert({link: 'Signup instead?', text: 'invalid login details'})
+ if ('token' in response) {
+
+ setPending(false)
+ toast.success('Successfully signed in')
+ //console.log("successful")
+ console.log('SUCCESS')
+ localStorage.setItem('accessToken', response.token);
+ localStorage.setItem('useremail', JSON.stringify(response.email));
+ localStorage.setItem('ID', JSON.stringify(response.id));
+ localStorage.setItem('username', JSON.stringify(response.username));
+ setPassword('')
+ setEmail('')
+ navigate("/profile/dashboard", { replace: true })
+ } else{
+ console.log("erorrrrrrrr")
+ setAlert({link: "Signup Instead?", text:`Invalid login details`})
+ setPending(false)
+
+ }
+ //console.log(response)
+ } catch (error) {
+ console.error(error)
+ console.log('erorrrrrrrrr')
+ setAlert({link: 'Signup instead?', text: 'invalid login details'})
+ setPending(false)
+ }
+ }else{
+ console.log('no more details')
+ toast.error('Please fill every details')
+ setAlert({link: 'Please fill in all the details', text:''})
}
-
}
+
-
+ useEffect(
+ () => {
+ let timer1 = setTimeout(() => setAlert({text:'',link:''}), 2000);
+ return () => {
+ clearTimeout(timer1);
+ };
+
+ },
+ [alert]);
-
+ useEffect(() => {
+ AOS.init();
+ AOS.refresh();
+ }, []);
+
return (
<>
-
-
+
+
-
+
-
+
{
>Sign into your Account
{
color='#271B3E'
>Forgot Password
-
+
{alert.text}
{alert.link}
- Sign in
+ {pending? : "Sign in"}
{
return (
<>
-
+
diff --git a/Frontend/src/components/DashboardDetails/DashboardDetails.css b/Frontend/src/components/DashboardDetails/DashboardDetails.css
index d0ef42c..e794baf 100644
--- a/Frontend/src/components/DashboardDetails/DashboardDetails.css
+++ b/Frontend/src/components/DashboardDetails/DashboardDetails.css
@@ -14,7 +14,7 @@
border-radius: 5px;
background-color: #573498;
}
-.piechart-checkbox2{
+.piechart-checkbox2{
width: 20px;
height: 20px;
border-radius: 5px;
@@ -226,14 +226,12 @@ Tr:nth-child(even) {background-color: #f2f2f2;}
}
}
@media screen and (max-width:520px) {
- .glow-on-hover{
- padding: 12px 15px;
- }
+
.dashboard-stat{
width: 130px !important;
}
.analytics-dashboard{
- width: 300px !important;
+ width: 280px !important;
}
}
@@ -242,17 +240,15 @@ Tr:nth-child(even) {background-color: #f2f2f2;}
width: 100px !important;
height: 100px !important;
}
- .glow-on-hover{
- padding: 10px 12px !important;
+ .table-heading{
+ font-size: 12px !important;
}
+
}
@media screen and (max-width:370px) {
.dashboard-stat{
- width: 80px !important;
- height: 80px !important;
- }
- .glow-on-hover{
- padding: 8px 12px !important;
+ width: 90px !important;
+ height: 90px !important;
}
}
\ No newline at end of file
diff --git a/Frontend/src/components/DashboardDetails/DashboardDetails.jsx b/Frontend/src/components/DashboardDetails/DashboardDetails.jsx
index 4789bc5..7c11728 100644
--- a/Frontend/src/components/DashboardDetails/DashboardDetails.jsx
+++ b/Frontend/src/components/DashboardDetails/DashboardDetails.jsx
@@ -21,9 +21,27 @@ import { useNavigate } from 'react-router-dom'
const DashboardDetails = ({username,id, setLoading}) => {
-
-
+
+ const [screenSize, setScreenSize] = useState(window.innerWidth)
+
+ /* const checkSize = ()=>{
+ //console.log(window.innerWidth)
+ return setScreenSize(window.innerWidth)
+ }
+ useEffect(()=>{
+ window.addEventListener('resize', checkSize)
+ return ()=>{
+ window.removeEventListener('resize', checkSize)
+ }
+ })
+ useEffect(()=>{
+ if (screenSize >=815) {
+ document.getElementById("sidenav").style.width = "16rem";
+ document.getElementById("links-cont").style.display = "block";
+ }
+},[screenSize])*/
+
const [addCreditorModal, setAddcreditorModal] = useState(false)
const [showEditModal, setShowEditModal] = useState(false)
const [payCreditorModal, setPaycreditorModal] = useState(false)
@@ -105,23 +123,24 @@ const DashboardDetails = ({username,id, setLoading}) => {
return (
<>
-
-
+
+ {/*
-
+ }*/}
Welcome back, {username}
Let us help you manage your debts
@@ -136,12 +155,12 @@ const DashboardDetails = ({username,id, setLoading}) => {
p='0.5rem 0'
>Quick Actions
- Add Creditor
- Pay creditor
+ Add Creditor
+ Pay creditor
{
Creditor
AmountOwned
AccountNo
- Date Due
+ Date Added
Status
Activity
@@ -197,7 +216,7 @@ const DashboardDetails = ({username,id, setLoading}) => {
{name}
{amount_owned}
{account_number}
- {date_due}
+ {new Date (date_due).toLocaleDateString()}
{status}
editDebtorDetails(id,name,amount_owned,account_number, bank_code)} className='edit' color='green' as={AiOutlineEdit}>
diff --git a/Frontend/src/components/DashboardDetails/DashboardStatistics.jsx b/Frontend/src/components/DashboardDetails/DashboardStatistics.jsx
index c6e462b..acce0f1 100644
--- a/Frontend/src/components/DashboardDetails/DashboardStatistics.jsx
+++ b/Frontend/src/components/DashboardDetails/DashboardStatistics.jsx
@@ -47,26 +47,26 @@ const DashboardStatistics = ({debts_total}) => {
<>
-
+
Total Creditors
{creditors_all}
-
+
{
lineHeight='46px'
color='#170154'
fontWeight='Bold'
- p={{base:'0px 7px',sm:'5px 10px'}}
+ p={{base:'5px 7px',sm:'5px 10px'}}
>{creditors_paid}
-
-
+
+
Total debts left
@@ -100,7 +100,7 @@ const DashboardStatistics = ({debts_total}) => {
lineHeight='46px'
color='#170154'
fontWeight='Bold'
- p={{base:'0px 7px',sm:'5px 10px'}}
+ p={{base:'5px 7px',sm:'5px 10px'}}
>{creditors_unpaid}
diff --git a/Frontend/src/components/DatePicker/DatePicker.jsx b/Frontend/src/components/DatePicker/DatePicker.jsx
new file mode 100644
index 0000000..33fa6ea
--- /dev/null
+++ b/Frontend/src/components/DatePicker/DatePicker.jsx
@@ -0,0 +1,19 @@
+import React, { useState } from 'react';
+import DatePicker from "react-datepicker";
+
+const DatepickerTimehooks = () => {
+ const [currentDate, setCurrentDate] = useState(new Date());
+
+ return (
+
+ setCurrentDate(date)} />
+
+
+ );
+};
+
+export default DatepickerTimehooks;
\ No newline at end of file
diff --git a/Frontend/src/components/Footer/Footer.jsx b/Frontend/src/components/Footer/Footer.jsx
index a088cf5..64e4a33 100644
--- a/Frontend/src/components/Footer/Footer.jsx
+++ b/Frontend/src/components/Footer/Footer.jsx
@@ -10,10 +10,10 @@ const Footer = () => {
<>
-
+
{
>© 2022 DebtFix
{
+
+ useEffect(() => {
+ AOS.init();
+ AOS.refresh();
+ }, []);
+
return (
<>
-
+
With 3 easy steps, get started on DebtFix
-
-
+
+
-
+
1
-
+
{
-
+
2
-
+
{
3
-
+
{
-
+import DatePicker from "react-datepicker";
+import "react-datepicker/dist/react-datepicker.css";
+
+
+const ModalAddCreditor = ({setAddcreditorModal}) => {
+ const [currentDate, setCurrentDate] = useState(new Date());
+
const [name, setName] = useState('')
const [amount_owned, setAmount_owned] = useState('')
const [bank_code, setBank_code] = useState('')
const [account_number, setAccount_number] = useState('')
const [alert, setAlert] = useState(false)
const url = 'https://debt-fix.herokuapp.com/creditor/create/'
+
const clearModal = async(e)=>{
- console.log(name, amount_owned, bank_code, account_number)
- console.log("bankcode", bank_code)
+
if(name && amount_owned && bank_code && account_number){
- console.log('details filled')
setAlert(false)
const details = {name:name, amount_owned: amount_owned, bank_code:bank_code, account_number:account_number}
- console.log(details)
try {
const AddaCreditor = await GetEndpoint(details, url)
- console.log(AddaCreditor)
+ //console.log(AddaCreditor)
setAddcreditorModal(false)
} catch (error) {
console.log("erorrrrrrrrrrrrr adding debtor")
@@ -48,7 +50,7 @@ import '../Modal/Modal.css'
setAmount_owned('')
setAddcreditorModal(false)
}
-
+ console.log(currentDate)
return (
<>
@@ -58,7 +60,7 @@ import '../Modal/Modal.css'
Add a Creditor
@@ -94,8 +96,17 @@ import '../Modal/Modal.css'
onChange={e =>{ return setAlert(false), setAccount_number(e.target.value)}}
>
+
+ Timeline for debt
+ setCurrentDate(date)} />
+
-
+
close
Add Creditor
diff --git a/Frontend/src/components/ModalCreditors/ModalEditCreditor.jsx b/Frontend/src/components/ModalCreditors/ModalEditCreditor.jsx
index df83390..60a8c1c 100644
--- a/Frontend/src/components/ModalCreditors/ModalEditCreditor.jsx
+++ b/Frontend/src/components/ModalCreditors/ModalEditCreditor.jsx
@@ -58,7 +58,7 @@ import { UpdateDetails } from '../../services/Accessdetails'
Edit Details
diff --git a/Frontend/src/components/ModalCreditors/ModalFundWallet.jsx b/Frontend/src/components/ModalCreditors/ModalFundWallet.jsx
index debfaf9..b763866 100644
--- a/Frontend/src/components/ModalCreditors/ModalFundWallet.jsx
+++ b/Frontend/src/components/ModalCreditors/ModalFundWallet.jsx
@@ -46,7 +46,7 @@ const ModalFundWallet = ({setFundWalletModal}) => {
Fund Wallet
diff --git a/Frontend/src/components/ModalCreditors/ModalPayaCreditor.jsx b/Frontend/src/components/ModalCreditors/ModalPayaCreditor.jsx
index dbc9c4d..a8c2128 100644
--- a/Frontend/src/components/ModalCreditors/ModalPayaCreditor.jsx
+++ b/Frontend/src/components/ModalCreditors/ModalPayaCreditor.jsx
@@ -1,4 +1,4 @@
-import React, {useState} from 'react'
+import React, {useState, useEffect} from 'react'
import {Box, Flex, Spacer, Text, Icon, Select, Button, Radio, RadioGroup, Stack} from '@chakra-ui/react'
import { AiOutlineArrowRight } from 'react-icons/ai'
import { GetEndpoint } from '../../services/Accessdetails'
@@ -26,7 +26,8 @@ const ModalPayaCreditor = ({setPaycreditorModal,creditors}) => {
const clearModal = async (e)=>{
-
+
+
if ((name && narration) && ( optionalAmt || radioValue)) {
console.log("filled correctly")
const filteredCreditors = creditors.filter((creditor)=>{
@@ -72,6 +73,19 @@ const ModalPayaCreditor = ({setPaycreditorModal,creditors}) => {
const closeModal = ()=>{
setPaycreditorModal(false)
}
+
+ useEffect(
+ () => {
+ console.log(alert)
+ let timer1 = setTimeout(() => setPaymentText({message:'',status:''}), 3000);
+ let timer2 = setTimeout(() => setAlert(''), 3000);
+ return () => {
+ clearTimeout(timer1);
+ clearTimeout(timer2)
+ };
+
+ },
+ [alert, paymentText]);
return (
<>
@@ -79,7 +93,7 @@ const ModalPayaCreditor = ({setPaycreditorModal,creditors}) => {
Pay a Creditor
diff --git a/Frontend/src/components/Navbar/Navbar.css b/Frontend/src/components/Navbar/Navbar.css
index 9f320e7..10ca213 100644
--- a/Frontend/src/components/Navbar/Navbar.css
+++ b/Frontend/src/components/Navbar/Navbar.css
@@ -11,7 +11,9 @@
text-align:center;
font-weight: 400;
}
-
+.navbar-container{
+ padding: 2px 0;
+}
.sign-navbar{
padding: 3px 17px;
border:1px solid #3A1C6B;
@@ -110,5 +112,15 @@
.navbar-links-sign{
display: none !important;
}
+ .navbar-container{
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1) !important;
+ }
}
+
+@media screen and (max-width:540px) {
+ .navbar-logo{
+ width: 90px !important;
+ margin-top: 10px !important;
+ }
+}
diff --git a/Frontend/src/components/Navbar/Navbar.jsx b/Frontend/src/components/Navbar/Navbar.jsx
index 57e603a..95c8493 100644
--- a/Frontend/src/components/Navbar/Navbar.jsx
+++ b/Frontend/src/components/Navbar/Navbar.jsx
@@ -1,4 +1,4 @@
-import React, {useEffect, useState} from 'react'
+import React, {useEffect, useState, useRef} from 'react'
import {Text, Flex, Spacer, Box, Button} from '@chakra-ui/react'
import logo from '../../Images/Logo.svg'
import './Navbar.css'
@@ -19,23 +19,39 @@ const breakpoints = {
// 3. Extend the theme
const theme = extendTheme({ breakpoints })
const Navbar = () => {
+
+ const node = useRef();
+
const [showsidebar, setShowsidebar] = useState(false)
const showbar = ()=>{
setShowsidebar(!showsidebar)
}
- function getHeight(){
- console.log(window.innerHeight)
- }
+
+ const handleClick = e => {
+ if (node.current.contains(e.target)) {
+ // inside click
+ return;
+ }
+ document.getElementById('nav-links-container').style.display = "none"
+
+ };
+
useEffect(()=>{
- console.log(window.pageYOffset,'scroll')
- })
+ // add when mounted
+ document.addEventListener("mousedown", handleClick);
+ // return function to be called when unmounted
+ return () => {
+ document.removeEventListener("mousedown", handleClick);
+ };
+ },[])
return (
<>
-
-
+
+
+
Home
@@ -53,7 +69,8 @@ const Navbar = () => {
- {showsidebar &&
+
+ {showsidebar &&
@@ -248,11 +268,11 @@ const SettingsInfo = () => {
fontWeight='600'
lineHeight='25px'
color='#8872AC'>Sex
- { return setGender(e.target.value)}}/>
-
+
@@ -286,7 +306,7 @@ const SettingsInfo = () => {
value={email}
onChange={e => { return setEmail(e.target.value)}}/>
-
+
@@ -319,7 +339,7 @@ const SettingsInfo = () => {
value={phonenumber}
onChange={e => { return setPhonenumber(e.target.value)}}/>
-
+
{status}
diff --git a/Frontend/src/components/SettingsInfo/SettingsPassword.jsx b/Frontend/src/components/SettingsInfo/SettingsPassword.jsx
index 6048b66..1b8322e 100644
--- a/Frontend/src/components/SettingsInfo/SettingsPassword.jsx
+++ b/Frontend/src/components/SettingsInfo/SettingsPassword.jsx
@@ -29,7 +29,7 @@ const SettingsPassword = () => {
-
+
{
onChange={e => { return setOldPassword(e.target.value)}}
/>
-
+
{
onChange={e => { return setNewPassword(e.target.value)}}
/>
-
+
{
/>
- Edit Password
+ Edit Password
diff --git a/Frontend/src/components/Sidebar/Sidebar.css b/Frontend/src/components/Sidebar/Sidebar.css
index fe05245..32fc969 100644
--- a/Frontend/src/components/Sidebar/Sidebar.css
+++ b/Frontend/src/components/Sidebar/Sidebar.css
@@ -17,6 +17,7 @@
padding: 10px 10px;
border-radius: 0px;
transition: all 0.3s linear ;
+ font-size: 18px;
}
.links-container{
@@ -63,7 +64,7 @@
}
.sidebar-logo img{
height: 4rem;
- width: 13rem;
+ width: 11rem;
}
@@ -78,6 +79,31 @@
@media screen and (min-width:815px) {
.profile-sidebar{
- width: 16rem;
+ width: 16rem !important;
}
+}
+
+
+@media screen and (max-width:520px) {
+ .links{
+ font-size: 16px;
+ padding: 10px 7px;
+ }
+ .sidebar-logo{
+ position: relative;
+ top: 0px;
+
+ }
+ .sidebar-logo img{
+ height: 2rem;
+ width: 7rem;
+ }
+
+ .sidebar-close-menu{
+
+ margin-left: 100px;
+
+ }
+
+
}
\ No newline at end of file
diff --git a/Frontend/src/components/Sidebar/Sidebar.jsx b/Frontend/src/components/Sidebar/Sidebar.jsx
index aa606c5..2111a33 100644
--- a/Frontend/src/components/Sidebar/Sidebar.jsx
+++ b/Frontend/src/components/Sidebar/Sidebar.jsx
@@ -1,16 +1,16 @@
import React, {useEffect, useState, useRef} from 'react'
import './Sidebar.css'
-import {GiHamburgerMenu } from 'react-icons/gi'
import {BsFillGridFill} from 'react-icons/bs'
import {MdPayment} from 'react-icons/md'
import {IoMdSettings} from 'react-icons/io'
import {AiOutlineUserDelete,AiOutlineClose} from 'react-icons/ai'
import Logo from '../../Images/Logo.svg'
-import {Box, Flex, Spacer,List,ListItem,ListIcon,} from '@chakra-ui/react'
-import { Link, NavLink } from 'react-router-dom'
+import {Box, Flex, List,ListItem,ListIcon,} from '@chakra-ui/react'
+import { NavLink } from 'react-router-dom'
const Sidebar = () => {
+
const node = useRef();
@@ -32,25 +32,26 @@ const Sidebar = () => {
}
const handleClick = e => {
- if (node.current.contains(e.target)) {
- // inside click
- return;
+ if(window.innerWidth <=815 ){
+ if (node.current.contains(e.target)) {
+ // inside click
+ return;
+ }
+
+ document.getElementById("sidenav").style.width = "0";
+ // outside click
}
-
- document.getElementById("sidenav").style.width = "0";
-
- document.getElementById("links-cont").style.display = "none";
- // outside click
};
useEffect(() => {
// add when mounted
document.addEventListener("mousedown", handleClick);
- // return function to be called when unmounted
- return () => {
+ // return function to be called when unmounted
+ return () => {
document.removeEventListener("mousedown", handleClick);
};
+
}, []);
@@ -59,9 +60,9 @@ const Sidebar = () => {
{/*p='1.5rem 1rem'*/}
-
+
- {
+
+ useEffect(() => {
+ AOS.init();
+ AOS.refresh();
+ }, []);
+
return (
<>
-
+
{
With DebtFix, you can plan payments, save easily and live a stress-free life.
-
Create free Account
-
-
+
diff --git a/Frontend/src/components/index.jsx b/Frontend/src/components/index.jsx
index 7ac2d10..5dc1ea8 100644
--- a/Frontend/src/components/index.jsx
+++ b/Frontend/src/components/index.jsx
@@ -12,4 +12,5 @@ export {default as ModalUser} from './Modal/Modal'
export {default as PaymentInfo} from './PaymentInfo/PaymentInfo'
export {default as ModalAddCreditor} from './ModalCreditors/ModalAddCreditor'
export {default as SettingsInfo} from './SettingsInfo/SettingsInfo'
-export {default as Loading} from './Loading/Loading'
\ No newline at end of file
+export {default as Loading} from './Loading/Loading'
+export {default as DatepickerTimehooks} from './Loading/Loading'
diff --git a/Frontend/src/components/product/product.jsx b/Frontend/src/components/product/product.jsx
index fe6b009..54e13ac 100644
--- a/Frontend/src/components/product/product.jsx
+++ b/Frontend/src/components/product/product.jsx
@@ -1,4 +1,4 @@
-import React from 'react'
+import React,{useEffect} from 'react'
import {SimpleGrid, Flex, Box, Text} from '@chakra-ui/react'
import frame2 from '../../Images/Frame 592.jpg'
import frame3 from '../../Images/Frame 593.jpg'
@@ -7,6 +7,9 @@ import frame5 from '../../Images/Frame 595.jpg'
import './product.css'
import { extendTheme } from '@chakra-ui/react'
+import AOS from "aos";
+import "aos/dist/aos.css";
+
// 2. Update the breakpoints as key-value pairs
const breakpoints = {
sm: '300px',
@@ -20,13 +23,20 @@ const breakpoints = {
const theme = extendTheme({ breakpoints })
const Product = () => {
+
+
+ useEffect(() => {
+ AOS.init();
+ AOS.refresh();
+ }, []);
+
return (
<>
-
-
+
+
{
>Get rid of any financial worries
{
className='product-text'
>Save up, earn interest and pay up pending bills.
-
-
-
-
-
+
+
+
+
+
>