175 lines
7.3 KiB
JavaScript
175 lines
7.3 KiB
JavaScript
![]() |
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
var tslib_1 = require("tslib");
|
||
|
var props_1 = require("./props");
|
||
|
var fmtEvent_1 = tslib_1.__importDefault(require("../_util/fmtEvent"));
|
||
|
var value_1 = tslib_1.__importDefault(require("../mixins/value"));
|
||
|
function getBoundingClientRect(selector) {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
my.createSelectorQuery()
|
||
|
.select(selector)
|
||
|
.boundingClientRect()
|
||
|
.exec(function (ret) {
|
||
|
if (ret && ret[0]) {
|
||
|
resolve(ret[0]);
|
||
|
}
|
||
|
else {
|
||
|
reject();
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
Component({
|
||
|
props: props_1.CollapseDefaultProps,
|
||
|
data: {
|
||
|
contentHeight: [],
|
||
|
hasChange: false,
|
||
|
},
|
||
|
mixins: [(0, value_1.default)({
|
||
|
valueKey: 'current',
|
||
|
defaultValueKey: 'defaultCurrent',
|
||
|
transformValue: function (current, extra) {
|
||
|
var value = this.formatCurrent(current, extra ? extra.nextProps : this.props);
|
||
|
return {
|
||
|
needUpdate: true,
|
||
|
value: value,
|
||
|
};
|
||
|
},
|
||
|
})],
|
||
|
didUpdate: function (prevProps, prevData) {
|
||
|
if (prevProps.items !== this.props.items || !this.isEqualValue(prevData)) {
|
||
|
this.updateContentHeight(this.getValue(prevData), this.getValue());
|
||
|
}
|
||
|
},
|
||
|
didMount: function () {
|
||
|
var current = this.getValue();
|
||
|
var contentHeight = this.props.items.map(function (item, index) {
|
||
|
if (current.indexOf(index) >= 0) {
|
||
|
return '';
|
||
|
}
|
||
|
return '0px';
|
||
|
});
|
||
|
this.setData({
|
||
|
hasChange: true,
|
||
|
contentHeight: contentHeight,
|
||
|
});
|
||
|
},
|
||
|
methods: {
|
||
|
formatCurrent: function (val, props) {
|
||
|
var current = tslib_1.__spreadArray([], (val || []), true);
|
||
|
var items = props.items;
|
||
|
current = current.filter(function (item) {
|
||
|
if (!items[item] || items[item].disabled) {
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
});
|
||
|
if (props.accordion) {
|
||
|
current = current.length > 0 ? [current[0]] : [];
|
||
|
}
|
||
|
return tslib_1.__spreadArray([], current, true);
|
||
|
},
|
||
|
onChange: function (e) {
|
||
|
var itemIndex = parseInt(e.currentTarget.dataset.index, 10);
|
||
|
if (this.props.items[itemIndex] && this.props.items[itemIndex].disabled) {
|
||
|
return;
|
||
|
}
|
||
|
var arr = this.getValue();
|
||
|
var current = tslib_1.__spreadArray([], arr, true);
|
||
|
console.log(arr, current);
|
||
|
var index = current.indexOf(itemIndex);
|
||
|
if (index >= 0) {
|
||
|
current.splice(index, 1);
|
||
|
}
|
||
|
else {
|
||
|
if (this.props.accordion) {
|
||
|
current = [itemIndex];
|
||
|
}
|
||
|
else {
|
||
|
current.push(itemIndex);
|
||
|
current.sort();
|
||
|
}
|
||
|
}
|
||
|
if (!this.isControlled()) {
|
||
|
this.update(current);
|
||
|
}
|
||
|
if (this.props.onChange) {
|
||
|
this.props.onChange(current, (0, fmtEvent_1.default)(this.props, e));
|
||
|
}
|
||
|
},
|
||
|
updateContentHeight: function (prevCurrent, nextCurrent) {
|
||
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
||
|
var prevCurrentArray, nextCurrentArray, expandArray, closeArray, contentHeight;
|
||
|
var _this = this;
|
||
|
return tslib_1.__generator(this, function (_a) {
|
||
|
switch (_a.label) {
|
||
|
case 0:
|
||
|
prevCurrentArray = prevCurrent;
|
||
|
nextCurrentArray = nextCurrent;
|
||
|
expandArray = [];
|
||
|
closeArray = [];
|
||
|
nextCurrentArray.forEach(function (item) {
|
||
|
if (prevCurrentArray.indexOf(item) < 0) {
|
||
|
expandArray.push(item);
|
||
|
}
|
||
|
});
|
||
|
prevCurrentArray.forEach(function (item) {
|
||
|
if (nextCurrentArray.indexOf(item) < 0) {
|
||
|
closeArray.push(item);
|
||
|
}
|
||
|
});
|
||
|
return [4 /*yield*/, Promise.all(this.props.items.map(function (item, index) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
||
|
var height;
|
||
|
return tslib_1.__generator(this, function (_a) {
|
||
|
switch (_a.label) {
|
||
|
case 0:
|
||
|
if (!(expandArray.indexOf(index) >= 0 || closeArray.indexOf(index) >= 0)) return [3 /*break*/, 2];
|
||
|
return [4 /*yield*/, getBoundingClientRect(".ant-collapse-item-content-".concat(this.$id, "-").concat(index))];
|
||
|
case 1:
|
||
|
height = (_a.sent()).height;
|
||
|
return [2 /*return*/, "".concat(height, "px")];
|
||
|
case 2: return [2 /*return*/, this.data.contentHeight[index]];
|
||
|
}
|
||
|
});
|
||
|
}); }))];
|
||
|
case 1:
|
||
|
contentHeight = _a.sent();
|
||
|
if (closeArray.length === 0) {
|
||
|
this.setData({
|
||
|
contentHeight: contentHeight,
|
||
|
});
|
||
|
}
|
||
|
else {
|
||
|
this.setData({
|
||
|
contentHeight: contentHeight,
|
||
|
});
|
||
|
contentHeight = contentHeight.map(function (item, index) {
|
||
|
if (closeArray.indexOf(index) >= 0) {
|
||
|
return '0px';
|
||
|
}
|
||
|
return item;
|
||
|
});
|
||
|
setTimeout(function () {
|
||
|
_this.setData({
|
||
|
contentHeight: contentHeight,
|
||
|
});
|
||
|
}, 10);
|
||
|
}
|
||
|
return [2 /*return*/];
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
resetContentHeight: function (e) {
|
||
|
var index = parseInt(e.currentTarget.dataset.index, 10);
|
||
|
if (this.getValue().indexOf(index) < 0) {
|
||
|
return;
|
||
|
}
|
||
|
var contentHeight = tslib_1.__spreadArray([], this.data.contentHeight, true);
|
||
|
contentHeight[index] = '';
|
||
|
this.setData({
|
||
|
contentHeight: contentHeight,
|
||
|
});
|
||
|
},
|
||
|
},
|
||
|
});
|