[디테일] 스타일 수정

- 스크롤시 하단으로 떨어지는부분에 대한 수정
 - 디테일 태그 및 노출 관련 부분에 대한 수정
 - qr하단  문구부분 스타일 수정.
 - 옵션부분 갯수 버튼 처리.
This commit is contained in:
junghoon86.park
2025-09-30 10:56:09 +09:00
parent 1f387f9327
commit f1b8edc965
10 changed files with 141 additions and 96 deletions

View File

@@ -14,7 +14,6 @@ import {
} from 'react-redux'; } from 'react-redux';
import Spinner from '@enact/sandstone/Spinner'; import Spinner from '@enact/sandstone/Spinner';
import DetailPanelSkeleton from './DetailPanelSkeleton/DetailPanelSkeleton';
import Spotlight from '@enact/spotlight'; import Spotlight from '@enact/spotlight';
import { setContainerLastFocusedElement } from '@enact/spotlight/src/container'; import { setContainerLastFocusedElement } from '@enact/spotlight/src/container';
@@ -44,9 +43,10 @@ import {
getQRCodeUrl, getQRCodeUrl,
} from '../../utils/helperMethods'; } from '../../utils/helperMethods';
import { SpotlightIds } from '../../utils/SpotlightIds'; import { SpotlightIds } from '../../utils/SpotlightIds';
import THeaderCustom from './components/THeaderCustom';
import DetailPanelBackground from './components/DetailPanelBackground'; import DetailPanelBackground from './components/DetailPanelBackground';
import THeaderCustom from './components/THeaderCustom';
import css from './DetailPanel.module.less'; import css from './DetailPanel.module.less';
import DetailPanelSkeleton from './DetailPanelSkeleton/DetailPanelSkeleton';
import ProductAllSection from './ProductAllSection/ProductAllSection'; import ProductAllSection from './ProductAllSection/ProductAllSection';
import ThemeItemListOverlay from './ThemeItemListOverlay/ThemeItemListOverlay'; import ThemeItemListOverlay from './ThemeItemListOverlay/ThemeItemListOverlay';
@@ -55,7 +55,9 @@ export default function DetailPanel({ panelInfo, isOnTop, spotlightId }) {
const productData = useSelector((state) => state.main.productData); const productData = useSelector((state) => state.main.productData);
const youmaylikeData = useSelector((state) => state.main.youmaylikeData); const youmaylikeData = useSelector((state) => state.main.youmaylikeData);
const themeProductInfos = useSelector((state) => state.home.themeCurationDetailInfoData); const themeProductInfos = useSelector(
(state) => state.home.themeCurationDetailInfoData
);
const isLoading = useSelector((state) => const isLoading = useSelector((state) =>
fp.pipe(() => state, fp.get("common.appStatus.showLoadingPanel.show"))() fp.pipe(() => state, fp.get("common.appStatus.showLoadingPanel.show"))()
); );
@@ -694,10 +696,10 @@ export default function DetailPanel({ panelInfo, isOnTop, spotlightId }) {
}, []); }, []);
return ( return (
<div ref={containerRef} style={{ position: 'relative', width: '100%', height: '100%' }}> <div ref={containerRef}>
{/* 배경 이미지 및 그라데이션 컴포넌트 - 모든 콘텐츠 뒤에 렌더링 */} {/* 배경 이미지 및 그라데이션 컴포넌트 - 모든 콘텐츠 뒤에 렌더링 */}
<DetailPanelBackground /> <DetailPanelBackground />
<TPanel <TPanel
isTabActivated={false} isTabActivated={false}
className={css.detailPanelWrap} className={css.detailPanelWrap}

View File

@@ -7,7 +7,7 @@
position: relative; position: relative;
z-index: 1; // 배경 컴포넌트(z-index: 0) 위에 표시 z-index: 1; // 배경 컴포넌트(z-index: 0) 위에 표시
background: transparent !important; // 투명 배경으로 설정하여 뒤의 배경 컴포넌트가 보이도록 background: transparent !important; // 투명 배경으로 설정하여 뒤의 배경 컴포넌트가 보이도록
height: 100%;
// 하위 요소들도 투명 배경 (detailPanelWrap 스코프 내에서만 적용) // 하위 요소들도 투명 배경 (detailPanelWrap 스코프 내에서만 적용)
> * { > * {
background: transparent !important; background: transparent !important;

View File

@@ -230,8 +230,11 @@
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
> div:last-child { > div {
margin-left: 10px; margin-left: 10px;
&:first-child {
margin-left: 0px;
}
} }
} }
@@ -971,7 +974,7 @@
flex: 1 1 0 !important; flex: 1 1 0 !important;
width: auto !important; width: auto !important;
height: 60px !important; height: 60px !important;
background: rgba(68, 68, 68, 0.50) !important; background: rgba(68, 68, 68, 0.5) !important;
border-radius: 6px !important; border-radius: 6px !important;
border: none !important; border: none !important;
padding: 0 !important; padding: 0 !important;
@@ -1002,7 +1005,7 @@
flex: 1 1 0 !important; flex: 1 1 0 !important;
width: auto !important; width: auto !important;
height: 60px !important; height: 60px !important;
background: rgba(68, 68, 68, 0.50) !important; background: rgba(68, 68, 68, 0.5) !important;
border-radius: 6px !important; border-radius: 6px !important;
border: none !important; border: none !important;
padding: 0 !important; padding: 0 !important;

View File

@@ -65,11 +65,12 @@ export default function QRCode({
qrCodeUrl && <TQRCode text={qrCodeUrl} width="190" height="190" /> qrCodeUrl && <TQRCode text={qrCodeUrl} width="190" height="190" />
)} )}
{/* todo : 시나리오,UI 릴리즈 후 */} {/* todo : 시나리오,UI 릴리즈 후 */}
{/* <div className={css.tooltip}> <div className={css.tooltip}>
<div className={css.tooltipBody}> <div className={css.tooltipBody}>
{promotionCode ? promotionTooltip : tooltipDes} {/* {promotionCode ? promotionTooltip : tooltipDes} */}
Scan for more information about the product.
</div> </div>
</div> */} </div>
</div> </div>
); );
} }

