index.js 5.0 KB

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