🕐 커밋 시간: 2025. 11. 24. 12:43:58 📊 변경 통계: • 총 파일: 40개 • 추가: +774줄 • 삭제: -581줄 📝 수정된 파일: ~ com.twin.app.shoptime/src/actions/appDataActions.js ~ com.twin.app.shoptime/src/actions/billingActions.js ~ com.twin.app.shoptime/src/actions/brandActions.js ~ com.twin.app.shoptime/src/actions/cancelActions.js ~ com.twin.app.shoptime/src/actions/cardActions.js ~ com.twin.app.shoptime/src/actions/cartActions.js ~ com.twin.app.shoptime/src/actions/checkoutActions.js ~ com.twin.app.shoptime/src/actions/commonActions.js ~ com.twin.app.shoptime/src/actions/convertActions.js ~ com.twin.app.shoptime/src/actions/couponActions.js ~ com.twin.app.shoptime/src/actions/deviceActions.js ~ com.twin.app.shoptime/src/actions/empActions.js ~ com.twin.app.shoptime/src/actions/eventActions.js ~ com.twin.app.shoptime/src/actions/forYouActions.js ~ com.twin.app.shoptime/src/actions/homeActions.js ~ com.twin.app.shoptime/src/actions/logActions.js ~ com.twin.app.shoptime/src/actions/mediaActions.js ~ com.twin.app.shoptime/src/actions/mockCartActions.js ~ com.twin.app.shoptime/src/actions/myPageActions.js ~ com.twin.app.shoptime/src/actions/onSaleActions.js ~ com.twin.app.shoptime/src/actions/orderActions.js ~ com.twin.app.shoptime/src/actions/panelActions.js ~ com.twin.app.shoptime/src/actions/panelNavigationActions.js ~ com.twin.app.shoptime/src/actions/pinCodeActions.js ~ com.twin.app.shoptime/src/actions/productActions.js ~ com.twin.app.shoptime/src/actions/queuedPanelActions.js ~ com.twin.app.shoptime/src/actions/searchActions.js ~ com.twin.app.shoptime/src/actions/shippingActions.js ~ com.twin.app.shoptime/src/actions/voiceActions.js ~ com.twin.app.shoptime/src/actions/webSpeechActions.js ~ com.twin.app.shoptime/src/reducers/localSettingsReducer.js ~ com.twin.app.shoptime/src/reducers/mediaOverlayReducer.js ~ com.twin.app.shoptime/src/reducers/mockCartReducer.js ~ com.twin.app.shoptime/src/reducers/playReducer.js ~ com.twin.app.shoptime/src/reducers/productReducer.js ~ com.twin.app.shoptime/src/reducers/videoOverlayReducer.js ~ com.twin.app.shoptime/src/views/UserReview/ShowUserReviews.jsx ~ com.twin.app.shoptime/src/views/UserReview/UserReviewPanel.jsx ~ com.twin.app.shoptime/src/views/UserReview/components/UserReviewsList.jsx ~ com.twin.app.shoptime/src/views/UserReview/components/VirtualScrollBar.jsx 🔧 함수 변경 내용: 📊 Function-level changes summary across 40 files: • Functions added: 14 • Functions modified: 34 • Functions deleted: 18 📋 By language: • javascript: 40 files, 66 function changes 🔧 주요 변경 내용: • 핵심 비즈니스 로직 개선 • 로깅 시스템 개선 • 설정 관리 시스템 개선 • UI 컴포넌트 아키텍처 개선
239 lines
6.0 KiB
JavaScript
239 lines
6.0 KiB
JavaScript
import { BUYNOW_CONFIG } from '../utils/BuyNowConfig';
|
|
import {
|
|
createMockCartListData,
|
|
createMockCartData,
|
|
addMockCartItem,
|
|
removeMockCartItem,
|
|
updateMockCartItemQuantity,
|
|
} from '../utils/BuyNowDataManipulator';
|
|
import { createDebugHelpers } from '../utils/debug';
|
|
|
|
// 디버그 헬퍼 설정
|
|
const DEBUG_MODE = false;
|
|
const { dlog, dwarn, derror } = createDebugHelpers(DEBUG_MODE);
|
|
|
|
// Mock Cart Action Types
|
|
export const MOCK_CART_TYPES = {
|
|
INIT_MOCK_CART: 'mockCart/INIT_MOCK_CART',
|
|
ADD_TO_MOCK_CART: 'mockCart/ADD_TO_MOCK_CART',
|
|
REMOVE_FROM_MOCK_CART: 'mockCart/REMOVE_FROM_MOCK_CART',
|
|
UPDATE_MOCK_CART_ITEM: 'mockCart/UPDATE_MOCK_CART_ITEM',
|
|
CLEAR_MOCK_CART: 'mockCart/CLEAR_MOCK_CART',
|
|
SET_MOCK_CART_QUANTITY: 'mockCart/SET_MOCK_CART_QUANTITY',
|
|
UPDATE_SELECTED_ITEMS: 'mockCart/UPDATE_SELECTED_ITEMS',
|
|
};
|
|
|
|
/**
|
|
* Mock 장바구니 초기화
|
|
* BuyOption에서 ADD TO CART 시 호출 - 기존 장바구니에 상품 추가
|
|
*/
|
|
export const initializeMockCart =
|
|
(productData, optionInfo = {}, quantity = 1) =>
|
|
(dispatch, getState) => {
|
|
if (!BUYNOW_CONFIG.isMockMode()) {
|
|
return;
|
|
}
|
|
|
|
dlog('[MockCartActions] initializeMockCart - productData:', productData);
|
|
|
|
// 기존 장바구니 데이터 확인
|
|
const currentCart = getState().mockCart.cartInfo || [];
|
|
dlog('[MockCartActions] initializeMockCart - current cart items:', currentCart.length);
|
|
|
|
// 새 상품 데이터 생성
|
|
const newCartItem = createMockCartData(productData, optionInfo, quantity);
|
|
|
|
if (newCartItem) {
|
|
// addToMockCart를 사용하여 기존 장바구니에 상품 추가 (덮어쓰기 방지)
|
|
dispatch(addToMockCart(productData, optionInfo, quantity));
|
|
} else {
|
|
dlog('[MockCartActions] initializeMockCart - Failed to create cart item');
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Mock 장바구니에 상품 추가
|
|
* @param {Object} productData - 상품 데이터
|
|
* @param {Object} optionInfo - 옵션 정보
|
|
* @param {number} quantity - 수량
|
|
*/
|
|
export const addToMockCart =
|
|
(productData, optionInfo = {}, quantity = 1) =>
|
|
(dispatch, getState) => {
|
|
if (!BUYNOW_CONFIG.isMockMode()) {
|
|
return;
|
|
}
|
|
|
|
dlog('[MockCartActions] addToMockCart - productData:', productData);
|
|
|
|
// Mock 장바구니 데이터 생성
|
|
const newCartItem = addMockCartItem(productData, optionInfo, quantity);
|
|
|
|
dispatch({
|
|
type: MOCK_CART_TYPES.ADD_TO_MOCK_CART,
|
|
payload: {
|
|
item: newCartItem,
|
|
lastAction: {
|
|
type: 'add',
|
|
data: newCartItem,
|
|
timestamp: Date.now(),
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Mock 장바구니에서 상품 제거
|
|
* @param {string} prodSno - 상품 고유번호
|
|
*/
|
|
export const removeFromMockCart = (prodSno) => (dispatch, getState) => {
|
|
if (!BUYNOW_CONFIG.isMockMode()) {
|
|
return;
|
|
}
|
|
|
|
dlog('[MockCartActions] removeFromMockCart - prodSno:', prodSno);
|
|
|
|
dispatch({
|
|
type: MOCK_CART_TYPES.REMOVE_FROM_MOCK_CART,
|
|
payload: {
|
|
prodSno,
|
|
lastAction: {
|
|
type: 'remove',
|
|
data: { prodSno },
|
|
timestamp: Date.now(),
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Mock 장바구니 상품 수량 업데이트
|
|
* @param {string} prodSno - 상품 고유번호
|
|
* @param {number} quantity - 새로운 수량
|
|
*/
|
|
export const updateMockCartItem = (prodSno, quantity) => (dispatch, getState) => {
|
|
if (!BUYNOW_CONFIG.isMockMode()) {
|
|
return;
|
|
}
|
|
|
|
dlog('[MockCartActions] updateMockCartItem - prodSno:', prodSno, 'quantity:', quantity);
|
|
|
|
const updatedItem = updateMockCartItemQuantity(prodSno, quantity);
|
|
|
|
dispatch({
|
|
type: MOCK_CART_TYPES.UPDATE_MOCK_CART_ITEM,
|
|
payload: {
|
|
item: updatedItem,
|
|
prodSno,
|
|
quantity,
|
|
lastAction: {
|
|
type: 'update',
|
|
data: { prodSno, quantity },
|
|
timestamp: Date.now(),
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Mock 장바구니 상품 수량 직접 설정
|
|
* @param {string} prodSno - 상품 고유번호
|
|
* @param {number} quantity - 설정할 수량
|
|
*/
|
|
export const setMockCartItemQuantity = (prodSno, quantity) => (dispatch, getState) => {
|
|
if (!BUYNOW_CONFIG.isMockMode()) {
|
|
return;
|
|
}
|
|
|
|
if (quantity <= 0) {
|
|
// 수량이 0이면 상품 제거
|
|
dispatch(removeFromMockCart(prodSno));
|
|
return;
|
|
}
|
|
|
|
dlog('[MockCartActions] setMockCartItemQuantity - prodSno:', prodSno, 'quantity:', quantity);
|
|
|
|
const updatedItem = updateMockCartItemQuantity(prodSno, quantity);
|
|
|
|
dispatch({
|
|
type: MOCK_CART_TYPES.SET_MOCK_CART_QUANTITY,
|
|
payload: {
|
|
item: updatedItem,
|
|
prodSno,
|
|
quantity,
|
|
lastAction: {
|
|
type: 'set_quantity',
|
|
data: { prodSno, quantity },
|
|
timestamp: Date.now(),
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Mock 장바구니 전체 비우기
|
|
*/
|
|
export const clearMockCart = () => (dispatch, getState) => {
|
|
if (!BUYNOW_CONFIG.isMockMode()) {
|
|
return;
|
|
}
|
|
|
|
dlog('[MockCartActions] clearMockCart');
|
|
|
|
dispatch({
|
|
type: MOCK_CART_TYPES.CLEAR_MOCK_CART,
|
|
payload: {
|
|
lastAction: {
|
|
type: 'clear',
|
|
timestamp: Date.now(),
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Mock 장바구니 데이터 재설정 (빈 장바구니로 복원)
|
|
*/
|
|
export const resetMockCart = () => (dispatch, getState) => {
|
|
if (!BUYNOW_CONFIG.isMockMode()) {
|
|
return;
|
|
}
|
|
|
|
dlog('[MockCartActions] resetMockCart - Clearing cart to empty');
|
|
|
|
// 빈 장바구니로 재설정 (기본 Mock 상품 없음)
|
|
dispatch({
|
|
type: MOCK_CART_TYPES.INIT_MOCK_CART,
|
|
payload: {
|
|
items: [], // 빈 배열로 재설정
|
|
lastAction: {
|
|
type: 'reset',
|
|
timestamp: Date.now(),
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 선택된 상품들 업데이트
|
|
* @param {Array} selectedItems - 선택된 상품들의 prodSno 배열
|
|
*/
|
|
export const updateSelectedItems = (selectedItems) => (dispatch, getState) => {
|
|
if (!BUYNOW_CONFIG.isMockMode()) {
|
|
return;
|
|
}
|
|
|
|
dlog('[MockCartActions] updateSelectedItems - selectedItems:', selectedItems);
|
|
|
|
dispatch({
|
|
type: MOCK_CART_TYPES.UPDATE_SELECTED_ITEMS,
|
|
payload: {
|
|
selectedItems,
|
|
lastAction: {
|
|
type: 'update_selected',
|
|
timestamp: Date.now(),
|
|
},
|
|
},
|
|
});
|
|
};
|