fix(vue): testing a routerLink-capable component no longer warns of missing router dependency (#22532)

resolves #22506
This commit is contained in:
Liam DeBeasi
2020-11-23 14:17:52 -05:00
committed by GitHub
parent a664ccbde9
commit 4e23aad3d9
4 changed files with 22 additions and 16 deletions

View File

@ -1,4 +1,4 @@
import { VNode, defineComponent, h, inject, ref, Ref } from 'vue';
import { VNode, defineComponent, getCurrentInstance, h, inject, ref, Ref } from 'vue';
export interface InputProps extends Object {
modelValue: string | boolean;
@ -62,16 +62,22 @@ export const defineContainer = <Props>(name: string, componentProps: string[] =
let handleClick: (ev: Event) => void;
if (routerLinkComponent) {
const navManager: NavManager = inject(NAV_MANAGER);
const currentInstance = getCurrentInstance();
const hasRouter = currentInstance?.appContext?.provides[NAV_MANAGER];
const navManager: NavManager | undefined = hasRouter ? inject(NAV_MANAGER) : undefined;
handleClick = (ev: Event) => {
const routerProps = Object.keys(props).filter(p => p.startsWith(ROUTER_PROP_REFIX));
if (routerProps.length === 0) return;
let navigationPayload: any = { event: ev };
routerProps.forEach(prop => {
navigationPayload[prop] = (props as any)[prop];
});
navManager.navigate(navigationPayload);
if (navManager !== undefined) {
let navigationPayload: any = { event: ev };
routerProps.forEach(prop => {
navigationPayload[prop] = (props as any)[prop];
});
navManager.navigate(navigationPayload);
} else {
console.warn('Tried to navigate, but no router was found. Make sure you have mounted Vue Router.');
}
}
}