Viewing File: /home/ubuntu/todaykat-frontend-base/src/components/store/reducers/ProductReducer.jsx

import {
  FETCH_PRODUCT_LIST_START,
  FETCH_PRODUCT_LIST_SUCCESS,
  FETCH_PRODUCT_LIST_FAILURE,
  FETCH_MORE_PRODUCT_LIST_START,
  FETCH_SINGLE_PRODUCT_START,
  FETCH_SINGLE_PRODUCT_SUCCESS,
  FETCH_SINGLE_PRODUCT_FAILURE,
  FETCH_PRODUCT_REVIEW_LIST_START,
  FETCH_PRODUCT_REVIEW_LIST_SUCCESS,
  FETCH_PRODUCT_REVIEW_LIST_FAILURE,
  FORCE_PRODUCT_LIST_SUCCESS,
  FETCH_PRODUCT_WISHLIST_LIST_START,
  FETCH_PRODUCT_WISHLIST_LIST_SUCCESS,
  FETCH_PRODUCT_WISHLIST_LIST_FAILURE,
  SAVE_WISHLIST_START,
  SAVE_WISHLIST_SUCCESS,
  SAVE_WISHLIST_FAILURE,
  FETCH_PRODUCT_SUGGETION_START,
  FETCH_PRODUCT_SUGGETION_FAILURE,
  FETCH_PRODUCT_SUGGETION_SUCCESS,
  FORCE_PRODUCT_WISHLIST_LIST_SUCCESS,
  FORCE_FETCH_PRODUCT_REVIEW_LIST_SUCCESS,
  FETCH_MORE_PRODUCT_REVIEW_LIST_START,
} from "../actions/ActionConstant";


const initialState = {
  productList: {
    data: {
      products: [],
      total_products: 0,
      total_in_stock_products: 0,
      total_out_of_stock_products: 0,
    },
    loading: true,
    error: false,
    buttonDisable: false,
    loadingButtonContent: null,
  },
  singleProduct: {
    data: {},
    loading: true,
    error: false,
    buttonDisable: false,
    loadingButtonContent: null,
  },
  productReviews: {
    data: {
      reviews: [],
      total_reviews: 0,
    },
    loading: true,
    loadMore: false,
    error: false,
    buttonDisable: false,
    loadingButtonContent: null,
  },
  productWishlists: {
    data: {
      products: [],
      total_products: 0,
    },
    loading: true,
    error: false,
    buttonDisable: false,
    loadingButtonContent: null,
  },
  wishlistSave: {
    data: {},
    loading: true,
    error: false,
    loadingButtonContent: "",
    buttonDisable: false
  },
  productSuggetions: {
    data: {},
    loading: true,
    error: false,
  },
};

