From bd4f18c0cb719ce0fd06015b674604cc247fddf0 Mon Sep 17 00:00:00 2001 From: aelassas Date: Sun, 2 Feb 2025 20:08:25 +0100 Subject: [PATCH 01/10] Update depedencies --- api/package-lock.json | 16 +- api/package.json | 4 +- backend/package-lock.json | 114 ++++---- backend/package.json | 12 +- frontend/package-lock.json | 122 ++++---- frontend/package.json | 14 +- mobile/package-lock.json | 272 +++++++++--------- mobile/package.json | 22 +- packages/currency-converter/package-lock.json | 24 +- packages/currency-converter/package.json | 6 +- .../reactjs-social-login/package-lock.json | 16 +- packages/reactjs-social-login/package.json | 4 +- 12 files changed, 313 insertions(+), 313 deletions(-) diff --git a/api/package-lock.json b/api/package-lock.json index 8e56cc615..05607bc31 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -21,7 +21,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.14", "@types/multer": "^1.4.12", - "@types/node": "^22.12.0", + "@types/node": "^22.13.0", "@types/nodemailer": "^6.4.17", "@types/supertest": "^6.0.2", "@types/validator": "^13.12.2", @@ -42,7 +42,7 @@ "i18n-js": "^4.5.1", "jest": "^29.7.0", "jose": "^5.9.6", - "mongoose": "^8.9.5", + "mongoose": "^8.9.6", "multer": "^1.4.5-lts.1", "nanoid": "^5.0.9", "nocache": "^4.0.0", @@ -3282,9 +3282,9 @@ } }, "node_modules/@types/node": { - "version": "22.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz", - "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", + "version": "22.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.0.tgz", + "integrity": "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==", "license": "MIT", "dependencies": { "undici-types": "~6.20.0" @@ -8167,9 +8167,9 @@ } }, "node_modules/mongoose": { - "version": "8.9.5", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.9.5.tgz", - "integrity": "sha512-SPhOrgBm0nKV3b+IIHGqpUTOmgVL5Z3OO9AwkFEmvOZznXTvplbomstCnPOGAyungtRXE5pJTgKpKcZTdjeESg==", + "version": "8.9.6", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.9.6.tgz", + "integrity": "sha512-ipLvXwNPVuuuq5H3lnSD0lpaRH3DlCoC6emnMVJvweTwxU29uxDJWxMsNpERDQt8JMvYF1HGVuTK+Id2BlQLCA==", "license": "MIT", "dependencies": { "bson": "^6.10.1", diff --git a/api/package.json b/api/package.json index 086eb7db9..f04a19357 100644 --- a/api/package.json +++ b/api/package.json @@ -29,7 +29,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.14", "@types/multer": "^1.4.12", - "@types/node": "^22.12.0", + "@types/node": "^22.13.0", "@types/nodemailer": "^6.4.17", "@types/supertest": "^6.0.2", "@types/validator": "^13.12.2", @@ -50,7 +50,7 @@ "i18n-js": "^4.5.1", "jest": "^29.7.0", "jose": "^5.9.6", - "mongoose": "^8.9.5", + "mongoose": "^8.9.6", "multer": "^1.4.5-lts.1", "nanoid": "^5.0.9", "nocache": "^4.0.0", diff --git a/backend/package-lock.json b/backend/package-lock.json index fc2848d56..f9bb51621 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -10,11 +10,11 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", - "@mui/icons-material": "^6.4.1", - "@mui/material": "^6.4.1", - "@mui/x-data-grid": "^7.24.1", - "@mui/x-date-pickers": "^7.24.1", - "@types/node": "^22.12.0", + "@mui/icons-material": "^6.4.2", + "@mui/material": "^6.4.2", + "@mui/x-data-grid": "^7.25.0", + "@mui/x-date-pickers": "^7.25.0", + "@types/node": "^22.13.0", "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", "@types/validator": "^13.12.2", @@ -31,7 +31,7 @@ "localized-strings": "^2.0.3", "react": "^19.0.0", "react-dom": "^19.0.0", - "react-router-dom": "^7.1.3", + "react-router-dom": "^7.1.5", "react-toastify": "^11.0.3", "rrule": "^2.8.1", "typescript": "^5.7.3", @@ -1393,9 +1393,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.1.tgz", - "integrity": "sha512-SfDLWMV5b5oXgDf3NTa2hCTPC1d2defhDH2WgFKmAiejC4mSfXYbyi+AFCLzpizauXhgBm8OaZy9BHKnrSpahQ==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.2.tgz", + "integrity": "sha512-Qmod9fHsFWrtLxdSkZ4iDLRz2AUKt3C2ZEimuY+qKlQGVKJDNS5DuSlNOAgqfHFDq8mzB17ATN6HFcThwJlvUw==", "license": "MIT", "funding": { "type": "opencollective", @@ -1403,9 +1403,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.1.tgz", - "integrity": "sha512-wsxFcUTQxt4s+7Bg4GgobqRjyaHLmZGNOs+HJpbwrwmLbT6mhIJxhpqsKzzWq9aDY8xIe7HCjhpH7XI5UD6teA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.2.tgz", + "integrity": "sha512-uwsH1KRmxkJwK3NZyo1xL9pEduL16ftCnzYBYjd6nPNtm05QAoIc0aqedS9tqDV+Ab3q5C04HHOVsMDDv1EBpg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0" @@ -1418,7 +1418,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^6.4.1", + "@mui/material": "^6.4.2", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -1429,16 +1429,16 @@ } }, "node_modules/@mui/material": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.1.tgz", - "integrity": "sha512-MFBfia6UiKxyoLeGkAh8M15bkeDmfnsUTMRJd/vTQue6YQ8AQ6lw9HqDthyYghzDEWIvZO/lQQzLrZE8XwNJLA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.2.tgz", + "integrity": "sha512-9jKr53KbAJyyBRx8LRmX7ATXHlGtxVQdPgm1uyXMoEPMVkSJW1yO3vFgfYoDbGx4ZHcCNuWa4FkFIPWVt9fghA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.4.1", - "@mui/system": "^6.4.1", + "@mui/core-downloads-tracker": "^6.4.2", + "@mui/system": "^6.4.2", "@mui/types": "^7.2.21", - "@mui/utils": "^6.4.1", + "@mui/utils": "^6.4.2", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", @@ -1457,7 +1457,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.4.1", + "@mui/material-pigment-css": "^6.4.2", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1478,13 +1478,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.1.tgz", - "integrity": "sha512-DcT7mwK89owwgcEuiE7w458te4CIjHbYWW6Kn6PiR6eLtxBsoBYphA968uqsQAOBQDpbYxvkuFLwhgk4bxoN/Q==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.2.tgz", + "integrity": "sha512-2CkQT0gNlogM50qGTBJgWA7hPPx4AeH8RE2xJa+PHtIOowiVPX52ZsQ0e7Ho18DAqEbkngQ6Uju037ER+TCY5A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/utils": "^6.4.1", + "@mui/utils": "^6.4.2", "prop-types": "^15.8.1" }, "engines": { @@ -1505,9 +1505,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.0.tgz", - "integrity": "sha512-ek/ZrDujrger12P6o4luQIfRd2IziH7jQod2WMbLqGE03Iy0zUwYmckRTVhRQTLPNccpD8KXGcALJF+uaUQlbg==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.2.tgz", + "integrity": "sha512-cgjQK2bkllSYoWUBv93ALhCPJ0NhfO3NctsBf13/b4XSeQVfKPBAnR+P9mNpdFMa5a5RWwtWuBD3cZ5vktsN+g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -1539,16 +1539,16 @@ } }, "node_modules/@mui/system": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.1.tgz", - "integrity": "sha512-rgQzgcsHCTtzF9MZ+sL0tOhf2ZBLazpjrujClcb4Siju5lTrK0xX4PsiropActzCemNfM+mOu+0jezAVnfRK8g==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.2.tgz", + "integrity": "sha512-wQbaPCtsxNsM5nR+NZpkFJBKVKH03GQnAjlkKENM8JQqGdWcRyM3f4fJZgzzNdIFpSQw4wpAQKnhfHkjf3d6yQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/private-theming": "^6.4.1", - "@mui/styled-engine": "^6.4.0", + "@mui/private-theming": "^6.4.2", + "@mui/styled-engine": "^6.4.2", "@mui/types": "^7.2.21", - "@mui/utils": "^6.4.1", + "@mui/utils": "^6.4.2", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -1593,9 +1593,9 @@ } }, "node_modules/@mui/utils": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.1.tgz", - "integrity": "sha512-iQUDUeYh87SvR4lVojaRaYnQix8BbRV51MxaV6MBmqthecQoxwSbS5e2wnbDJUeFxY2ppV505CiqPLtd0OWkqw==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.2.tgz", + "integrity": "sha512-5NkhzlJkmR5+5RSs/Irqin1GPy2Z8vbLk/UzQrH9FEAnm6OA9SvuXjzgklxUs7N65VwEkGpKK1jMZ5K84hRdzQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -1623,14 +1623,14 @@ } }, "node_modules/@mui/x-data-grid": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.24.1.tgz", - "integrity": "sha512-4sYTbMwsDotuTd2Cwa2JGTPXPWQs8RGJvocAKnIsNOzNdZNMrikE//HO35snriK8s4dauAApY7RVbeisjpVT+A==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.25.0.tgz", + "integrity": "sha512-e9ZLbCgnDiADFiDyXo91ucZFHEMkKBNpwpkaTq5KohzefJfMpMQjTEbJeueSfBG2G1Q1Am2TPeBqrNeReIA7RQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", "@mui/utils": "^5.16.6 || ^6.0.0", - "@mui/x-internals": "7.24.1", + "@mui/x-internals": "7.25.0", "clsx": "^2.1.1", "prop-types": "^15.8.1", "reselect": "^5.1.1" @@ -1660,14 +1660,14 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.24.1.tgz", - "integrity": "sha512-ykQugMQHuQKBk3kViW/r0PpubtHQOlrd54bgbdafgTMCeM2VpXvv4zimzOu5IGnM6wEN8hupC7EXZbkrT6x46w==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.25.0.tgz", + "integrity": "sha512-t62OSFAKwj7KYQ8KcwTuKj6OgDuLQPSe4QUJcKDzD9rEhRIJVRUw2x27gBSdcls4l0PTrba19TghvDxCZprriw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", "@mui/utils": "^5.16.6 || ^6.0.0", - "@mui/x-internals": "7.24.1", + "@mui/x-internals": "7.25.0", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -1726,9 +1726,9 @@ } }, "node_modules/@mui/x-internals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.24.1.tgz", - "integrity": "sha512-9BvJzpLJnS9BDphvkiv6v0QOLxbnu8jhwcexFjtCQ2ZyxtVuVsWzGZ2npT9sGOil7+eaFDmWnJtea/tgrPvSwQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.25.0.tgz", + "integrity": "sha512-tBUN54YznAkmtCIRAOl35Kgl0MjFDIjUbzIrbWRgVSIR3QJ8bXnVSkiRBi+P91SZEl9+ZW0rDj+osq7xFJV0kg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", @@ -2121,9 +2121,9 @@ "peer": true }, "node_modules/@types/node": { - "version": "22.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz", - "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", + "version": "22.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.0.tgz", + "integrity": "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==", "license": "MIT", "dependencies": { "undici-types": "~6.20.0" @@ -6671,9 +6671,9 @@ } }, "node_modules/react-router": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.1.3.tgz", - "integrity": "sha512-EezYymLY6Guk/zLQ2vRA8WvdUhWFEj5fcE3RfWihhxXBW7+cd1LsIiA3lmx+KCmneAGQuyBv820o44L2+TtkSA==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.1.5.tgz", + "integrity": "sha512-8BUF+hZEU4/z/JD201yK6S+UYhsf58bzYIDq2NS1iGpwxSXDu7F+DeGSkIXMFBuHZB21FSiCzEcUb18cQNdRkA==", "license": "MIT", "dependencies": { "@types/cookie": "^0.6.0", @@ -6695,12 +6695,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.1.3.tgz", - "integrity": "sha512-qQGTE+77hleBzv9SIUIkGRvuFBQGagW+TQKy53UTZAO/3+YFNBYvRsNIZ1GT17yHbc63FylMOdS+m3oUriF1GA==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.1.5.tgz", + "integrity": "sha512-/4f9+up0Qv92D3bB8iN5P1s3oHAepSGa9h5k6tpTFlixTTskJZwKGhJ6vRJ277tLD1zuaZTt95hyGWV1Z37csQ==", "license": "MIT", "dependencies": { - "react-router": "7.1.3" + "react-router": "7.1.5" }, "engines": { "node": ">=20.0.0" diff --git a/backend/package.json b/backend/package.json index 487fac9ff..acf6535ab 100644 --- a/backend/package.json +++ b/backend/package.json @@ -18,11 +18,11 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", - "@mui/icons-material": "^6.4.1", - "@mui/material": "^6.4.1", - "@mui/x-data-grid": "^7.24.1", - "@mui/x-date-pickers": "^7.24.1", - "@types/node": "^22.12.0", + "@mui/icons-material": "^6.4.2", + "@mui/material": "^6.4.2", + "@mui/x-data-grid": "^7.25.0", + "@mui/x-date-pickers": "^7.25.0", + "@types/node": "^22.13.0", "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", "@types/validator": "^13.12.2", @@ -39,7 +39,7 @@ "localized-strings": "^2.0.3", "react": "^19.0.0", "react-dom": "^19.0.0", - "react-router-dom": "^7.1.3", + "react-router-dom": "^7.1.5", "react-toastify": "^11.0.3", "rrule": "^2.8.1", "typescript": "^5.7.3", diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 109b4fa8a..cd404ef7e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -10,16 +10,16 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", - "@mui/icons-material": "^6.4.1", - "@mui/material": "^6.4.1", - "@mui/x-data-grid": "^7.24.1", - "@mui/x-date-pickers": "^7.24.1", + "@mui/icons-material": "^6.4.2", + "@mui/material": "^6.4.2", + "@mui/x-data-grid": "^7.25.0", + "@mui/x-date-pickers": "^7.25.0", "@paypal/react-paypal-js": "^8.8.1", "@stripe/react-stripe-js": "^3.1.1", - "@stripe/stripe-js": "^5.5.0", + "@stripe/stripe-js": "^5.6.0", "@types/leaflet": "^1.9.16", "@types/leaflet-boundary-canvas": "^1.0.3", - "@types/node": "^22.12.0", + "@types/node": "^22.13.0", "@types/nprogress": "^0.2.3", "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", @@ -46,7 +46,7 @@ "react-dom": "^19.0.0", "react-ga4": "^2.1.0", "react-leaflet": "^5.0.0", - "react-router-dom": "^7.1.3", + "react-router-dom": "^7.1.5", "react-slick": "^0.30.3", "react-toastify": "^11.0.3", "slick-carousel": "^1.8.1", @@ -1409,9 +1409,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.1.tgz", - "integrity": "sha512-SfDLWMV5b5oXgDf3NTa2hCTPC1d2defhDH2WgFKmAiejC4mSfXYbyi+AFCLzpizauXhgBm8OaZy9BHKnrSpahQ==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.2.tgz", + "integrity": "sha512-Qmod9fHsFWrtLxdSkZ4iDLRz2AUKt3C2ZEimuY+qKlQGVKJDNS5DuSlNOAgqfHFDq8mzB17ATN6HFcThwJlvUw==", "license": "MIT", "funding": { "type": "opencollective", @@ -1419,9 +1419,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.1.tgz", - "integrity": "sha512-wsxFcUTQxt4s+7Bg4GgobqRjyaHLmZGNOs+HJpbwrwmLbT6mhIJxhpqsKzzWq9aDY8xIe7HCjhpH7XI5UD6teA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.2.tgz", + "integrity": "sha512-uwsH1KRmxkJwK3NZyo1xL9pEduL16ftCnzYBYjd6nPNtm05QAoIc0aqedS9tqDV+Ab3q5C04HHOVsMDDv1EBpg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0" @@ -1434,7 +1434,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^6.4.1", + "@mui/material": "^6.4.2", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -1445,16 +1445,16 @@ } }, "node_modules/@mui/material": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.1.tgz", - "integrity": "sha512-MFBfia6UiKxyoLeGkAh8M15bkeDmfnsUTMRJd/vTQue6YQ8AQ6lw9HqDthyYghzDEWIvZO/lQQzLrZE8XwNJLA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.2.tgz", + "integrity": "sha512-9jKr53KbAJyyBRx8LRmX7ATXHlGtxVQdPgm1uyXMoEPMVkSJW1yO3vFgfYoDbGx4ZHcCNuWa4FkFIPWVt9fghA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.4.1", - "@mui/system": "^6.4.1", + "@mui/core-downloads-tracker": "^6.4.2", + "@mui/system": "^6.4.2", "@mui/types": "^7.2.21", - "@mui/utils": "^6.4.1", + "@mui/utils": "^6.4.2", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", @@ -1473,7 +1473,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.4.1", + "@mui/material-pigment-css": "^6.4.2", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1494,13 +1494,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.1.tgz", - "integrity": "sha512-DcT7mwK89owwgcEuiE7w458te4CIjHbYWW6Kn6PiR6eLtxBsoBYphA968uqsQAOBQDpbYxvkuFLwhgk4bxoN/Q==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.2.tgz", + "integrity": "sha512-2CkQT0gNlogM50qGTBJgWA7hPPx4AeH8RE2xJa+PHtIOowiVPX52ZsQ0e7Ho18DAqEbkngQ6Uju037ER+TCY5A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/utils": "^6.4.1", + "@mui/utils": "^6.4.2", "prop-types": "^15.8.1" }, "engines": { @@ -1521,9 +1521,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.0.tgz", - "integrity": "sha512-ek/ZrDujrger12P6o4luQIfRd2IziH7jQod2WMbLqGE03Iy0zUwYmckRTVhRQTLPNccpD8KXGcALJF+uaUQlbg==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.2.tgz", + "integrity": "sha512-cgjQK2bkllSYoWUBv93ALhCPJ0NhfO3NctsBf13/b4XSeQVfKPBAnR+P9mNpdFMa5a5RWwtWuBD3cZ5vktsN+g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -1555,16 +1555,16 @@ } }, "node_modules/@mui/system": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.1.tgz", - "integrity": "sha512-rgQzgcsHCTtzF9MZ+sL0tOhf2ZBLazpjrujClcb4Siju5lTrK0xX4PsiropActzCemNfM+mOu+0jezAVnfRK8g==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.2.tgz", + "integrity": "sha512-wQbaPCtsxNsM5nR+NZpkFJBKVKH03GQnAjlkKENM8JQqGdWcRyM3f4fJZgzzNdIFpSQw4wpAQKnhfHkjf3d6yQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/private-theming": "^6.4.1", - "@mui/styled-engine": "^6.4.0", + "@mui/private-theming": "^6.4.2", + "@mui/styled-engine": "^6.4.2", "@mui/types": "^7.2.21", - "@mui/utils": "^6.4.1", + "@mui/utils": "^6.4.2", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -1609,9 +1609,9 @@ } }, "node_modules/@mui/utils": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.1.tgz", - "integrity": "sha512-iQUDUeYh87SvR4lVojaRaYnQix8BbRV51MxaV6MBmqthecQoxwSbS5e2wnbDJUeFxY2ppV505CiqPLtd0OWkqw==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.2.tgz", + "integrity": "sha512-5NkhzlJkmR5+5RSs/Irqin1GPy2Z8vbLk/UzQrH9FEAnm6OA9SvuXjzgklxUs7N65VwEkGpKK1jMZ5K84hRdzQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -1639,14 +1639,14 @@ } }, "node_modules/@mui/x-data-grid": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.24.1.tgz", - "integrity": "sha512-4sYTbMwsDotuTd2Cwa2JGTPXPWQs8RGJvocAKnIsNOzNdZNMrikE//HO35snriK8s4dauAApY7RVbeisjpVT+A==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.25.0.tgz", + "integrity": "sha512-e9ZLbCgnDiADFiDyXo91ucZFHEMkKBNpwpkaTq5KohzefJfMpMQjTEbJeueSfBG2G1Q1Am2TPeBqrNeReIA7RQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", "@mui/utils": "^5.16.6 || ^6.0.0", - "@mui/x-internals": "7.24.1", + "@mui/x-internals": "7.25.0", "clsx": "^2.1.1", "prop-types": "^15.8.1", "reselect": "^5.1.1" @@ -1676,14 +1676,14 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.24.1.tgz", - "integrity": "sha512-ykQugMQHuQKBk3kViW/r0PpubtHQOlrd54bgbdafgTMCeM2VpXvv4zimzOu5IGnM6wEN8hupC7EXZbkrT6x46w==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.25.0.tgz", + "integrity": "sha512-t62OSFAKwj7KYQ8KcwTuKj6OgDuLQPSe4QUJcKDzD9rEhRIJVRUw2x27gBSdcls4l0PTrba19TghvDxCZprriw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", "@mui/utils": "^5.16.6 || ^6.0.0", - "@mui/x-internals": "7.24.1", + "@mui/x-internals": "7.25.0", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -1742,9 +1742,9 @@ } }, "node_modules/@mui/x-internals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.24.1.tgz", - "integrity": "sha512-9BvJzpLJnS9BDphvkiv6v0QOLxbnu8jhwcexFjtCQ2ZyxtVuVsWzGZ2npT9sGOil7+eaFDmWnJtea/tgrPvSwQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.25.0.tgz", + "integrity": "sha512-tBUN54YznAkmtCIRAOl35Kgl0MjFDIjUbzIrbWRgVSIR3QJ8bXnVSkiRBi+P91SZEl9+ZW0rDj+osq7xFJV0kg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", @@ -2133,9 +2133,9 @@ } }, "node_modules/@stripe/stripe-js": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-5.5.0.tgz", - "integrity": "sha512-lkfjyAd34aeMpTKKcEVfy8IUyEsjuAT3t9EXr5yZDtdIUncnZpedl/xLV16Dkd4z+fQwixScsCCDxSMNtBOgpQ==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-5.6.0.tgz", + "integrity": "sha512-w8CEY73X/7tw2KKlL3iOk679V9bWseE4GzNz3zlaYxcTjmcmWOathRb0emgo/QQ3eoNzmq68+2Y2gxluAv3xGw==", "license": "MIT", "engines": { "node": ">=12.16" @@ -2228,9 +2228,9 @@ } }, "node_modules/@types/node": { - "version": "22.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz", - "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", + "version": "22.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.0.tgz", + "integrity": "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==", "license": "MIT", "dependencies": { "undici-types": "~6.20.0" @@ -6897,9 +6897,9 @@ } }, "node_modules/react-router": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.1.3.tgz", - "integrity": "sha512-EezYymLY6Guk/zLQ2vRA8WvdUhWFEj5fcE3RfWihhxXBW7+cd1LsIiA3lmx+KCmneAGQuyBv820o44L2+TtkSA==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.1.5.tgz", + "integrity": "sha512-8BUF+hZEU4/z/JD201yK6S+UYhsf58bzYIDq2NS1iGpwxSXDu7F+DeGSkIXMFBuHZB21FSiCzEcUb18cQNdRkA==", "license": "MIT", "dependencies": { "@types/cookie": "^0.6.0", @@ -6921,12 +6921,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.1.3.tgz", - "integrity": "sha512-qQGTE+77hleBzv9SIUIkGRvuFBQGagW+TQKy53UTZAO/3+YFNBYvRsNIZ1GT17yHbc63FylMOdS+m3oUriF1GA==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.1.5.tgz", + "integrity": "sha512-/4f9+up0Qv92D3bB8iN5P1s3oHAepSGa9h5k6tpTFlixTTskJZwKGhJ6vRJ277tLD1zuaZTt95hyGWV1Z37csQ==", "license": "MIT", "dependencies": { - "react-router": "7.1.3" + "react-router": "7.1.5" }, "engines": { "node": ">=20.0.0" diff --git a/frontend/package.json b/frontend/package.json index 815dcaaaa..9d8451145 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -20,16 +20,16 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", - "@mui/icons-material": "^6.4.1", - "@mui/material": "^6.4.1", - "@mui/x-data-grid": "^7.24.1", - "@mui/x-date-pickers": "^7.24.1", + "@mui/icons-material": "^6.4.2", + "@mui/material": "^6.4.2", + "@mui/x-data-grid": "^7.25.0", + "@mui/x-date-pickers": "^7.25.0", "@paypal/react-paypal-js": "^8.8.1", "@stripe/react-stripe-js": "^3.1.1", - "@stripe/stripe-js": "^5.5.0", + "@stripe/stripe-js": "^5.6.0", "@types/leaflet": "^1.9.16", "@types/leaflet-boundary-canvas": "^1.0.3", - "@types/node": "^22.12.0", + "@types/node": "^22.13.0", "@types/nprogress": "^0.2.3", "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", @@ -56,7 +56,7 @@ "react-dom": "^19.0.0", "react-ga4": "^2.1.0", "react-leaflet": "^5.0.0", - "react-router-dom": "^7.1.3", + "react-router-dom": "^7.1.5", "react-slick": "^0.30.3", "react-toastify": "^11.0.3", "slick-carousel": "^1.8.1", diff --git a/mobile/package-lock.json b/mobile/package-lock.json index f09d7a7ce..cf8959c12 100644 --- a/mobile/package-lock.json +++ b/mobile/package-lock.json @@ -8,7 +8,7 @@ "name": "bookcars", "version": "5.5.0", "dependencies": { - "@babel/runtime": "^7.26.0", + "@babel/runtime": "^7.26.7", "@react-native-async-storage/async-storage": "1.23.1", "@react-native-community/datetimepicker": "8.2.0", "@react-navigation/drawer": "^7.1.1", @@ -25,19 +25,19 @@ "axios-retry": "^4.5.0", "babel-plugin-module-resolver": "^5.0.2", "date-fns": "^4.1.0", - "expo": "~52.0.26", - "expo-asset": "~11.0.2", - "expo-constants": "~17.0.4", + "expo": "~52.0.28", + "expo-asset": "~11.0.3", + "expo-constants": "~17.0.5", "expo-device": "~7.0.2", "expo-document-picker": "~13.0.2", - "expo-image-picker": "~16.0.4", - "expo-linking": "^7.0.4", + "expo-image-picker": "~16.0.5", + "expo-linking": "^7.0.5", "expo-localization": "~16.0.1", "expo-location": "~18.0.5", - "expo-notifications": "~0.29.12", + "expo-notifications": "~0.29.13", "expo-splash-screen": "~0.29.21", "expo-status-bar": "~2.0.1", - "expo-updates": "~0.26.13", + "expo-updates": "~0.26.15", "i18n-js": "^4.5.1", "lodash.debounce": "^4.0.8", "mime": "^4.0.6", @@ -59,10 +59,10 @@ "validator": "^13.12.0" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.26.7", "@types/react": "~18.3.12", - "@typescript-eslint/eslint-plugin": "^8.20.0", - "@typescript-eslint/parser": "^8.20.0", + "@typescript-eslint/eslint-plugin": "^8.22.0", + "@typescript-eslint/parser": "^8.22.0", "cross-env": "^7.0.3", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", @@ -135,30 +135,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", + "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -214,12 +214,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.9", + "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -462,13 +462,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", "license": "MIT", "dependencies": { "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.7" }, "engines": { "node": ">=6.9.0" @@ -546,12 +546,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", - "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.5" + "@babel/types": "^7.26.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -2123,9 +2123,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", + "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2149,16 +2149,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/types": "^7.26.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2186,9 +2186,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", - "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -2325,9 +2325,9 @@ } }, "node_modules/@expo/cli": { - "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.10.tgz", - "integrity": "sha512-MA4TOtf6x8ixVaQbUINgest/DsrWcMVGMmjXYtnhUfwQGvZtJC+aI+xMBM7ow2OqY2B/xfoRcgqkvWkl36yxkA==", + "version": "0.22.11", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.11.tgz", + "integrity": "sha512-D5Vl7IBLi53WmL57NAFYB1mIqlMQxDIZVzbi/FTpo5a3oIHELKr0ElTKeOLf1f1/Y3FA7cxgphoawdA0+O1JWQ==", "license": "MIT", "dependencies": { "@0no-co/graphql.web": "^1.0.8", @@ -2522,9 +2522,9 @@ } }, "node_modules/@expo/cli/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3764,9 +3764,9 @@ } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4555,17 +4555,17 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.20.0.tgz", - "integrity": "sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.22.0.tgz", + "integrity": "sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.20.0", - "@typescript-eslint/type-utils": "8.20.0", - "@typescript-eslint/utils": "8.20.0", - "@typescript-eslint/visitor-keys": "8.20.0", + "@typescript-eslint/scope-manager": "8.22.0", + "@typescript-eslint/type-utils": "8.22.0", + "@typescript-eslint/utils": "8.22.0", + "@typescript-eslint/visitor-keys": "8.22.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -4585,16 +4585,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.20.0.tgz", - "integrity": "sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.22.0.tgz", + "integrity": "sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.20.0", - "@typescript-eslint/types": "8.20.0", - "@typescript-eslint/typescript-estree": "8.20.0", - "@typescript-eslint/visitor-keys": "8.20.0", + "@typescript-eslint/scope-manager": "8.22.0", + "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/typescript-estree": "8.22.0", + "@typescript-eslint/visitor-keys": "8.22.0", "debug": "^4.3.4" }, "engines": { @@ -4610,14 +4610,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz", - "integrity": "sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.22.0.tgz", + "integrity": "sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.20.0", - "@typescript-eslint/visitor-keys": "8.20.0" + "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/visitor-keys": "8.22.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4628,14 +4628,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.20.0.tgz", - "integrity": "sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.22.0.tgz", + "integrity": "sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.20.0", - "@typescript-eslint/utils": "8.20.0", + "@typescript-eslint/typescript-estree": "8.22.0", + "@typescript-eslint/utils": "8.22.0", "debug": "^4.3.4", "ts-api-utils": "^2.0.0" }, @@ -4652,9 +4652,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.20.0.tgz", - "integrity": "sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.22.0.tgz", + "integrity": "sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==", "dev": true, "license": "MIT", "engines": { @@ -4666,14 +4666,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz", - "integrity": "sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.22.0.tgz", + "integrity": "sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.20.0", - "@typescript-eslint/visitor-keys": "8.20.0", + "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/visitor-keys": "8.22.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4719,9 +4719,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", "dev": true, "license": "ISC", "bin": { @@ -4732,16 +4732,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.20.0.tgz", - "integrity": "sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.22.0.tgz", + "integrity": "sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.20.0", - "@typescript-eslint/types": "8.20.0", - "@typescript-eslint/typescript-estree": "8.20.0" + "@typescript-eslint/scope-manager": "8.22.0", + "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/typescript-estree": "8.22.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4756,13 +4756,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz", - "integrity": "sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.22.0.tgz", + "integrity": "sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/types": "8.22.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -7617,13 +7617,13 @@ } }, "node_modules/expo": { - "version": "52.0.27", - "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.27.tgz", - "integrity": "sha512-PxIS8JRTegUNYq4vNeP0eCqm7p17oGNYjJ/9x207zkwVlklywD9LYIckGojXEY5JPW/DwhbhtO6E2hMgdQQugg==", + "version": "52.0.28", + "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.28.tgz", + "integrity": "sha512-0O/JEYYCFszJ85frislm79YmlrQA5ghAQXV4dqcQcsy9FqftdicD4p/ehT36yiuGIhaKC6fn25LEaJ9JR2ei7g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.22.10", + "@expo/cli": "0.22.11", "@expo/config": "~10.0.8", "@expo/config-plugins": "~9.0.14", "@expo/fingerprint": "0.11.7", @@ -7631,12 +7631,12 @@ "@expo/vector-icons": "^14.0.0", "babel-preset-expo": "~12.0.6", "expo-asset": "~11.0.2", - "expo-constants": "~17.0.4", + "expo-constants": "~17.0.5", "expo-file-system": "~18.0.7", "expo-font": "~13.0.3", "expo-keep-awake": "~14.0.2", "expo-modules-autolinking": "2.0.7", - "expo-modules-core": "2.1.4", + "expo-modules-core": "2.2.0", "fbemitter": "^3.0.0", "web-streams-polyfill": "^3.3.2", "whatwg-url-without-unicode": "8.0.0-3" @@ -7673,13 +7673,13 @@ } }, "node_modules/expo-asset": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.2.tgz", - "integrity": "sha512-We3Td5WsNsNQyXoheLnuwic6JCOt/pqXqIIyWaZ3z/PeHrA+SwoQdI18MjDhkudLK08tbIVyDSUW8IJHXa04eg==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.3.tgz", + "integrity": "sha512-vgJnC82IooAVMy5PxbdFIMNJhW4hKAUyxc5VIiAPPf10vFYw6CqHm+hrehu4ST1I4bvg5PV4uKdPxliebcbgLg==", "license": "MIT", "dependencies": { "@expo/image-utils": "^0.6.4", - "expo-constants": "~17.0.4", + "expo-constants": "~17.0.5", "invariant": "^2.2.4", "md5-file": "^3.2.3" }, @@ -7690,9 +7690,9 @@ } }, "node_modules/expo-constants": { - "version": "17.0.4", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.4.tgz", - "integrity": "sha512-5c0VlZycmDyQUCMCr3Na3cpHAsVJJ+5o6KkkD4rmATQZ0++Xp/S2gpnjWyEo2riRmO91vxoyHwmAySXuktJddQ==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.5.tgz", + "integrity": "sha512-6SHXh32jCB+vrp2TRDNkoGoM421eOBPZIXX9ixI0hKKz71tIjD+LMr/P+rGUd/ks312MP3WK3j5vcYYPkCD8tQ==", "license": "MIT", "dependencies": { "@expo/config": "~10.0.8", @@ -7766,9 +7766,9 @@ } }, "node_modules/expo-image-picker": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/expo-image-picker/-/expo-image-picker-16.0.4.tgz", - "integrity": "sha512-LeTdQxL+kS8wiFOf+mTxDZmr0Ok3KwcpvCaDnXwCdCQuszVd4sSml7lg+oaJfkWj793u74M+8j0hQaEDHCgkxg==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/expo-image-picker/-/expo-image-picker-16.0.5.tgz", + "integrity": "sha512-Rkc4vihqPN/48PV3QJkrG10Lg5s1LonKmpVnGwBSlHjRR5ngqJH++DYFndgD69hLaWrJukzCYpP3CyTMAAatWg==", "license": "MIT", "dependencies": { "expo-image-loader": "~5.0.0" @@ -7794,12 +7794,12 @@ } }, "node_modules/expo-linking": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-7.0.4.tgz", - "integrity": "sha512-i+QaFc2zwOoq/ajePVWC+op3cOKC6nd6Wj/BJtukU71byTAbxDhbi+3m0ZFbh2i1/v/iIXRqrl3PvQcKNklPkw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-7.0.5.tgz", + "integrity": "sha512-3KptlJtcYDPWohk0MfJU75MJFh2ybavbtcSd84zEPfw9s1q3hjimw3sXnH03ZxP54kiEWldvKmmnGcVffBDB1g==", "license": "MIT", "dependencies": { - "expo-constants": "~17.0.4", + "expo-constants": "~17.0.5", "invariant": "^2.2.4" }, "peerDependencies": { @@ -7898,18 +7898,18 @@ } }, "node_modules/expo-modules-core": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.1.4.tgz", - "integrity": "sha512-gfsbTPSaocgcQQDy4Z4ztg1hcOofwODctAA+yoNcrUQr/hRaDc6ndIJQwGPjoGXnEbXVxFfzGGSAkNiqK1I7lQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.2.0.tgz", + "integrity": "sha512-mOFEHIe6jZ7G5pYUVSQ2Ghs3CUr9Uz6DOh4JI+4PsTf0gmEvMmMEOrxirS89jRWQjXPJ7QaGBK0CJrZlj/Sdeg==", "license": "MIT", "dependencies": { "invariant": "^2.2.4" } }, "node_modules/expo-notifications": { - "version": "0.29.12", - "resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-0.29.12.tgz", - "integrity": "sha512-E2QQ+PJR4jAg4XX1jsYobfHwjUMuR6YO/CtMLPKT1jEpzawGKLKEFowtIGu70wpOmcXWuyZst6qStJFu1gwxuQ==", + "version": "0.29.13", + "resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-0.29.13.tgz", + "integrity": "sha512-GHye6XeI1uEeVttJO/hGwUyA5cgQsxR3mi5q37yOE7cZN3cMj36pIfEEmjXEr0nWIWSzoJ0w8c2QxNj5xfP1pA==", "license": "MIT", "dependencies": { "@expo/image-utils": "^0.6.4", @@ -7918,7 +7918,7 @@ "assert": "^2.0.0", "badgin": "^1.1.5", "expo-application": "~6.0.2", - "expo-constants": "~17.0.4" + "expo-constants": "~17.0.5" }, "peerDependencies": { "expo": "*", @@ -7955,9 +7955,9 @@ "license": "MIT" }, "node_modules/expo-updates": { - "version": "0.26.13", - "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.26.13.tgz", - "integrity": "sha512-rNJQ5eCGOGy6Ewxop1Fz3Kh5HXxSoIH480qrbJYqUDrql2J4Fp7cnv36B+Kwz+r+47gwGm1VgzwUbA2PctQc+w==", + "version": "0.26.15", + "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.26.15.tgz", + "integrity": "sha512-wcsa6rcBNgB1yVNW8mBBFq45kaTRdu8KZHKlahV0IIX5INlRyEvlN6FYdHLe6X5LDUlnkom+cdFxGL7fsFGugw==", "license": "MIT", "dependencies": { "@expo/code-signing-certificates": "0.0.5", @@ -11043,9 +11043,9 @@ } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", "license": "ISC", "bin": { "semver": "bin/semver.js" diff --git a/mobile/package.json b/mobile/package.json index 7915567a8..00f2380c9 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -24,7 +24,7 @@ "prebuild:clean": "expo prebuild --clean" }, "dependencies": { - "@babel/runtime": "^7.26.0", + "@babel/runtime": "^7.26.7", "@react-native-async-storage/async-storage": "1.23.1", "@react-native-community/datetimepicker": "8.2.0", "@react-navigation/drawer": "^7.1.1", @@ -41,19 +41,19 @@ "axios-retry": "^4.5.0", "babel-plugin-module-resolver": "^5.0.2", "date-fns": "^4.1.0", - "expo": "~52.0.26", - "expo-asset": "~11.0.2", - "expo-constants": "~17.0.4", + "expo": "~52.0.28", + "expo-asset": "~11.0.3", + "expo-constants": "~17.0.5", "expo-device": "~7.0.2", "expo-document-picker": "~13.0.2", - "expo-image-picker": "~16.0.4", - "expo-linking": "^7.0.4", + "expo-image-picker": "~16.0.5", + "expo-linking": "^7.0.5", "expo-localization": "~16.0.1", "expo-location": "~18.0.5", - "expo-notifications": "~0.29.12", + "expo-notifications": "~0.29.13", "expo-splash-screen": "~0.29.21", "expo-status-bar": "~2.0.1", - "expo-updates": "~0.26.13", + "expo-updates": "~0.26.15", "i18n-js": "^4.5.1", "lodash.debounce": "^4.0.8", "mime": "^4.0.6", @@ -75,10 +75,10 @@ "validator": "^13.12.0" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.26.7", "@types/react": "~18.3.12", - "@typescript-eslint/eslint-plugin": "^8.20.0", - "@typescript-eslint/parser": "^8.20.0", + "@typescript-eslint/eslint-plugin": "^8.22.0", + "@typescript-eslint/parser": "^8.22.0", "cross-env": "^7.0.3", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", diff --git a/packages/currency-converter/package-lock.json b/packages/currency-converter/package-lock.json index 91139bf99..605a732d4 100644 --- a/packages/currency-converter/package-lock.json +++ b/packages/currency-converter/package-lock.json @@ -9,19 +9,19 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@babel/runtime": "^7.26.0", + "@babel/runtime": "^7.26.7", "easy-currencies": "^1.8.1" }, "devDependencies": { - "@types/node": "^22.10.2", + "@types/node": "^22.13.0", "rimraf": "^6.0.1", - "typescript": "^5.7.2" + "typescript": "^5.7.3" } }, "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", + "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -49,9 +49,9 @@ } }, "node_modules/@types/node": { - "version": "22.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", - "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "version": "22.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.0.tgz", + "integrity": "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==", "dev": true, "license": "MIT", "dependencies": { @@ -569,9 +569,9 @@ } }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/packages/currency-converter/package.json b/packages/currency-converter/package.json index 992ae3d2d..1f57ea757 100644 --- a/packages/currency-converter/package.json +++ b/packages/currency-converter/package.json @@ -11,12 +11,12 @@ "author": "Akram El Assas", "license": "ISC", "dependencies": { - "@babel/runtime": "^7.26.0", + "@babel/runtime": "^7.26.7", "easy-currencies": "^1.8.1" }, "devDependencies": { - "@types/node": "^22.10.2", + "@types/node": "^22.13.0", "rimraf": "^6.0.1", - "typescript": "^5.7.2" + "typescript": "^5.7.3" } } diff --git a/packages/reactjs-social-login/package-lock.json b/packages/reactjs-social-login/package-lock.json index e914cec07..f53f6096f 100644 --- a/packages/reactjs-social-login/package-lock.json +++ b/packages/reactjs-social-login/package-lock.json @@ -8,12 +8,12 @@ "name": "reactjs-social-login", "version": "1.0.0", "devDependencies": { - "@types/node": "^22.10.3", + "@types/node": "^22.13.0", "@types/react": "^19.0.8", "microbundle-crl": "^0.13.11", "react": "^19.0.0", "rimraf": "^6.0.1", - "typescript": "^5.7.2" + "typescript": "^5.7.3" } }, "node_modules/@ampproject/remapping": { @@ -2301,9 +2301,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.3.tgz", - "integrity": "sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==", + "version": "22.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.0.tgz", + "integrity": "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==", "dev": true, "license": "MIT", "dependencies": { @@ -8372,9 +8372,9 @@ } }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/packages/reactjs-social-login/package.json b/packages/reactjs-social-login/package.json index 58b7ac990..54a8cfd3e 100644 --- a/packages/reactjs-social-login/package.json +++ b/packages/reactjs-social-login/package.json @@ -9,12 +9,12 @@ "build": "rimraf ./dist && tsc --build --verbose" }, "devDependencies": { - "@types/node": "^22.10.3", + "@types/node": "^22.13.0", "@types/react": "^19.0.8", "microbundle-crl": "^0.13.11", "react": "^19.0.0", "rimraf": "^6.0.1", - "typescript": "^5.7.2" + "typescript": "^5.7.3" }, "files": [ "dist/" From 48bddefb45783adffe8355d5582d7250d24c68ae Mon Sep 17 00:00:00 2001 From: aelassas Date: Mon, 3 Feb 2025 09:00:45 +0100 Subject: [PATCH 02/10] Bump version to 5.6.0 --- api/package.json | 2 +- backend/package.json | 2 +- frontend/package.json | 2 +- mobile/app.json | 4 ++-- mobile/package.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api/package.json b/api/package.json index f04a19357..ef06462cf 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "api", - "version": "5.5.0", + "version": "5.6.0", "description": "", "main": "index.js", "type": "module", diff --git a/backend/package.json b/backend/package.json index acf6535ab..b9d889893 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,7 +1,7 @@ { "name": "backend", "private": true, - "version": "5.5.0", + "version": "5.6.0", "type": "module", "scripts": { "install:dependencies": "cd ../packages/currency-converter && npm i && cd ../bookcars-helper && npm i && cd ../../backend", diff --git a/frontend/package.json b/frontend/package.json index 9d8451145..672483815 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "frontend", - "version": "5.5.0", + "version": "5.6.0", "private": true, "type": "module", "scripts": { diff --git a/mobile/app.json b/mobile/app.json index 059d3dddb..a4d9bcc40 100644 --- a/mobile/app.json +++ b/mobile/app.json @@ -3,7 +3,7 @@ "jsEngine": "hermes", "newArchEnabled": true, "name": "BookCars", - "version": "5.5.0", + "version": "5.6.0", "slug": "bookcars", "icon": "./assets/icon.png", "assetBundlePatterns": [ @@ -28,7 +28,7 @@ "package": "com.bookcars" }, "ios": { - "buildNumber": "5.5.0", + "buildNumber": "5.6.0", "supportsTablet": true, "icon": "./assets/icon.png", // "splash": { diff --git a/mobile/package.json b/mobile/package.json index 00f2380c9..56c52bc8e 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -1,6 +1,6 @@ { "name": "bookcars", - "version": "5.5.0", + "version": "5.6.0", "main": "node_modules/expo/AppEntry.js", "scripts": { "install:dependencies": "cd ../packages/currency-converter && npm i && cd ../bookcars-helper && npm i && cd ../../mobile", From 2f7ab3228baa169d942f91f8d1901197ef28db80 Mon Sep 17 00:00:00 2001 From: aelassas Date: Mon, 3 Feb 2025 20:14:24 +0100 Subject: [PATCH 03/10] Add configuration to toggle supplier visibility in the frontend --- frontend/.env.docker.example | 1 + frontend/.env.example | 1 + frontend/src/components/Footer.tsx | 2 +- frontend/src/components/Header.tsx | 20 +++++++++++--------- frontend/src/config/env.config.ts | 1 + frontend/src/pages/Booking.tsx | 22 ++++++++++++---------- frontend/src/pages/Bookings.tsx | 1 + frontend/src/pages/Checkout.tsx | 18 ++++++++++-------- frontend/src/pages/Home.tsx | 11 +++++++---- frontend/src/pages/Search.tsx | 5 +++-- 10 files changed, 48 insertions(+), 34 deletions(-) diff --git a/frontend/.env.docker.example b/frontend/.env.docker.example index b16822979..2c6b93078 100644 --- a/frontend/.env.docker.example +++ b/frontend/.env.docker.example @@ -34,3 +34,4 @@ VITE_BC_APPLE_ID=XXXXXXXXXX VITE_BC_GG_APP_ID=XXXXXXXXXX VITE_BC_MIN_LOCATIONS=4 VITE_BC_WEBSITE_NAME=BookCars +VITE_BC_HIDE_SUPPLIERS=false diff --git a/frontend/.env.example b/frontend/.env.example index c82f6e469..2b0b747d7 100644 --- a/frontend/.env.example +++ b/frontend/.env.example @@ -35,3 +35,4 @@ VITE_BC_APPLE_ID=XXXXXXXXXX VITE_BC_GG_APP_ID=XXXXXXXXXX VITE_BC_MIN_LOCATIONS=4 VITE_BC_WEBSITE_NAME=BookCars +VITE_BC_HIDE_SUPPLIERS=false diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx index 7c8f04cae..a266c396d 100644 --- a/frontend/src/components/Footer.tsx +++ b/frontend/src/components/Footer.tsx @@ -34,7 +34,7 @@ const Footer = () => {
{strings.RENT}
    -
  • navigate('/suppliers')}>{strings.SUPPLIERS}
  • + {!env.HIDE_SUPPLIERS &&
  • navigate('/suppliers')}>{strings.SUPPLIERS}
  • }
  • navigate('/locations')}>{strings.LOCATIONS}
diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx index b28996fb7..62b551477 100644 --- a/frontend/src/components/Header.tsx +++ b/frontend/src/components/Header.tsx @@ -428,15 +428,17 @@ const Header = ({ )} - { - navigate('/suppliers') - handleSideMenuClose() - }} - > - - - + {!env.HIDE_SUPPLIERS && ( + { + navigate('/suppliers') + handleSideMenuClose() + }} + > + + + + )} { navigate('/locations') diff --git a/frontend/src/config/env.config.ts b/frontend/src/config/env.config.ts index 53ebbb147..99d68b093 100644 --- a/frontend/src/config/env.config.ts +++ b/frontend/src/config/env.config.ts @@ -128,6 +128,7 @@ const env = { * Minimum number of locations required for country tabs in homepage. */ MIN_LOCATIONS: Number.parseInt(String(import.meta.env.VITE_BC_MIN_LOCATIONS), 10) || 4, + HIDE_SUPPLIERS: (import.meta.env.VITE_BC_HIDE_SUPPLIERS && import.meta.env.VITE_BC_HIDE_SUPPLIERS.toLowerCase()) === 'true', } export default env diff --git a/frontend/src/pages/Booking.tsx b/frontend/src/pages/Booking.tsx index e2608082f..4a046dc90 100644 --- a/frontend/src/pages/Booking.tsx +++ b/frontend/src/pages/Booking.tsx @@ -319,16 +319,18 @@ const Booking = () => {
- - - + {!env.HIDE_SUPPLIERS && ( + + + + )} { hideDates={env.isMobile} checkboxSelection={false} onLoad={() => setLoadingPage(false)} + hideSupplierColumn={env.HIDE_SUPPLIERS} />
diff --git a/frontend/src/pages/Checkout.tsx b/frontend/src/pages/Checkout.tsx index 160e58b6b..32cbfd391 100644 --- a/frontend/src/pages/Checkout.tsx +++ b/frontend/src/pages/Checkout.tsx @@ -578,7 +578,7 @@ const Checkout = () => { hidePrice sizeAuto onLoad={() => setLoadingPage(false)} - // hideSupplier + hideSupplier={env.HIDE_SUPPLIERS} /> { {strings.CAR}
{`${car.name} (${bookcarsHelper.formatPrice(price / days, commonStrings.CURRENCY, language)}${commonStrings.DAILY})`}
-
- {commonStrings.SUPPLIER} -
-
- {car.supplier.fullName} - {car.supplier.fullName} + {!env.HIDE_SUPPLIERS && ( +
+ {commonStrings.SUPPLIER} +
+
+ {car.supplier.fullName} + {car.supplier.fullName} +
-
+ )}
{strings.COST}
{bookcarsHelper.formatPrice(price, commonStrings.CURRENCY, language)}
diff --git a/frontend/src/pages/Home.tsx b/frontend/src/pages/Home.tsx index 791ad3a4e..5a64808c7 100644 --- a/frontend/src/pages/Home.tsx +++ b/frontend/src/pages/Home.tsx @@ -92,10 +92,13 @@ const Home = () => { } const onLoad = async () => { - let _suppliers = await SupplierService.getAllSuppliers() - _suppliers = _suppliers.filter((supplier) => supplier.avatar && !/no-image/i.test(supplier.avatar)) - bookcarsHelper.shuffle(_suppliers) - setSuppliers(_suppliers) + if (!env.HIDE_SUPPLIERS) { + let _suppliers = await SupplierService.getAllSuppliers() + _suppliers = _suppliers.filter((supplier) => supplier.avatar && !/no-image/i.test(supplier.avatar)) + bookcarsHelper.shuffle(_suppliers) + setSuppliers(_suppliers) + } + const _countries = await CountryService.getCountriesWithLocations('', true, env.MIN_LOCATIONS) setCountries(_countries) const _locations = await LocationService.getLocationsWithPosition() diff --git a/frontend/src/pages/Search.tsx b/frontend/src/pages/Search.tsx index 3cbb097bf..e17d1dea3 100644 --- a/frontend/src/pages/Search.tsx +++ b/frontend/src/pages/Search.tsx @@ -6,6 +6,7 @@ import * as bookcarsTypes from ':bookcars-types' import * as bookcarsHelper from ':bookcars-helper' import { strings } from '@/lang/search' import * as helper from '@/common/helper' +import env from '@/config/env.config' import * as LocationService from '@/services/LocationService' import * as SupplierService from '@/services/SupplierService' // import * as UserService from '@/services/UserService' @@ -291,7 +292,7 @@ const Search = () => { { showFilters && ( <> - + {!env.HIDE_SUPPLIERS && } @@ -329,7 +330,7 @@ const Search = () => { seats={seats} // distance={distance} // onLoad={() => setLoadingPage(false)} - // hideSupplier + hideSupplier={env.HIDE_SUPPLIERS} // includeAlreadyBookedCars includeComingSoonCars /> From 7175d51695d765de0457d853a29720645a335ee2 Mon Sep 17 00:00:00 2001 From: aelassas Date: Mon, 3 Feb 2025 20:26:17 +0100 Subject: [PATCH 04/10] Add conditional rendering for suppliers route --- frontend/src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index a8390a220..4f3a06aae 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -70,7 +70,7 @@ const App = () => ( } /> } /> } /> - } /> + {!env.HIDE_SUPPLIERS && } />} } /> } /> From d8b52274745c9fc779c4e996b5e70d61de2a250a Mon Sep 17 00:00:00 2001 From: aelassas Date: Tue, 4 Feb 2025 15:31:04 +0100 Subject: [PATCH 05/10] Add user context to admin dashboard --- backend/src/App.tsx | 4 + backend/src/assets/css/header.css | 8 ++ backend/src/components/Header.tsx | 187 ++++++++++++++++++++------ backend/src/components/Layout.tsx | 76 ++--------- backend/src/context/UserContext.tsx | 34 +++++ backend/src/pages/Activate.tsx | 12 +- backend/src/pages/ForgotPassword.tsx | 2 + backend/src/pages/ResetPassword.tsx | 12 +- backend/src/pages/Settings.tsx | 11 +- backend/src/pages/SignIn.tsx | 8 ++ backend/src/pages/SignUp.tsx | 7 + backend/src/pages/Supplier.tsx | 9 +- backend/src/pages/UpdateSupplier.tsx | 2 +- backend/src/pages/UpdateUser.tsx | 2 +- frontend/src/components/Layout.tsx | 16 ++- frontend/src/pages/Activate.tsx | 4 +- frontend/src/pages/ForgotPassword.tsx | 3 +- frontend/src/pages/ResetPassword.tsx | 4 +- 18 files changed, 263 insertions(+), 138 deletions(-) create mode 100644 backend/src/context/UserContext.tsx diff --git a/backend/src/App.tsx b/backend/src/App.tsx index 4a0ed23e2..de9d93a89 100644 --- a/backend/src/App.tsx +++ b/backend/src/App.tsx @@ -1,8 +1,10 @@ import React, { lazy, Suspense } from 'react' import { BrowserRouter, Route, Routes } from 'react-router-dom' import { GlobalProvider } from '@/context/GlobalContext' +import { UserProvider } from '@/context/UserContext' import ScrollToTop from '@/components/ScrollToTop' +const Header = lazy(() => import('@/components/Header')) const SignIn = lazy(() => import('@/pages/SignIn')) const Activate = lazy(() => import('@/pages/Activate')) const ForgotPassword = lazy(() => import('@/pages/ForgotPassword')) @@ -45,6 +47,8 @@ const App = () => (
}> +
+ } /> } /> diff --git a/backend/src/assets/css/header.css b/backend/src/assets/css/header.css index 165185379..be594ed7f 100644 --- a/backend/src/assets/css/header.css +++ b/backend/src/assets/css/header.css @@ -10,6 +10,14 @@ z-index: 1401 !important; } +.side-menu li { + cursor: pointer; +} + +.side-menu li:hover { + background-color: #f1f1f1; +} + .header-action { margin-right: 20px; } diff --git a/backend/src/components/Header.tsx b/backend/src/components/Header.tsx index e7f2c4b1d..cadf45e8b 100644 --- a/backend/src/components/Header.tsx +++ b/backend/src/components/Header.tsx @@ -11,9 +11,9 @@ import { Button, Drawer, List, - ListItemButton, ListItemIcon, - ListItemText + ListItemText, + ListItem } from '@mui/material' import { Menu as MenuIcon, @@ -44,30 +44,31 @@ import Avatar from './Avatar' import * as langHelper from '@/common/langHelper' import * as helper from '@/common/helper' import { useGlobalContext, GlobalContextType } from '@/context/GlobalContext' +import { useUserContext, UserContextType } from '@/context/UserContext' +import { useInit } from '@/common/customHooks' import '@/assets/css/header.css' interface HeaderProps { - user?: bookcarsTypes.User hidden?: boolean } -const ListItemLink = (props: any) => - const Header = ({ - user, hidden, }: HeaderProps) => { const navigate = useNavigate() + + const { user, setUser, setUserLoaded, setUnauthorized } = useUserContext() as UserContextType const { notificationCount, setNotificationCount } = useGlobalContext() as GlobalContextType + const [currentUser, setCurrentUser] = useState() const [lang, setLang] = useState(helper.getLanguage(env.DEFAULT_LANGUAGE)) const [anchorEl, setAnchorEl] = useState(null) const [langAnchorEl, setLangAnchorEl] = useState(null) const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = useState(null) const [sideAnchorEl, setSideAnchorEl] = useState(null) const [isSignedIn, setIsSignedIn] = useState(false) - const [loading, setIsLoading] = useState(true) + const [loading, setLoading] = useState(true) const [isLoaded, setIsLoaded] = useState(false) const isMenuOpen = Boolean(anchorEl) @@ -182,6 +183,50 @@ const Header = ({ navigate('/notifications') } + const exit = async () => { + setLoading(false) + setUserLoaded(true) + + await UserService.signout(false) + } + + useInit(async () => { + const _currentUser = UserService.getCurrentUser() + + if (_currentUser) { + try { + const status = await UserService.validateAccessToken() + + if (status === 200) { + const _user = await UserService.getUser(_currentUser._id) + + if (_user) { + if (_user.blacklisted) { + setUser(_user) + setUnauthorized(true) + setLoading(false) + return + } + + setUser(_user) + setCurrentUser(_user) + setIsSignedIn(true) + setLoading(false) + setUserLoaded(true) + } else { + await exit() + } + } else { + await exit() + } + } catch { + await exit() + } + } else { + await exit() + } + }) + useEffect(() => { const language = langHelper.getLanguage() setLang(helper.getLanguage(language)) @@ -189,21 +234,27 @@ const Header = ({ }, []) useEffect(() => { - if (!hidden) { - if (user) { - NotificationService.getNotificationCounter(user._id as string) - .then((notificationCounter) => { - setIsSignedIn(true) - setNotificationCount(notificationCounter.count) - setIsLoading(false) - setIsLoaded(true) - }) - } else { - setIsLoading(false) - setIsLoaded(true) + if (user) { + setCurrentUser(user) + } + }, [user]) + + useEffect(() => { + const init = async () => { + if (!hidden) { + if (currentUser) { + const notificationCounter = await NotificationService.getNotificationCounter(currentUser._id as string) + setIsSignedIn(true) + setNotificationCount(notificationCounter.count) + setIsLoaded(true) + } else { + setIsLoaded(true) + } } } - }, [hidden, user, setNotificationCount]) + + init() + }, [hidden, currentUser]) // eslint-disable-line react-hooks/exhaustive-deps const menuId = 'primary-account-menu' const renderMenu = ( @@ -277,8 +328,8 @@ const Header = ({ ) - return ( -
+ return !hidden && !loading && ( +
{isLoaded && !loading && isSignedIn && ( @@ -287,48 +338,98 @@ const Header = ({ )} <> - + - + { + navigate('/') + handleSideMenuClose() + }} + > - - + + { + navigate('/scheduler') + handleSideMenuClose() + }} + > - - + + { + navigate('/suppliers') + handleSideMenuClose() + }} + > - - + + { + navigate('/countries') + handleSideMenuClose() + }} + > - - + + { + navigate('/locations') + handleSideMenuClose() + }} + > - - + + { + navigate('/cars') + handleSideMenuClose() + }} + > - - + + { + navigate('/users') + handleSideMenuClose() + }} + > - - + + { + navigate('/about') + handleSideMenuClose() + }} + > - - + + { + navigate('/tos') + handleSideMenuClose() + }} + > - - + + { + navigate('/contact') + handleSideMenuClose() + }} + > - + diff --git a/backend/src/components/Layout.tsx b/backend/src/components/Layout.tsx index 82b9ae8e5..f592f2234 100644 --- a/backend/src/components/Layout.tsx +++ b/backend/src/components/Layout.tsx @@ -2,98 +2,49 @@ import React, { useState, useEffect, CSSProperties, ReactNode } from 'react' import { Button } from '@mui/material' import * as bookcarsTypes from ':bookcars-types' import { strings } from '@/lang/master' -import Header from './Header' import * as UserService from '@/services/UserService' import Unauthorized from './Unauthorized' import * as helper from '@/common/helper' -import { useInit } from '@/common/customHooks' +import { useUserContext, UserContextType } from '@/context/UserContext' interface LayoutProps { - user?: bookcarsTypes.User strict?: boolean admin?: boolean - hideHeader?: boolean style?: CSSProperties children: ReactNode onLoad?: (user?: bookcarsTypes.User) => void } const Layout = ({ - user: masterUser, strict, admin, - hideHeader, style, children, onLoad }: LayoutProps) => { - const [user, setUser] = useState() + const { user, userLoaded, setUnauthorized, unauthorized } = useUserContext() as UserContextType const [loading, setLoading] = useState(true) - const [unauthorized, setUnauthorized] = useState(false) useEffect(() => { - if (masterUser && user && user.avatar !== masterUser.avatar) { - setUser(masterUser) - } - }, [masterUser, user]) - - useInit(async () => { - const exit = async () => { - if (strict) { - await UserService.signout() + if (userLoaded) { + if (!user && strict) { + UserService.signout(true) } else { - await UserService.signout(false) setLoading(false) if (onLoad) { - onLoad() + onLoad(user || undefined) } } } + }, [user, userLoaded, strict]) // eslint-disable-line react-hooks/exhaustive-deps - const currentUser = UserService.getCurrentUser() - - if (currentUser) { - try { - const status = await UserService.validateAccessToken() - - if (status === 200) { - const _user = await UserService.getUser(currentUser._id) - - if (_user) { - if (_user.blacklisted) { - setUser(_user) - setUnauthorized(true) - setLoading(false) - return - } - - if (admin && _user.type !== bookcarsTypes.RecordType.Admin) { - setUser(_user) - setUnauthorized(true) - setLoading(false) - return - } - - setUser(_user) - setLoading(false) - - if (onLoad) { - onLoad(_user) - } - } else { - await exit() - } - } else { - await exit() - } - } catch { - await exit() - } - } else { - await exit() + useEffect(() => { + if (admin && user && user.type !== bookcarsTypes.RecordType.Admin) { + setUnauthorized(true) + setLoading(false) } - }) + }, [user, admin]) // eslint-disable-line react-hooks/exhaustive-deps const handleResend = async (e: React.MouseEvent) => { e.preventDefault() @@ -118,7 +69,6 @@ const Layout = ({ return ( <> -
diff --git a/backend/src/pages/Scheduler.tsx b/backend/src/pages/Scheduler.tsx index 9343d6b6f..58b64e123 100644 --- a/backend/src/pages/Scheduler.tsx +++ b/backend/src/pages/Scheduler.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' import { Button } from '@mui/material' import * as bookcarsTypes from ':bookcars-types' import * as bookcarsHelper from ':bookcars-helper' @@ -16,6 +17,8 @@ import Layout from '@/components/Layout' import '@/assets/css/scheduler.css' const Scheduler = () => { + const navigate = useNavigate() + const [user, setUser] = useState() const [leftPanel, setLeftPanel] = useState(false) const [admin, setAdmin] = useState(false) @@ -58,7 +61,7 @@ const Scheduler = () => {
{leftPanel && ( <> - {admin diff --git a/backend/src/pages/Settings.tsx b/backend/src/pages/Settings.tsx index 7fceb6f04..81dcd42b1 100644 --- a/backend/src/pages/Settings.tsx +++ b/backend/src/pages/Settings.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' import { Input, InputLabel, @@ -24,6 +25,8 @@ import { useUserContext, UserContextType } from '@/context/UserContext' import '@/assets/css/settings.css' const Settings = () => { + const navigate = useNavigate() + const { user, setUser } = useUserContext() as UserContextType const [admin, setAdmin] = useState(false) @@ -195,13 +198,13 @@ const Settings = () => {
- -
diff --git a/backend/src/pages/SignIn.tsx b/backend/src/pages/SignIn.tsx index 2065e3672..8bab2cd7f 100644 --- a/backend/src/pages/SignIn.tsx +++ b/backend/src/pages/SignIn.tsx @@ -1,13 +1,12 @@ import React, { useState, useEffect } from 'react' +import { useNavigate } from 'react-router-dom' import { Paper, FormControl, InputLabel, Input, Button, - Link } from '@mui/material' -import { useNavigate } from 'react-router-dom' import * as bookcarsTypes from ':bookcars-types' import { strings as commonStrings } from '@/lang/common' import { strings } from '@/lang/sign-in' @@ -156,7 +155,7 @@ const SignIn = () => {
- {strings.RESET_PASSWORD} +
diff --git a/backend/src/pages/SignUp.tsx b/backend/src/pages/SignUp.tsx index 95dacfcfd..66645bef0 100644 --- a/backend/src/pages/SignUp.tsx +++ b/backend/src/pages/SignUp.tsx @@ -228,7 +228,7 @@ const SignUp = () => { - diff --git a/backend/src/pages/Supplier.tsx b/backend/src/pages/Supplier.tsx index ce88fdcca..c236a6f92 100644 --- a/backend/src/pages/Supplier.tsx +++ b/backend/src/pages/Supplier.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' import { Typography, IconButton, @@ -11,7 +12,6 @@ import { Link } from '@mui/material' import { Edit as EditIcon, Delete as DeleteIcon } from '@mui/icons-material' -import { useNavigate } from 'react-router-dom' import * as bookcarsTypes from ':bookcars-types' import * as bookcarsHelper from ':bookcars-helper' import env from '@/config/env.config' @@ -169,7 +169,9 @@ const Supplier = () => { )} {supplier.bio && ( helper.isValidURL(supplier.bio) - ? ({supplier.bio}) : ( + ? ( + {supplier.bio} + ) : ( {supplier.bio} @@ -188,7 +190,7 @@ const Supplier = () => {
{edit && ( - + navigate(`/update-supplier?c=${supplier._id}`)}> diff --git a/backend/src/pages/Suppliers.tsx b/backend/src/pages/Suppliers.tsx index d320146f8..27ac43e76 100644 --- a/backend/src/pages/Suppliers.tsx +++ b/backend/src/pages/Suppliers.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' import { Button } from '@mui/material' import * as bookcarsTypes from ':bookcars-types' import Layout from '@/components/Layout' @@ -11,6 +12,8 @@ import * as helper from '@/common/helper' import '@/assets/css/suppliers.css' const Suppliers = () => { + const navigate = useNavigate() + const [user, setUser] = useState() const [keyword, setKeyword] = useState('') const [rowCount, setRowCount] = useState(-1) @@ -49,7 +52,7 @@ const Suppliers = () => { variant="contained" className="btn-primary new-supplier" size="small" - href="/create-supplier" + onClick={() => navigate('/create-supplier')} > {strings.NEW_SUPPLIER} diff --git a/backend/src/pages/UpdateBooking.tsx b/backend/src/pages/UpdateBooking.tsx index 3bb0b9f60..9820b893d 100644 --- a/backend/src/pages/UpdateBooking.tsx +++ b/backend/src/pages/UpdateBooking.tsx @@ -1,4 +1,5 @@ import React, { useState, useCallback } from 'react' +import { useNavigate } from 'react-router-dom' import { FormControl, FormControlLabel, @@ -19,7 +20,6 @@ import { import { DateTimeValidationError } from '@mui/x-date-pickers' import validator from 'validator' import { intervalToDuration } from 'date-fns' -import { useNavigate } from 'react-router-dom' import * as bookcarsTypes from ':bookcars-types' import * as bookcarsHelper from ':bookcars-helper' import env from '@/config/env.config' @@ -447,7 +447,7 @@ const UpdateBooking = () => { if (!helper.admin(_user) && (_booking.supplier as bookcarsTypes.User)._id !== _user._id) { setLoading(false) setNoMatch(true) - return + return } if (!_booking.driver) { @@ -819,10 +819,10 @@ const UpdateBooking = () => { - {/* */} - +
diff --git a/backend/src/pages/UpdateCar.tsx b/backend/src/pages/UpdateCar.tsx index 44de87351..02a1e1ba1 100644 --- a/backend/src/pages/UpdateCar.tsx +++ b/backend/src/pages/UpdateCar.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' import { Input, InputLabel, @@ -37,6 +38,8 @@ import CarRangeList from '@/components/CarRangeList' import '@/assets/css/create-car.css' const UpdateCar = () => { + const navigate = useNavigate() + const [user, setUser] = useState() const [car, setCar] = useState() const [noMatch, setNoMatch] = useState(false) @@ -800,7 +803,7 @@ const UpdateCar = () => { -
diff --git a/backend/src/pages/UpdateCountry.tsx b/backend/src/pages/UpdateCountry.tsx index 26870784c..42867571c 100644 --- a/backend/src/pages/UpdateCountry.tsx +++ b/backend/src/pages/UpdateCountry.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' import { Input, InputLabel, @@ -23,6 +24,8 @@ import env from '@/config/env.config' import '@/assets/css/update-country.css' const UpdateCountry = () => { + const navigate = useNavigate() + const [visible, setVisible] = useState(false) const [loading, setLoading] = useState(false) const [names, setNames] = useState([]) @@ -199,7 +202,7 @@ const UpdateCountry = () => { -
diff --git a/backend/src/pages/UpdateLocation.tsx b/backend/src/pages/UpdateLocation.tsx index d1608c0a0..96986f2c5 100644 --- a/backend/src/pages/UpdateLocation.tsx +++ b/backend/src/pages/UpdateLocation.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' import { Input, InputLabel, @@ -27,6 +28,8 @@ import ParkingSpotEditList from '@/components/ParkingSpotEditList' import '@/assets/css/update-location.css' const UpdateLocation = () => { + const navigate = useNavigate() + const [visible, setVisible] = useState(false) const [loading, setLoading] = useState(false) const [names, setNames] = useState([]) @@ -290,7 +293,7 @@ const UpdateLocation = () => { -
diff --git a/backend/src/pages/UpdateSupplier.tsx b/backend/src/pages/UpdateSupplier.tsx index c060f1668..5bb5fac5b 100644 --- a/backend/src/pages/UpdateSupplier.tsx +++ b/backend/src/pages/UpdateSupplier.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' import { Input, InputLabel, @@ -29,6 +30,8 @@ import ContractList from '@/components/ContractList' import '@/assets/css/update-supplier.css' const UpdateSupplier = () => { + const navigate = useNavigate() + const [user, setUser] = useState() const [supplier, setSupplier] = useState() const [fullName, setFullName] = useState('') @@ -375,13 +378,13 @@ const UpdateSupplier = () => { )}
- -
diff --git a/backend/src/pages/UpdateUser.tsx b/backend/src/pages/UpdateUser.tsx index 897c2008e..3d5e097b6 100644 --- a/backend/src/pages/UpdateUser.tsx +++ b/backend/src/pages/UpdateUser.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' import { Input, InputLabel, @@ -15,7 +16,6 @@ import { import { Info as InfoIcon } from '@mui/icons-material' import { intervalToDuration } from 'date-fns' import validator from 'validator' -import { useNavigate } from 'react-router-dom' import * as bookcarsTypes from ':bookcars-types' import * as bookcarsHelper from ':bookcars-helper' import Layout from '@/components/Layout' @@ -38,6 +38,7 @@ import '@/assets/css/update-user.css' const UpdateUser = () => { const navigate = useNavigate() + const [loggedUser, setLoggedUser] = useState() const [user, setUser] = useState() const [visible, setVisible] = useState(false) @@ -486,7 +487,7 @@ const UpdateUser = () => { )}
- diff --git a/backend/src/pages/User.tsx b/backend/src/pages/User.tsx index 256c7b191..f48e07701 100644 --- a/backend/src/pages/User.tsx +++ b/backend/src/pages/User.tsx @@ -1,4 +1,5 @@ import React, { useState, useEffect } from 'react' +import { useNavigate } from 'react-router-dom' import { Typography, IconButton, @@ -11,7 +12,6 @@ import { Link, } from '@mui/material' import { Edit as EditIcon, Delete as DeleteIcon } from '@mui/icons-material' -import { useNavigate } from 'react-router-dom' import * as bookcarsTypes from ':bookcars-types' import * as bookcarsHelper from ':bookcars-helper' import env from '@/config/env.config' @@ -30,6 +30,7 @@ import '@/assets/css/user.css' const User = () => { const navigate = useNavigate() + const statuses = helper.getBookingStatuses().map((status) => status.value) const [loggedUser, setLoggedUser] = useState() @@ -200,18 +201,18 @@ const User = () => {
{edit && ( - + navigate(`/update-user?u=${user._id}`)}> )} - {/* {edit && ( + {edit && ( - )} */} + )}
diff --git a/backend/src/pages/Users.tsx b/backend/src/pages/Users.tsx index 4e1ecb76d..1a9b3f58d 100644 --- a/backend/src/pages/Users.tsx +++ b/backend/src/pages/Users.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' import { Button } from '@mui/material' import * as bookcarsTypes from ':bookcars-types' import Layout from '@/components/Layout' @@ -12,6 +13,8 @@ import UserList from '@/components/UserList' import '@/assets/css/users.css' const Users = () => { + const navigate = useNavigate() + const [user, setUser] = useState() const [admin, setAdmin] = useState(false) const [types, setTypes] = useState() @@ -46,13 +49,13 @@ const Users = () => { {admin && ( - -)} + + )} -
diff --git a/backend/tsconfig.json b/backend/tsconfig.json index d2fcaab6a..21dadb7da 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -17,7 +17,7 @@ /* Linting */ "strict": true, "noUnusedLocals": false, - "noUnusedParameters": true, + "noUnusedParameters": false, "noFallthroughCasesInSwitch": true, "paths": { From 7d1d3e4ecfcc4d1349c7805234f913eb706b3885 Mon Sep 17 00:00:00 2001 From: aelassas Date: Tue, 4 Feb 2025 19:45:43 +0100 Subject: [PATCH 07/10] Add NProgress loading indicator to admin dashboard --- backend/package-lock.json | 18 ++++++++++++++++-- backend/package.json | 2 ++ backend/src/App.tsx | 3 ++- backend/src/assets/css/common.css | 4 ++++ backend/src/components/NProgressIndicator.tsx | 19 +++++++++++++++++++ 5 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 backend/src/components/NProgressIndicator.tsx diff --git a/backend/package-lock.json b/backend/package-lock.json index f9bb51621..6f762dfc4 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,12 +1,12 @@ { "name": "backend", - "version": "5.5.0", + "version": "5.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "backend", - "version": "5.5.0", + "version": "5.6.0", "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", @@ -15,6 +15,7 @@ "@mui/x-data-grid": "^7.25.0", "@mui/x-date-pickers": "^7.25.0", "@types/node": "^22.13.0", + "@types/nprogress": "^0.2.3", "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", "@types/validator": "^13.12.2", @@ -29,6 +30,7 @@ "eslint-plugin-react-refresh": "^0.4.11", "history": "^5.3.0", "localized-strings": "^2.0.3", + "nprogress": "^0.2.0", "react": "^19.0.0", "react-dom": "^19.0.0", "react-router-dom": "^7.1.5", @@ -2129,6 +2131,12 @@ "undici-types": "~6.20.0" } }, + "node_modules/@types/nprogress": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.3.tgz", + "integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==", + "license": "MIT" + }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", @@ -6169,6 +6177,12 @@ "npm": ">=8.12.1" } }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", diff --git a/backend/package.json b/backend/package.json index b9d889893..4661a453a 100644 --- a/backend/package.json +++ b/backend/package.json @@ -23,6 +23,7 @@ "@mui/x-data-grid": "^7.25.0", "@mui/x-date-pickers": "^7.25.0", "@types/node": "^22.13.0", + "@types/nprogress": "^0.2.3", "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", "@types/validator": "^13.12.2", @@ -37,6 +38,7 @@ "eslint-plugin-react-refresh": "^0.4.11", "history": "^5.3.0", "localized-strings": "^2.0.3", + "nprogress": "^0.2.0", "react": "^19.0.0", "react-dom": "^19.0.0", "react-router-dom": "^7.1.5", diff --git a/backend/src/App.tsx b/backend/src/App.tsx index de9d93a89..1a889fd24 100644 --- a/backend/src/App.tsx +++ b/backend/src/App.tsx @@ -3,6 +3,7 @@ import { BrowserRouter, Route, Routes } from 'react-router-dom' import { GlobalProvider } from '@/context/GlobalContext' import { UserProvider } from '@/context/UserContext' import ScrollToTop from '@/components/ScrollToTop' +import NProgressIndicator from '@/components/NProgressIndicator' const Header = lazy(() => import('@/components/Header')) const SignIn = lazy(() => import('@/pages/SignIn')) @@ -46,7 +47,7 @@ const App = () => (
- }> + }>
diff --git a/backend/src/assets/css/common.css b/backend/src/assets/css/common.css index 46205a7db..249c66123 100644 --- a/backend/src/assets/css/common.css +++ b/backend/src/assets/css/common.css @@ -4,6 +4,10 @@ --toastify-icon-color-info: #fff !important; } +#nprogress .bar { + background: #1a1a1a !important; +} + .buttons button { margin-right: 15px; margin-left: 0 !important; diff --git a/backend/src/components/NProgressIndicator.tsx b/backend/src/components/NProgressIndicator.tsx new file mode 100644 index 000000000..b298d1d14 --- /dev/null +++ b/backend/src/components/NProgressIndicator.tsx @@ -0,0 +1,19 @@ +import { useEffect } from 'react' +import NProgress from 'nprogress' + +import 'nprogress/nprogress.css' + +const NProgressIndicator = () => { + useEffect(() => { + NProgress.configure({ showSpinner: false }) + NProgress.start() + + return () => { + NProgress.done() + } + }, []) + + return null +} + +export default NProgressIndicator From e567566743233d89d8b6335fae8f122e60af8642 Mon Sep 17 00:00:00 2001 From: aelassas Date: Tue, 4 Feb 2025 20:01:34 +0100 Subject: [PATCH 08/10] Fix: hideSupplier in Booking.tsx --- frontend/src/pages/Booking.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/pages/Booking.tsx b/frontend/src/pages/Booking.tsx index 4a046dc90..80d93c32f 100644 --- a/frontend/src/pages/Booking.tsx +++ b/frontend/src/pages/Booking.tsx @@ -508,6 +508,7 @@ const Booking = () => { booking={booking} cars={[booking.car as bookcarsTypes.Car]} hidePrice + hideSupplier={env.HIDE_SUPPLIERS} />
From b7c81406452fa35b4cefd6ea68c1b6e0c6d03313 Mon Sep 17 00:00:00 2001 From: aelassas Date: Tue, 4 Feb 2025 20:37:42 +0100 Subject: [PATCH 09/10] Fix App.tsx --- backend/src/App.tsx | 86 +++++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 42 deletions(-) diff --git a/backend/src/App.tsx b/backend/src/App.tsx index 1a889fd24..5635ec8fa 100644 --- a/backend/src/App.tsx +++ b/backend/src/App.tsx @@ -44,51 +44,53 @@ const Scheduler = lazy(() => import('@/pages/Scheduler')) const App = () => ( - + + -
- }> -
+
+ }> +
- - } /> - } /> - } /> - } /> - {/* } /> */} - } /> - } /> - } /> - {/* } /> */} - {/* } /> */} - } /> - {/* } /> */} - {/* } /> */} - } /> - } /> - {/* } /> */} - {/* } /> */} - } /> - } /> - } /> - } /> - {/* } /> */} - {/* } /> */} - } /> - } /> - {/* } /> */} - } /> - } /> - } /> - } /> - {/* } /> */} - {/* } /> */} - } /> + + } /> + } /> + } /> + } /> + {/* } /> */} + } /> + } /> + } /> + {/* } /> */} + {/* } /> */} + } /> + {/* } /> */} + {/* } /> */} + } /> + } /> + {/* } /> */} + {/* } /> */} + } /> + } /> + } /> + } /> + {/* } /> */} + {/* } /> */} + } /> + } /> + {/* } /> */} + } /> + } /> + } /> + } /> + {/* } /> */} + {/* } /> */} + } /> - } /> - - -
+ } /> + + +
+
) From 7c56669d454aeadbb734824f65dc9c803c53b869 Mon Sep 17 00:00:00 2001 From: aelassas Date: Wed, 5 Feb 2025 00:34:29 +0100 Subject: [PATCH 10/10] Fix: update user check logic in Activate and ResetPassword pages --- backend/src/pages/Activate.tsx | 4 +++- backend/src/pages/ResetPassword.tsx | 4 +++- frontend/src/pages/Activate.tsx | 4 +++- frontend/src/pages/ResetPassword.tsx | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/backend/src/pages/Activate.tsx b/backend/src/pages/Activate.tsx index 13f982bec..0d44e0487 100644 --- a/backend/src/pages/Activate.tsx +++ b/backend/src/pages/Activate.tsx @@ -119,7 +119,9 @@ const Activate = () => { } const onLoad = async (user?: bookcarsTypes.User) => { - if (!user) { + if (user) { + setNoMatch(true) + } else { const params = new URLSearchParams(window.location.search) if (params.has('u') && params.has('e') && params.has('t')) { const _userId = params.get('u') diff --git a/backend/src/pages/ResetPassword.tsx b/backend/src/pages/ResetPassword.tsx index af41d2745..1d589b909 100644 --- a/backend/src/pages/ResetPassword.tsx +++ b/backend/src/pages/ResetPassword.tsx @@ -104,7 +104,9 @@ const ResetPassword = () => { } const onLoad = async (user?: bookcarsTypes.User) => { - if (!user) { + if (user) { + setNoMatch(true) + } else { const params = new URLSearchParams(window.location.search) if (params.has('u') && params.has('e') && params.has('t')) { const _userId = params.get('u') diff --git a/frontend/src/pages/Activate.tsx b/frontend/src/pages/Activate.tsx index c6e3b5588..07574e330 100644 --- a/frontend/src/pages/Activate.tsx +++ b/frontend/src/pages/Activate.tsx @@ -121,7 +121,9 @@ const Activate = () => { } const onLoad = async (user?: bookcarsTypes.User) => { - if (!user) { + if (user) { + setNoMatch(true) + } else { const params = new URLSearchParams(window.location.search) if (params.has('u') && params.has('e') && params.has('t')) { const _userId = params.get('u') diff --git a/frontend/src/pages/ResetPassword.tsx b/frontend/src/pages/ResetPassword.tsx index a7de6d513..65aa3e5f4 100644 --- a/frontend/src/pages/ResetPassword.tsx +++ b/frontend/src/pages/ResetPassword.tsx @@ -106,7 +106,9 @@ const ResetPassword = () => { } const onLoad = async (user?: bookcarsTypes.User) => { - if (!user) { + if (user) { + setNoMatch(true) + } else { const params = new URLSearchParams(window.location.search) if (params.has('u') && params.has('e') && params.has('t')) { const _userId = params.get('u')