@antmjs/vantui
Version:
一套适用于Taro3及React的vantui组件库
138 lines (137 loc) • 7.89 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = Sku;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var _components = require("@tarojs/components");
var _classnames2 = _interopRequireDefault(require("classnames"));
var _defaultProps = require("../default-props");
var _utils = require("./utils");
var _jsxRuntime = require("react/jsx-runtime");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var preCls = "van-sku";
function Sku(props) {
var _useState = (0, _react.useState)((0, _defaultProps.get)().Sku),
_useState2 = (0, _slicedToArray2.default)(_useState, 1),
d = _useState2[0];
var _d$props = _objectSpread(_objectSpread({}, d), props),
_d$props$sku = _d$props.sku,
sku = _d$props$sku === void 0 ? [] : _d$props$sku,
_d$props$className = _d$props.className,
className = _d$props$className === void 0 ? '' : _d$props$className,
_d$props$goodsList = _d$props.goodsList,
goodsList = _d$props$goodsList === void 0 ? [] : _d$props$goodsList,
goodsId = _d$props.goodsId,
onChange = _d$props.onChange,
clickAttrDisable = _d$props.clickAttrDisable,
itemRender = _d$props.itemRender,
_d$props$disabledClas = _d$props.disabledClassName,
disabledClassName = _d$props$disabledClas === void 0 ? '' : _d$props$disabledClas,
_d$props$activeClassN = _d$props.activeClassName,
activeClassName = _d$props$activeClassN === void 0 ? '' : _d$props$activeClassN,
itemDisable = _d$props.itemDisable,
_d$props$autoChoice = _d$props.autoChoice,
autoChoice = _d$props$autoChoice === void 0 ? true : _d$props$autoChoice;
var _useState3 = (0, _react.useState)([]),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
currentSkuIds = _useState4[0],
setCurrentSkuIds = _useState4[1];
(0, _react.useEffect)(function () {
if (!goodsId && goodsList && autoChoice) {
for (var i = 0; i < goodsList.length; i++) {
var goodsItem = goodsList[i];
if ((goodsItem === null || goodsItem === void 0 ? void 0 : goodsItem.disabled) !== true) {
if (goodsItem !== null && goodsItem !== void 0 && goodsItem.skuIds) setCurrentSkuIds(goodsItem.skuIds);
if (onChange) onChange(goodsItem);
break;
}
}
}
if (goodsId && goodsList) {
for (var _i = 0; _i < goodsList.length; _i++) {
var _goodsItem = goodsList[_i];
if ((_goodsItem === null || _goodsItem === void 0 ? void 0 : _goodsItem.id) === goodsId) {
if (_goodsItem !== null && _goodsItem !== void 0 && _goodsItem.skuIds) setCurrentSkuIds(_goodsItem.skuIds);
break;
}
}
}
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[goodsId, goodsList]);
var currentAttrCanBuy = (0, _react.useCallback)(function (attrId, attrs) {
var skuIds = (0, _toConsumableArray2.default)(currentSkuIds || []);
attrs.map(function (it) {
if (skuIds.includes(it)) skuIds.splice(skuIds.indexOf(it), 1);
});
skuIds = skuIds.concat(attrId);
var canBuy = false;
for (var i = 0; i < goodsList.length; i++) {
var _goodsList$i, _goodsList$i2, _goodsList$i3;
if ((_goodsList$i = goodsList[i]) !== null && _goodsList$i !== void 0 && _goodsList$i.skuIds && (0, _utils.everyItemEqual)(((_goodsList$i2 = goodsList[i]) === null || _goodsList$i2 === void 0 ? void 0 : _goodsList$i2.skuIds) || [], skuIds) && !((_goodsList$i3 = goodsList[i]) !== null && _goodsList$i3 !== void 0 && _goodsList$i3.disabled) && ((itemDisable === null || itemDisable === void 0 ? void 0 : itemDisable(goodsList[i])) === false || !itemDisable)) {
canBuy = true;
break;
}
}
return canBuy;
}, [currentSkuIds, goodsList, itemDisable]);
var attrClick = (0, _react.useCallback)(function (attrId, attrs, canBuy) {
if (canBuy) {
var skuIds = (0, _toConsumableArray2.default)(currentSkuIds || []);
attrs.map(function (it) {
if (skuIds.includes(it)) skuIds.splice(skuIds.indexOf(it), 1);
});
skuIds = skuIds.concat(attrId);
var choiceGoods;
for (var i = 0; i < goodsList.length; i++) {
var _goodsList$i4, _goodsList$i5;
if (!((_goodsList$i4 = goodsList[i]) !== null && _goodsList$i4 !== void 0 && _goodsList$i4.skuIds && !goodsList[i] || ((_goodsList$i5 = goodsList[i]) === null || _goodsList$i5 === void 0 ? void 0 : _goodsList$i5.disabled) === true || itemDisable && itemDisable(goodsList[i]))) {
var _goodsList$i6;
if ((0, _utils.everyItemEqual)(skuIds, ((_goodsList$i6 = goodsList[i]) === null || _goodsList$i6 === void 0 ? void 0 : _goodsList$i6.skuIds) || [])) {
choiceGoods = goodsList[i];
}
}
}
setCurrentSkuIds(skuIds);
if (choiceGoods) {
onChange === null || onChange === void 0 ? void 0 : onChange(choiceGoods);
}
} else {
if (clickAttrDisable) clickAttrDisable();
}
}, [clickAttrDisable, currentSkuIds, goodsList, itemDisable, onChange]);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.View, {
className: "".concat(preCls, " ").concat(className),
children: sku.map(function (item, index) {
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.View, {
className: "".concat(preCls, "-item"),
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.View, {
className: "".concat(preCls, "-name"),
children: item.name
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.View, {
className: "".concat(preCls, "-attrs"),
children: item.items.map(function (it, index) {
var _classnames;
var othersId = item.items.map(function (it) {
return it.id;
});
var canBuy = currentAttrCanBuy(it.id, othersId);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.View, {
onClick: function onClick() {
return attrClick(it.id, othersId, canBuy);
},
className: (0, _classnames2.default)((_classnames = {}, (0, _defineProperty2.default)(_classnames, "".concat(preCls, "-attr"), true), (0, _defineProperty2.default)(_classnames, "".concat(preCls, "-attr-active ").concat(activeClassName), currentSkuIds === null || currentSkuIds === void 0 ? void 0 : currentSkuIds.includes(it.id)), (0, _defineProperty2.default)(_classnames, "".concat(preCls, "-attr-disable ").concat(disabledClassName), !canBuy), _classnames)),
children: itemRender ? itemRender(it) : it.name
}, "attr#".concat(index, "@").concat(it.id));
})
})]
}, "sku#".concat(index, "@").concat(item.id));
})
});
}