const ProductReducer = (state = initialState, action) => {
  switch (action.type) {
    case FETCH_PRODUCT_LIST_START:
      return {
        ...state,
        productList: {
          data: {
            ...state.productList.data,
            products: [],
            total_products: 0,
          },
          loading: true,
          error: false,
          buttonDisable: true,
          loadingButtonContent: "Loading",
        },
      };
    case FETCH_MORE_PRODUCT_LIST_START:
      return state;
    case FETCH_PRODUCT_LIST_SUCCESS:
      return {
        ...state,
        productList: {
          data: {
            products: [...state.productList.data.products, ...action.data.products],
            total_products: action.data.total_products,
            total_in_stock_products: action.data.total_in_stock_products,
            total_out_of_stock_products: action.data.total_out_of_stock_products,
          },
          loading: false,
          error: false,
          buttonDisable: false,
          loadingButtonContent: null,
        },
      };
    case FORCE_PRODUCT_LIST_SUCCESS:
      return {
        ...state,
        productList: {
          data: action.data,
          loading: false,
          error: false,
          buttonDisable: false,
          loadingButtonContent: null,
        },
      }
    case FETCH_PRODUCT_LIST_FAILURE:
      return {
        ...state,
        productList: {
          data: state.productList.data,
          loading: false,
          error: action.error,
          buttonDisable: false,
          loadingButtonContent: null,
        }
      };
    case FETCH_SINGLE_PRODUCT_START:
      return {
        ...state,
        singleProduct: {
          data: {},
          loading: true,
          error: false,
          buttonDisable: true,
          loadingButtonContent: "Loading",
        },
      };
    case FETCH_SINGLE_PRODUCT_SUCCESS:
      return {
        ...state,
        singleProduct: {
          data: action.data,
          loading: false,
          error: false,
          buttonDisable: false,
          loadingButtonContent: null,
        },
      };
    case FETCH_SINGLE_PRODUCT_FAILURE:
      return {
        ...state,
        singleProduct: {
          data: {},
          loading: false,
          error: action.error,
          buttonDisable: false,
          loadingButtonContent: null,
        },
      };
    case FETCH_PRODUCT_REVIEW_LIST_START:
      return {
        ...state,
        productReviews: {
          data: {
            reviews: [],
            total_reviews: 0,
          },
          loading: true,
          loadMore: false,
          error: false,
          buttonDisable: true,
          loadingButtonContent: "Loading",
        }
      };
    case FETCH_MORE_PRODUCT_REVIEW_LIST_START:
      return {
        ...state,
        productReviews: {
          ...state.productReviews,
          loadMore: true,
        }
      }
    case FORCE_FETCH_PRODUCT_REVIEW_LIST_SUCCESS:
      return {
        ...state,
        productReviews: {
          data: action.data,
          loading: false,
          loadMore: false,
          error: false,
          buttonDisable: false,
          loadingButtonContent: "Loading",
        }
      }
    case FETCH_PRODUCT_REVIEW_LIST_SUCCESS:
      return {
        ...state,
        productReviews: {
          data: {
            reviews: [...state.productReviews.data.reviews, ...action.data.reviews],
            total_reviews: action.data.total_reviews,
          },
          loading: false,
          loadMore: false,
          error: false,
          buttonDisable: false,
          loadingButtonContent: "Loading",
        }
      };
    case FETCH_PRODUCT_REVIEW_LIST_FAILURE:
      return {
        ...state,
        productReviews: {
          data: state.productReviews.data,
          loading: false,
          loadMore: false,
          error: action.error,
          buttonDisable: false,
          loadingButtonContent: null,
        }
      };
    case FETCH_PRODUCT_WISHLIST_LIST_START:
      return {
        ...state,
        productWishlists: {
          data: {
            products: [],
            total_products: 0,
          },
          loading: true,
          error: false,
          buttonDisable: true,
          loadingButtonContent: "Loading",
        }
      };
    case FETCH_PRODUCT_WISHLIST_LIST_SUCCESS:
      return {
        ...state,
        productWishlists: {
          data: {
            products: [...state.productWishlists.data.products, ...action.data.products],
            total_products: action.data.total_products,
          },
          loading: false,
          error: false,
          buttonDisable: false,
          loadingButtonContent: null,
        }
      };
    case FORCE_PRODUCT_WISHLIST_LIST_SUCCESS:
      return {
        ...state,
        productWishlists: {
          data: action.data,
          loading: false,
          error: false,
          buttonDisable: false,
          loadingButtonContent: null,
        }
      }
    case FETCH_PRODUCT_WISHLIST_LIST_FAILURE:
      return {
        ...state,
        productWishlists: {
          data: state.productWishlists.data,
          loading: false,
          error: action.error,
          buttonDisable: false,
          loadingButtonContent: null,
        }
      };
    case SAVE_WISHLIST_START:
      return {
        ...state,
        wishlistSave: {
          data: action.data,
          loading: true,
          error: false,
          loadingButtonContent: "Uploading....",
          buttonDisable: true
        },
      };
    case SAVE_WISHLIST_SUCCESS:
      return {
        ...state,
        wishlistSave: {
          data: action.data,
          loading: false,
          error: false,
          loadingButtonContent: null,
          buttonDisable: false
        },
      };
    case SAVE_WISHLIST_FAILURE:
      return {
        ...state,
        wishlistSave: {
          data: {},
          loading: false,
          error: action.error,
          loadingButtonContent: null,
          buttonDisable: false
        },
      };
    case FETCH_PRODUCT_SUGGETION_START:
      return {
        ...state,
        productSuggetions: {
          data: {},
          loading: true,
          error: false,
        }
      };
    case FETCH_PRODUCT_SUGGETION_SUCCESS:
      return {
        ...state,
        productSuggetions: {
          data: action.data,
          loading: false,
          error: false,
        }
      };
    case FETCH_PRODUCT_SUGGETION_FAILURE:
      return {
        ...state,
        productSuggetions: {
          data: {},
          loading: false,
          error: action.error,
        }
      };
    default:
      return state;
  }
}

export default ProductReducer;
Back to Directory File Manager