[250930] feat: cart관련 redux추가 , BuyOption 포커스 수정

This commit is contained in:
2025-09-30 12:45:28 +09:00
parent ecb8a31284
commit 1108c1c525
8 changed files with 399 additions and 13 deletions

View File

@@ -0,0 +1,193 @@
import { URLS } from "../api/apiConfig";
import { TAxios } from "../api/TAxios";
import { types } from "./actionTypes";
/**
* 회원 장바구니 정보 조회
* @param {Object} props - { mbrNo: 회원번호 }
*/
export const getMyInfoCartSearch = (props) => (dispatch, getState) => {
const { mbrNo } = props;
const onSuccess = (response) => {
console.log("getMyInfoCartSearch onSuccess: ", response.data);
dispatch({
type: types.GET_MY_INFO_CART_SEARCH,
payload: response.data.data,
});
};
const onFail = (error) => {
console.error("getMyInfoCartSearch OnFail: ", error);
// 실패 시에도 빈 데이터로 초기화
dispatch({
type: types.GET_MY_INFO_CART_SEARCH,
payload: { cartList: [] },
});
};
// API URL이 정의되어 있지 않은 경우 임시로 빈 데이터 반환
if (!URLS.GET_MY_INFO_CART_SEARCH) {
console.warn("GET_MY_INFO_CART_SEARCH URL이 정의되지 않았습니다.");
dispatch({
type: types.GET_MY_INFO_CART_SEARCH,
payload: { cartList: [] },
});
return;
}
TAxios(
dispatch,
getState,
"get",
URLS.GET_MY_INFO_CART_SEARCH,
{ mbrNo },
{},
onSuccess,
onFail
);
};
/**
* 장바구니에 상품 추가
* @param {Object} props - 장바구니 상품 정보
*/
export const addToCart = (props) => (dispatch, getState) => {
const { mbrNo, patnrId, prdtId, prodOptCdCval, prodQty } = props;
const onSuccess = (response) => {
console.log("addToCart onSuccess: ", response.data);
dispatch({
type: types.ADD_TO_CART,
payload: response.data.data,
});
// 장바구니 목록 재조회
dispatch(getMyInfoCartSearch({ mbrNo }));
};
const onFail = (error) => {
console.error("addToCart OnFail: ", error);
};
// API URL이 정의되어 있지 않은 경우 로컬 상태만 업데이트
if (!URLS.ADD_TO_CART) {
console.warn("ADD_TO_CART URL이 정의되지 않았습니다.");
dispatch({
type: types.ADD_TO_CART,
payload: { patnrId, prdtId, prodOptCdCval, prodQty },
});
return;
}
TAxios(
dispatch,
getState,
"post",
URLS.ADD_TO_CART,
{},
{ mbrNo, patnrId, prdtId, prodOptCdCval, prodQty },
onSuccess,
onFail
);
};
/**
* 장바구니에서 상품 제거
* @param {Object} props - { mbrNo, cartSno }
*/
export const removeFromCart = (props) => (dispatch, getState) => {
const { mbrNo, cartSno } = props;
const onSuccess = (response) => {
console.log("removeFromCart onSuccess: ", response.data);
dispatch({
type: types.REMOVE_FROM_CART,
payload: { cartSno },
});
// 장바구니 목록 재조회
dispatch(getMyInfoCartSearch({ mbrNo }));
};
const onFail = (error) => {
console.error("removeFromCart OnFail: ", error);
};
if (!URLS.REMOVE_FROM_CART) {
console.warn("REMOVE_FROM_CART URL이 정의되지 않았습니다.");
dispatch({
type: types.REMOVE_FROM_CART,
payload: { cartSno },
});
return;
}
TAxios(
dispatch,
getState,
"delete",
URLS.REMOVE_FROM_CART,
{ mbrNo, cartSno },
{},
onSuccess,
onFail
);
};
/**
* 장바구니 상품 수량 업데이트
* @param {Object} props - { mbrNo, cartSno, prodQty }
*/
export const updateCartItem = (props) => (dispatch, getState) => {
const { mbrNo, cartSno, prodQty } = props;
const onSuccess = (response) => {
console.log("updateCartItem onSuccess: ", response.data);
dispatch({
type: types.UPDATE_CART_ITEM,
payload: { cartSno, prodQty },
});
// 장바구니 목록 재조회
dispatch(getMyInfoCartSearch({ mbrNo }));
};
const onFail = (error) => {
console.error("updateCartItem OnFail: ", error);
};
if (!URLS.UPDATE_CART_ITEM) {
console.warn("UPDATE_CART_ITEM URL이 정의되지 않았습니다.");
dispatch({
type: types.UPDATE_CART_ITEM,
payload: { cartSno, prodQty },
});
return;
}
TAxios(
dispatch,
getState,
"put",
URLS.UPDATE_CART_ITEM,
{},
{ mbrNo, cartSno, prodQty },
onSuccess,
onFail
);
};
/**
* 장바구니 전체 비우기
*/
export const clearCart = () => (dispatch) => {
dispatch({
type: types.CLEAR_CART,
});
};