diff --git a/backend/package-lock.json b/backend/package-lock.json index bff6fa6c..f534fd08 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -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", @@ -6218,6 +6226,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 b9d88989..4661a453 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 d397b8ae..c6bd6dba 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')) @@ -47,7 +48,7 @@ const App = () => (
- }> + }>
diff --git a/backend/src/assets/css/common.css b/backend/src/assets/css/common.css index 46205a7d..249c6612 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 00000000..b298d1d1 --- /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