[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

@@ -14,6 +14,7 @@ import Spotlight from '@enact/spotlight';
import SpotlightContainerDecorator
from '@enact/spotlight/SpotlightContainerDecorator';
import { addToCart } from '../../../actions/cartActions';
import { getMyInfoCheckoutInfo } from '../../../actions/checkoutActions';
import {
changeAppStatus,
@@ -365,16 +366,77 @@ const BuyOption = ({
logInfo,
]);
// [임시] ADD TO CART 버튼 클릭 시 toast 닫기
const handleAddToCartClick = () => {
console.log("[BuyOption] ADD TO CART clicked - closing toast (임시)");
// ADD TO CART 버튼 클릭 핸들러
const handleAddToCartClick = useCallback(() => {
console.log("[BuyOption] ADD TO CART clicked");
// 상품 품절 체크
if (productInfo && productInfo?.soldoutFlag === "Y") {
return;
}
// 로그인 체크
if (!userNumber || userNumber === "") {
return dispatch(setShowPopup(Config.ACTIVE_POPUP.loginPopup));
}
// 장바구니에 상품 추가
if (userNumber && selectedPatnrId && selectedPrdtId && quantity) {
const { prodOptCval, priceInfo } = selectedOptions || {};
const { patncNm, brndNm, catNm, prdtNm, prdtId } = productInfo;
const regularPrice = priceInfo?.split("|")[0];
const discountPrice = priceInfo?.split("|")[1];
const discountRate = priceInfo?.split("|")[4];
// 로그 전송
dispatch(
sendLogTotalRecommend({
nowMenu: nowMenu,
productId: prdtId,
productTitle: prdtNm,
partner: patncNm,
price: discountRate ? discountPrice : regularPrice,
discount: discountRate,
brand: brndNm,
productOption: prodOptCval || "",
category: catNm,
contextName: Config.LOG_CONTEXT_NAME.DETAILPAGE,
messageId: Config.LOG_MESSAGE_ID.ADD_TO_CART,
})
);
// 장바구니에 추가
dispatch(
addToCart({
mbrNo: userNumber,
patnrId: selectedPatnrId,
prdtId: selectedPrdtId,
prodOptCdCval: selectedOptions?.prodOptCdCval || null,
prodQty: quantity,
prodOptTpCdCval: productOptionInfos[0]?.prodOptTpCdCval,
})
);
// CartPanel로 이동
dispatch(
pushPanel({
name: Config.panel_names.CART_PANEL,
})
);
}
dispatch(clearAllToasts());
dispatch(
pushPanel({
name: Config.panel_names.CART_PANEL,
})
);
};
}, [
dispatch,
userNumber,
selectedPatnrId,
selectedPrdtId,
selectedOptions,
productInfo,
productOptionInfos,
quantity,
nowMenu,
]);
// 첫번째 옵션 선택 핸들러 (SingleOption과 동일)
const handleFirstOptionSelect = (selected) => {