View File

@@ -15,4 +15,29 @@
height: 240px; height: 240px;
} }
} }
.tooltip {
margin-top: 10px;
width: 240px;
height: 60px;
background: #000;
color: #fff;
padding: 10px;
border-radius: 4px;
position: relative;
}
.tooltipBody {
&::before {
border: 15px solid transparent;
border-bottom-color: #000;
content: "";
left: calc(50% - 15px);
position: absolute;
top: -28px;
z-index: 1;
}
height: 44px;
font-size: 20px;
line-height: 22px;
letter-spacing: -1px;
}
} }

View File

@@ -40,7 +40,7 @@ import FavoriteBtn from '../components/FavoriteBtn';
import styles from './BuyOption.module.less'; import styles from './BuyOption.module.less';
import BuyOptionPriceBlock from './BuyOptionPriceBlock'; import BuyOptionPriceBlock from './BuyOptionPriceBlock';
import CustomDropDown from './CustomDropDown'; import CustomDropDown from './CustomDropDown';
import ProductEa from './ProductEa'; import ProductQuantity from './ProductQuantity';
const Container = SpotlightContainerDecorator( const Container = SpotlightContainerDecorator(
{ spotlightRestrict: "self-only" }, { spotlightRestrict: "self-only" },
@@ -592,7 +592,7 @@ const BuyOption = ({
onSelect={handleQuantitySelect} onSelect={handleQuantitySelect}
spotlightId="buy-option-quantity-dropdown" spotlightId="buy-option-quantity-dropdown"
/> */} /> */}
<ProductEa /> <ProductQuantity />
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,54 +0,0 @@
import React, {
useCallback,
useState,
} from 'react';
import SpotlightContainerDecorator
from '@enact/spotlight/SpotlightContainerDecorator';
import decreaseBtnDim
from '../../../../assets/images/btn/btn-quantity-decrease-dim_new@3x.png';
import decreaseBtnFoc
from '../../../../assets/images/btn/btn-quantity-decrease-foc@3x.png';
import decreaseBtnNor
from '../../../../assets/images/btn/btn-quantity-decrease-nor@3x.png';
import increaseBtnDim
from '../../../../assets/images/btn/btn-quantity-increase-dim@3x.png';
import increaseBtnFoc
from '../../../../assets/images/btn/btn-quantity-increase-foc@3x.png';
import increaseBtnNor
from '../../../../assets/images/btn/btn-quantity-increase-nor@3x.png';
import CustomImage from '../../../components/CustomImage/CustomImage';
import css from './ProductEa.module.less';
const ProductEa = () => {
const Container = SpotlightContainerDecorator("div");
const [ea, setEa] = useState(1);
const minusClick = useCallback(() => {
if (ea > 1) {
setEa(ea - 1);
}
}, [ea]);
const plusClick = useCallback(() => {
setEa(ea + 1);
}, [ea]);
return (
<Container className={css.container}>
<CustomImage
src={decreaseBtnNor}
className={css.minusBtn}
onClick={minusClick}
/>
<div className={css.inputBox}>{ea}</div>
<CustomImage
src={increaseBtnNor}
className={css.plusBtn}
onClick={plusClick}
/>
</Container>
);
};
export default ProductEa;

View File

@@ -1,28 +0,0 @@
@import "../../../style/CommonStyle.module.less";
@import "../../../style/utils.module.less";
.container {
width: 675px;
height: 60px;
display: flex;
justify-content: center;
align-items: center;
.minusBtn,
.plusBtn {
width: 60px;
height: 60px;
vertical-align: top;
}
.inputBox {
width: 525px;
height: 60px;
text-align: center;
background: #2f2d2d;
margin: 0 15px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
}
}

View File

@@ -0,0 +1,36 @@
import React, {
useCallback,
useState,
} from 'react';
import SpotlightContainerDecorator
from '@enact/spotlight/SpotlightContainerDecorator';
import Spottable from '@enact/spotlight/Spottable';
import css from './ProductQuantity.module.less';
const Container = SpotlightContainerDecorator("div");
const SpotDiv = Spottable("div");
const ProductQuantity = () => {
const [ea, setEa] = useState(1);
const minusClick = useCallback(() => {
if (ea > 1) {
setEa(ea - 1);
}
}, [ea]);
const plusClick = useCallback(() => {
setEa(ea + 1);
}, [ea]);
return (
<Container className={css.container}>
<SpotDiv className={css.minusBtn} onClick={minusClick} />
<div className={css.inputBox}>{ea}</div>
<SpotDiv className={css.plusBtn} onClick={plusClick} />
</Container>
);
};
export default ProductQuantity;

View File

@@ -0,0 +1,60 @@
@import "../../../style/CommonStyle.module.less";
@import "../../../style/utils.module.less";
.container {
width: 675px;
height: 60px;
display: flex;
justify-content: center;
align-items: center;
.minusBtn,
.plusBtn {
width: 60px;
height: 60px;
vertical-align: top;
&:focus {
}
.minusImg,
.plusImg {
width: 60px;
height: 60px;
vertical-align: top;
}
}
.minusBtn {
width: 60px;
height: 60px;
vertical-align: top;
background-image: url("../../../../assets/images/btn/btn-quantity-decrease-nor@3x.png");
background-size: contain;
&:focus {
background-image: url("../../../../assets/images/btn/btn-quantity-decrease-foc@3x.png");
background-size: contain;
}
}
.plusBtn {
width: 60px;
height: 60px;
vertical-align: top;
background-image: url("../../../../assets/images/btn/btn-quantity-increase-nor@3x.png");
background-size: contain;
&:focus {
background-image: url("../../../../assets/images/btn/btn-quantity-increase-foc@3x.png");
background-size: contain;
}
}
.inputBox {
width: 525px;
height: 60px;
text-align: center;
background: #2f2d2d;
margin: 0 15px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
}
}