diff --git a/com.twin.app.shoptime/src/components/TItemCard/TItemCard.module.less b/com.twin.app.shoptime/src/components/TItemCard/TItemCard.module.less index ab4d4286..15cd065b 100644 --- a/com.twin.app.shoptime/src/components/TItemCard/TItemCard.module.less +++ b/com.twin.app.shoptime/src/components/TItemCard/TItemCard.module.less @@ -202,10 +202,10 @@ &.labelBox { width: calc(100% - 60px); > p { - font-size: 27px; + font-size: 25px; &.priceInfo { > span { - font-size: 16px; + font-size: 15px; } } } diff --git a/com.twin.app.shoptime/src/components/TItemCard/TItemCard.new.jsx b/com.twin.app.shoptime/src/components/TItemCard/TItemCard.new.jsx index ca692bff..153d63ef 100644 --- a/com.twin.app.shoptime/src/components/TItemCard/TItemCard.new.jsx +++ b/com.twin.app.shoptime/src/components/TItemCard/TItemCard.new.jsx @@ -1,69 +1,92 @@ -import React, { memo, useCallback, useEffect, useMemo, useState } from 'react'; +import React, { + memo, + useCallback, + useEffect, + useMemo, + useState, +} from 'react'; import classNames from 'classnames'; -import { useDispatch, useSelector } from 'react-redux'; +import { + useDispatch, + useSelector, +} from 'react-redux'; import Spotlight from '@enact/spotlight'; import Spottable from '@enact/spotlight/Spottable'; -import defaultLogoImg from '../../../assets/images/ic-tab-partners-default@3x.png'; -import defaultimgHorizontal from '../../../assets/images/img-thumb-empty-hor@3x.png'; -import defaultImageItem from '../../../assets/images/img-thumb-empty-product@3x.png'; -import defaultimgVertical from '../../../assets/images/img-thumb-empty-ver@3x.png'; -import IcLiveShow from '../../../assets/images/tag/tag-liveshow.png'; // ๐งช ํ ์คํธ์ฉ ์๋์ง ๋ผ๋ฒจ (์ค์ PDF ๋ณํ ํ ์คํธ) -import testEnergyIconA from '../../../assets/images/energyLabel/labelgradeA.png'; -import testEnergyIconB from '../../../assets/images/energyLabel/labelgradeB.png'; -import testEnergyIconC from '../../../assets/images/energyLabel/labelgradeC.png'; +import testEnergyIconA + from '../../../assets/images/energyLabel/labelgradeA.png'; +import testEnergyIconB + from '../../../assets/images/energyLabel/labelgradeB.png'; +import testEnergyIconC + from '../../../assets/images/energyLabel/labelgradeC.png'; +import defaultLogoImg + from '../../../assets/images/ic-tab-partners-default@3x.png'; +import defaultimgHorizontal + from '../../../assets/images/img-thumb-empty-hor@3x.png'; +import defaultImageItem + from '../../../assets/images/img-thumb-empty-product@3x.png'; +import defaultimgVertical + from '../../../assets/images/img-thumb-empty-ver@3x.png'; +import IcLiveShow from '../../../assets/images/tag/tag-liveshow.png'; import testEnergyPdf from '../../../assets/mock/EnergyLabelSample.pdf'; -import { setHidePopup, setShowPopup } from '../../actions/commonActions'; +import { + setHidePopup, + setShowPopup, +} from '../../actions/commonActions'; import { clearConvertedImage, - convertPdfToImage, convertMultiplePdfs, + convertPdfToImage, } from '../../actions/convertActions'; import { sendLogTotalRecommend } from '../../actions/logActions'; import usePriceInfo from '../../hooks/usePriceInfo'; import * as Config from '../../utils/Config'; -import { $L, getQRCodeUrl, removeSpecificTags } from '../../utils/helperMethods'; +import { + $L, + getQRCodeUrl, + removeSpecificTags, +} from '../../utils/helperMethods'; import { SpotlightIds } from '../../utils/SpotlightIds'; import CustomImage from '../CustomImage/CustomImage'; import TPopUp from '../TPopUp/TPopUp'; import css from './TItemCard.module.less'; -const SpottableComponent = Spottable('div'); -const SpottableTemp = Spottable('div'); +const SpottableComponent = Spottable("div"); +const SpottableTemp = Spottable("div"); const TYPES = { - vertical: 'vertical', - horizontal: 'horizontal', - videoShow: 'videoShow', + vertical: "vertical", + horizontal: "horizontal", + videoShow: "videoShow", }; const IMAGETYPES = { - imgHorizontal: 'imgHorizontal', - imgVertical: 'imgVertical', + imgHorizontal: "imgHorizontal", + imgVertical: "imgVertical", }; const STRING_CONF = { - SOLD_OUT: 'SOLD OUT', - ENERGY_LOADING: 'Loading energy label...', - ENERGY_ERROR: 'Failed to load energy label', + SOLD_OUT: "SOLD OUT", + ENERGY_LOADING: "Loading energy label...", + ENERGY_ERROR: "Failed to load energy label", }; const ENERGY_LABEL_MODE = { - API_ONLY: 'API_ONLY', - WITH_MOCK: 'WITH_MOCK', + API_ONLY: "API_ONLY", + WITH_MOCK: "WITH_MOCK", }; const CURRENT_ENERGY_LABEL_MODE = ENERGY_LABEL_MODE.WITH_MOCK; export const removeDotAndColon = (string) => { - return /[.:]/.test(string) ? string.replace(/[.:]/g, '') : string; + return /[.:]/.test(string) ? string.replace(/[.:]/g, "") : string; }; const parsePrice = (price) => { - return parseFloat(price?.replace(/[^0-9.-]+/g, '') || '0'); + return parseFloat(price?.replace(/[^0-9.-]+/g, "") || "0"); }; const generateMockEnergyLabels = (productId) => { @@ -77,11 +100,13 @@ const generateMockEnergyLabels = (productId) => { return Math.abs(hash); }; - const seed = productId ? hashCode(productId) : Math.floor(Math.random() * 1000); + const seed = productId + ? hashCode(productId) + : Math.floor(Math.random() * 1000); const randomCount = (seed % 3) + 1; const testIcons = [testEnergyIconA, testEnergyIconB, testEnergyIconC]; - const testGrades = ['A (TEST)', 'B (TEST)', 'C (TEST)']; + const testGrades = ["A (TEST)", "B (TEST)", "C (TEST)"]; return Array.from({ length: randomCount }, (_, index) => ({ enrgLblUrl: testEnergyPdf, @@ -144,8 +169,12 @@ export default memo(function TItemCardNew({ const [currentPdfUrl, setCurrentPdfUrl] = useState(null); const countryCode = useSelector((state) => state.common.httpHeader.cntry_cd); - const cursorVisible = useSelector((state) => state.common.appStatus.cursorVisible); - const { activePopup, popupVisible } = useSelector((state) => state.common.popup); + const cursorVisible = useSelector( + (state) => state.common.appStatus.cursorVisible + ); + const { activePopup, popupVisible } = useSelector( + (state) => state.common.popup + ); const convert = useSelector((state) => state.convert); @@ -156,7 +185,7 @@ export default memo(function TItemCardNew({ const currentBlobUrl = convert?.convertedImage; return () => { - if (currentBlobUrl && currentBlobUrl.startsWith('blob:')) { + if (currentBlobUrl && currentBlobUrl.startsWith("blob:")) { URL.revokeObjectURL(currentBlobUrl); } }; @@ -164,9 +193,11 @@ export default memo(function TItemCardNew({ useEffect(() => { if (!imageSource) { - if (type === 'videoShow') { + if (type === "videoShow") { setDefaultImage( - imgType === IMAGETYPES.imgHorizontal ? defaultimgHorizontal : defaultimgVertical + imgType === IMAGETYPES.imgHorizontal + ? defaultimgHorizontal + : defaultimgVertical ); } else { setDefaultImage(defaultImageItem); @@ -194,7 +225,8 @@ export default memo(function TItemCardNew({ // } // }, [euEnrgLblInfos, productId, dispatch]); - const { originalPrice, discountedPrice, discountRate } = usePriceInfo(priceInfo) || {}; + const { originalPrice, discountedPrice, discountRate } = + usePriceInfo(priceInfo) || {}; const _onBlur = useCallback(() => { if (onBlur) { @@ -282,23 +314,25 @@ export default memo(function TItemCardNew({ ); const ariaLabel = useMemo(() => { - const soldOutText = soldoutFlag === 'Y' ? 'Sold Out ' : ''; - const firstLabelText = firstLabel ? `${firstLabel} ` : ''; - const discountLabel = discountRate ? `${discountRate} discount, ` : ''; - const discountPriceLabel = discountRate ? `Sale price ${discountedPrice}, ` : ''; + const soldOutText = soldoutFlag === "Y" ? "Sold Out " : ""; + const firstLabelText = firstLabel ? `${firstLabel} ` : ""; + const discountLabel = discountRate ? `${discountRate} discount, ` : ""; + const discountPriceLabel = discountRate + ? `Sale price ${discountedPrice}, ` + : ""; const parsedPrice = parsePrice(originalPrice); const priceLabel = parsedPrice === 0 ? offerInfo ? ` ${offerInfo}` - : '' + : "" : originalPrice ? ` Original price ${originalPrice}, ` - : ''; + : ""; - const productLabel = label || ''; - const lastLabelText = lastLabel || ''; + const productLabel = label || ""; + const lastLabelText = lastLabel || ""; return `${soldOutText}${firstLabelText}${discountLabel}${productName}${discountPriceLabel}${priceLabel}${productLabel}${lastLabelText}`; }, [ @@ -319,7 +353,7 @@ export default memo(function TItemCardNew({ }, [productName]); const handleClosePopup = useCallback(() => { - if (convert?.convertedImage && convert.convertedImage.startsWith('blob:')) { + if (convert?.convertedImage && convert.convertedImage.startsWith("blob:")) { URL.revokeObjectURL(convert.convertedImage); } @@ -338,10 +372,10 @@ export default memo(function TItemCardNew({ setCurrentPdfUrl(pdfUrl); // PNG ์ด๋ฏธ์ง๋ ์ง์ ํ์ - if (pdfUrl.endsWith('.png')) { + if (pdfUrl.endsWith(".png")) { // console.log(`๐ธ [EnergyLabel] Displaying PNG directly:`, pdfUrl); dispatch({ - type: 'CONVERT_PDF_TO_IMAGE_SUCCESS', + type: "CONVERT_PDF_TO_IMAGE_SUCCESS", payload: { pdfUrl, imageUrl: pdfUrl }, }); dispatch(setShowPopup(Config.ACTIVE_POPUP.energyPopup)); @@ -358,7 +392,10 @@ export default memo(function TItemCardNew({ pdfUrl, (error, imageUrl) => { if (error) { - console.error('[EnergyLabel] ์ต์ข ๋ณํ ์คํจ:', error.message || error); + console.error( + "[EnergyLabel] ์ต์ข ๋ณํ ์คํจ:", + error.message || error + ); // ์คํจํด๋ ํ์ ์ ์ด์ด์ ์๋ฌ ๋ฉ์์ง ํ์ dispatch(setShowPopup(Config.ACTIVE_POPUP.energyPopup)); setTimeout(() => { @@ -386,13 +423,15 @@ export default memo(function TItemCardNew({ className={classNames( css[type], nonPosition && css.nonPosition, - type === 'videoShow' && css[imgType], + type === "videoShow" && css[imgType], className && className )} onBlur={_onBlur} onClick={_onClick} onFocus={_onFocus} - spotlightId={spotlightId ?? 'spotlightId-' + removeDotAndColon(productId)} + spotlightId={ + spotlightId ?? "spotlightId-" + removeDotAndColon(productId) + } aria-label={ariaLabel} role="button" {...rest} @@ -403,7 +442,7 @@ export default memo(function TItemCardNew({ delay={0} src={imageSource} fallbackSrc={ - type === 'videoShow' + type === "videoShow" ? imgType === IMAGETYPES.imgHorizontal ? defaultimgHorizontal : defaultimgVertical @@ -411,24 +450,32 @@ export default memo(function TItemCardNew({ } onError={addDefaultImg} /> - {priceInfo && discountRate && Number(discountRate.replace('%', '')) > 4 && ( - {discountRate} - )} - {soldoutFlag && soldoutFlag === 'Y' && ( -
- {parseFloat(originalPrice?.replace(/[^0-9.-]+/g, '') || '0') === 0 ? ( + {parseFloat(originalPrice?.replace(/[^0-9.-]+/g, "") || "0") === + 0 ? ( {offerInfo} ) : discountRate ? ( discountedPrice ) : ( originalPrice )} - {discountRate && {originalPrice}} + {discountRate && ( + {originalPrice} + )}
) : ({offerInfo}
@@ -463,7 +513,9 @@ export default memo(function TItemCardNew({ {originPrice && ({dcPrice ? dcPrice : originPrice} - {dcPrice && {originPrice}} + {dcPrice && ( + {originPrice} + )}
)}{$L(STRING_CONF.ENERGY_ERROR)}
-+
{convert.error?.message || String(convert.error)}
{$L(STRING_CONF.ENERGY_LOADING)}
-+
Converting PDF to image... (attempt in progress)
{$L(STRING_CONF.ENERGY_ERROR)}
-+
Unknown state - no image or error
{$L(STRING_CONF.ENERGY_ERROR)}
-+
Convert reducer state not found