[251122] fix: DetailPanel Theme,Hotels - 1
🕐 커밋 시간: 2025. 11. 22. 21:21:31 📊 변경 통계: • 총 파일: 10개 • 추가: +76줄 • 삭제: -19줄 📁 추가된 파일: + com.twin.app.shoptime/HOTEL_UI_HANDLING_REPORT.md + com.twin.app.shoptime/HOTEL_UI_VISUAL_GUIDE.md + com.twin.app.shoptime/THEME_PRODUCT_UI_ANALYSIS.md + com.twin.app.shoptime/THEME_PRODUCT_VISUAL_GUIDE.md + com.twin.app.shoptime/THEME_VS_HOTEL_COMPARISON.md + com.twin.app.shoptime/docs/todo/251122-detailpanel-diff.md 📝 수정된 파일: ~ com.twin.app.shoptime/src/api/TAxios.js ~ com.twin.app.shoptime/src/views/DetailPanel/DetailPanel.jsx ~ com.twin.app.shoptime/src/views/DetailPanel/ProductAllSection/ProductAllSection.jsx ~ com.twin.app.shoptime/src/views/DetailPanel/ProductAllSection/ProductAllSection.module.less 🔧 함수 변경 내용: 📄 com.twin.app.shoptime/src/views/DetailPanel/ProductAllSection/ProductAllSection.jsx (javascript): ✅ Added: extractProductMeta() 🔄 Modified: SpotlightContainerDecorator() ❌ Deleted: SpotlightContainerDecorator() 📄 com.twin.app.shoptime/HOTEL_UI_HANDLING_REPORT.md (md파일): ✅ Added: useEffect(), dispatch(), ThemeProduct(), setLabel(), Map(), forEach(), filter(), findIndex(), setAmenitiesInfos(), setSelectedIndex() 📄 com.twin.app.shoptime/HOTEL_UI_VISUAL_GUIDE.md (md파일): ✅ Added: DetailPanel(), getThemeCurationDetailInfo(), getThemeHotelDetailInfo(), getMainCategoryDetail(), THeader(), TBody(), ThemeProduct(), Container(), rating(), TButton(), YouMayLike(), MobileSendPopUp(), selectedIndex(), setSelectedIndex(), ellipsis(), amenitiesBox(), c70850(), handleSMSClick(), dispatch(), clearThemeDetail() 📄 com.twin.app.shoptime/THEME_PRODUCT_UI_ANALYSIS.md (md파일): ✅ Added: getThemeCurationDetailInfo(), productData(), Container(), ShowSingleOption(), ShowUnableOption(), useState(), useEffect(), setSelectedImage(), useMemo(), dispatch(), startVideoPlayer(), productDescription(), setTimeout(), useCallback(), isProductSoldOut(), ProductOption(), setSelectedIndex() 📄 com.twin.app.shoptime/THEME_PRODUCT_VISUAL_GUIDE.md (md파일): ✅ Added: ShowProduct(), Container(), optionContainer(), ShowSingleOption(), ProductOption(), ShowUnableOption(), UnableOption(), selectedIndex(), setSelectedIndex(), descriptionClick(), setTabLabel(), setDescription(), dispatch(), handleIndicatorOptions(), handleSMSClick(), handleMobileSendPopupOpen(), setImageSelectedIndex(), StarRating(), ProductTag(), SingleOption() 📄 com.twin.app.shoptime/THEME_VS_HOTEL_COMPARISON.md (md파일): ✅ Added: Product(), UnableOption(), StarRating(), dispatch(), getThemeCurationDetailInfo(), getThemeHotelDetailInfo() 🔧 주요 변경 내용: • API 서비스 레이어 개선 • 개발 문서 및 가이드 개선
This commit is contained in:
@@ -80,6 +80,29 @@ export default function DetailPanel({ panelInfo, isOnTop, spotlightId }) {
|
||||
() => fp.pipe(() => panelInfo, fp.get('bgVideoInfo'), fp.defaultTo(null))(),
|
||||
[panelInfo]
|
||||
);
|
||||
const hasThemeContents = useMemo(
|
||||
() =>
|
||||
fp.pipe(
|
||||
() => ({ panelType, themeData }),
|
||||
({ panelType, themeData }) =>
|
||||
panelType === 'theme' &&
|
||||
fp.pipe(
|
||||
() => themeData,
|
||||
fp.get('productInfos'),
|
||||
(list) => Array.isArray(list) && list.length > 0
|
||||
)()
|
||||
)(),
|
||||
[panelType, themeData]
|
||||
);
|
||||
const themeProducts = useMemo(
|
||||
() =>
|
||||
fp.pipe(
|
||||
() => themeData,
|
||||
fp.get('productInfos'),
|
||||
(list) => (Array.isArray(list) ? list : [])
|
||||
)(),
|
||||
[themeData]
|
||||
);
|
||||
const panelShouldReload = useMemo(
|
||||
() => fp.pipe(() => panelInfo, fp.get('shouldReload'), fp.defaultTo(false))(),
|
||||
[panelInfo]
|
||||
@@ -775,6 +798,21 @@ export default function DetailPanel({ panelInfo, isOnTop, spotlightId }) {
|
||||
}
|
||||
}, [getProductType, productData, themeData, panelType]);
|
||||
|
||||
// Theme 콘텐츠 진입 시 전달된 themePrdtId를 초기 선택으로 반영
|
||||
useEffect(() => {
|
||||
if (panelType !== 'theme') return;
|
||||
|
||||
if (Array.isArray(themeProducts) && panelInfo?.themePrdtId) {
|
||||
const matchedIndex = themeProducts.findIndex(
|
||||
(item) => item?.prdtId === panelInfo.themePrdtId
|
||||
);
|
||||
|
||||
if (matchedIndex >= 0) {
|
||||
setSelectedIndex(matchedIndex);
|
||||
}
|
||||
}
|
||||
}, [panelType, themeProducts, panelInfo?.themePrdtId, setSelectedIndex]);
|
||||
|
||||
// themeProductInfo 업데이트 - selectedIndex 변경 시마다 실행
|
||||
useEffect(() => {
|
||||
if (themeData?.productInfos && selectedIndex !== undefined) {
|
||||
@@ -965,6 +1003,8 @@ export default function DetailPanel({ panelInfo, isOnTop, spotlightId }) {
|
||||
productType={productType}
|
||||
productInfo={productDataSource}
|
||||
panelInfo={panelInfo}
|
||||
hasThemeContents={hasThemeContents}
|
||||
themeProducts={themeProducts}
|
||||
selectedIndex={selectedIndex}
|
||||
selectedPatnrId={panelPatnrId}
|
||||
selectedPrdtId={panelPrdtId}
|
||||
|
||||
Reference in New Issue
Block a user