feat: layout component

This commit is contained in:
chenjiahan
2020-07-05 16:00:20 +08:00
parent 4a25ebf9ab
commit e671e22ea5
12 changed files with 677 additions and 31 deletions

View File

@@ -1,33 +1,34 @@
import { VNode } from 'vue';
// import { VNode } from 'vue';
function flattenVNodes(vnodes: VNode[]) {
const result: VNode[] = [];
// function flattenVNodes(vnodes: VNode[]) {
// const result: VNode[] = [];
function traverse(vnodes: VNode[]) {
vnodes.forEach((vnode) => {
result.push(vnode);
// function traverse(vnodes: VNode[]) {
// vnodes.forEach((vnode) => {
// result.push(vnode);
if (vnode.componentInstance) {
traverse(vnode.componentInstance.$children.map((item) => item.$vnode));
}
// if (vnode.componentInstance) {
// traverse(vnode.componentInstance.$children.map((item) => item.$vnode));
// }
if (vnode.children) {
traverse(vnode.children);
}
});
}
// if (vnode.children) {
// traverse(vnode.children);
// }
// });
// }
traverse(vnodes);
return result;
}
// traverse(vnodes);
// return result;
// }
// TODO
// sort children instances by vnodes order
export function sortChildren(children: Vue[], parent: Vue) {
const { componentOptions } = parent.$vnode;
if (!componentOptions || !componentOptions.children) {
return;
}
// const { componentOptions } = parent.$vnode;
// if (!componentOptions || !componentOptions.children) {
// return;
// }
const vnodes = flattenVNodes(componentOptions.children);
children.sort((a, b) => vnodes.indexOf(a.$vnode) - vnodes.indexOf(b.$vnode));
// const vnodes = flattenVNodes(componentOptions.children);
// children.sort((a, b) => vnodes.indexOf(a.$vnode) - vnodes.indexOf(b.$vnode));
}