{`
-default
-
- primary
-
-
- secondary
-
-
- warning
-
-
- success
-
-
- info
-
- `}
+ default
+ primary
+ secondary
+ warning
+ success
+ info
+ `}
@@ -118,4 +83,4 @@ const Pages = (props) => {
);
};
-export default withRouter(Pages);
+export default Pages;
\ No newline at end of file
diff --git a/src/components/Documentation/pages/sidebar/Sidebar.js b/src/components/Documentation/pages/sidebar/Sidebar.js
index 090ab25d..caa45eb7 100644
--- a/src/components/Documentation/pages/sidebar/Sidebar.js
+++ b/src/components/Documentation/pages/sidebar/Sidebar.js
@@ -1,32 +1,25 @@
import React from 'react';
import { Grid } from '@mui/material';
-import { withRouter } from 'react-router-dom';
-
-//components
+// Components
import Widget from '../../../Widget';
import { Typography } from '../../../Wrappers';
import Code from '../../../Code';
-const Pages = (props) => {
+const Pages = () => {
return (
<>
structure
props. That means
- you can describe your own Sidebar structure in{' '}
- SidebarStructure.js
file.
+ Sidebar contains structure
props. That means you can describe your own Sidebar
+ structure in SidebarStructure.js
file.
@@ -39,4 +32,4 @@ const Pages = (props) => {
);
};
-export default withRouter(Pages);
+export default Pages;
\ No newline at end of file
diff --git a/src/components/FormItems/error/errors.js b/src/components/FormItems/error/errors.js
index f379b3a4..00861209 100644
--- a/src/components/FormItems/error/errors.js
+++ b/src/components/FormItems/error/errors.js
@@ -1,5 +1,4 @@
-import { push } from 'connected-react-router';
-import { store } from '../../../index';
+import store from '../../../reducers/store';
import { showSnackbar } from '../../Snackbar';
const DEFAULT_ERROR_MESSAGE = 'Error';
@@ -7,14 +6,11 @@ const DEFAULT_ERROR_MESSAGE = 'Error';
function selectErrorMessage(error) {
if (error && error.response && error.response.data) {
const data = error.response.data;
-
if (data.error && data.error.message) {
return data.error.message;
}
-
return String(data);
}
-
return error.message || DEFAULT_ERROR_MESSAGE;
}
@@ -22,7 +18,6 @@ function selectErrorCode(error) {
if (error && error.response && error.response.status) {
return error.response.status;
}
-
return 500;
}
@@ -32,29 +27,24 @@ export default class Errors {
console.error(selectErrorMessage(error));
console.error(error);
}
-
if (selectErrorCode(error) === 403) {
- store.dispatch(push('/403'));
+ // Instead of dispatching push from connected-react-router, use window.location.assign
+ window.location.assign('/403');
return;
}
-
if (selectErrorCode(error) === 400) {
showSnackbar({ type: 'error', message: selectErrorMessage(error) });
return;
}
-
- store.dispatch(push('/500'));
+ window.location.assign('/500');
}
-
static errorCode(error) {
return selectErrorCode(error);
}
-
static selectMessage(error) {
return selectErrorMessage(error);
}
-
static showMessage(error) {
showSnackbar({ type: 'error', message: selectErrorMessage(error) });
}
-}
+}
\ No newline at end of file
diff --git a/src/components/Header/Header.js b/src/components/Header/Header.js
index b8806b23..8113f278 100644
--- a/src/components/Header/Header.js
+++ b/src/components/Header/Header.js
@@ -1,5 +1,5 @@
import React, { useState, useEffect } from 'react';
-import { Link } from 'react-router-dom';
+import { Link, useNavigate } from 'react-router-dom'; // Import useNavigate hook
import { AppBar, Toolbar, IconButton, Menu, MenuItem } from '@mui/material';
import { useTheme } from '@mui/material';
import {
@@ -8,46 +8,39 @@ import {
ArrowBack as ArrowBackIcon,
} from '@mui/icons-material';
import classNames from 'classnames';
-
-//images
+// images
import profile from '../../images/main-profile.png';
import config from '../../config';
-
// styles
import useStyles from './styles';
-
// components
import { Typography, Avatar } from '../Wrappers/Wrappers';
-
// context
import {
useLayoutState,
useLayoutDispatch,
toggleSidebar,
} from '../../context/LayoutContext';
-import {
- useManagementDispatch,
- useManagementState,
-} from '../../context/ManagementContext';
-
+import { useManagementDispatch, useManagementState } from '../../context/ManagementContext';
import { actions } from '../../context/ManagementContext';
import { useUserDispatch, signOut } from '../../context/UserContext';
export default function Header(props) {
- let classes = useStyles();
- let theme = useTheme();
-
- // global
- let layoutState = useLayoutState();
- let layoutDispatch = useLayoutDispatch();
- let userDispatch = useUserDispatch();
+ const classes = useStyles();
+ const theme = useTheme();
+ // Global layout state from context
+ const layoutState = useLayoutState();
+ const layoutDispatch = useLayoutDispatch();
+ const userDispatch = useUserDispatch();
const managementDispatch = useManagementDispatch();
- // local
+ // Hook for navigation (replaces history)
+ const navigate = useNavigate();
+
+ // Local state for profile menu
const [profileMenu, setProfileMenu] = useState(null);
const [currentUser, setCurrentUser] = useState();
const [isSmall, setSmall] = useState(false);
-
const managementValue = useManagementState();
useEffect(() => {
@@ -67,9 +60,10 @@ export default function Header(props) {
return function cleanup() {
window.removeEventListener('resize', handleWindowWidthChange);
};
- });
+ }, []);
function handleWindowWidthChange() {
+ // English: detect if current window width is less than breakpoint and update state accordingly.
let windowWidth = window.innerWidth;
let breakpointWidth = theme.breakpoints.values.md;
let isSmallScreen = windowWidth < breakpointWidth;
@@ -84,7 +78,7 @@ export default function Header(props) {
onClick={() => toggleSidebar(layoutDispatch)}
className={classNames(
classes.headerMenuButton,
- classes.headerMenuButtonCollapse,
+ classes.headerMenuButtonCollapse
)}
>
{(!layoutState.isSidebarOpened && isSmall) ||
@@ -93,7 +87,7 @@ export default function Header(props) {
classes={{
root: classNames(
classes.headerIcon,
- classes.headerIconCollapse,
+ classes.headerIconCollapse
),
}}
/>
@@ -102,7 +96,7 @@ export default function Header(props) {
classes={{
root: classNames(
classes.headerIcon,
- classes.headerIconCollapse,
+ classes.headerIconCollapse
),
}}
/>
@@ -124,7 +118,8 @@ export default function Header(props) {
// eslint-disable-next-line no-mixed-operators
src={
(currentUser?.avatar?.length >= 1 &&
- currentUser?.avatar[currentUser.avatar.length - 1].publicUrl) || profile
+ currentUser?.avatar[currentUser.avatar.length - 1].publicUrl) ||
+ profile
}
classes={{ root: classes.headerIcon }}
>
@@ -133,7 +128,11 @@ export default function Header(props) {
Hi,
@@ -165,7 +164,7 @@ export default function Header(props) {