index.js
3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var component_1 = require("../common/component");
var nextTick = function () { return new Promise(function (resolve) { return setTimeout(resolve, 20); }); };
component_1.VantComponent({
classes: ['title-class', 'content-class'],
relation: {
name: 'collapse',
type: 'ancestor',
linked: function (parent) {
this.parent = parent;
}
},
props: {
name: null,
title: null,
value: null,
icon: String,
label: String,
disabled: Boolean,
clickable: Boolean,
border: {
type: Boolean,
value: true
},
isLink: {
type: Boolean,
value: true
}
},
data: {
contentHeight: 0,
expanded: false,
transition: false
},
mounted: function () {
var _this = this;
this.updateExpanded()
.then(nextTick)
.then(function () {
var data = { transition: true };
if (_this.data.expanded) {
data.contentHeight = 'auto';
}
_this.set(data);
});
},
methods: {
updateExpanded: function () {
if (!this.parent) {
return Promise.resolve();
}
var _a = this.parent.data, value = _a.value, accordion = _a.accordion;
var _b = this.parent.children, children = _b === void 0 ? [] : _b;
var name = this.data.name;
var index = children.indexOf(this);
var currentName = name == null ? index : name;
var expanded = accordion
? value === currentName
: (value || []).some(function (name) { return name === currentName; });
var stack = [];
if (expanded !== this.data.expanded) {
stack.push(this.updateStyle(expanded));
}
stack.push(this.set({ index: index, expanded: expanded }));
return Promise.all(stack);
},
updateStyle: function (expanded) {
var _this = this;
return this.getRect('.van-collapse-item__content')
.then(function (rect) { return rect.height; })
.then(function (height) {
if (expanded) {
return _this.set({
contentHeight: height ? height + "px" : 'auto'
});
}
return _this.set({ contentHeight: height + "px" })
.then(nextTick)
.then(function () { return _this.set({ contentHeight: 0 }); });
});
},
onClick: function () {
if (this.data.disabled) {
return;
}
var _a = this.data, name = _a.name, expanded = _a.expanded;
var index = this.parent.children.indexOf(this);
var currentName = name == null ? index : name;
this.parent.switch(currentName, !expanded);
},
onTransitionEnd: function () {
if (this.data.expanded) {
this.set({
contentHeight: 'auto'
});
}
}
}
});