pb-sxp-ui 1.0.86 → 1.0.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +113 -166
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +113 -166
- package/dist/index.js.map +1 -1
- package/dist/index.min.cjs +3 -4
- package/dist/index.min.cjs.map +1 -1
- package/dist/index.min.js +3 -4
- package/dist/index.min.js.map +1 -1
- package/dist/pb-ui.js +113 -166
- package/dist/pb-ui.js.map +1 -1
- package/dist/pb-ui.min.js +3 -4
- package/dist/pb-ui.min.js.map +1 -1
- package/es/core/components/Consent/index.js +2 -2
- package/es/core/components/DiyPortalPreview/VideoWidget.js +3 -3
- package/es/core/components/SxpPageRender/FingerSwipeTip/index.js +1 -1
- package/es/core/components/SxpPageRender/FormatImage.js +2 -2
- package/es/core/components/SxpPageRender/LikeButton/index.js +1 -1
- package/es/core/components/SxpPageRender/Navbar.js +1 -1
- package/es/core/components/SxpPageRender/Nudge/index.js +1 -1
- package/es/core/components/SxpPageRender/Tagbar.js +6 -7
- package/es/core/components/SxpPageRender/ToggleButton/index.js +2 -2
- package/es/core/components/SxpPageRender/VideoWidget/index.js +3 -3
- package/es/core/components/SxpPageRender/WaterFall/List.js +2 -2
- package/es/core/components/SxpPageRender/WaterFall/WaterfallList.js +17 -52
- package/es/core/components/SxpPageRender/WaterFall/index.js +2 -4
- package/es/core/components/SxpPageRender/index.js +28 -30
- package/es/core/context/SxpDataSourceProvider.d.ts +4 -0
- package/es/core/context/SxpDataSourceProvider.js +9 -3
- package/es/core/hooks/useEventReport.d.ts +1 -1
- package/es/core/hooks/useEventReport.js +13 -10
- package/es/materials/sxp/popup/AppointForm/index.js +1 -1
- package/es/materials/sxp/popup/CommodityDetail/index.js +3 -3
- package/es/materials/sxp/popup/CommodityDetailDiro/index.js +4 -4
- package/es/materials/sxp/popup/CommodityDetailDiroNew/index.js +3 -3
- package/es/materials/sxp/popup/Prompt/index.js +2 -2
- package/es/materials/sxp/template/Appoint/index.js +1 -1
- package/lib/core/components/Consent/index.js +2 -2
- package/lib/core/components/DiyPortalPreview/VideoWidget.js +3 -3
- package/lib/core/components/SxpPageRender/FingerSwipeTip/index.js +1 -1
- package/lib/core/components/SxpPageRender/FormatImage.js +2 -2
- package/lib/core/components/SxpPageRender/LikeButton/index.js +1 -1
- package/lib/core/components/SxpPageRender/Navbar.js +1 -1
- package/lib/core/components/SxpPageRender/Nudge/index.js +1 -1
- package/lib/core/components/SxpPageRender/Tagbar.js +7 -8
- package/lib/core/components/SxpPageRender/ToggleButton/index.js +2 -2
- package/lib/core/components/SxpPageRender/VideoWidget/index.js +3 -3
- package/lib/core/components/SxpPageRender/WaterFall/List.js +2 -2
- package/lib/core/components/SxpPageRender/WaterFall/WaterfallList.js +17 -52
- package/lib/core/components/SxpPageRender/WaterFall/index.js +2 -4
- package/lib/core/components/SxpPageRender/index.js +28 -30
- package/lib/core/context/SxpDataSourceProvider.d.ts +4 -0
- package/lib/core/context/SxpDataSourceProvider.js +10 -4
- package/lib/core/hooks/useEventReport.d.ts +1 -1
- package/lib/core/hooks/useEventReport.js +13 -10
- package/lib/materials/sxp/popup/AppointForm/index.js +1 -1
- package/lib/materials/sxp/popup/CommodityDetail/index.js +3 -3
- package/lib/materials/sxp/popup/CommodityDetailDiro/index.js +4 -4
- package/lib/materials/sxp/popup/CommodityDetailDiroNew/index.js +3 -3
- package/lib/materials/sxp/popup/Prompt/index.js +2 -2
- package/lib/materials/sxp/template/Appoint/index.js +1 -1
- package/package.json +1 -1
@@ -53,7 +53,7 @@ const Consent = ({ width = window.innerWidth, height = window.innerHeight, priva
|
|
53
53
|
React.createElement("div", { className: 'consent-title' }, privacy_title !== null && privacy_title !== void 0 ? privacy_title : 'Privacy Policy'),
|
54
54
|
React.createElement("div", { className: 'consent-content' }, privacy_context !== null && privacy_context !== void 0 ? privacy_context : 'This site uses cookies to improve your online experience. By continuing to use the site please agree the policy first.')),
|
55
55
|
React.createElement("div", { className: 'consent-col' },
|
56
|
-
React.createElement("button", { className: 'consent-btn', onClick: handleAgree }, "Agree"),
|
57
|
-
React.createElement("a", { className: 'consent-policy', target: '_blank', href: privacy_policy_url }, privacy_policy_title !== null && privacy_policy_title !== void 0 ? privacy_policy_title : 'More information')))));
|
56
|
+
React.createElement("button", { "aria-label": 'agree', className: 'consent-btn', onClick: handleAgree }, "Agree"),
|
57
|
+
React.createElement("a", { className: 'consent-policy', target: '_blank', href: privacy_policy_url ? `https://${privacy_policy_url}` : undefined }, privacy_policy_title !== null && privacy_policy_title !== void 0 ? privacy_policy_title : 'More information')))));
|
58
58
|
};
|
59
59
|
export default memo(Consent);
|
@@ -172,7 +172,7 @@ const VideoWidget = ({ rec, index, height, data, muted, activeIndex, videoPostCo
|
|
172
172
|
if (!(sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.placeholder_image) || isLoadFinish) {
|
173
173
|
return null;
|
174
174
|
}
|
175
|
-
return (React.createElement("img", { style: { position: 'absolute', left: 0, top: 0, width: '100%', height: '100%', objectFit: 'cover' }, src: sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.placeholder_image }));
|
175
|
+
return (React.createElement("img", { style: { position: 'absolute', left: 0, top: 0, width: '100%', height: '100%', objectFit: 'cover' }, src: sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.placeholder_image, alt: 'video poster' }));
|
176
176
|
}, [isLoadFinish, sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.placeholder_image]);
|
177
177
|
useEffect(() => {
|
178
178
|
const handleBeforeUnload = () => {
|
@@ -221,7 +221,7 @@ const VideoWidget = ({ rec, index, height, data, muted, activeIndex, videoPostCo
|
|
221
221
|
height,
|
222
222
|
objectFit: 'contain'
|
223
223
|
} }),
|
224
|
-
React.createElement("img", { hidden: !isPauseVideo, className: 'clc-pb-video-pause', src: PAUSE_ICON }))),
|
224
|
+
React.createElement("img", { hidden: !isPauseVideo, className: 'clc-pb-video-pause', src: PAUSE_ICON, alt: 'video pause image' }))),
|
225
225
|
renderPoster)) : (React.createElement("div", { className: 'video-container', key: rec === null || rec === void 0 ? void 0 : rec.video.itemId, onClick: handleClickVideo(), style: {
|
226
226
|
position: 'relative',
|
227
227
|
width,
|
@@ -230,6 +230,6 @@ const VideoWidget = ({ rec, index, height, data, muted, activeIndex, videoPostCo
|
|
230
230
|
} },
|
231
231
|
React.createElement("video", { id: `pb-video-${index}`, className: 'clc-pb-video', style: { width: '100%' }, ref: videoRef, crossOrigin: 'anonymous', muted: true, autoPlay: true, controls: false, playsInline: true, preload: 'auto', onPause: onPause, onEnded: handleVideoStart }),
|
232
232
|
renderPoster,
|
233
|
-
React.createElement("img", { hidden: !isPauseVideo, className: 'clc-pb-video-pause', src: PAUSE_ICON })))));
|
233
|
+
React.createElement("img", { hidden: !isPauseVideo, className: 'clc-pb-video-pause', src: PAUSE_ICON, alt: 'video pause image' })))));
|
234
234
|
};
|
235
235
|
export default memo(VideoWidget);
|
@@ -14,6 +14,6 @@ const FingerSwipeTip = ({ imageUrl, style }) => {
|
|
14
14
|
return show ? 'pb-fadeIn' : 'pb-fadeOut';
|
15
15
|
}, [show]);
|
16
16
|
return (React.createElement("div", { hidden: !show, className: `pb-finger-wrap ${animationCls}`, style: style },
|
17
|
-
React.createElement("img", { src: imageUrl || FINGER_SWIPE_ICON })));
|
17
|
+
React.createElement("img", { src: imageUrl || FINGER_SWIPE_ICON, alt: 'finger swiper' })));
|
18
18
|
};
|
19
19
|
export default FingerSwipeTip;
|
@@ -22,8 +22,8 @@ const FormatImage = forwardRef((props, ref) => {
|
|
22
22
|
React.createElement("source", { type: 'image/jpeg', srcSet: `${imgSrc}?imageMogr2/format/jpg` }),
|
23
23
|
React.createElement("img", { className: className, src: imgSrc, style: style, loading: loading, onLoad: (e) => {
|
24
24
|
onLoad === null || onLoad === void 0 ? void 0 : onLoad(e.target);
|
25
|
-
} }))) : (React.createElement("img", { className: className, src: imgSrc, style: style, loading: loading, onLoad: (e) => {
|
25
|
+
}, alt: 'image' }))) : (React.createElement("img", { className: className, src: imgSrc, style: style, loading: loading, onLoad: (e) => {
|
26
26
|
onLoad === null || onLoad === void 0 ? void 0 : onLoad(e.target);
|
27
|
-
} }))));
|
27
|
+
}, alt: 'image' }))));
|
28
28
|
});
|
29
29
|
export default memo(FormatImage);
|
@@ -52,7 +52,7 @@ const LikeButton = (_a) => {
|
|
52
52
|
}
|
53
53
|
}
|
54
54
|
}), 200);
|
55
|
-
return (React.createElement("button", Object.assign({}, props, { onClick: handleClick }),
|
55
|
+
return (React.createElement("button", Object.assign({}, props, { "aria-label": 'like', onClick: handleClick }),
|
56
56
|
React.createElement("img", { style: { width: '100%', height: '100%', objectFit: 'contain' }, src: state ? activeIcon || likeIcon : unActicveIcon || unlikeIcon, alt: 'icon' })));
|
57
57
|
};
|
58
58
|
export default memo(LikeButton);
|
@@ -4,7 +4,7 @@ const Navbar = ({ icon, styles, textStyle, onClose }) => {
|
|
4
4
|
var _a;
|
5
5
|
const { waterFallData, setOpenHashtag } = useSxpDataSource();
|
6
6
|
return (React.createElement("div", { className: 'clc-sxp-nav', style: styles },
|
7
|
-
React.createElement("img", { className: 'clc-sxp-nav-left', src: icon, alt: '', onClick: onClose }),
|
7
|
+
React.createElement("img", { className: 'clc-sxp-nav-left', src: icon, alt: 'back button', onClick: onClose }),
|
8
8
|
React.createElement("div", { className: 'clc-sxp-nav-title', style: textStyle }, `#${(_a = waterFallData === null || waterFallData === void 0 ? void 0 : waterFallData.hashTag) !== null && _a !== void 0 ? _a : '标题'}`)));
|
9
9
|
};
|
10
10
|
export default memo(Navbar);
|
@@ -8,7 +8,7 @@ const Nudge = ({ nudge }) => {
|
|
8
8
|
backgroundColor: nudge === null || nudge === void 0 ? void 0 : nudge.backgroundColor,
|
9
9
|
borderRadius: (_f = nudge === null || nudge === void 0 ? void 0 : nudge.borderRadius) !== null && _f !== void 0 ? _f : 4
|
10
10
|
} },
|
11
|
-
(nudge === null || nudge === void 0 ? void 0 : nudge.icon) ? React.createElement("img", { src: nudge.icon, style: { height: '100%', objectFit: 'cover', flexShrink: 0 } }) : null,
|
11
|
+
(nudge === null || nudge === void 0 ? void 0 : nudge.icon) ? (React.createElement("img", { src: nudge.icon, alt: 'nudge icon', style: { height: '100%', objectFit: 'cover', flexShrink: 0 } })) : null,
|
12
12
|
React.createElement("p", { style: Object.assign(Object.assign({}, nudge === null || nudge === void 0 ? void 0 : nudge.textStyle), { textWrap: 'nowrap', textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap', flex: 1, marginBottom: 0 }) }, (_g = nudge === null || nudge === void 0 ? void 0 : nudge.content) !== null && _g !== void 0 ? _g : '')))));
|
13
13
|
};
|
14
14
|
export default Nudge;
|
@@ -1,11 +1,10 @@
|
|
1
|
-
import React, { memo, useMemo
|
1
|
+
import React, { memo, useMemo } from 'react';
|
2
2
|
import { useSxpDataSource } from '../../../core/hooks';
|
3
3
|
import SXP_EVENT_BUS, { SXP_EVENT_TYPE } from '../../../core/utils/event';
|
4
4
|
import { useEventReport } from '../../../core/hooks/useEventReport';
|
5
|
-
|
5
|
+
import { DEFAULT_TAG } from '../../../core/context/SxpDataSourceProvider';
|
6
6
|
const Tagbar = ({ tagList = [], setActiveIndex }) => {
|
7
|
-
const
|
8
|
-
const { getRecommendVideos, setRtcList, setCacheRtcList, setCacheActiveIndex, setLoading, swiperRef, waterFallData, bffEventReport } = useSxpDataSource();
|
7
|
+
const { getRecommendVideos, setRtcList, setCacheRtcList, setCacheActiveIndex, setLoading, swiperRef, waterFallData, bffEventReport, selectTag, setSelectTag } = useSxpDataSource();
|
9
8
|
const { backMainFeed } = useEventReport();
|
10
9
|
const realTagList = useMemo(() => {
|
11
10
|
return [DEFAULT_TAG, ...tagList];
|
@@ -18,12 +17,12 @@ const Tagbar = ({ tagList = [], setActiveIndex }) => {
|
|
18
17
|
eventInfo: {
|
19
18
|
eventSubject: 'clickThemeTagsViewContents',
|
20
19
|
eventDescription: 'click Theme Tags View Contents',
|
21
|
-
themeTags: `[${tag}]`
|
20
|
+
themeTags: `['${tag}']`
|
22
21
|
}
|
23
22
|
});
|
24
23
|
}
|
25
24
|
else {
|
26
|
-
backMainFeed('theme', selectTag);
|
25
|
+
backMainFeed('theme', tag, selectTag);
|
27
26
|
}
|
28
27
|
let themeTag;
|
29
28
|
if (tag !== DEFAULT_TAG) {
|
@@ -41,7 +40,7 @@ const Tagbar = ({ tagList = [], setActiveIndex }) => {
|
|
41
40
|
}).finally(() => {
|
42
41
|
setLoading === null || setLoading === void 0 ? void 0 : setLoading(false);
|
43
42
|
});
|
44
|
-
setSelectTag(tag);
|
43
|
+
setSelectTag === null || setSelectTag === void 0 ? void 0 : setSelectTag(tag);
|
45
44
|
};
|
46
45
|
if (waterFallData || tagList.length <= 0)
|
47
46
|
return null;
|
@@ -7,7 +7,7 @@ const ToggleButton = ({ defaultValue, activeIcon, unactiveIcon, onChange, style
|
|
7
7
|
setIsTure(result);
|
8
8
|
onChange === null || onChange === void 0 ? void 0 : onChange(result);
|
9
9
|
};
|
10
|
-
return (React.createElement("button", { style: style, className: 'pb-toggle-button', onClick: handleClick },
|
11
|
-
React.createElement("img", { className: 'pb-toggle-button-icon', src: isTrue ? activeIcon : unactiveIcon })));
|
10
|
+
return (React.createElement("button", { style: style, "aria-label": 'toggle button', className: 'pb-toggle-button', onClick: handleClick },
|
11
|
+
React.createElement("img", { className: 'pb-toggle-button-icon', alt: 'toggle image', src: isTrue ? activeIcon : unactiveIcon })));
|
12
12
|
};
|
13
13
|
export default memo(ToggleButton);
|
@@ -248,7 +248,7 @@ const VideoWidget = ({ rec, index, height, data, muted, activeIndex, videoPostCo
|
|
248
248
|
if (!(sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.placeholder_image) || isLoadFinish) {
|
249
249
|
return null;
|
250
250
|
}
|
251
|
-
return (React.createElement("img", { style: { position: 'absolute', left: 0, top: 0, width: '100%', height: '100%', objectFit: 'cover' }, src: sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.placeholder_image }));
|
251
|
+
return (React.createElement("img", { style: { position: 'absolute', left: 0, top: 0, width: '100%', height: '100%', objectFit: 'cover' }, src: sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.placeholder_image, alt: 'placeholder image' }));
|
252
252
|
}, [isLoadFinish, sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.placeholder_image]);
|
253
253
|
useEffect(() => {
|
254
254
|
if (!videoRef)
|
@@ -281,7 +281,7 @@ const VideoWidget = ({ rec, index, height, data, muted, activeIndex, videoPostCo
|
|
281
281
|
} },
|
282
282
|
React.createElement("div", { style: { position: 'relative', width: '100%', height: '100%' } },
|
283
283
|
React.createElement("div", { className: 'n-full-screen', ref: videoEleRef, id: videoId, style: { width: '100%', height: '100%' } }),
|
284
|
-
React.createElement("img", { hidden: !isPauseVideo, className: 'clc-pb-video-pause', src: PAUSE_ICON }))),
|
284
|
+
React.createElement("img", { hidden: !isPauseVideo, className: 'clc-pb-video-pause', alt: 'pause', src: PAUSE_ICON }))),
|
285
285
|
renderPoster)) : (React.createElement("div", { className: 'video-container', key: rec === null || rec === void 0 ? void 0 : rec.video.itemId, style: {
|
286
286
|
position: 'relative',
|
287
287
|
width: '100%',
|
@@ -290,6 +290,6 @@ const VideoWidget = ({ rec, index, height, data, muted, activeIndex, videoPostCo
|
|
290
290
|
}, onClick: handleClickVideo() },
|
291
291
|
React.createElement("div", { className: 'n-full-screen', ref: videoEleRef, id: videoId, style: { width: '100%', height: '100%' } }),
|
292
292
|
renderPoster,
|
293
|
-
React.createElement("img", { hidden: !isPauseVideo, className: 'clc-pb-video-pause', src: PAUSE_ICON })))));
|
293
|
+
React.createElement("img", { hidden: !isPauseVideo, className: 'clc-pb-video-pause', src: PAUSE_ICON, alt: 'pause' })))));
|
294
294
|
};
|
295
295
|
export default memo(VideoWidget);
|
@@ -114,7 +114,7 @@ const WaterfallFlowItem = (props) => {
|
|
114
114
|
React.createElement("div", { className: 'list-content-listItem-info-price', style: textStyles === null || textStyles === void 0 ? void 0 : textStyles.price, hidden: !priceText }, priceText))));
|
115
115
|
};
|
116
116
|
export default function WaterfallList(_a) {
|
117
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
117
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
118
118
|
var { reportTagsView, showBanner } = _a, props = __rest(_a, ["reportTagsView", "showBanner"]);
|
119
119
|
const { waterFallData, getRecommendVideos, hashTagSize, loadingImage, isOpenHashTag } = useSxpDataSource();
|
120
120
|
const [list, setList] = useState();
|
@@ -187,5 +187,5 @@ export default function WaterfallList(_a) {
|
|
187
187
|
} })),
|
188
188
|
React.createElement("div", { className: 'list-bottom', hidden: !((_o = data === null || data === void 0 ? void 0 : data.tag) === null || _o === void 0 ? void 0 : _o.link), style: props === null || props === void 0 ? void 0 : props.buttonBgStyle }),
|
189
189
|
React.createElement("div", { hidden: !((_p = data === null || data === void 0 ? void 0 : data.tag) === null || _p === void 0 ? void 0 : _p.link), className: 'list-btn-wrap', style: Object.assign(Object.assign({}, props === null || props === void 0 ? void 0 : props.buttonBgStyle), { height: 'auto', backgroundColor: 'transparent' }) },
|
190
|
-
React.createElement("button", { className: 'list-btn', style: props === null || props === void 0 ? void 0 : props.buttonStyle, onClick: handleClickLink }, ((
|
190
|
+
React.createElement("button", { "aria-label": ((_q = data === null || data === void 0 ? void 0 : data.tag) === null || _q === void 0 ? void 0 : _q.linkTitle) || 'Shop the collection', className: 'list-btn', style: props === null || props === void 0 ? void 0 : props.buttonStyle, onClick: handleClickLink }, ((_r = data === null || data === void 0 ? void 0 : data.tag) === null || _r === void 0 ? void 0 : _r.linkTitle) || 'Shop the collection'))))));
|
191
191
|
}
|
@@ -71,56 +71,24 @@ const WaterfallFlowItem = (props) => {
|
|
71
71
|
if (imgDom.current === null || src === '') {
|
72
72
|
return;
|
73
73
|
}
|
74
|
-
|
74
|
+
let imgSrc = null;
|
75
75
|
if (showVideo && firstFrameSrc) {
|
76
|
-
|
76
|
+
imgSrc = firstFrameSrc;
|
77
77
|
}
|
78
78
|
else {
|
79
|
-
|
79
|
+
imgSrc = src;
|
80
80
|
}
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
}, [src, showVideo, firstFrameSrc, isImgShow]);
|
90
|
-
useEffect(() => {
|
91
|
-
const height = imgInfo.height * (unitWidth / imgInfo.width);
|
92
|
-
if (isLoading) {
|
81
|
+
if (imgSrc)
|
82
|
+
imgDom.current.setSrc(imgSrc);
|
83
|
+
}, [src, showVideo, firstFrameSrc]);
|
84
|
+
const pictRef = useRef();
|
85
|
+
const imgLoad = useCallback((img) => {
|
86
|
+
setTimeout(() => {
|
87
|
+
var _a;
|
88
|
+
const height = (_a = pictRef === null || pictRef === void 0 ? void 0 : pictRef.current) === null || _a === void 0 ? void 0 : _a.offsetHeight;
|
93
89
|
sizeChange(height + 56 + space, index);
|
94
|
-
}
|
95
|
-
}, [
|
96
|
-
const calculateHeightForWidth = (videoWidth, videoHeight, targetWidth) => {
|
97
|
-
const aspectRatio = videoWidth / videoHeight;
|
98
|
-
const targetHeight = targetWidth / aspectRatio;
|
99
|
-
return targetHeight;
|
100
|
-
};
|
101
|
-
useEffect(() => {
|
102
|
-
const video = videoDom === null || videoDom === void 0 ? void 0 : videoDom.current;
|
103
|
-
if (video === null || src === '' || !showVideo) {
|
104
|
-
return;
|
105
|
-
}
|
106
|
-
video.src = src;
|
107
|
-
video.currentTime = 1;
|
108
|
-
video.crossOrigin = 'anonymous';
|
109
|
-
video.onloadeddata = () => {
|
110
|
-
const canvas = canvasRef === null || canvasRef === void 0 ? void 0 : canvasRef.current;
|
111
|
-
if (!canvas)
|
112
|
-
return;
|
113
|
-
const ctx = canvas.getContext('2d');
|
114
|
-
const targetWidth = (window === null || window === void 0 ? void 0 : window.innerWidth) / 2;
|
115
|
-
const targetHeight = calculateHeightForWidth(video.videoWidth, video.videoHeight, targetWidth);
|
116
|
-
canvas.height = targetHeight;
|
117
|
-
canvas.width = targetWidth;
|
118
|
-
ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
|
119
|
-
setFirstFrameSrc(canvas.toDataURL());
|
120
|
-
video.remove();
|
121
|
-
canvas.remove();
|
122
|
-
};
|
123
|
-
}, [src, showVideo]);
|
90
|
+
}, 0);
|
91
|
+
}, [space, sizeChange, index, unitWidth, pictRef]);
|
124
92
|
const handleClickToDetail = () => {
|
125
93
|
reportTagsView();
|
126
94
|
setRtcList === null || setRtcList === void 0 ? void 0 : setRtcList(list);
|
@@ -131,17 +99,14 @@ const WaterfallFlowItem = (props) => {
|
|
131
99
|
}, 0);
|
132
100
|
};
|
133
101
|
return (React.createElement("div", { ref: ref, style: Object.assign({}, style), className: 'waterFallList-content-listItem', key: index, onClick: handleClickToDetail },
|
134
|
-
React.createElement("div", { className: 'waterFallList-content-listItem-picture' },
|
135
|
-
|
136
|
-
React.createElement("video", { ref: videoDom, src: src, crossOrigin: 'anonymous', className: 'waterFallList-content-listItem-picture-img' }),
|
137
|
-
React.createElement("canvas", { ref: canvasRef }))),
|
138
|
-
React.createElement(FormatImage, { loading: 'lazy', className: 'waterFallList-content-listItem-picture-img', ref: imgDom })),
|
102
|
+
React.createElement("div", { className: 'waterFallList-content-listItem-picture', ref: pictRef },
|
103
|
+
React.createElement(FormatImage, { loading: 'lazy', className: 'waterFallList-content-listItem-picture-img', onLoad: imgLoad, ref: imgDom })),
|
139
104
|
React.createElement("div", { className: 'waterFallList-content-listItem-info' },
|
140
105
|
React.createElement("div", { className: `${'waterFallList-content-listItem-info-title'} ${priceText ? 'waterFallList-content-listItem-info-nowrap' : ''}`, style: Object.assign({}, textStyles === null || textStyles === void 0 ? void 0 : textStyles.title) }, title && title),
|
141
106
|
React.createElement("div", { className: 'waterFallList-content-listItem-info-price', hidden: !priceText, style: textStyles.price }, priceText))));
|
142
107
|
};
|
143
108
|
export default function WaterfallList(_a) {
|
144
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
|
109
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
|
145
110
|
var { reportTagsView, showBanner } = _a, props = __rest(_a, ["reportTagsView", "showBanner"]);
|
146
111
|
const { waterFallData, getRecommendVideos, hashTagSize, loadingImage, isOpenHashTag } = useSxpDataSource();
|
147
112
|
const scrollParent = useRef(null);
|
@@ -337,5 +302,5 @@ export default function WaterfallList(_a) {
|
|
337
302
|
} }))),
|
338
303
|
React.createElement("div", { className: 'waterFallList-bottom', hidden: !((_t = data === null || data === void 0 ? void 0 : data.tag) === null || _t === void 0 ? void 0 : _t.link), style: props === null || props === void 0 ? void 0 : props.buttonBgStyle }),
|
339
304
|
React.createElement("div", { ref: buttonRef, hidden: !((_u = data === null || data === void 0 ? void 0 : data.tag) === null || _u === void 0 ? void 0 : _u.link), className: 'waterFallList-btn-wrap', style: Object.assign(Object.assign({}, props === null || props === void 0 ? void 0 : props.buttonBgStyle), { height: 'auto', backgroundColor: 'transparent' }) },
|
340
|
-
React.createElement("button", { className: 'waterFallList-btn', style: props === null || props === void 0 ? void 0 : props.buttonStyle, onClick: handleClickLink }, ((
|
305
|
+
React.createElement("button", { "aria-label": ((_v = data === null || data === void 0 ? void 0 : data.tag) === null || _v === void 0 ? void 0 : _v.linkTitle) || 'Shop the collection', className: 'waterFallList-btn', style: props === null || props === void 0 ? void 0 : props.buttonStyle, onClick: handleClickLink }, ((_w = data === null || data === void 0 ? void 0 : data.tag) === null || _w === void 0 ? void 0 : _w.linkTitle) || 'Shop the collection'))))));
|
341
306
|
}
|
@@ -10,7 +10,7 @@ import { useSxpDataSource } from '../../../../core/hooks';
|
|
10
10
|
import { useEventReport } from '../../../../core/hooks/useEventReport';
|
11
11
|
const WaterFall = (props) => {
|
12
12
|
var _a;
|
13
|
-
const { waterFallData, setOpenHashtag, openHashtag, swiperRef, setWaterFallData, cacheRtcList, setRtcList, cacheActiveIndex, rtcList, setCacheRtcList, setIsFromHashtag, isFromHashtag, bffEventReport, themeTag } = useSxpDataSource();
|
13
|
+
const { waterFallData, setOpenHashtag, openHashtag, swiperRef, setWaterFallData, cacheRtcList, setRtcList, cacheActiveIndex, rtcList, setCacheRtcList, setIsFromHashtag, isFromHashtag, bffEventReport, themeTag, selectTag } = useSxpDataSource();
|
14
14
|
const { backMainFeed } = useEventReport();
|
15
15
|
const ref = useRef(null);
|
16
16
|
const modalEleRef = useRef(null);
|
@@ -32,9 +32,7 @@ const WaterFall = (props) => {
|
|
32
32
|
if (!isEq && cacheRtcList && (cacheRtcList === null || cacheRtcList === void 0 ? void 0 : cacheRtcList.length)) {
|
33
33
|
setRtcList === null || setRtcList === void 0 ? void 0 : setRtcList(cacheRtcList);
|
34
34
|
}
|
35
|
-
|
36
|
-
backMainFeed('branch', themeTag === null || themeTag === void 0 ? void 0 : themeTag.current, waterFallData === null || waterFallData === void 0 ? void 0 : waterFallData.hashTag);
|
37
|
-
}
|
35
|
+
backMainFeed('branch', selectTag, undefined, waterFallData === null || waterFallData === void 0 ? void 0 : waterFallData.hashTag);
|
38
36
|
reportTagsView();
|
39
37
|
setWaterFallData === null || setWaterFallData === void 0 ? void 0 : setWaterFallData(undefined);
|
40
38
|
setIsFromHashtag === null || setIsFromHashtag === void 0 ? void 0 : setIsFromHashtag(false);
|
@@ -31,7 +31,7 @@ const SxpPageRender = ({ globalConfig, descStyle, containerHeight = window.inner
|
|
31
31
|
const viewTime = useRef();
|
32
32
|
const [isLoadMore, setIsLoadMore] = useState(false);
|
33
33
|
const [isShowMore, setIsShowMore] = useState(false);
|
34
|
-
const { loadVideos, bffEventReport, loading, setPopupDetailData, ctaEvent, swiperRef, waterFallData, setOpenHashtag, appDomain, openHashtag, loadingImage, isFromHashtag, popupDetailData, bffFbReport, curTime, h5EnterLink } = useSxpDataSource();
|
34
|
+
const { loadVideos, bffEventReport, loading, setPopupDetailData, ctaEvent, swiperRef, waterFallData, setOpenHashtag, appDomain, openHashtag, loadingImage, isFromHashtag, popupDetailData, bffFbReport, curTime, h5EnterLink, isShowConsent, selectTag } = useSxpDataSource();
|
35
35
|
const { backMainFeed } = useEventReport();
|
36
36
|
const [videoRef, setVideoRef] = useState(null);
|
37
37
|
const playerRef = useRef();
|
@@ -39,21 +39,29 @@ const SxpPageRender = ({ globalConfig, descStyle, containerHeight = window.inner
|
|
39
39
|
const isShowFingerTip = useMemo(() => {
|
40
40
|
return data.length > 0 && !loading && getFeUserId();
|
41
41
|
}, [data, loading]);
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
useEffect(() => {
|
43
|
+
refreshFeSessionId();
|
44
|
+
}, []);
|
45
|
+
useEffect(() => {
|
46
|
+
if ((data === null || data === void 0 ? void 0 : data.length) > 0) {
|
47
|
+
const now = new Date();
|
48
|
+
viewTime.current = now;
|
49
|
+
bffFbReport === null || bffFbReport === void 0 ? void 0 : bffFbReport({
|
50
|
+
eventName: 'PageView'
|
51
|
+
});
|
45
52
|
}
|
53
|
+
}, [data === null || data === void 0 ? void 0 : data.length]);
|
54
|
+
const handleH5EnterLink = useCallback(() => {
|
46
55
|
refreshFeSessionId();
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
56
|
+
h5EnterLink === null || h5EnterLink === void 0 ? void 0 : h5EnterLink();
|
57
|
+
if (data.length > 0) {
|
58
|
+
const now = new Date();
|
59
|
+
viewTime.current = now;
|
60
|
+
bffFbReport === null || bffFbReport === void 0 ? void 0 : bffFbReport({
|
61
|
+
eventName: 'PageView'
|
62
|
+
});
|
51
63
|
}
|
52
|
-
|
53
|
-
eventName: 'PageView'
|
54
|
-
});
|
55
|
-
setIsInit(true);
|
56
|
-
}, [data.length, bffFbReport, h5EnterLink, isInit]);
|
64
|
+
}, [data.length, bffFbReport, h5EnterLink]);
|
57
65
|
const firstRef = useRef();
|
58
66
|
useEffect(() => {
|
59
67
|
var _a, _b, _c, _d;
|
@@ -81,10 +89,6 @@ const SxpPageRender = ({ globalConfig, descStyle, containerHeight = window.inner
|
|
81
89
|
});
|
82
90
|
}
|
83
91
|
}, [videoRef, licenseUrl, data]);
|
84
|
-
useEffect(() => {
|
85
|
-
if (!isInit)
|
86
|
-
handleH5EnterLink();
|
87
|
-
}, [handleH5EnterLink, isInit]);
|
88
92
|
useEffect(() => {
|
89
93
|
var _a;
|
90
94
|
const index = (data === null || data === void 0 ? void 0 : data.findIndex((item) => {
|
@@ -105,8 +109,9 @@ const SxpPageRender = ({ globalConfig, descStyle, containerHeight = window.inner
|
|
105
109
|
const item = data === null || data === void 0 ? void 0 : data[activeIndex];
|
106
110
|
const visibleChange = () => {
|
107
111
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
112
|
+
const repCond = !openHashtag && !isShowConsent;
|
108
113
|
if (document.visibilityState === 'hidden') {
|
109
|
-
if (
|
114
|
+
if (repCond) {
|
110
115
|
SXP_EVENT_BUS.emit(SXP_EVENT_TYPE.PAGE_DID_HIDE, item);
|
111
116
|
handleReportViewImageEnd(item);
|
112
117
|
handleReportProductView(item);
|
@@ -146,11 +151,11 @@ const SxpPageRender = ({ globalConfig, descStyle, containerHeight = window.inner
|
|
146
151
|
}
|
147
152
|
else if (document.visibilityState === 'visible') {
|
148
153
|
handleH5EnterLink();
|
149
|
-
if (
|
154
|
+
if (repCond) {
|
150
155
|
handleViewImageStartEvent(activeIndex);
|
151
156
|
SXP_EVENT_BUS.emit(SXP_EVENT_TYPE.PAGE_DID_SHOW, item);
|
157
|
+
backMainFeed('external', selectTag);
|
152
158
|
}
|
153
|
-
backMainFeed('external');
|
154
159
|
}
|
155
160
|
};
|
156
161
|
document.addEventListener('visibilitychange', visibleChange);
|
@@ -167,17 +172,10 @@ const SxpPageRender = ({ globalConfig, descStyle, containerHeight = window.inner
|
|
167
172
|
tempMap,
|
168
173
|
curTime,
|
169
174
|
backMainFeed,
|
170
|
-
openHashtag
|
175
|
+
openHashtag,
|
176
|
+
isShowConsent,
|
177
|
+
selectTag
|
171
178
|
]);
|
172
|
-
useEffect(() => {
|
173
|
-
const initTime = () => {
|
174
|
-
backMainFeed('external');
|
175
|
-
};
|
176
|
-
window.addEventListener('pageshow', initTime);
|
177
|
-
return () => {
|
178
|
-
window.removeEventListener('pageshow', initTime);
|
179
|
-
};
|
180
|
-
}, []);
|
181
179
|
const tagHeight = useMemo(() => {
|
182
180
|
let h = 0;
|
183
181
|
if (tagList.length > 0) {
|
@@ -77,6 +77,9 @@ export interface ISxpDataSourceContext {
|
|
77
77
|
curTime?: any;
|
78
78
|
h5EnterLink?: () => void;
|
79
79
|
themeTag?: any;
|
80
|
+
isShowConsent?: boolean;
|
81
|
+
selectTag?: string;
|
82
|
+
setSelectTag?: React.Dispatch<React.SetStateAction<string>>;
|
80
83
|
}
|
81
84
|
export declare const SxpDataSourceContext: React.Context<ISxpDataSourceContext>;
|
82
85
|
export interface SxpDataSourceProviderProps {
|
@@ -115,5 +118,6 @@ export interface SxpDataSourceProviderProps {
|
|
115
118
|
globalConfig?: ISxpPageRenderProps['globalConfig'];
|
116
119
|
isEditor?: boolean;
|
117
120
|
}
|
121
|
+
export declare const DEFAULT_TAG = "FOR U";
|
118
122
|
declare const _default: React.NamedExoticComponent<SxpDataSourceProviderProps>;
|
119
123
|
export default _default;
|
@@ -15,6 +15,7 @@ var DataSourceType;
|
|
15
15
|
DataSourceType[DataSourceType["BFF"] = 5] = "BFF";
|
16
16
|
})(DataSourceType || (DataSourceType = {}));
|
17
17
|
const UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_id', 'utm_content', 'cl_source'];
|
18
|
+
export const DEFAULT_TAG = 'FOR U';
|
18
19
|
const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent = true, maxSize, defaultSize, isPreview = false, sxpParameter, appDomain, hashTagSize, loadingImage, isOpenHashTag = false, enabledMetaConversionApi = false, consentHeight, consentWidth, isShowTag = true, isOpenConsent = false, globalConfig, isEditor = false }) => {
|
19
20
|
var _a, _b, _c;
|
20
21
|
const [rtcList, setRtcList] = useState([]);
|
@@ -33,6 +34,7 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
33
34
|
const [videoRef, setVideoRef] = useState(null);
|
34
35
|
const themeTag = useRef();
|
35
36
|
const curTime = useRef();
|
37
|
+
const [selectTag, setSelectTag] = useState(DEFAULT_TAG);
|
36
38
|
const isShowConsent = useMemo(() => {
|
37
39
|
var _a, _b, _c, _d;
|
38
40
|
return (((_d = (_c = (_b = (_a = globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.consent) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.item) === null || _c === void 0 ? void 0 : _c.props) === null || _d === void 0 ? void 0 : _d.privacy_necessity) && !isAgreePolicy && !isEditor) || isOpenConsent;
|
@@ -231,8 +233,9 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
231
233
|
});
|
232
234
|
}, [bffEventReport]);
|
233
235
|
useEffect(() => {
|
234
|
-
|
235
|
-
|
236
|
+
if (!isShowConsent)
|
237
|
+
h5EnterLink();
|
238
|
+
}, [isShowConsent]);
|
236
239
|
useEffect(() => {
|
237
240
|
if (isShowConsent)
|
238
241
|
return;
|
@@ -311,7 +314,10 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
311
314
|
setIsAgreePolicy,
|
312
315
|
curTime,
|
313
316
|
h5EnterLink,
|
314
|
-
themeTag
|
317
|
+
themeTag,
|
318
|
+
isShowConsent,
|
319
|
+
selectTag,
|
320
|
+
setSelectTag
|
315
321
|
} }, isShowConsent ? (React.createElement(Consent, Object.assign({}, (_c = (_b = (_a = globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.consent) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.item) === null || _c === void 0 ? void 0 : _c.props))) : (render({
|
316
322
|
rtcList,
|
317
323
|
mutateLike: bffMutateLike,
|
@@ -2,5 +2,5 @@ import { RecItemType } from '../components/SxpPageRender/typing';
|
|
2
2
|
export declare function useEventReport(): {
|
3
3
|
jumpToWeb: (data?: RecItemType, product?: RecItemType['product'], cta?: RecItemType['cta'], position?: number) => void;
|
4
4
|
productView: (data?: RecItemType, product?: RecItemType['product'], cta?: RecItemType['cta'], viewTime?: any, position?: number) => void;
|
5
|
-
backMainFeed: (lastFeed
|
5
|
+
backMainFeed: (lastFeed: 'theme' | 'branch' | 'external', selectTag?: string, themeTag?: string, hashTag?: string) => void;
|
6
6
|
};
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { useCallback } from 'react';
|
2
2
|
import { useSxpDataSource } from './useSxpDataSource';
|
3
|
+
import { DEFAULT_TAG } from '../context/SxpDataSourceProvider';
|
3
4
|
export function useEventReport() {
|
4
5
|
const { bffEventReport, popupDetailData, waterFallData, isFromHashtag } = useSxpDataSource();
|
5
6
|
const jumpToWeb = useCallback((data, product, cta, position) => {
|
@@ -66,16 +67,18 @@ export function useEventReport() {
|
|
66
67
|
}
|
67
68
|
});
|
68
69
|
}, [bffEventReport, popupDetailData]);
|
69
|
-
const backMainFeed = useCallback((lastFeed, themeTag, hashTag) => {
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
70
|
+
const backMainFeed = useCallback((lastFeed, selectTag, themeTag, hashTag) => {
|
71
|
+
if (selectTag && selectTag === DEFAULT_TAG) {
|
72
|
+
bffEventReport === null || bffEventReport === void 0 ? void 0 : bffEventReport({
|
73
|
+
eventInfo: {
|
74
|
+
lastFeed,
|
75
|
+
themeTags: themeTag ? `['${themeTag}']` : '',
|
76
|
+
hashTags: hashTag ? `['${hashTag}']` : '',
|
77
|
+
eventSubject: 'backMainFeed',
|
78
|
+
eventDescription: 'back Main Feed'
|
79
|
+
}
|
80
|
+
});
|
81
|
+
}
|
79
82
|
}, [bffEventReport]);
|
80
83
|
return {
|
81
84
|
jumpToWeb,
|
@@ -84,6 +84,6 @@ const AppointForm = (_a) => {
|
|
84
84
|
React.createElement("div", { className: 'pb-appoint-form-container' },
|
85
85
|
React.createElement(BetaSchemaForm, { columns: columnsData, submitter: false, layout: layoutType, autoFocusFirstInput: false, size: 'large', formRef: formRef, className: 'panel-reset' }))),
|
86
86
|
React.createElement("div", { className: 'pb-appoint-form-btn-wrapper' },
|
87
|
-
React.createElement("button", { onClick: handleSubmit, className: 'pb-appoint-form-btn', style: Object.assign({ color: submitColor, background: submitBgColor }, submitButtonStyle) }, loading ? React.createElement(React.Fragment, null, "loading...") : submitText))));
|
87
|
+
React.createElement("button", { "aria-label": submitText, onClick: handleSubmit, className: 'pb-appoint-form-btn', style: Object.assign({ color: submitColor, background: submitBgColor }, submitButtonStyle) }, loading ? React.createElement(React.Fragment, null, "loading...") : submitText))));
|
88
88
|
};
|
89
89
|
export default memo(AppointForm);
|
@@ -73,8 +73,8 @@ const CommodityDetail = (_a) => {
|
|
73
73
|
18-karat gold, this necklace is embellished with hand-set diamonds.`, maxStr: 79, className: 'pb-commondity-content-info', style: commodityStyles === null || commodityStyles === void 0 ? void 0 : commodityStyles.info }))));
|
74
74
|
};
|
75
75
|
const renderBtn = () => {
|
76
|
-
var _a;
|
77
|
-
return (React.createElement(React.Fragment, null, (isDefault || (product === null || product === void 0 ? void 0 : product.link)) && (React.createElement("button", { onClick: handleLink, className: 'pb-commondity-btn', style: buttonStyle }, (
|
76
|
+
var _a, _b;
|
77
|
+
return (React.createElement(React.Fragment, null, (isDefault || (product === null || product === void 0 ? void 0 : product.link)) && (React.createElement("button", { "aria-label": (_a = cta === null || cta === void 0 ? void 0 : cta.enTitle) !== null && _a !== void 0 ? _a : 'Purchase on Website', onClick: handleLink, className: 'pb-commondity-btn', style: buttonStyle }, (_b = cta === null || cta === void 0 ? void 0 : cta.enTitle) !== null && _b !== void 0 ? _b : 'Purchase on Website'))));
|
78
78
|
};
|
79
79
|
const getStyle = useCallback((style) => {
|
80
80
|
if (style === null || style === void 0 ? void 0 : style.lineClamp) {
|
@@ -120,7 +120,7 @@ const CommodityDetail = (_a) => {
|
|
120
120
|
top: 0,
|
121
121
|
objectFit: 'cover',
|
122
122
|
width: '100%'
|
123
|
-
}), src: (_k = sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.bottom_image) !== null && _k !== void 0 ? _k : bottom_image, alt: '' }))),
|
123
|
+
}), src: (_k = sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.bottom_image) !== null && _k !== void 0 ? _k : bottom_image, alt: 'pdp image' }))),
|
124
124
|
React.createElement("div", { className: 'pb-commondity-content' }, renderContent({ isPost }))),
|
125
125
|
renderBtn(),
|
126
126
|
React.createElement(Modal, { visible: showModal, onClose: () => setShowModal(false) },
|
@@ -9,7 +9,7 @@ import arrow from './arrow.png';
|
|
9
9
|
import { useEventReport } from '../../../../core/hooks/useEventReport';
|
10
10
|
import FormatImage from '../../../../core/components/SxpPageRender/FormatImage';
|
11
11
|
const CommodityDetailDiro = (_a) => {
|
12
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
12
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
13
13
|
var { style, isDefault, rec, viewTime, isPost, bottom_image, index } = _a, props = __rest(_a, ["style", "isDefault", "rec", "viewTime", "isPost", "bottom_image", "index"]);
|
14
14
|
const [spread, setSpread] = useState(true);
|
15
15
|
const { sxpParameter } = useSxpDataSource();
|
@@ -149,7 +149,7 @@ const CommodityDetailDiro = (_a) => {
|
|
149
149
|
top: 0,
|
150
150
|
objectFit: 'cover',
|
151
151
|
width: '100%'
|
152
|
-
}), src: (_j = sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.bottom_image) !== null && _j !== void 0 ? _j : bottom_image, alt: '' }))),
|
152
|
+
}), src: (_j = sxpParameter === null || sxpParameter === void 0 ? void 0 : sxpParameter.bottom_image) !== null && _j !== void 0 ? _j : bottom_image, alt: 'pdp image' }))),
|
153
153
|
React.createElement("div", { className: 'pb-commondityDiro-content' },
|
154
154
|
React.createElement("div", { className: 'pb-commondityDiro-content-title' }, (_k = product === null || product === void 0 ? void 0 : product.title) !== null && _k !== void 0 ? _k : 'MEDIUM LADY D-LITE BAG'),
|
155
155
|
React.createElement("div", { className: 'pb-commondityDiro-content-collection', hidden: !!product && (!(product === null || product === void 0 ? void 0 : product.collection) || (product === null || product === void 0 ? void 0 : product.collection) === '') }, (product === null || product === void 0 ? void 0 : product.collection) || 'Gold-Tone and White Butterfly Zodiac Embroidery'),
|
@@ -159,12 +159,12 @@ const CommodityDetailDiro = (_a) => {
|
|
159
159
|
React.createElement("div", { className: 'pb-commondityDiro-desc', hidden: !!product && (!(product === null || product === void 0 ? void 0 : product.info) || (product === null || product === void 0 ? void 0 : product.info) === '') },
|
160
160
|
React.createElement("div", { className: 'pb-commondityDiro-desc-collapse', onClick: handleClickCollapse },
|
161
161
|
React.createElement("div", { className: 'pb-commondityDiro-desc-collapse-title' }, "DESCRIPTION"),
|
162
|
-
React.createElement("img", { className: `pb-commondityDiro-desc-collapse-icon ${spread ? 'pb-commondityDiro-desc-collapse-iconActive' : ''}`, src: arrow, alt: '' })),
|
162
|
+
React.createElement("img", { className: `pb-commondityDiro-desc-collapse-icon ${spread ? 'pb-commondityDiro-desc-collapse-iconActive' : ''}`, src: arrow, alt: 'arrow image' })),
|
163
163
|
React.createElement("div", { className: 'pb-commondityDiro-desc-info', hidden: !spread }, (product === null || product === void 0 ? void 0 : product.info) ||
|
164
164
|
'The Lady D-Lite bag combines classic elegance with House modernity. The style is fully embroidered with a gold-tone and white Butterfly Zodiac motif by Pietro Ruffo, showcasing a constellation enhanced by astrological signs and adorned with butterflies. A Christian Dior Paris signature adorns the front, while D.I.O.R. charms in pale gold-finish metal further enhance and highlight the silhouette. Featuring a wide, removable embroidered shoulder strap, the medium Lady D-Lite bag can be carried by hand or worn crossbody.')),
|
165
165
|
(!product || (product === null || product === void 0 ? void 0 : product.link)) && (React.createElement(React.Fragment, null,
|
166
166
|
React.createElement("div", { className: 'pb-commondityDiro-h90' }),
|
167
167
|
React.createElement("div", { className: 'pb-commondityDiro-bottom' },
|
168
|
-
React.createElement("button", { onClick: handleLink, className: 'pb-commondityDiro-bottom-btn' }, (
|
168
|
+
React.createElement("button", { "aria-label": (_l = cta === null || cta === void 0 ? void 0 : cta.enTitle) !== null && _l !== void 0 ? _l : 'SHOP NOW', onClick: handleLink, className: 'pb-commondityDiro-bottom-btn' }, (_m = cta === null || cta === void 0 ? void 0 : cta.enTitle) !== null && _m !== void 0 ? _m : 'SHOP NOW')))))));
|
169
169
|
};
|
170
170
|
export default memo(CommodityDetailDiro);
|