chore(@vant/use): split useRelation
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import {
|
||||
inject,
|
||||
computed,
|
||||
onUnmounted,
|
||||
getCurrentInstance,
|
||||
ComponentPublicInstance,
|
||||
ComponentInternalInstance,
|
||||
} from 'vue';
|
||||
|
||||
type ParentProvide<T> = T & {
|
||||
link(child: ComponentInternalInstance): void;
|
||||
unlink(child: ComponentInternalInstance): void;
|
||||
children: ComponentPublicInstance[];
|
||||
internalChildren: ComponentInternalInstance[];
|
||||
};
|
||||
|
||||
export function useParent<T>(key: string | symbol) {
|
||||
const parent = inject<ParentProvide<T> | null>(key, null);
|
||||
|
||||
if (parent) {
|
||||
const instance = getCurrentInstance();
|
||||
|
||||
if (instance) {
|
||||
const { link, unlink, internalChildren, ...rest } = parent;
|
||||
|
||||
link(instance);
|
||||
|
||||
onUnmounted(() => {
|
||||
unlink(instance);
|
||||
});
|
||||
|
||||
const index = computed(() => internalChildren.indexOf(instance));
|
||||
|
||||
return {
|
||||
parent: rest,
|
||||
index,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
Reference in New Issue
Block a user