123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- import { Box, Container } from '@mui/material';
- import { useEffect } from 'react';
- import { connect, useDispatch, useSelector } from 'react-redux';
- import { Navigate, Route, Routes, useParams, useSearchParams } from 'react-router-dom';
- import { actionGoodById } from '../../../actions/actionGoodById';
- import { actionCatById } from '../../../actions/actionCatById';
- import { actionPromiseClear, store, actionFeedCats } from '../../../reducers';
- import { actionFeedAdd, actionFeedClear, actionFeedGoods, actionFeedOrders } from '../../../reducers/feedReducer';
- import { CProtectedRoute } from '../../common/ProtectedRoute';
- import { CAdminGoodPage } from '../AdminGoodPage';
- import { AdminGoodsPage } from '../AdminGoodsPage';
- import { AdminCategoriesPage } from '../AdminCategoriesPage';
- import { CAdminCategoryPage } from '../AdminCategoryPage';
- import { AdminOrdersPage } from '../AdminOrdersPage';
- import { CAdminOrderPage } from '../AdminOrderPage';
- import { actionOrderById } from '../../../actions/actionOrderById';
- import { actionCatAll } from '../../../actions/actionCatAll';
- import { actionGoodsAll } from '../../../actions/actionGoodsAll';
- const AdminCategoryPageContainer = ({}) => {
- const dispatch = useDispatch();
- const params = useParams();
- dispatch(actionGoodsAll());
- useEffect(() => {
- if (params._id) {
- dispatch(actionCatById({ _id: params._id, promiseName: 'adminCatById' }));
- } else {
- dispatch(actionPromiseClear('adminCatById'));
- }
- }, [params._id]);
- return <CAdminCategoryPage />;
- };
- const AdminCategoriesPageContainer = ({ cats }) => {
- const dispatch = useDispatch();
- const [searchParams] = useSearchParams();
- const orderBy = searchParams.get('orderBy') || '_id';
- useEffect(() => {
- dispatch(actionFeedClear());
- dispatch(actionPromiseClear('feedCatAll'));
- dispatch(actionPromiseClear('categoryUpsert'));
- dispatch(actionFeedCats({ skip: 0, orderBy }));
- }, [orderBy]);
- useEffect(() => {
- dispatch(actionFeedCats({ skip: cats?.length || 0, orderBy }));
- window.onscroll = (e) => {
- if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {
- const {
- feed,
- promise: { feedCatAll },
- } = store.getState();
- if (feedCatAll.status !== 'PENDING') {
- dispatch(actionFeedCats(feed.payload?.length || 0, orderBy));
- }
- }
- };
- return () => {
- dispatch(actionFeedClear());
- dispatch(actionPromiseClear('feedCatAll'));
- dispatch(actionPromiseClear('categoryUpsert'));
- window.onscroll = null;
- };
- }, []);
- useEffect(() => {
- if (cats.length) dispatch(actionFeedAdd(cats));
- }, [cats]);
- return <AdminCategoriesPage orderBy={orderBy} />;
- };
- const AdminGoodPageContainer = () => {
- const params = useParams();
- const dispatch = useDispatch();
- dispatch(actionCatAll());
- useEffect(() => {
- if (params._id) {
- dispatch(actionGoodById({ _id: params._id, promiseName: 'adminGoodById' }));
- } else {
- dispatch(actionPromiseClear('adminGoodById'));
- }
- }, [params._id]);
- return <CAdminGoodPage />;
- };
- const AdminGoodsPageContainer = ({ goods }) => {
- const dispatch = useDispatch();
- const [searchParams] = useSearchParams();
- const orderBy = searchParams.get('orderBy') || '_id';
- useEffect(() => {
- dispatch(actionFeedClear());
- dispatch(actionPromiseClear('feedGoodsAll'));
- dispatch(actionPromiseClear('goodUpsert'));
- dispatch(actionFeedGoods({ skip: 0, orderBy }));
- }, [orderBy]);
- useEffect(() => {
- dispatch(actionFeedGoods({ skip: goods?.length || 0, orderBy }));
- window.onscroll = (e) => {
- if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {
- const {
- feed,
- promise: { feedGoodsAll },
- } = store.getState();
- if (feedGoodsAll.status !== 'PENDING') {
- dispatch(actionFeedGoods({ skip: feed.payload?.length || 0, orderBy }));
- }
- }
- };
- return () => {
- dispatch(actionFeedClear());
- dispatch(actionPromiseClear('feedGoodsAll'));
- dispatch(actionPromiseClear('goodUpsert'));
- window.onscroll = null;
- };
- }, []);
- useEffect(() => {
- if (goods?.length) store.dispatch(actionFeedAdd(goods));
- }, [goods]);
- return <AdminGoodsPage orderBy={orderBy} />;
- };
- const AdminOrdersPageContainer = ({ orders }) => {
- const dispatch = useDispatch();
- const [searchParams] = useSearchParams();
- const orderBy = searchParams.get('orderBy') || '_id';
- const status = searchParams.get('status') || 0;
- useEffect(() => {
- dispatch(actionFeedClear());
- dispatch(actionPromiseClear('feedOrdersAll'));
- dispatch(actionPromiseClear('orderUpsert'));
- dispatch(actionFeedOrders({ skip: 0, orderBy, status }));
- }, [orderBy, status]);
- useEffect(() => {
- dispatch(actionFeedOrders({ skip: orders?.length || 0, orderBy, status }));
- window.onscroll = (e) => {
- if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {
- const {
- feed,
- promise: { feedOrdersAll },
- } = store.getState();
- if (feedOrdersAll.status !== 'PENDING') {
- dispatch(actionFeedOrders({ skip: feed.payload?.length || 0, orderBy, status }));
- }
- }
- };
- return () => {
- dispatch(actionFeedClear());
- dispatch(actionPromiseClear('feedOrdersAll'));
- dispatch(actionPromiseClear('orderUpsert'));
- window.onscroll = null;
- };
- }, []);
- useEffect(() => {
- if (orders?.length) store.dispatch(actionFeedAdd(orders));
- }, [orders]);
- return <AdminOrdersPage orderBy={orderBy} />;
- };
- const AdminOrderPageContainer = () => {
- const params = useParams();
- const dispatch = useDispatch();
- dispatch(actionPromiseClear('adminOrderById'));
- dispatch(actionGoodsAll());
- useEffect(() => {
- if (params._id) {
- dispatch(actionOrderById({ _id: params._id, promiseName: 'adminOrderById' }));
- } else {
- dispatch(actionOrderById('adminOrderById'));
- }
- }, [params._id]);
- return <CAdminOrderPage />;
- };
- const CAdminGoodsPageContainer = connect((state) => ({ goods: state.promise?.feedGoodsAll?.payload || [] }))(
- AdminGoodsPageContainer
- );
- const CAdminOrdersPageContainer = connect((state) => ({ orders: state.promise?.feedOrdersAll?.payload || [] }))(
- AdminOrdersPageContainer
- );
- const CAdminCategoriesPageContainer = connect((state) => ({ cats: state.promise?.feedCatAll?.payload || [] }))(
- AdminCategoriesPageContainer
- );
- const AdminLayoutPage = () => {
- return (
- <Box className="AdminLayoutPage">
- <Routes>
- <Route path="/" element={<Navigate to={'/admin/goods/'} />} exact />
- <Route path="/goods/" element={<CAdminGoodsPageContainer />} />
- <Route path="/good/" element={<AdminGoodPageContainer />} />
- <Route path="/good/:_id" element={<AdminGoodPageContainer />} />
- <Route path="/categories/" element={<CAdminCategoriesPageContainer />} />
- <Route path="/category/" element={<AdminCategoryPageContainer />} />
- <Route path="/category/:_id" element={<AdminCategoryPageContainer />} />
- <Route path="/orders/" element={<CAdminOrdersPageContainer />} />
- <Route path="/order/" element={<AdminOrderPageContainer />} />
- <Route path="/order/:_id" element={<AdminOrderPageContainer />} />
- </Routes>
- </Box>
- );
- };
- export { AdminLayoutPage };
|