@dimailn/vuetify 2.7.2-alpha41 → 2.7.2-alpha42
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/vuetify.js +56 -14
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +1 -1
- package/dist/vuetify.min.js +2 -2
- package/es5/framework.js +1 -1
- package/es5/mixins/dependent/index.js +36 -14
- package/es5/mixins/dependent/index.js.map +1 -1
- package/lib/framework.js +1 -1
- package/lib/mixins/dependent/index.js +21 -11
- package/lib/mixins/dependent/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/VSelect/__tests__/VSelect.spec.ts +54 -0
- package/src/mixins/dependent/index.ts +22 -13
package/es5/framework.js
CHANGED
|
@@ -79,7 +79,7 @@ var Vuetify = /*#__PURE__*/function () {
|
|
|
79
79
|
exports.default = Vuetify;
|
|
80
80
|
Vuetify.install = _install.install;
|
|
81
81
|
Vuetify.installed = false;
|
|
82
|
-
Vuetify.version = "2.7.2-
|
|
82
|
+
Vuetify.version = "2.7.2-alpha42";
|
|
83
83
|
Vuetify.config = {
|
|
84
84
|
silent: false
|
|
85
85
|
};
|
|
@@ -13,27 +13,49 @@ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableTo
|
|
|
13
13
|
|
|
14
14
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
15
15
|
|
|
16
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
17
|
-
|
|
18
16
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
|
|
19
17
|
|
|
20
18
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
21
19
|
|
|
20
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
21
|
+
|
|
22
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
23
|
+
|
|
22
24
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
23
25
|
|
|
24
|
-
function
|
|
26
|
+
function searchVNodeTree(vnodes) {
|
|
25
27
|
var _a, _b;
|
|
26
28
|
|
|
27
29
|
var results = [];
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
var _iterator = _createForOfIteratorHelper(vnodes),
|
|
32
|
+
_step;
|
|
31
33
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
try {
|
|
35
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
36
|
+
var vnode = _step.value;
|
|
37
|
+
var proxy = (_a = vnode.component) === null || _a === void 0 ? void 0 : _a.proxy;
|
|
38
|
+
|
|
39
|
+
if ((proxy === null || proxy === void 0 ? void 0 : proxy.isActive) && (proxy === null || proxy === void 0 ? void 0 : proxy.isDependent)) {
|
|
40
|
+
results.push(proxy);
|
|
41
|
+
} else {
|
|
42
|
+
var subTree = (_b = vnode.component) === null || _b === void 0 ? void 0 : _b.subTree;
|
|
43
|
+
|
|
44
|
+
if (subTree) {
|
|
45
|
+
results.push.apply(results, _toConsumableArray(searchVNodeTree(Array.isArray(subTree) ? subTree : [subTree])));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
var children = vnode.children;
|
|
49
|
+
|
|
50
|
+
if (Array.isArray(children)) {
|
|
51
|
+
results.push.apply(results, _toConsumableArray(searchVNodeTree(children)));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
36
54
|
}
|
|
55
|
+
} catch (err) {
|
|
56
|
+
_iterator.e(err);
|
|
57
|
+
} finally {
|
|
58
|
+
_iterator.f();
|
|
37
59
|
}
|
|
38
60
|
|
|
39
61
|
return results;
|
|
@@ -62,12 +84,12 @@ var _default = (0, _mixins.default)().extend({
|
|
|
62
84
|
},
|
|
63
85
|
methods: {
|
|
64
86
|
getOpenDependents: function getOpenDependents() {
|
|
65
|
-
var _a
|
|
87
|
+
var _a;
|
|
66
88
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (
|
|
70
|
-
return [];
|
|
89
|
+
if (!this.closeDependents) return [];
|
|
90
|
+
var subTree = (_a = this.$) === null || _a === void 0 ? void 0 : _a.subTree;
|
|
91
|
+
if (!subTree) return [];
|
|
92
|
+
return searchVNodeTree(Array.isArray(subTree) ? subTree : [subTree]);
|
|
71
93
|
},
|
|
72
94
|
getOpenDependentElements: function getOpenDependentElements() {
|
|
73
95
|
var result = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mixins/dependent/index.ts"],"names":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../../src/mixins/dependent/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineComponent } from 'vue'\nimport type { VNode } from 'vue'\n\nimport mixins from '../../util/mixins'\nimport { VOverlay } from '../../components/VOverlay'\n\ninterface options {\n $el: HTMLElement\n $refs: {\n content?: HTMLElement\n }\n overlay?: InstanceType<typeof VOverlay>\n}\n\ninterface DependentInstance extends Vue {\n isActive?: boolean\n isDependent?: boolean\n getClickableDependentElements?: () => HTMLElement[]\n}\n\nfunction searchVNodeTree (vnodes: VNode[]): DependentInstance[] {\n const results: DependentInstance[] = []\n\n for (const vnode of vnodes) {\n const proxy = (vnode as any).component?.proxy as DependentInstance | undefined\n\n if (proxy?.isActive && proxy?.isDependent) {\n results.push(proxy)\n } else {\n const subTree = (vnode as any).component?.subTree\n if (subTree) {\n results.push(...searchVNodeTree(Array.isArray(subTree) ? subTree : [subTree]))\n }\n\n const children = (vnode as any).children\n if (Array.isArray(children)) {\n results.push(...searchVNodeTree(children))\n }\n }\n }\n\n return results\n}\n\n/* @vue/component */\nexport default mixins().extend({\n name: 'dependent',\n\n data () {\n return {\n closeDependents: true,\n isActive: false,\n isDependent: true\n }\n },\n\n watch: {\n isActive (val) {\n if (val) return\n\n const openDependents = this.getOpenDependents()\n for (let index = 0; index < openDependents.length; index++) {\n openDependents[index].isActive = false\n }\n }\n },\n\n methods: {\n getOpenDependents (): any[] {\n if (!this.closeDependents) return []\n\n const subTree = (this.$ as any)?.subTree\n if (!subTree) return []\n\n return searchVNodeTree(Array.isArray(subTree) ? subTree : [subTree])\n },\n getOpenDependentElements (): HTMLElement[] {\n const result = []\n const openDependents = this.getOpenDependents()\n\n for (let index = 0; index < openDependents.length; index++) {\n result.push(...openDependents[index].getClickableDependentElements())\n }\n\n return result\n },\n getClickableDependentElements (): HTMLElement[] {\n const result = [this.$el]\n if (this.$refs.content) result.push(this.$refs.content)\n if (this.overlay) result.push(this.overlay.$el as HTMLElement)\n result.push(...this.getOpenDependentElements())\n\n return result\n }\n }\n})\n"],"sourceRoot":"","file":"index.js"}
|
package/lib/framework.js
CHANGED
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
import mixins from '../../util/mixins';
|
|
2
2
|
|
|
3
|
-
function
|
|
3
|
+
function searchVNodeTree(vnodes) {
|
|
4
4
|
var _a, _b;
|
|
5
5
|
|
|
6
6
|
const results = [];
|
|
7
7
|
|
|
8
|
-
for (
|
|
9
|
-
const
|
|
8
|
+
for (const vnode of vnodes) {
|
|
9
|
+
const proxy = (_a = vnode.component) === null || _a === void 0 ? void 0 : _a.proxy;
|
|
10
10
|
|
|
11
|
-
if (
|
|
12
|
-
results.push(
|
|
11
|
+
if ((proxy === null || proxy === void 0 ? void 0 : proxy.isActive) && (proxy === null || proxy === void 0 ? void 0 : proxy.isDependent)) {
|
|
12
|
+
results.push(proxy);
|
|
13
13
|
} else {
|
|
14
|
-
|
|
14
|
+
const subTree = (_b = vnode.component) === null || _b === void 0 ? void 0 : _b.subTree;
|
|
15
|
+
|
|
16
|
+
if (subTree) {
|
|
17
|
+
results.push(...searchVNodeTree(Array.isArray(subTree) ? subTree : [subTree]));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const children = vnode.children;
|
|
21
|
+
|
|
22
|
+
if (Array.isArray(children)) {
|
|
23
|
+
results.push(...searchVNodeTree(children));
|
|
24
|
+
}
|
|
15
25
|
}
|
|
16
26
|
}
|
|
17
27
|
|
|
@@ -44,12 +54,12 @@ export default mixins().extend({
|
|
|
44
54
|
},
|
|
45
55
|
methods: {
|
|
46
56
|
getOpenDependents() {
|
|
47
|
-
var _a
|
|
57
|
+
var _a;
|
|
48
58
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (
|
|
52
|
-
return [];
|
|
59
|
+
if (!this.closeDependents) return [];
|
|
60
|
+
const subTree = (_a = this.$) === null || _a === void 0 ? void 0 : _a.subTree;
|
|
61
|
+
if (!subTree) return [];
|
|
62
|
+
return searchVNodeTree(Array.isArray(subTree) ? subTree : [subTree]);
|
|
53
63
|
},
|
|
54
64
|
|
|
55
65
|
getOpenDependentElements() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mixins/dependent/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/mixins/dependent/index.ts"],"names":[],"mappings":"AAGA,OAAO,MAAP,MAAmB,mBAAnB;;AAiBA,SAAS,eAAT,CAA0B,MAA1B,EAAyC;;;AACvC,QAAM,OAAO,GAAwB,EAArC;;AAEA,OAAK,MAAM,KAAX,IAAoB,MAApB,EAA4B;AAC1B,UAAM,KAAK,GAAG,CAAA,EAAA,GAAC,KAAa,CAAC,SAAf,MAAwB,IAAxB,IAAwB,EAAA,KAAA,KAAA,CAAxB,GAAwB,KAAA,CAAxB,GAAwB,EAAA,CAAE,KAAxC;;AAEA,QAAI,CAAA,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAK,KAAA,CAAL,GAAA,KAAK,CAAE,QAAP,MAAmB,KAAK,KAAA,IAAL,IAAA,KAAK,KAAA,KAAA,CAAL,GAAK,KAAA,CAAL,GAAA,KAAK,CAAE,WAA1B,CAAJ,EAA2C;AACzC,MAAA,OAAO,CAAC,IAAR,CAAa,KAAb;AACD,KAFD,MAEO;AACL,YAAM,OAAO,GAAG,CAAA,EAAA,GAAC,KAAa,CAAC,SAAf,MAAwB,IAAxB,IAAwB,EAAA,KAAA,KAAA,CAAxB,GAAwB,KAAA,CAAxB,GAAwB,EAAA,CAAE,OAA1C;;AACA,UAAI,OAAJ,EAAa;AACX,QAAA,OAAO,CAAC,IAAR,CAAa,GAAG,eAAe,CAAC,KAAK,CAAC,OAAN,CAAc,OAAd,IAAyB,OAAzB,GAAmC,CAAC,OAAD,CAApC,CAA/B;AACD;;AAED,YAAM,QAAQ,GAAI,KAAa,CAAC,QAAhC;;AACA,UAAI,KAAK,CAAC,OAAN,CAAc,QAAd,CAAJ,EAA6B;AAC3B,QAAA,OAAO,CAAC,IAAR,CAAa,GAAG,eAAe,CAAC,QAAD,CAA/B;AACD;AACF;AACF;;AAED,SAAO,OAAP;AACD;AAED;;;AACA,eAAe,MAAM,GAAG,MAAT,CAAgB;AAC7B,EAAA,IAAI,EAAE,WADuB;;AAG7B,EAAA,IAAI,GAAA;AACF,WAAO;AACL,MAAA,eAAe,EAAE,IADZ;AAEL,MAAA,QAAQ,EAAE,KAFL;AAGL,MAAA,WAAW,EAAE;AAHR,KAAP;AAKD,GAT4B;;AAW7B,EAAA,KAAK,EAAE;AACL,IAAA,QAAQ,CAAE,GAAF,EAAK;AACX,UAAI,GAAJ,EAAS;AAET,YAAM,cAAc,GAAG,KAAK,iBAAL,EAAvB;;AACA,WAAK,IAAI,KAAK,GAAG,CAAjB,EAAoB,KAAK,GAAG,cAAc,CAAC,MAA3C,EAAmD,KAAK,EAAxD,EAA4D;AAC1D,QAAA,cAAc,CAAC,KAAD,CAAd,CAAsB,QAAtB,GAAiC,KAAjC;AACD;AACF;;AARI,GAXsB;AAsB7B,EAAA,OAAO,EAAE;AACP,IAAA,iBAAiB,GAAA;;;AACf,UAAI,CAAC,KAAK,eAAV,EAA2B,OAAO,EAAP;AAE3B,YAAM,OAAO,GAAG,CAAA,EAAA,GAAC,KAAK,CAAN,MAAe,IAAf,IAAe,EAAA,KAAA,KAAA,CAAf,GAAe,KAAA,CAAf,GAAe,EAAA,CAAE,OAAjC;AACA,UAAI,CAAC,OAAL,EAAc,OAAO,EAAP;AAEd,aAAO,eAAe,CAAC,KAAK,CAAC,OAAN,CAAc,OAAd,IAAyB,OAAzB,GAAmC,CAAC,OAAD,CAApC,CAAtB;AACD,KARM;;AASP,IAAA,wBAAwB,GAAA;AACtB,YAAM,MAAM,GAAG,EAAf;AACA,YAAM,cAAc,GAAG,KAAK,iBAAL,EAAvB;;AAEA,WAAK,IAAI,KAAK,GAAG,CAAjB,EAAoB,KAAK,GAAG,cAAc,CAAC,MAA3C,EAAmD,KAAK,EAAxD,EAA4D;AAC1D,QAAA,MAAM,CAAC,IAAP,CAAY,GAAG,cAAc,CAAC,KAAD,CAAd,CAAsB,6BAAtB,EAAf;AACD;;AAED,aAAO,MAAP;AACD,KAlBM;;AAmBP,IAAA,6BAA6B,GAAA;AAC3B,YAAM,MAAM,GAAG,CAAC,KAAK,GAAN,CAAf;AACA,UAAI,KAAK,KAAL,CAAW,OAAf,EAAwB,MAAM,CAAC,IAAP,CAAY,KAAK,KAAL,CAAW,OAAvB;AACxB,UAAI,KAAK,OAAT,EAAkB,MAAM,CAAC,IAAP,CAAY,KAAK,OAAL,CAAa,GAAzB;AAClB,MAAA,MAAM,CAAC,IAAP,CAAY,GAAG,KAAK,wBAAL,EAAf;AAEA,aAAO,MAAP;AACD;;AA1BM;AAtBoB,CAAhB,CAAf","sourcesContent":["import { defineComponent } from 'vue'\nimport type { VNode } from 'vue'\n\nimport mixins from '../../util/mixins'\nimport { VOverlay } from '../../components/VOverlay'\n\ninterface options {\n $el: HTMLElement\n $refs: {\n content?: HTMLElement\n }\n overlay?: InstanceType<typeof VOverlay>\n}\n\ninterface DependentInstance extends Vue {\n isActive?: boolean\n isDependent?: boolean\n getClickableDependentElements?: () => HTMLElement[]\n}\n\nfunction searchVNodeTree (vnodes: VNode[]): DependentInstance[] {\n const results: DependentInstance[] = []\n\n for (const vnode of vnodes) {\n const proxy = (vnode as any).component?.proxy as DependentInstance | undefined\n\n if (proxy?.isActive && proxy?.isDependent) {\n results.push(proxy)\n } else {\n const subTree = (vnode as any).component?.subTree\n if (subTree) {\n results.push(...searchVNodeTree(Array.isArray(subTree) ? subTree : [subTree]))\n }\n\n const children = (vnode as any).children\n if (Array.isArray(children)) {\n results.push(...searchVNodeTree(children))\n }\n }\n }\n\n return results\n}\n\n/* @vue/component */\nexport default mixins().extend({\n name: 'dependent',\n\n data () {\n return {\n closeDependents: true,\n isActive: false,\n isDependent: true\n }\n },\n\n watch: {\n isActive (val) {\n if (val) return\n\n const openDependents = this.getOpenDependents()\n for (let index = 0; index < openDependents.length; index++) {\n openDependents[index].isActive = false\n }\n }\n },\n\n methods: {\n getOpenDependents (): any[] {\n if (!this.closeDependents) return []\n\n const subTree = (this.$ as any)?.subTree\n if (!subTree) return []\n\n return searchVNodeTree(Array.isArray(subTree) ? subTree : [subTree])\n },\n getOpenDependentElements (): HTMLElement[] {\n const result = []\n const openDependents = this.getOpenDependents()\n\n for (let index = 0; index < openDependents.length; index++) {\n result.push(...openDependents[index].getClickableDependentElements())\n }\n\n return result\n },\n getClickableDependentElements (): HTMLElement[] {\n const result = [this.$el]\n if (this.$refs.content) result.push(this.$refs.content)\n if (this.overlay) result.push(this.overlay.$el as HTMLElement)\n result.push(...this.getOpenDependentElements())\n\n return result\n }\n }\n})\n"],"sourceRoot":"","file":"index.js"}
|
package/package.json
CHANGED
|
@@ -564,4 +564,58 @@ describe('VSelect.ts', () => {
|
|
|
564
564
|
// Confirm dialog is still open (проверяем существование)
|
|
565
565
|
expect(dialogWrapper.exists()).toBe(true)
|
|
566
566
|
})
|
|
567
|
+
|
|
568
|
+
it('should not treat click on select item as outside dialog', async () => {
|
|
569
|
+
const items = ['Foo', 'Bar', 'Fizz']
|
|
570
|
+
|
|
571
|
+
const dialogWrapper = mount(VDialog, {
|
|
572
|
+
slots: {
|
|
573
|
+
default: () => h(VSelect, {
|
|
574
|
+
items
|
|
575
|
+
})
|
|
576
|
+
},
|
|
577
|
+
props: {
|
|
578
|
+
modelValue: false,
|
|
579
|
+
fullscreen: true
|
|
580
|
+
},
|
|
581
|
+
global: {
|
|
582
|
+
mocks: {
|
|
583
|
+
$vuetify: {
|
|
584
|
+
lang: {
|
|
585
|
+
t: (val: string) => val
|
|
586
|
+
},
|
|
587
|
+
theme: {
|
|
588
|
+
dark: false
|
|
589
|
+
},
|
|
590
|
+
icons: {
|
|
591
|
+
component: 'mdi'
|
|
592
|
+
},
|
|
593
|
+
breakpoint: {}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}) as VueWrapper<InstanceType<typeof VDialog>>
|
|
598
|
+
|
|
599
|
+
await dialogWrapper.setProps({ modelValue: true })
|
|
600
|
+
await dialogWrapper.vm.$nextTick()
|
|
601
|
+
|
|
602
|
+
const selectWrapper = dialogWrapper.findComponent(VSelect) as VueWrapper<Instance>
|
|
603
|
+
|
|
604
|
+
const inputSlot = selectWrapper.find('.v-input__slot')
|
|
605
|
+
await inputSlot.trigger('click')
|
|
606
|
+
await selectWrapper.vm.$nextTick()
|
|
607
|
+
|
|
608
|
+
expect(selectWrapper.vm.isMenuActive).toBe(true)
|
|
609
|
+
|
|
610
|
+
const item = document.querySelector('.v-list-item')
|
|
611
|
+
expect(item).toBeTruthy()
|
|
612
|
+
if (item) {
|
|
613
|
+
(item as HTMLElement).click()
|
|
614
|
+
}
|
|
615
|
+
await waitAnimationFrame()
|
|
616
|
+
await selectWrapper.vm.$nextTick()
|
|
617
|
+
|
|
618
|
+
expect(dialogWrapper.emitted('click:outside')).toBeFalsy()
|
|
619
|
+
expect(dialogWrapper.vm.isActive).toBe(true)
|
|
620
|
+
})
|
|
567
621
|
})
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { defineComponent } from 'vue'
|
|
2
|
+
import type { VNode } from 'vue'
|
|
2
3
|
|
|
3
4
|
import mixins from '../../util/mixins'
|
|
4
5
|
import { VOverlay } from '../../components/VOverlay'
|
|
@@ -14,18 +15,27 @@ interface options {
|
|
|
14
15
|
interface DependentInstance extends Vue {
|
|
15
16
|
isActive?: boolean
|
|
16
17
|
isDependent?: boolean
|
|
17
|
-
|
|
18
|
+
getClickableDependentElements?: () => HTMLElement[]
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
function
|
|
21
|
-
const results = []
|
|
22
|
-
for (let index = 0; index < children.length; index++) {
|
|
23
|
-
const child = children[index] as DependentInstance
|
|
21
|
+
function searchVNodeTree (vnodes: VNode[]): DependentInstance[] {
|
|
22
|
+
const results: DependentInstance[] = []
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
for (const vnode of vnodes) {
|
|
25
|
+
const proxy = (vnode as any).component?.proxy as DependentInstance | undefined
|
|
26
|
+
|
|
27
|
+
if (proxy?.isActive && proxy?.isDependent) {
|
|
28
|
+
results.push(proxy)
|
|
27
29
|
} else {
|
|
28
|
-
|
|
30
|
+
const subTree = (vnode as any).component?.subTree
|
|
31
|
+
if (subTree) {
|
|
32
|
+
results.push(...searchVNodeTree(Array.isArray(subTree) ? subTree : [subTree]))
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const children = (vnode as any).children
|
|
36
|
+
if (Array.isArray(children)) {
|
|
37
|
+
results.push(...searchVNodeTree(children))
|
|
38
|
+
}
|
|
29
39
|
}
|
|
30
40
|
}
|
|
31
41
|
|
|
@@ -57,13 +67,12 @@ export default mixins().extend({
|
|
|
57
67
|
|
|
58
68
|
methods: {
|
|
59
69
|
getOpenDependents (): any[] {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (!node) return []
|
|
70
|
+
if (!this.closeDependents) return []
|
|
63
71
|
|
|
64
|
-
|
|
72
|
+
const subTree = (this.$ as any)?.subTree
|
|
73
|
+
if (!subTree) return []
|
|
65
74
|
|
|
66
|
-
return []
|
|
75
|
+
return searchVNodeTree(Array.isArray(subTree) ? subTree : [subTree])
|
|
67
76
|
},
|
|
68
77
|
getOpenDependentElements (): HTMLElement[] {
|
|
69
78
|
const result = []
|