Parcourir la source

rtk_cartgoods start

Gennadysht il y a 2 ans
Parent
commit
8085f7b843

+ 3 - 2
src/App.js

@@ -3,7 +3,7 @@ import { configureStore } from '@reduxjs/toolkit';
 import { Router, Route, Switch } from 'react-router-dom';
 import { createBrowserHistory } from "history";
 import { Provider } from 'react-redux';
-import { authReducer, promiseReducer, actionAuthLogin, frontEndReducer, actionRootCats, goodsReducer, cartReducer, actionRestoreCart } from './reducers';
+import { authReducer, promiseReducer, actionAuthLogin, frontEndReducer, actionRootCats, goodsReducer, cartReducer, actionRestoreCart, cartGoodsReducer } from './reducers';
 import { CGood, CGoodsList, CLoginForm, CMainAppBar, COrder, COrdersList, exampleOrder, goodsExample, GoodsList, MyLink, Order } from "./Components";
 import { CLogout } from './Components';
 import { CSidebar } from './Components/Sidebar';
@@ -25,7 +25,8 @@ export const store = configureStore({
     category: categoryReducer,
     orders: ordersReducer,
     goods: goodsReducer,
-    cart: cartReducer
+    cart: cartReducer,
+    cartData: cartGoodsReducer
   }
 });
 store.subscribe(() => console.log(store.getState()))

+ 3 - 2
src/Components/Cart.js

@@ -34,9 +34,10 @@ const Cart = ({ goods, goodsData, uniqueId, loadData }) => {
     )
 }
 const CCart = connect(state => ({
-    goods: state.cart.goods,
+    /*goods: state.cart.goods,
     goodsData: state.goods?.goods?.payload,
-    uniqueId: state.cart.uniqueId,
+    uniqueId: state.cart.uniqueId,*/
+    ...getCart(state) 
     //cart: getCart(state) 
 }),
     { loadData: actionLoadCart })(Cart);

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 52
src/reducers/_cartReducer.js


+ 30 - 0
src/reducers/cartGoodsReducer.js

@@ -0,0 +1,30 @@
+import { gqlGoodFind } from "../gql";
+import { actionPromiseGeneric, createPromiseReducerSlice } from "./promiseReducer";
+
+let actionCartGoodsFindInt = (dispatch, goods) => {
+    return dispatch(
+        actionGetCartGoods({ _id: { "$in": goods.map(g => g._id) } }));
+}
+
+const goodsData="goodsData";
+const actionGetCartGoods = (goodsQuery) =>
+    actionPromiseCartGoods(goodsData, gqlGoodFind(undefined, undefined, null, goodsQuery));
+
+let actionLoadCart = () =>
+    async (dispatch, getState) => {
+        let state = getState();
+        let goods = state.cart.goods;
+        if (goods?.length > 0) {
+            actionCartGoodsFindInt(dispatch, goods);
+        }
+    }
+
+let getCartData = state => {
+    return state.cartData[goodsData];
+}
+
+const cartGoodsReducerSlice = createPromiseReducerSlice('cartData');
+const actionPromiseCartGoods = (name, promise) =>
+    actionPromiseGeneric(cartGoodsReducerSlice, name, promise);
+let cartGoodsReducer = cartGoodsReducerSlice.reducer;
+export { cartGoodsReducer, actionLoadCart, getCartData }

+ 5 - 30
src/reducers/cartReducer.js

@@ -1,9 +1,7 @@
 import { createSlice } from "@reduxjs/toolkit"
-import { actionGoodFind } from "./goodsReducer";
 import { v4 } from "uuid";
 import { findObjectIndexById } from "../utills";
-
-
+import { getCartData } from "./cartGoodsReducer";
 
 const cartReducerSlice = createSlice({ //promiseReducer
     name: 'cart', //префикс типа наподобие AUTH_
@@ -64,12 +62,10 @@ const cartReducerSlice = createSlice({ //promiseReducer
 })
 
 let cartReducer = cartReducerSlice.reducer;
-let actionAddGoodToCart = good => {
-    let a = '';
-    return async (dispatch, state) => {
+let actionAddGoodToCart = good =>
+    async (dispatch, state) => {
         dispatch(cartReducerSlice.actions.addGood({ good }))
     }
-}
 
 let actionDeleteGoodFromCart = good =>
     async dispatch => {
@@ -85,31 +81,10 @@ let actionClearCart = () =>
         dispatch(cartReducerSlice.actions.cleanCart({}))
     }
 
-let actionGoodFindInt = (dispatch, goods) => {
-    return dispatch(
-        actionGoodFind(undefined, undefined, null,
-        {_id: { "$in": goods.map(g => g._id) }}
-    ));
-    //return dispatch(cartReducerSlice.actions.refreshCart());
-}
-let actionLoadCart = () =>
-    async (dispatch, getState) => {
-        let state = getState();
-        let goods = state.cart.goods;
-        if (goods?.length > 0) {
-            actionGoodFindInt(dispatch, goods);
-            /*
-            dispatch(actionGoodFind(undefined, undefined, null,
-                { "$in": goods.map(g => g._id) }
-            ));
-            */
-        }
-    }
-
 let getCart = state => {
     let res = {
         goods: state.cart.goods,
-        goodsData: state.cart.goods?.goods,
+        goodsData: (state.cartData?.goodsData?.payload ?? []),
         uniqueId: state.cart.uniqueId,
     };
     return res;
@@ -118,6 +93,6 @@ let getCart = state => {
 
 export {
     cartReducer,
-    actionLoadCart, getCart, 
+    getCart,
     actionAddGoodToCart, actionDeleteGoodFromCart, actionRestoreCart, actionClearCart
 };

+ 2 - 1
src/reducers/index.js

@@ -1,6 +1,7 @@
 export { promiseReducer, actionPromise, actionFulfilled, actionPending, actionRejected } from "./promiseReducer";
 export { authReducer, actionAuthLogin, actionAuthLogout, actionAuthLoginThunk } from "./authReducer";
-export {cartReducer, actionAddGoodToCart, actionDeleteGoodFromCart, actionRestoreCart, actionClearCart, actionLoadCart, getCart, } from "./cartReducer";
+export { cartReducer, actionAddGoodToCart, actionDeleteGoodFromCart, actionRestoreCart, actionClearCart, getCart, } from "./cartReducer";
+export { cartGoodsReducer, actionLoadCart } from "./cartGoodsReducer";
 export { localStoredReducer, } from "./localStoredReducer";
 export { frontEndReducer, } from "./frontEndReducer";
 export { actionRootCats, actionCategoryFindOne } from './categoryReducer';