index.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import { Box, Grid } from "@mui/material";
  2. import { useEffect } from "react";
  3. import { connect } from "react-redux";
  4. import { Navigate, Route, Routes, useLocation, useParams } from "react-router-dom";
  5. import { actionGoodById } from "../../actions/actionGoodById";
  6. import { actionGoodsPopular } from "../../actions/actionGoodsPopular";
  7. import { actionOrders } from "../../actions/actionOrders";
  8. import { AdminLayoutPage } from "../admin/AdminLayoutPage";
  9. import { CCartPage } from "../CartPage";
  10. import { GoodList } from "../common/GoodList";
  11. import { CProtectedRoute } from "../common/ProtectedRoute";
  12. import { CDashboardPage } from "../DashboardPage";
  13. import { GoodPage } from "../GoodPage";
  14. import { Aside } from "../layout/Aside";
  15. import Content from "../layout/Content";
  16. import { Footer } from "../layout/Footer";
  17. import { Header } from "../layout/Header";
  18. import { MainPage } from "../MainPage";
  19. import { CAdminGoodsPageContainer } from "./GoodsPageContainer";
  20. import { CAdminGoodsSearchPageContainer } from "./GoodsSearchPageContainer";
  21. const GoodPageContainer = ({ onLoad }) => {
  22. const params = useParams();
  23. useEffect(() => {
  24. onLoad({ _id: params._id });
  25. }, []);
  26. return <GoodPage />;
  27. };
  28. const CGoodPageContainer = connect(null, {
  29. onLoad: ({ _id }) => actionGoodById({ _id }),
  30. })(GoodPageContainer);
  31. const DashboardPageContainer = ({ onLoad }) => {
  32. useEffect(() => {
  33. onLoad();
  34. }, []);
  35. return <CDashboardPage />;
  36. };
  37. const CDashboardPageContainer = connect(null, {
  38. onLoad: () => actionOrders(),
  39. })(DashboardPageContainer);
  40. const CGoodsList = connect((state) => ({ goods: state.promise?.pageGoodsFind?.payload || [] }))(GoodList);
  41. // const GoodsListContainer = ({ onLoad }) => {
  42. // const params = useParams();
  43. // useEffect(() => {
  44. // onLoad({ text: params.searchData, promiseName: "pageGoodsFind" });
  45. // }, [params.searchData]);
  46. // return <CGoodsList />;
  47. // };
  48. // const CGoodsListContainer = connect(null, {
  49. // onLoad: ({ text, promiseName }) => actionOrders({ text, promiseName }),
  50. // })(GoodsListContainer);
  51. const MainPageContainer = ({ onLoad, goods }) => {
  52. useEffect(() => {
  53. onLoad();
  54. }, []);
  55. return <MainPage goods={goods || []} />;
  56. };
  57. const CMainPageContainer = connect((state) => ({ goods: state.promise?.goodsPopular?.payload || [] }), {
  58. onLoad: () => actionGoodsPopular(),
  59. })(MainPageContainer);
  60. export const LayoutPage = () => {
  61. const location = useLocation();
  62. return (
  63. <Box className="LayoutPage">
  64. <Header />
  65. <Grid container columns={14} rows={1}>
  66. {!!location.pathname.match(/(\/categor)|(\/good)|(\/order)|(\/admin)+/) && (
  67. <Grid xs={3} item>
  68. <Aside />
  69. </Grid>
  70. )}
  71. <Grid xs={location.pathname.match(/(\/categor)|(\/good)|(\/order)|(\/admin)+/) ? 11 : 14} item>
  72. <Content>
  73. <Routes>
  74. <Route path="/" exact element={<CMainPageContainer />} />
  75. <Route
  76. path="/cart"
  77. exact
  78. element={
  79. <CProtectedRoute roles={["active"]} fallback="/auth">
  80. <CCartPage />
  81. </CProtectedRoute>
  82. }
  83. />
  84. {/* <Route path="/search/:searchData/" element={<CGoodsListContainer />} exact /> */}
  85. <Route path="/category/:_id" element={<CAdminGoodsPageContainer />} />
  86. <Route path="/good/:_id" element={<CGoodPageContainer />} />
  87. <Route path="/goods/search" element={<CAdminGoodsSearchPageContainer />} />
  88. <Route
  89. path="/admin/*"
  90. exact
  91. element={
  92. <CProtectedRoute roles={["admin"]} fallback="/auth">
  93. <AdminLayoutPage />
  94. </CProtectedRoute>
  95. }
  96. />
  97. <Route
  98. path="/dashboard/"
  99. exact
  100. element={
  101. <CProtectedRoute roles={["active"]} fallback="/">
  102. <CDashboardPageContainer />
  103. </CProtectedRoute>
  104. }
  105. />
  106. <Route path="*" element={<Navigate to="/404" />} />
  107. </Routes>
  108. </Content>
  109. </Grid>
  110. </Grid>
  111. <Footer />
  112. </Box>
  113. );
  114. };