[OnSalePanel] props 및 구조 수정
Detail Notes : 1. OnSaleProductList, empty div OnSaleProductItem으로 이동 2. OnSaleProductItem, 불필요 props 삭제 3. OnSaleProductList, OnSaleProductItem, 최적화 및 css 수정
This commit is contained in:
@@ -69,11 +69,10 @@ export default function OnSalePanel() {
|
|||||||
saleInfos.map(({ saleNm, saleProductInfos }) => (
|
saleInfos.map(({ saleNm, saleProductInfos }) => (
|
||||||
<OnSaleProductList
|
<OnSaleProductList
|
||||||
key={saleNm}
|
key={saleNm}
|
||||||
saleNm={saleNm}
|
saleName={saleNm}
|
||||||
saleProductInfos={saleProductInfos}
|
saleProductInfos={saleProductInfos}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
|
|
||||||
<TopButton targetId={SpotlightIds.TITEM_CARD + targetId} />
|
<TopButton targetId={SpotlightIds.TITEM_CARD + targetId} />
|
||||||
</TBody>
|
</TBody>
|
||||||
</TPanel>
|
</TPanel>
|
||||||
|
|||||||
@@ -1,24 +1,31 @@
|
|||||||
import React from "react";
|
import React, { memo } from "react";
|
||||||
|
|
||||||
import TItemCard from "../../../components/TItemCard/TItemCard";
|
import TItemCard from "../../../components/TItemCard/TItemCard";
|
||||||
import css from "./OnSaleProductItem.module.less";
|
import css from "./OnSaleProductItem.module.less";
|
||||||
|
|
||||||
export default function OnSaleProductItem({
|
export default memo(function OnSaleProductItem({
|
||||||
imgUrl,
|
index,
|
||||||
prdtId,
|
saleProductInfos,
|
||||||
prdtNm,
|
|
||||||
priceInfo,
|
|
||||||
...rest
|
...rest
|
||||||
}) {
|
}) {
|
||||||
|
const {
|
||||||
|
imgUrl,
|
||||||
|
prdtId: productId,
|
||||||
|
prdtNm: productName,
|
||||||
|
priceInfo,
|
||||||
|
} = saleProductInfos[index];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TItemCard
|
<div className={css.container}>
|
||||||
imageAlt={prdtNm}
|
<div />
|
||||||
imageSource={imgUrl}
|
<TItemCard
|
||||||
onCardClick={() => {}}
|
imageAlt={productName}
|
||||||
priceInfo={priceInfo}
|
imageSource={imgUrl}
|
||||||
productId={prdtId}
|
priceInfo={priceInfo}
|
||||||
productName={prdtNm}
|
productId={productId}
|
||||||
{...rest}
|
productName={productName}
|
||||||
/>
|
{...rest}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
});
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
.container {
|
||||||
|
// empty block
|
||||||
|
> div:nth-child(1) {
|
||||||
|
height: 132px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
import React from "react";
|
import React, { useCallback } from "react";
|
||||||
|
|
||||||
import { VirtualGridList } from "@enact/sandstone/VirtualList";
|
import { VirtualGridList } from "@enact/sandstone/VirtualList";
|
||||||
import SpotlightContainerDecorator from "@enact/spotlight/SpotlightContainerDecorator";
|
import SpotlightContainerDecorator from "@enact/spotlight/SpotlightContainerDecorator";
|
||||||
import Spottable from "@enact/spotlight/Spottable";
|
|
||||||
import ri from "@enact/ui/resolution";
|
import ri from "@enact/ui/resolution";
|
||||||
|
|
||||||
import SectionTitle from "../../../components/SectionTitle/SectionTitle";
|
import SectionTitle from "../../../components/SectionTitle/SectionTitle";
|
||||||
import TItemCard from "../../../components/TItemCard/TItemCard";
|
|
||||||
import OnSaleProductItem from "../OnSaleProductItem/OnSaleProductItem";
|
import OnSaleProductItem from "../OnSaleProductItem/OnSaleProductItem";
|
||||||
import css from "./OnSaleProductList.module.less";
|
import css from "./OnSaleProductList.module.less";
|
||||||
|
|
||||||
@@ -22,24 +20,27 @@ const Container = SpotlightContainerDecorator(
|
|||||||
);
|
);
|
||||||
|
|
||||||
export default function OnSaleProductList({
|
export default function OnSaleProductList({
|
||||||
saleNm,
|
saleName,
|
||||||
saleProductInfos,
|
saleProductInfos,
|
||||||
...rest
|
...rest
|
||||||
}) {
|
}) {
|
||||||
const renderItem = ({ index, ...rest }) => {
|
const renderItem = useCallback(
|
||||||
const saleProductInfo = saleProductInfos[index];
|
({ index, ...rest }) => {
|
||||||
|
return (
|
||||||
return (
|
<OnSaleProductItem
|
||||||
<>
|
index={index}
|
||||||
{<div className={css.empty} />}
|
saleProductInfos={saleProductInfos}
|
||||||
<OnSaleProductItem saleName={saleNm} {...saleProductInfo} {...rest} />
|
{...rest}
|
||||||
</>
|
/>
|
||||||
);
|
);
|
||||||
};
|
},
|
||||||
|
[saleProductInfos]
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container className={css.container} {...rest}>
|
<Container className={css.container} {...rest}>
|
||||||
{<SectionTitle title={saleNm} />}
|
{saleName && <SectionTitle title={saleName} />}
|
||||||
|
|
||||||
{saleProductInfos && (
|
{saleProductInfos && (
|
||||||
<VirtualGridList
|
<VirtualGridList
|
||||||
className={css.virtualGridList}
|
className={css.virtualGridList}
|
||||||
|
|||||||
@@ -4,18 +4,15 @@
|
|||||||
.container {
|
.container {
|
||||||
position: relative;
|
position: relative;
|
||||||
.size(@w: 100%, @h: 570px);
|
.size(@w: 100%, @h: 570px);
|
||||||
|
padding-left: 60px;
|
||||||
|
|
||||||
|
// sectionTitle
|
||||||
h2 {
|
h2 {
|
||||||
.position(@position: absolute, @top: 58px, @left: 60px);
|
.position(@position: absolute, @top: 58px, @left: 60px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.virtualGridList {
|
.virtualGridList {
|
||||||
overflow: unset;
|
overflow: unset;
|
||||||
padding-left: 60px;
|
|
||||||
|
|
||||||
.empty {
|
|
||||||
height: 132px;
|
|
||||||
}
|
|
||||||
|
|
||||||
> div {
|
> div {
|
||||||
overflow: unset !important;
|
overflow: unset !important;
|
||||||
|
|||||||
Reference in New Issue
Block a user