pb-sxp-ui 14.0.7 → 15.0.1
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 +157 -607
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +15 -89
- package/dist/index.js +157 -607
- package/dist/index.js.map +1 -1
- package/dist/index.min.cjs +5 -5
- package/dist/index.min.cjs.map +1 -1
- package/dist/index.min.js +5 -5
- package/dist/index.min.js.map +1 -1
- package/dist/pb-ui.js +157 -607
- package/dist/pb-ui.js.map +1 -1
- package/dist/pb-ui.min.js +5 -5
- package/dist/pb-ui.min.js.map +1 -1
- package/es/core/components/SxpPageRender/ConsentPopup.js +8 -8
- package/es/core/components/SxpPageRender/Navbar.js +1 -1
- package/es/core/components/SxpPageRender/WaterFall/List.js +3 -3
- package/es/core/components/SxpPageRender/WaterFall/index.js +2 -2
- package/es/core/components/SxpPageRender/index.js +2 -5
- package/es/core/context/SxpDataSourceProvider.js +22 -54
- package/es/core/utils/materials.js +3 -5
- package/es/materials/sxp/HashTag/index.d.ts +4 -1
- package/es/materials/sxp/HashTag/material.js +2 -1
- package/es/materials/sxp/HashTag/settingRender.d.ts +0 -2
- package/es/materials/sxp/HashTag/settingRender.js +2 -3
- package/es/materials/sxp/consentPopup/Display/index.d.ts +2 -2
- package/es/materials/sxp/consentPopup/Display/index.js +5 -7
- package/es/materials/sxp/consentPopup/index.d.ts +0 -2
- package/es/materials/sxp/consentPopup/index.js +0 -2
- package/es/materials/sxp/cta/AniLink/index.js +1 -1
- package/es/materials/sxp/cta/AniLinkPopup/index.js +1 -1
- package/es/materials/sxp/popup/ConsentDetail/index.d.ts +1 -2
- package/es/materials/sxp/popup/ConsentDetail/index.js +2 -2
- package/lib/core/components/SxpPageRender/ConsentPopup.js +7 -7
- package/lib/core/components/SxpPageRender/Navbar.js +1 -1
- package/lib/core/components/SxpPageRender/WaterFall/List.js +3 -3
- package/lib/core/components/SxpPageRender/WaterFall/index.js +2 -2
- package/lib/core/components/SxpPageRender/index.js +2 -5
- package/lib/core/context/SxpDataSourceProvider.js +22 -54
- package/lib/core/utils/materials.js +3 -5
- package/lib/materials/sxp/HashTag/index.d.ts +4 -1
- package/lib/materials/sxp/HashTag/material.js +2 -1
- package/lib/materials/sxp/HashTag/settingRender.d.ts +0 -2
- package/lib/materials/sxp/HashTag/settingRender.js +2 -3
- package/lib/materials/sxp/consentPopup/Display/index.d.ts +2 -2
- package/lib/materials/sxp/consentPopup/Display/index.js +5 -7
- package/lib/materials/sxp/consentPopup/index.d.ts +0 -2
- package/lib/materials/sxp/consentPopup/index.js +0 -2
- package/lib/materials/sxp/cta/AniLink/index.js +1 -1
- package/lib/materials/sxp/cta/AniLinkPopup/index.js +1 -1
- package/lib/materials/sxp/popup/ConsentDetail/index.d.ts +1 -2
- package/lib/materials/sxp/popup/ConsentDetail/index.js +2 -2
- package/package.json +1 -1
- package/es/materials/sxp/consentPopup/Click/index.d.ts +0 -19
- package/es/materials/sxp/consentPopup/Click/index.js +0 -19
- package/es/materials/sxp/consentPopup/Click/material.d.ts +0 -2
- package/es/materials/sxp/consentPopup/Click/material.js +0 -48
- package/es/materials/sxp/consentPopup/Click/settingRender.d.ts +0 -63
- package/es/materials/sxp/consentPopup/Click/settingRender.js +0 -210
- package/es/materials/sxp/consentPopup/Swipe/index.d.ts +0 -12
- package/es/materials/sxp/consentPopup/Swipe/index.js +0 -44
- package/es/materials/sxp/consentPopup/Swipe/material.d.ts +0 -2
- package/es/materials/sxp/consentPopup/Swipe/material.js +0 -24
- package/es/materials/sxp/consentPopup/Swipe/settingRender.d.ts +0 -29
- package/es/materials/sxp/consentPopup/Swipe/settingRender.js +0 -43
- package/lib/materials/sxp/consentPopup/Click/index.d.ts +0 -19
- package/lib/materials/sxp/consentPopup/Click/index.js +0 -21
- package/lib/materials/sxp/consentPopup/Click/material.d.ts +0 -2
- package/lib/materials/sxp/consentPopup/Click/material.js +0 -52
- package/lib/materials/sxp/consentPopup/Click/settingRender.d.ts +0 -63
- package/lib/materials/sxp/consentPopup/Click/settingRender.js +0 -212
- package/lib/materials/sxp/consentPopup/Swipe/index.d.ts +0 -12
- package/lib/materials/sxp/consentPopup/Swipe/index.js +0 -46
- package/lib/materials/sxp/consentPopup/Swipe/material.d.ts +0 -2
- package/lib/materials/sxp/consentPopup/Swipe/material.js +0 -28
- package/lib/materials/sxp/consentPopup/Swipe/settingRender.d.ts +0 -29
- package/lib/materials/sxp/consentPopup/Swipe/settingRender.js +0 -45
@@ -1,15 +1,15 @@
|
|
1
|
-
import React, { memo } from 'react';
|
1
|
+
import React, { memo, useMemo } from 'react';
|
2
2
|
import './index.less';
|
3
3
|
import withBindDataSource from '../../../core/hoc/withBindDataSource';
|
4
|
-
import {
|
4
|
+
import { getContsentState } from '../../../core/utils/localStore';
|
5
5
|
const Consent = ({ resolver, globalConfig }) => {
|
6
6
|
var _a, _b;
|
7
|
-
const
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
const t = resolver === null || resolver === void 0 ? void 0 : resolver[value === null || value === void 0 ? void 0 : value.type];
|
7
|
+
const contsentState = useMemo(() => {
|
8
|
+
return getContsentState();
|
9
|
+
}, []);
|
10
|
+
const t = resolver === null || resolver === void 0 ? void 0 : resolver['Display'];
|
12
11
|
const Component = withBindDataSource(t);
|
13
|
-
|
12
|
+
const value = (_b = (_a = globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.consentPopup) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.item;
|
13
|
+
return React.createElement(Component, Object.assign({}, value === null || value === void 0 ? void 0 : value.props, { style: value === null || value === void 0 ? void 0 : value.style, event: (value === null || value === void 0 ? void 0 : value.event) || {}, contsentState: contsentState }));
|
14
14
|
};
|
15
15
|
export default memo(Consent);
|
@@ -8,7 +8,7 @@ const Navbar = ({ icon, styles, textStyle, onClose }) => {
|
|
8
8
|
React.createElement("button", { className: 'clc-sxp-nav-left', role: 'button', "aria-label": 'back button', onClick: onClose },
|
9
9
|
React.createElement("img", { src: icon, alt: 'back button' })),
|
10
10
|
React.createElement("div", { className: 'clc-sxp-nav-title', style: Object.assign(Object.assign({}, textStyle), { paddingLeft: (textStyle === null || textStyle === void 0 ? void 0 : textStyle.textAlign) === 'left' ? '35px' : 0 }), dangerouslySetInnerHTML: {
|
11
|
-
__html: setFontForText(`#${(_a = waterFallData === null || waterFallData === void 0 ? void 0 : waterFallData.hashTag) !== null && _a !== void 0 ? _a : '
|
11
|
+
__html: setFontForText(`#${(_a = waterFallData === null || waterFallData === void 0 ? void 0 : waterFallData.hashTag) !== null && _a !== void 0 ? _a : '标题'}`, textStyle)
|
12
12
|
} })));
|
13
13
|
};
|
14
14
|
export default memo(Navbar);
|
@@ -10,7 +10,7 @@ import { useEventReport } from '../../../../core/hooks/useEventReport';
|
|
10
10
|
import { getPriceText } from '../../../../core/utils/materials';
|
11
11
|
const WaterfallFlowItem = (props) => {
|
12
12
|
var _a;
|
13
|
-
const { rec, index, list, reportTagsView, textStyles, space } = props;
|
13
|
+
const { rec, index, list, reportTagsView, textStyles, space, openFixedSize } = props;
|
14
14
|
const { swiperRef, setRtcList, setOpenHashtag, sxpParameter, globalConfig } = useSxpDataSource();
|
15
15
|
const [showVideo, setShowVideo] = useState(false);
|
16
16
|
const imgDom = useRef(null);
|
@@ -104,11 +104,11 @@ const WaterfallFlowItem = (props) => {
|
|
104
104
|
}, 0);
|
105
105
|
};
|
106
106
|
return (React.createElement("div", { ref: ref, className: 'list-content-listItem', key: index, onClick: handleClickToDetail, style: { marginBottom: space } },
|
107
|
-
React.createElement("div", { className: 'list-content-listItem-picture' },
|
107
|
+
React.createElement("div", { className: (openFixedSize === null || openFixedSize === void 0 ? void 0 : openFixedSize.ratio) === '1' ? 'list-content-listItem-picture' : 'list-content-listItem-picture1609' },
|
108
108
|
showVideo && (React.createElement("div", { style: { display: 'none' } },
|
109
109
|
React.createElement("video", { ref: videoDom, crossOrigin: 'anonymous', className: 'list-content-listItem-picture-img' }),
|
110
110
|
React.createElement("canvas", { ref: canvasRef }))),
|
111
|
-
React.createElement(FormatImage, { loading: 'lazy', className: 'list-content-listItem-picture-img', ref: imgDom })),
|
111
|
+
React.createElement(FormatImage, { loading: 'lazy', className: (openFixedSize === null || openFixedSize === void 0 ? void 0 : openFixedSize.ratio) === '1' ? 'list-content-listItem-picture-img' : 'list-content-listItem-picture1609-img', ref: imgDom })),
|
112
112
|
React.createElement("div", { className: 'list-content-listItem-info' },
|
113
113
|
React.createElement("div", { className: `${'list-content-listItem-info-title'} ${priceText ? 'list-content-listItem-info-nowrap' : ''}`, style: textStyles === null || textStyles === void 0 ? void 0 : textStyles.title, dangerouslySetInnerHTML: {
|
114
114
|
__html: setFontForText(title, textStyles === null || textStyles === void 0 ? void 0 : textStyles.title)
|
@@ -8,7 +8,7 @@ import List from './List';
|
|
8
8
|
import { useSxpDataSource } from '../../../../core/hooks';
|
9
9
|
import { useEventReport } from '../../../../core/hooks/useEventReport';
|
10
10
|
const WaterFall = (props) => {
|
11
|
-
var _a;
|
11
|
+
var _a, _b;
|
12
12
|
const { waterFallData, setOpenHashtag, openHashtag, swiperRef, setWaterFallData, cacheRtcList, setRtcList, cacheActiveIndex, rtcList, setCacheRtcList, setIsFromHashtag, isFromHashtag, bffEventReport, themeTag, selectTag, bffFbReport } = useSxpDataSource();
|
13
13
|
const { backMainFeed } = useEventReport();
|
14
14
|
const modalEleRef = useRef(null);
|
@@ -97,6 +97,6 @@ const WaterFall = (props) => {
|
|
97
97
|
display: openHashtag ? 'block' : 'none'
|
98
98
|
} },
|
99
99
|
React.createElement(Navbar, { icon: left, styles: { top: '32px' }, textStyle: (_a = props === null || props === void 0 ? void 0 : props.textStyles) === null || _a === void 0 ? void 0 : _a.hashTagTitle, onClose: handleClose }),
|
100
|
-
(props === null || props === void 0 ? void 0 : props.openFixedSize) === true || (props === null || props === void 0 ? void 0 : props.openFixedSize) === undefined ? (React.createElement(List, Object.assign({ key: waterFallData, reportTagsView: reportTagsView }, props))) : (React.createElement(WaterfallList, Object.assign({ key: waterFallData, reportTagsView: reportTagsView }, props)))), modalEleRef.current);
|
100
|
+
((_b = props === null || props === void 0 ? void 0 : props.openFixedSize) === null || _b === void 0 ? void 0 : _b.open) === true || (props === null || props === void 0 ? void 0 : props.openFixedSize) === undefined ? (React.createElement(List, Object.assign({ key: waterFallData, reportTagsView: reportTagsView }, props))) : (React.createElement(WaterfallList, Object.assign({ key: waterFallData, reportTagsView: reportTagsView }, props)))), modalEleRef.current);
|
101
101
|
};
|
102
102
|
export default memo(WaterFall);
|
@@ -117,7 +117,7 @@ const SxpPageRender = ({ globalConfig, descStyle, containerHeight = window.inner
|
|
117
117
|
contentId: (_m = item === null || item === void 0 ? void 0 : item.video) === null || _m === void 0 ? void 0 : _m.itemId,
|
118
118
|
productId: (_o = item === null || item === void 0 ? void 0 : item.product) === null || _o === void 0 ? void 0 : _o.itemId,
|
119
119
|
position: activeIndex + '',
|
120
|
-
fromKName: fk
|
120
|
+
fromKName: fk ? fk : fromKName,
|
121
121
|
fromKPage: location === null || location === void 0 ? void 0 : location.href,
|
122
122
|
ctatId: (_r = (_q = (_p = item === null || item === void 0 ? void 0 : item.video) === null || _p === void 0 ? void 0 : _p.bindCta) === null || _q === void 0 ? void 0 : _q.itemId) !== null && _r !== void 0 ? _r : '',
|
123
123
|
traceInfo: (_v = (_t = (_s = item === null || item === void 0 ? void 0 : item.video) === null || _s === void 0 ? void 0 : _s.traceInfo) !== null && _t !== void 0 ? _t : (_u = item === null || item === void 0 ? void 0 : item.product) === null || _u === void 0 ? void 0 : _u.traceInfo) !== null && _v !== void 0 ? _v : ''
|
@@ -144,12 +144,9 @@ const SxpPageRender = ({ globalConfig, descStyle, containerHeight = window.inner
|
|
144
144
|
setIsReload(new Date().getTime());
|
145
145
|
skipLinkRef.current = false;
|
146
146
|
}
|
147
|
-
refreshFeSession === null || refreshFeSession === void 0 ? void 0 : refreshFeSession(false);
|
148
147
|
handleH5EnterLink();
|
149
148
|
if (repCond) {
|
150
|
-
|
151
|
-
SXP_EVENT_BUS.emit(SXP_EVENT_TYPE.PAGE_DID_SHOW, item);
|
152
|
-
});
|
149
|
+
SXP_EVENT_BUS.emit(SXP_EVENT_TYPE.PAGE_DID_SHOW, item);
|
153
150
|
backMainFeed('external', selectTag);
|
154
151
|
}
|
155
152
|
}
|
@@ -99,32 +99,29 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
99
99
|
const bffDataSource = useMemo(() => {
|
100
100
|
return dataSources === null || dataSources === void 0 ? void 0 : dataSources.find((d) => d.type === DataSourceType.BFF);
|
101
101
|
}, [dataSources]);
|
102
|
-
const fakeUserId = useMemo(() => {
|
103
|
-
var _a;
|
104
|
-
return ((_a = bffDataSource === null || bffDataSource === void 0 ? void 0 : bffDataSource.headers) === null || _a === void 0 ? void 0 : _a['x-app-id']) + storeAndLoadFeUserId();
|
105
|
-
}, [bffDataSource]);
|
106
102
|
const bffFetch = useCallback((path, options) => {
|
107
103
|
if (!bffDataSource)
|
108
104
|
return;
|
109
105
|
const url = bffDataSource.url;
|
106
|
+
const fakeUserId = storeAndLoadFeUserId();
|
110
107
|
if (options === null || options === void 0 ? void 0 : options.query) {
|
111
108
|
const queryString = qs.stringify(options.query);
|
112
109
|
path = `${path}?${queryString}`;
|
113
110
|
}
|
114
111
|
if (options.type === 'beacon' && navigator.sendBeacon) {
|
115
|
-
return navigator.sendBeacon(`${url}/api
|
112
|
+
return navigator.sendBeacon(`${url}/api/v1${path}`, new Blob([
|
116
113
|
JSON.stringify(Object.assign(Object.assign(Object.assign({}, options.body), bffDataSource.headers), { 'x-user-id': fakeUserId }))
|
117
114
|
], { type: 'application/json;charset=UTF-8' }));
|
118
115
|
}
|
119
116
|
return window
|
120
|
-
.fetch(`${url}/api
|
117
|
+
.fetch(`${url}/api/v1${path}`, {
|
121
118
|
headers: Object.assign({ 'Content-Type': 'application/json', 'x-user-id': fakeUserId }, bffDataSource.headers),
|
122
119
|
method: options.method,
|
123
120
|
body: JSON.stringify(options.body)
|
124
121
|
})
|
125
122
|
.then((res) => res.json())
|
126
123
|
.catch((err) => Promise.reject(err));
|
127
|
-
}, [bffDataSource
|
124
|
+
}, [bffDataSource]);
|
128
125
|
const getRecommendVideos = useCallback((query) => __awaiter(void 0, void 0, void 0, function* () {
|
129
126
|
var _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
130
127
|
query = {
|
@@ -161,16 +158,14 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
161
158
|
const recurveRecList = (query) => __awaiter(void 0, void 0, void 0, function* () {
|
162
159
|
var _v, _w, _x, _y, _z, _0;
|
163
160
|
query.pageNum = pageNum;
|
164
|
-
result = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('
|
161
|
+
result = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('/recommend/list', { method: 'POST', body: query }));
|
165
162
|
if (!(result === null || result === void 0 ? void 0 : result.success)) {
|
166
163
|
return undefined;
|
167
164
|
}
|
168
165
|
setLoading(false);
|
169
166
|
list = list.concat((_y = (_x = (_w = (_v = result === null || result === void 0 ? void 0 : result.data) === null || _v === void 0 ? void 0 : _v.recList) === null || _w === void 0 ? void 0 : _w.filter) === null || _x === void 0 ? void 0 : _x.call(_w, (item) => (item === null || item === void 0 ? void 0 : item.product) || (item === null || item === void 0 ? void 0 : item.video))) !== null && _y !== void 0 ? _y : []);
|
170
|
-
|
171
|
-
|
172
|
-
setCacheRtcList(getFilterRecList(Object.assign(Object.assign({}, result === null || result === void 0 ? void 0 : result.data), { recList: list })));
|
173
|
-
}
|
167
|
+
setRtcList(getFilterRecList(Object.assign(Object.assign({}, result.data), { recList: list })));
|
168
|
+
setCacheRtcList(getFilterRecList(Object.assign(Object.assign({}, result.data), { recList: list })));
|
174
169
|
const isNotNullList = (_0 = (_z = result === null || result === void 0 ? void 0 : result.data) === null || _z === void 0 ? void 0 : _z.recList) === null || _0 === void 0 ? void 0 : _0.some((item) => (item === null || item === void 0 ? void 0 : item.product) || (item === null || item === void 0 ? void 0 : item.video));
|
175
170
|
if (isNotNullList) {
|
176
171
|
pageNum = pageNum + 1;
|
@@ -180,12 +175,12 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
180
175
|
yield recurveRecList(query);
|
181
176
|
if (!(query === null || query === void 0 ? void 0 : query.hashTag) && result)
|
182
177
|
setCurReqInfo({ rtc: (_l = result === null || result === void 0 ? void 0 : result.data) === null || _l === void 0 ? void 0 : _l.rtc, requestId: (_m = result === null || result === void 0 ? void 0 : result.data) === null || _m === void 0 ? void 0 : _m.requestId });
|
183
|
-
return Object.assign(Object.assign({}, result
|
178
|
+
return Object.assign(Object.assign({}, result.data), { recList: list });
|
184
179
|
}
|
185
180
|
if (globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.enablePreview) {
|
186
181
|
query = Object.assign(Object.assign({}, query), { directPage: true, level: 1, pageNum: (_o = query === null || query === void 0 ? void 0 : query.pageNum) !== null && _o !== void 0 ? _o : 1 });
|
187
182
|
}
|
188
|
-
const result = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('
|
183
|
+
const result = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('/recommend/list', { method: 'POST', body: query }));
|
189
184
|
if (!(result === null || result === void 0 ? void 0 : result.success)) {
|
190
185
|
return undefined;
|
191
186
|
}
|
@@ -235,7 +230,6 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
235
230
|
return expire;
|
236
231
|
}, [data]);
|
237
232
|
const bffEventReport = useCallback(({ userInfo, eventInfo, reportLayId = true }) => {
|
238
|
-
var _a, _b;
|
239
233
|
if (!enableReportEvent || (globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.enablePreview)) {
|
240
234
|
return;
|
241
235
|
}
|
@@ -243,16 +237,7 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
243
237
|
userInfo = {};
|
244
238
|
}
|
245
239
|
const sessionID = storeAndLoadFeSessionId();
|
246
|
-
const
|
247
|
-
const queryString = location.search.slice(1);
|
248
|
-
(_a = splitUrlParams(queryString)) === null || _a === void 0 ? void 0 : _a.map((val) => {
|
249
|
-
const key = val.split('=')[0];
|
250
|
-
const value = val.split('=')[1];
|
251
|
-
params[key] = value;
|
252
|
-
});
|
253
|
-
console.log(params, '111');
|
254
|
-
const cl_source = params === null || params === void 0 ? void 0 : params.cl_source;
|
255
|
-
const ef = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ sessionID, rtc: curReqInfo.rtc, requestId: curReqInfo.requestId }, { playbookType }), (layoutVariantId && reportLayId && { layoutVariantId })), eventInfo), ((eventInfo === null || eventInfo === void 0 ? void 0 : eventInfo.position) && channel && { position: Number(eventInfo === null || eventInfo === void 0 ? void 0 : eventInfo.position) + 1 + '' })), (cl_source && { cl_source }));
|
240
|
+
const ef = Object.assign(Object.assign(Object.assign(Object.assign({ sessionID, rtc: curReqInfo.rtc, requestId: curReqInfo.requestId }, { playbookType }), (layoutVariantId && reportLayId && { layoutVariantId })), eventInfo), ((eventInfo === null || eventInfo === void 0 ? void 0 : eventInfo.position) && channel && { position: Number(eventInfo === null || eventInfo === void 0 ? void 0 : eventInfo.position) + 1 + '' }));
|
256
241
|
const realUserInfo = Object.entries(userInfo).map(([k, v]) => ({ name: k, value: v }));
|
257
242
|
const realEventInfo = Object.entries(ef)
|
258
243
|
.map(([k, v]) => v && { name: k, value: v })
|
@@ -261,23 +246,14 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
261
246
|
console.log('userInfo:', userInfo);
|
262
247
|
console.log('eventInfo:', ef);
|
263
248
|
console.log('========= 结束 =========');
|
264
|
-
return bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch(
|
249
|
+
return bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('/event/report', {
|
265
250
|
method: 'POST',
|
266
251
|
body: { userInfo: realUserInfo, eventInfo: realEventInfo },
|
267
252
|
type: 'beacon'
|
268
253
|
});
|
269
|
-
}, [
|
270
|
-
bffFetch,
|
271
|
-
curReqInfo,
|
272
|
-
enableReportEvent,
|
273
|
-
globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.enablePreview,
|
274
|
-
layoutVariantId,
|
275
|
-
globalConfig,
|
276
|
-
playbookType,
|
277
|
-
bffDataSource
|
278
|
-
]);
|
254
|
+
}, [bffFetch, curReqInfo, enableReportEvent, globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.enablePreview, layoutVariantId, globalConfig, playbookType]);
|
279
255
|
const bffFbReport = useCallback(({ eventName, product }) => {
|
280
|
-
var _a, _b, _c, _d, _e
|
256
|
+
var _a, _b, _c, _d, _e;
|
281
257
|
if (!enableReportEvent ||
|
282
258
|
!enabledMetaConversionApi ||
|
283
259
|
(globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.enablePreview) ||
|
@@ -289,7 +265,7 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
289
265
|
const fbclid = urlParams === null || urlParams === void 0 ? void 0 : urlParams.get('fbclid');
|
290
266
|
const fix_par = {
|
291
267
|
event_source_url: (_c = window === null || window === void 0 ? void 0 : window.location) === null || _c === void 0 ? void 0 : _c.href,
|
292
|
-
external_id:
|
268
|
+
external_id: storeAndLoadFeUserId(),
|
293
269
|
client_user_agent: (_e = (_d = window === null || window === void 0 ? void 0 : window.navigator) === null || _d === void 0 ? void 0 : _d.userAgent) !== null && _e !== void 0 ? _e : '',
|
294
270
|
fbc: fbclid ? `fb.2.${new Date().getTime()}.${fbclid}` : '',
|
295
271
|
fbp: getCookie('_fbp') ? `fb.2.${new Date().getTime()}.${getCookie('_fbp')}` : '',
|
@@ -341,30 +317,22 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
341
317
|
}
|
342
318
|
};
|
343
319
|
getEventParams(jsonParams);
|
344
|
-
return bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch(
|
320
|
+
return bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('/fb/events', {
|
345
321
|
method: 'POST',
|
346
322
|
body: jsonParams,
|
347
323
|
type: 'beacon'
|
348
324
|
});
|
349
|
-
}, [
|
350
|
-
bffFetch,
|
351
|
-
enableReportEvent,
|
352
|
-
enabledMetaConversionApi,
|
353
|
-
globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.enablePreview,
|
354
|
-
globalConfig,
|
355
|
-
fakeUserId,
|
356
|
-
bffDataSource
|
357
|
-
]);
|
325
|
+
}, [bffFetch, enableReportEvent, enabledMetaConversionApi, globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.enablePreview, globalConfig]);
|
358
326
|
const bffMutateLike = useCallback((body) => __awaiter(void 0, void 0, void 0, function* () {
|
359
|
-
const res = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('
|
327
|
+
const res = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('/recommend/like', { method: 'POST', body }));
|
360
328
|
return res === null || res === void 0 ? void 0 : res.success;
|
361
329
|
}), [bffFetch]);
|
362
330
|
const bffMutateUnlike = useCallback((body) => __awaiter(void 0, void 0, void 0, function* () {
|
363
|
-
const res = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('
|
331
|
+
const res = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('/recommend/unlike', { method: 'POST', body }));
|
364
332
|
return res === null || res === void 0 ? void 0 : res.success;
|
365
333
|
}), [bffFetch]);
|
366
334
|
const bffSubmitForm = useCallback((body) => __awaiter(void 0, void 0, void 0, function* () {
|
367
|
-
const res = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('
|
335
|
+
const res = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('/customform', { method: 'POST', body }));
|
368
336
|
return res === null || res === void 0 ? void 0 : res.success;
|
369
337
|
}), [bffFetch]);
|
370
338
|
const bffGetTagList = useCallback((data) => __awaiter(void 0, void 0, void 0, function* () {
|
@@ -378,7 +346,7 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
378
346
|
const key = val.split('=')[0];
|
379
347
|
return (_b = ((_a = utmParameter === null || utmParameter === void 0 ? void 0 : utmParameter.channels) !== null && _a !== void 0 ? _a : [])) === null || _b === void 0 ? void 0 : _b.includes(key);
|
380
348
|
})) === null || _9 === void 0 ? void 0 : _9.join('&')) !== null && _10 !== void 0 ? _10 : '';
|
381
|
-
const result = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('
|
349
|
+
const result = yield (bffFetch === null || bffFetch === void 0 ? void 0 : bffFetch('/tag/list', { method: 'GET', query: { channel: decodeURIComponent(val) } }));
|
382
350
|
setTagList((_12 = (_11 = result === null || result === void 0 ? void 0 : result.data) === null || _11 === void 0 ? void 0 : _11.tags) !== null && _12 !== void 0 ? _12 : []);
|
383
351
|
}
|
384
352
|
catch (e) {
|
@@ -457,10 +425,10 @@ const SxpDataSourceProvider = ({ render, dataSources, utmVal, enableReportEvent
|
|
457
425
|
let curData;
|
458
426
|
let gldata;
|
459
427
|
if (data === null || data === void 0 ? void 0 : data.layoutVariantId) {
|
460
|
-
layId = data === null || data === void 0 ? void 0 : data.layoutVariantId;
|
461
|
-
setLayoutVariantId(data === null || data === void 0 ? void 0 : data.layoutVariantId);
|
462
428
|
const id = (_b = (_a = data === null || data === void 0 ? void 0 : data.layoutVariantId) === null || _a === void 0 ? void 0 : _a.split('-')) === null || _b === void 0 ? void 0 : _b[1];
|
463
429
|
if (id) {
|
430
|
+
layId = id;
|
431
|
+
setLayoutVariantId(id);
|
464
432
|
curData = dataList === null || dataList === void 0 ? void 0 : dataList.find((item) => (item === null || item === void 0 ? void 0 : item.id) === id);
|
465
433
|
if (curData) {
|
466
434
|
setPageData(curData);
|
@@ -32,16 +32,14 @@ export const getBgStyleByImg = (data) => {
|
|
32
32
|
};
|
33
33
|
export const getPriceText = ({ product, enableFormattedPrice, globalConfig, isHiddenDef, style }) => {
|
34
34
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
35
|
-
let text = '';
|
36
35
|
if ((!(product === null || product === void 0 ? void 0 : product.currency) || !(product === null || product === void 0 ? void 0 : product.price)) && isHiddenDef)
|
37
36
|
return null;
|
38
|
-
let price =
|
39
|
-
|
40
|
-
return text;
|
37
|
+
let price = (product === null || product === void 0 ? void 0 : product.currency) && (product === null || product === void 0 ? void 0 : product.price) ? product === null || product === void 0 ? void 0 : product.price : 7000;
|
38
|
+
let text = '';
|
41
39
|
let priceSymbol = globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.priceSymbol;
|
42
40
|
let currency = (product === null || product === void 0 ? void 0 : product.currency) ? (_c = (_b = (_a = product === null || product === void 0 ? void 0 : product.currency) === null || _a === void 0 ? void 0 : _a.split('-')[1]) === null || _b === void 0 ? void 0 : _b.toUpperCase()) !== null && _c !== void 0 ? _c : '' : '$';
|
43
41
|
const isToLocStr = enableFormattedPrice === undefined || enableFormattedPrice;
|
44
|
-
let decPic = price
|
42
|
+
let decPic = price.toString();
|
45
43
|
if (priceSymbol === null || priceSymbol === void 0 ? void 0 : priceSymbol.showTwoDecimalPoint) {
|
46
44
|
decPic = price === null || price === void 0 ? void 0 : price.toFixed(2);
|
47
45
|
}
|
@@ -14,7 +14,10 @@ export interface IHashTagProps {
|
|
14
14
|
};
|
15
15
|
buttonBgStyle: CSSProperties;
|
16
16
|
showBanner?: boolean;
|
17
|
-
openFixedSize?:
|
17
|
+
openFixedSize?: {
|
18
|
+
open: true;
|
19
|
+
ratio: string;
|
20
|
+
};
|
18
21
|
}
|
19
22
|
declare const _default: React.NamedExoticComponent<IHashTagProps>;
|
20
23
|
export default _default;
|
@@ -13,9 +13,9 @@ export interface IDisplayProps {
|
|
13
13
|
};
|
14
14
|
style?: Record<string, any>;
|
15
15
|
isTel?: boolean;
|
16
|
-
isShowClose?: boolean;
|
17
|
-
consentPopupCate?: string;
|
18
16
|
onClick?: () => void;
|
17
|
+
contsentState?: boolean;
|
18
|
+
isShowClose?: boolean;
|
19
19
|
}
|
20
20
|
declare const _default: React.NamedExoticComponent<IDisplayProps>;
|
21
21
|
export default _default;
|
@@ -1,20 +1,18 @@
|
|
1
1
|
import { __rest } from "tslib";
|
2
2
|
import React, { memo, useCallback, useMemo, useState } from 'react';
|
3
3
|
import './index.less';
|
4
|
+
import { useEditorDataProvider } from '../../../../core/context/EditorDataProvider';
|
4
5
|
import closeSvg from './close.svg';
|
5
6
|
import tel from './tel.png';
|
6
7
|
import { setFontForText } from '../../../../core/utils/tool';
|
7
|
-
import { getContsentState } from '../../../../core/utils/localStore';
|
8
8
|
const Display = (_a) => {
|
9
9
|
var _b, _c;
|
10
|
-
var { isTel, isShowOnce, open, content, interaction, style, onClick,
|
10
|
+
var { isTel, isShowOnce, open, content, interaction, style, onClick, contsentState, isShowClose } = _a, props = __rest(_a, ["isTel", "isShowOnce", "open", "content", "interaction", "style", "onClick", "contsentState", "isShowClose"]);
|
11
|
+
const { consentPopupCate } = useEditorDataProvider();
|
11
12
|
const [isClose, setIsClose] = useState(false);
|
12
|
-
const contsentState = useMemo(() => {
|
13
|
-
return getContsentState();
|
14
|
-
}, []);
|
15
13
|
const visivle = useMemo(() => {
|
16
|
-
return consentPopupCate || (open && (isShowOnce || contsentState) && style && !isClose);
|
17
|
-
}, [consentPopupCate, open, isClose
|
14
|
+
return consentPopupCate === 'Display' || (open && (isShowOnce || contsentState) && style && !isClose);
|
15
|
+
}, [consentPopupCate, open, isClose]);
|
18
16
|
const handleClickClose = useCallback(() => {
|
19
17
|
setIsClose(true);
|
20
18
|
}, []);
|
@@ -35,7 +35,7 @@ const AniLink = (_a) => {
|
|
35
35
|
onClick === null || onClick === void 0 ? void 0 : onClick();
|
36
36
|
}
|
37
37
|
};
|
38
|
-
const title = (cta === null || cta === void 0 ? void 0 : cta.enTitle) || '
|
38
|
+
const title = (cta === null || cta === void 0 ? void 0 : cta.enTitle) || '查看详情';
|
39
39
|
const aniTimStyle = useMemo(() => {
|
40
40
|
var _a, _b;
|
41
41
|
const ani = event === null || event === void 0 ? void 0 : event.animation;
|
@@ -35,7 +35,7 @@ const AniLinkPopup = (_a) => {
|
|
35
35
|
onClick === null || onClick === void 0 ? void 0 : onClick();
|
36
36
|
}
|
37
37
|
};
|
38
|
-
const title = (cta === null || cta === void 0 ? void 0 : cta.enTitle) || '
|
38
|
+
const title = (cta === null || cta === void 0 ? void 0 : cta.enTitle) || '查看详情';
|
39
39
|
const aniTimStyle = useMemo(() => {
|
40
40
|
const ani = event === null || event === void 0 ? void 0 : event.animation;
|
41
41
|
if (ani) {
|
@@ -1,9 +1,8 @@
|
|
1
|
-
import React
|
1
|
+
import React from 'react';
|
2
2
|
import './index.less';
|
3
3
|
export interface IConsentDetailProps {
|
4
4
|
content?: string;
|
5
5
|
isTel?: boolean;
|
6
|
-
style?: CSSProperties;
|
7
6
|
}
|
8
7
|
declare const _default: React.NamedExoticComponent<IConsentDetailProps>;
|
9
8
|
export default _default;
|
@@ -2,11 +2,11 @@ import { __rest } from "tslib";
|
|
2
2
|
import React, { memo } from 'react';
|
3
3
|
import './index.less';
|
4
4
|
const ConsentDetail = (_a) => {
|
5
|
-
var { content, isTel
|
5
|
+
var { content, isTel } = _a, props = __rest(_a, ["content", "isTel"]);
|
6
6
|
return (React.createElement("article", { className: 'consentDetail-article', dangerouslySetInnerHTML: {
|
7
7
|
__html: typeof content === 'string' ? content : ''
|
8
8
|
}, onClick: (e) => {
|
9
9
|
e.stopPropagation();
|
10
|
-
}
|
10
|
+
} }));
|
11
11
|
};
|
12
12
|
export default memo(ConsentDetail);
|
@@ -4,15 +4,15 @@ const tslib_1 = require("tslib");
|
|
4
4
|
const react_1 = tslib_1.__importStar(require("react"));
|
5
5
|
require("./index.less");
|
6
6
|
const withBindDataSource_1 = tslib_1.__importDefault(require("../../../core/hoc/withBindDataSource"));
|
7
|
-
const
|
7
|
+
const localStore_1 = require("../../../core/utils/localStore");
|
8
8
|
const Consent = ({ resolver, globalConfig }) => {
|
9
9
|
var _a, _b;
|
10
|
-
const
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
const t = resolver === null || resolver === void 0 ? void 0 : resolver[value === null || value === void 0 ? void 0 : value.type];
|
10
|
+
const contsentState = (0, react_1.useMemo)(() => {
|
11
|
+
return (0, localStore_1.getContsentState)();
|
12
|
+
}, []);
|
13
|
+
const t = resolver === null || resolver === void 0 ? void 0 : resolver['Display'];
|
15
14
|
const Component = (0, withBindDataSource_1.default)(t);
|
16
|
-
|
15
|
+
const value = (_b = (_a = globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.consentPopup) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.item;
|
16
|
+
return react_1.default.createElement(Component, Object.assign({}, value === null || value === void 0 ? void 0 : value.props, { style: value === null || value === void 0 ? void 0 : value.style, event: (value === null || value === void 0 ? void 0 : value.event) || {}, contsentState: contsentState }));
|
17
17
|
};
|
18
18
|
exports.default = (0, react_1.memo)(Consent);
|
@@ -11,7 +11,7 @@ const Navbar = ({ icon, styles, textStyle, onClose }) => {
|
|
11
11
|
react_1.default.createElement("button", { className: 'clc-sxp-nav-left', role: 'button', "aria-label": 'back button', onClick: onClose },
|
12
12
|
react_1.default.createElement("img", { src: icon, alt: 'back button' })),
|
13
13
|
react_1.default.createElement("div", { className: 'clc-sxp-nav-title', style: Object.assign(Object.assign({}, textStyle), { paddingLeft: (textStyle === null || textStyle === void 0 ? void 0 : textStyle.textAlign) === 'left' ? '35px' : 0 }), dangerouslySetInnerHTML: {
|
14
|
-
__html: (0, tool_1.setFontForText)(`#${(_a = waterFallData === null || waterFallData === void 0 ? void 0 : waterFallData.hashTag) !== null && _a !== void 0 ? _a : '
|
14
|
+
__html: (0, tool_1.setFontForText)(`#${(_a = waterFallData === null || waterFallData === void 0 ? void 0 : waterFallData.hashTag) !== null && _a !== void 0 ? _a : '标题'}`, textStyle)
|
15
15
|
} })));
|
16
16
|
};
|
17
17
|
exports.default = (0, react_1.memo)(Navbar);
|
@@ -12,7 +12,7 @@ const useEventReport_1 = require("../../../../core/hooks/useEventReport");
|
|
12
12
|
const materials_1 = require("../../../../core/utils/materials");
|
13
13
|
const WaterfallFlowItem = (props) => {
|
14
14
|
var _a;
|
15
|
-
const { rec, index, list, reportTagsView, textStyles, space } = props;
|
15
|
+
const { rec, index, list, reportTagsView, textStyles, space, openFixedSize } = props;
|
16
16
|
const { swiperRef, setRtcList, setOpenHashtag, sxpParameter, globalConfig } = (0, hooks_1.useSxpDataSource)();
|
17
17
|
const [showVideo, setShowVideo] = (0, react_1.useState)(false);
|
18
18
|
const imgDom = (0, react_1.useRef)(null);
|
@@ -106,11 +106,11 @@ const WaterfallFlowItem = (props) => {
|
|
106
106
|
}, 0);
|
107
107
|
};
|
108
108
|
return (react_1.default.createElement("div", { ref: ref, className: 'list-content-listItem', key: index, onClick: handleClickToDetail, style: { marginBottom: space } },
|
109
|
-
react_1.default.createElement("div", { className: 'list-content-listItem-picture' },
|
109
|
+
react_1.default.createElement("div", { className: (openFixedSize === null || openFixedSize === void 0 ? void 0 : openFixedSize.ratio) === '1' ? 'list-content-listItem-picture' : 'list-content-listItem-picture1609' },
|
110
110
|
showVideo && (react_1.default.createElement("div", { style: { display: 'none' } },
|
111
111
|
react_1.default.createElement("video", { ref: videoDom, crossOrigin: 'anonymous', className: 'list-content-listItem-picture-img' }),
|
112
112
|
react_1.default.createElement("canvas", { ref: canvasRef }))),
|
113
|
-
react_1.default.createElement(FormatImage_1.default, { loading: 'lazy', className: 'list-content-listItem-picture-img', ref: imgDom })),
|
113
|
+
react_1.default.createElement(FormatImage_1.default, { loading: 'lazy', className: (openFixedSize === null || openFixedSize === void 0 ? void 0 : openFixedSize.ratio) === '1' ? 'list-content-listItem-picture-img' : 'list-content-listItem-picture1609-img', ref: imgDom })),
|
114
114
|
react_1.default.createElement("div", { className: 'list-content-listItem-info' },
|
115
115
|
react_1.default.createElement("div", { className: `${'list-content-listItem-info-title'} ${priceText ? 'list-content-listItem-info-nowrap' : ''}`, style: textStyles === null || textStyles === void 0 ? void 0 : textStyles.title, dangerouslySetInnerHTML: {
|
116
116
|
__html: (0, tool_1.setFontForText)(title, textStyles === null || textStyles === void 0 ? void 0 : textStyles.title)
|
@@ -11,7 +11,7 @@ const List_1 = tslib_1.__importDefault(require("./List"));
|
|
11
11
|
const hooks_1 = require("../../../../core/hooks");
|
12
12
|
const useEventReport_1 = require("../../../../core/hooks/useEventReport");
|
13
13
|
const WaterFall = (props) => {
|
14
|
-
var _a;
|
14
|
+
var _a, _b;
|
15
15
|
const { waterFallData, setOpenHashtag, openHashtag, swiperRef, setWaterFallData, cacheRtcList, setRtcList, cacheActiveIndex, rtcList, setCacheRtcList, setIsFromHashtag, isFromHashtag, bffEventReport, themeTag, selectTag, bffFbReport } = (0, hooks_1.useSxpDataSource)();
|
16
16
|
const { backMainFeed } = (0, useEventReport_1.useEventReport)();
|
17
17
|
const modalEleRef = (0, react_1.useRef)(null);
|
@@ -100,6 +100,6 @@ const WaterFall = (props) => {
|
|
100
100
|
display: openHashtag ? 'block' : 'none'
|
101
101
|
} },
|
102
102
|
react_1.default.createElement(Navbar_1.default, { icon: left_png_1.default, styles: { top: '32px' }, textStyle: (_a = props === null || props === void 0 ? void 0 : props.textStyles) === null || _a === void 0 ? void 0 : _a.hashTagTitle, onClose: handleClose }),
|
103
|
-
(props === null || props === void 0 ? void 0 : props.openFixedSize) === true || (props === null || props === void 0 ? void 0 : props.openFixedSize) === undefined ? (react_1.default.createElement(List_1.default, Object.assign({ key: waterFallData, reportTagsView: reportTagsView }, props))) : (react_1.default.createElement(WaterfallList_1.default, Object.assign({ key: waterFallData, reportTagsView: reportTagsView }, props)))), modalEleRef.current);
|
103
|
+
((_b = props === null || props === void 0 ? void 0 : props.openFixedSize) === null || _b === void 0 ? void 0 : _b.open) === true || (props === null || props === void 0 ? void 0 : props.openFixedSize) === undefined ? (react_1.default.createElement(List_1.default, Object.assign({ key: waterFallData, reportTagsView: reportTagsView }, props))) : (react_1.default.createElement(WaterfallList_1.default, Object.assign({ key: waterFallData, reportTagsView: reportTagsView }, props)))), modalEleRef.current);
|
104
104
|
};
|
105
105
|
exports.default = (0, react_1.memo)(WaterFall);
|
@@ -120,7 +120,7 @@ const SxpPageRender = ({ globalConfig, descStyle, containerHeight = window.inner
|
|
120
120
|
contentId: (_m = item === null || item === void 0 ? void 0 : item.video) === null || _m === void 0 ? void 0 : _m.itemId,
|
121
121
|
productId: (_o = item === null || item === void 0 ? void 0 : item.product) === null || _o === void 0 ? void 0 : _o.itemId,
|
122
122
|
position: activeIndex + '',
|
123
|
-
fromKName: fk
|
123
|
+
fromKName: fk ? fk : fromKName,
|
124
124
|
fromKPage: location === null || location === void 0 ? void 0 : location.href,
|
125
125
|
ctatId: (_r = (_q = (_p = item === null || item === void 0 ? void 0 : item.video) === null || _p === void 0 ? void 0 : _p.bindCta) === null || _q === void 0 ? void 0 : _q.itemId) !== null && _r !== void 0 ? _r : '',
|
126
126
|
traceInfo: (_v = (_t = (_s = item === null || item === void 0 ? void 0 : item.video) === null || _s === void 0 ? void 0 : _s.traceInfo) !== null && _t !== void 0 ? _t : (_u = item === null || item === void 0 ? void 0 : item.product) === null || _u === void 0 ? void 0 : _u.traceInfo) !== null && _v !== void 0 ? _v : ''
|
@@ -147,12 +147,9 @@ const SxpPageRender = ({ globalConfig, descStyle, containerHeight = window.inner
|
|
147
147
|
setIsReload(new Date().getTime());
|
148
148
|
skipLinkRef.current = false;
|
149
149
|
}
|
150
|
-
refreshFeSession === null || refreshFeSession === void 0 ? void 0 : refreshFeSession(false);
|
151
150
|
handleH5EnterLink();
|
152
151
|
if (repCond) {
|
153
|
-
|
154
|
-
event_1.default.emit(event_1.SXP_EVENT_TYPE.PAGE_DID_SHOW, item);
|
155
|
-
});
|
152
|
+
event_1.default.emit(event_1.SXP_EVENT_TYPE.PAGE_DID_SHOW, item);
|
156
153
|
backMainFeed('external', selectTag);
|
157
154
|
}
|
158
155
|
}
|