import { AccordionMenuItem, AccordionMenuType } from './accordion.type';
import { ComponentInternalInstance, getCurrentInstance } from 'vue';
const flatten = (
arr: Array<any>,
childrenKey = 'children',
includeParent = false,
includeLeaf = true
): Array<AccordionMenuItem> => {
return arr.reduce((acc, cur) => {
const children = cur[childrenKey];
if (children === undefined) {
if (includeLeaf) {
acc.push(cur);
}
} else {
if (includeParent) {
acc.push(cur);
}
if (Array.isArray(children)) {
acc.push(...flatten(children, childrenKey, includeParent));
}
}
return acc;
}, []);
};
const precheckNodeId = (d: AccordionMenuItem): AccordionMenuItem => {
const random = parseInt((Math.random() * 10 ** 8).toString().padEnd(8, '0'));
return { ...d, id: d.id ? `${d.id}_${random}` : `${d.title.replaceAll(' ', '-')}_${random}` };
};
const precheckTree = (ds: AccordionMenuType): AccordionMenuType => {
return ds.map((d) => {
const dd = precheckNodeId(d);
if (d.children) {
return {
...dd,
children: precheckTree(d.children)
};
}
return dd;
});
};
const getRootSlots = (): ComponentInternalInstance['slots'] | undefined => {
const rootComponentName = 'DAccordion';
* 获取父组件
*/
const getRootComponent = (
component: ComponentInternalInstance | null
): ComponentInternalInstance | undefined => {
if (component && component.type.name === rootComponentName) {
return component;
}
if (component && component.parent) {
const parent = component.parent;
return getRootComponent(parent);
}
};
const rootComponent = getRootComponent(getCurrentInstance());
return rootComponent?.slots;
};
export {
flatten,
precheckNodeId,
precheckTree,
getRootSlots
};