UNPKG

@react-vant-next/campaign

Version:

React Mobile UI Components based on Vant UI - Next Generation

61 lines (58 loc) 2.67 kB
import { jsxs, jsx } from 'react/jsx-runtime'; import { ExpandO } from '@react-vant-next/icons'; import { Image } from '@react-vant-next/ui'; import { createNamespace } from '@react-vant-next/utils'; import cls from 'clsx'; import { useMemo } from 'react'; import { isSkuChoosable } from '../utils.js'; const [bem] = createNamespace("sku-row"); const SkuRowItem = (props) => { var _a, _b; const classPrefix = props.largeImageMode ? "image-item" : "item"; const imgUrl = useMemo(() => { const url = props.skuValue.imgUrl || props.skuValue.img_url; return props.largeImageMode ? url || "https://img01.yzcdn.cn/upload_files/2020/06/24/FmKWDg0bN9rMcTp9ne8MXiQWGtLn.png" : url; }, [props.skuValue]); const choosable = useMemo(() => { if (!props.disableSoldoutSku) { return true; } return isSkuChoosable(props.skuList, props.selectedSku, { key: props.skuKeyStr, valueId: props.skuValue.id, }); }, [ JSON.stringify(props.skuList), JSON.stringify(props.selectedSku), props.skuKeyStr, ]); const imageRender = () => { if (imgUrl) { return (jsx(Image, { fit: "cover", src: imgUrl, lazyload: props.lazyload, className: cls(bem(`${classPrefix}-img`)) })); } return null; }; const onSelect = () => { if (choosable) { props.onSkuSelected(Object.assign(Object.assign({}, props.skuValue), { skuKeyStr: props.skuKeyStr })); } }; const onPreviewImg = (event) => { event.stopPropagation(); const { skuValue, skuKeyStr } = props; props.onSkuPreviewImage(Object.assign(Object.assign({}, skuValue), { ks: skuKeyStr, imgUrl: skuValue.imgUrl || skuValue.img_url })); }; const choosed = props.skuValue.id === props.selectedSku[props.skuKeyStr]; return (jsxs("span", { className: cls(bem(classPrefix, { active: choosed, disabled: !choosable, })), onClick: onSelect, children: [imageRender(), jsx("div", { className: cls(bem(`${classPrefix}-name`)), children: props.largeImageMode ? (jsx("span", { className: cls("rv-multi-ellipsis--l2"), children: (_a = props.skuValue) === null || _a === void 0 ? void 0 : _a.name })) : ((_b = props.skuValue) === null || _b === void 0 ? void 0 : _b.name) }), props.largeImageMode && (props.previewIcon || (jsx(ExpandO, { className: cls(bem(`${classPrefix}-img-icon`)), onClick: onPreviewImg })))] })); }; export { SkuRowItem as default }; //# sourceMappingURL=SkuRowItem.js.map