index.js 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { Box, Grid } from '@mui/material';
  2. import { useEffect } from 'react';
  3. import { connect, useDispatch } from 'react-redux';
  4. import { Navigate, Route, Routes, useLocation, useParams } from 'react-router-dom';
  5. import { actionCatById } from '../../actions/actionCatById';
  6. import { actionGoodById } from '../../actions/actionGoodById';
  7. import { actionGoodsFind } from '../../actions/actionGoodsFind';
  8. import { AdminLayoutPage } from '../admin/AdminLayoutPage';
  9. import { CartPage } from '../CartPage';
  10. import { Error404 } from '../common/Error404';
  11. import { GoodList } from '../common/GoodList';
  12. import { CProtectedRoute, ProtectedRoute } from '../common/ProtectedRoute';
  13. import { GoodPage } from '../GoodPage';
  14. import { CGoodsPage } from '../GoodsPage';
  15. import { Aside } from '../layout/Aside';
  16. import Content from '../layout/Content';
  17. import { Footer } from '../layout/Footer';
  18. import { Header } from '../layout/Header';
  19. import { MainPage } from '../MainPage';
  20. const GoodsPageContainer = () => {
  21. const params = useParams();
  22. const dispatch = useDispatch();
  23. if (params._id) {
  24. console.log(params._id);
  25. dispatch(actionCatById({ _id: params._id }));
  26. }
  27. return <CGoodsPage />;
  28. };
  29. const GoodPageContainer = () => {
  30. const params = useParams();
  31. const dispatch = useDispatch();
  32. dispatch(actionGoodById({ _id: params._id }));
  33. return <GoodPage />;
  34. };
  35. const CGoodsList = connect((state) => ({ goods: state.promise?.pageGoodsFind?.payload || [] }))(GoodList);
  36. const GoodsListContainer = () => {
  37. const params = useParams();
  38. const dispatch = useDispatch();
  39. useEffect(() => {
  40. dispatch(actionGoodsFind({ text: params.searchData, promiseName: 'pageGoodsFind' }));
  41. }, [params.searchData]);
  42. return <CGoodsList />;
  43. };
  44. export const LayoutPage = () => {
  45. const location = useLocation();
  46. return (
  47. <Box className="LayoutPage">
  48. <Header />
  49. <Grid container columns={14} rows={1}>
  50. {!!location.pathname.match(/(\/categor)|(\/good)|(\/order)+/) && (
  51. <Grid xs={3} item>
  52. <Aside />
  53. </Grid>
  54. )}
  55. <Grid xs={location.pathname.match(/(\/categor)|(\/good)|(\/order)+/) ? 11 : 14} item>
  56. <Content>
  57. <Routes>
  58. <Route path="/" exact element={<MainPage />} />
  59. <Route path="/cart" exact element={<CartPage />} />
  60. <Route path="/search/:searchData/" element={<GoodsListContainer />} exact />
  61. <Route path="/category/:_id" element={<GoodsPageContainer />} />
  62. <Route path="/category/" element={<GoodsPageContainer />} />
  63. <Route path="/good/:_id" element={<GoodPageContainer />} />
  64. <Route
  65. path="/admin/*"
  66. exact
  67. element={
  68. <CProtectedRoute roles={['admin']} fallback="/auth">
  69. <AdminLayoutPage />
  70. </CProtectedRoute>
  71. }
  72. />
  73. <Route path="*" element={<Navigate to="/404" />} />
  74. </Routes>
  75. </Content>
  76. </Grid>
  77. </Grid>
  78. <Footer />
  79. </Box>
  80. );
  81. };