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

14
core/package-lock.json generated
View File

@ -17,7 +17,7 @@
"@rollup/plugin-virtual": "^2.0.3", "@rollup/plugin-virtual": "^2.0.3",
"@stencil/core": "2.1.2", "@stencil/core": "2.1.2",
"@stencil/sass": "1.3.2", "@stencil/sass": "1.3.2",
"@stencil/vue-output-target": "0.1.8", "@stencil/vue-output-target": "0.2.2",
"@types/jest": "^26.0.10", "@types/jest": "^26.0.10",
"@types/node": "^14.6.0", "@types/node": "^14.6.0",
"@types/puppeteer": "3.0.1", "@types/puppeteer": "3.0.1",
@ -1657,9 +1657,9 @@
"dev": true "dev": true
}, },
"node_modules/@stencil/vue-output-target": { "node_modules/@stencil/vue-output-target": {
"version": "0.1.8", "version": "0.2.2",
"resolved": "https://registry.npmjs.org/@stencil/vue-output-target/-/vue-output-target-0.1.8.tgz", "resolved": "https://registry.npmjs.org/@stencil/vue-output-target/-/vue-output-target-0.2.2.tgz",
"integrity": "sha512-ruZmJuv3T0i1ZHgpOn72k4xj0WVpaerSQvjovCEgDMQ6uZewcWxc41jI0GcxAt/dn2g/feZCsKdz8M8yB9RtfA==", "integrity": "sha512-WBnN/8ggIVYgKbJOML1DVzjFnKv7RaQpTa+XNeY0r/EG6MbXlUjUC/4Cpkg5wQ94WNuPpphAR4oRWGsmiQDxPQ==",
"dev": true "dev": true
}, },
"node_modules/@stylelint/postcss-css-in-js": { "node_modules/@stylelint/postcss-css-in-js": {
@ -16387,9 +16387,9 @@
"dev": true "dev": true
}, },
"@stencil/vue-output-target": { "@stencil/vue-output-target": {
"version": "0.1.8", "version": "0.2.2",
"resolved": "https://registry.npmjs.org/@stencil/vue-output-target/-/vue-output-target-0.1.8.tgz", "resolved": "https://registry.npmjs.org/@stencil/vue-output-target/-/vue-output-target-0.2.2.tgz",
"integrity": "sha512-ruZmJuv3T0i1ZHgpOn72k4xj0WVpaerSQvjovCEgDMQ6uZewcWxc41jI0GcxAt/dn2g/feZCsKdz8M8yB9RtfA==", "integrity": "sha512-WBnN/8ggIVYgKbJOML1DVzjFnKv7RaQpTa+XNeY0r/EG6MbXlUjUC/4Cpkg5wQ94WNuPpphAR4oRWGsmiQDxPQ==",
"dev": true "dev": true
}, },
"@stylelint/postcss-css-in-js": { "@stylelint/postcss-css-in-js": {

View File

@ -38,7 +38,7 @@
"@rollup/plugin-virtual": "^2.0.3", "@rollup/plugin-virtual": "^2.0.3",
"@stencil/core": "2.1.2", "@stencil/core": "2.1.2",
"@stencil/sass": "1.3.2", "@stencil/sass": "1.3.2",
"@stencil/vue-output-target": "0.1.8", "@stencil/vue-output-target": "0.2.2",
"@types/jest": "^26.0.10", "@types/jest": "^26.0.10",
"@types/node": "^14.6.0", "@types/node": "^14.6.0",
"@types/puppeteer": "3.0.1", "@types/puppeteer": "3.0.1",

View File

@ -3,7 +3,7 @@
/* auto-generated vue proxies */ /* auto-generated vue proxies */
import { defineContainer } from './vue-component-lib/utils'; import { defineContainer } from './vue-component-lib/utils';
import { JSX } from '@ionic/core'; import type { JSX } from '@ionic/core';

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 { export interface InputProps extends Object {
modelValue: string | boolean; modelValue: string | boolean;
@ -62,16 +62,22 @@ export const defineContainer = <Props>(name: string, componentProps: string[] =
let handleClick: (ev: Event) => void; let handleClick: (ev: Event) => void;
if (routerLinkComponent) { 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) => { handleClick = (ev: Event) => {
const routerProps = Object.keys(props).filter(p => p.startsWith(ROUTER_PROP_REFIX)); const routerProps = Object.keys(props).filter(p => p.startsWith(ROUTER_PROP_REFIX));
if (routerProps.length === 0) return; if (routerProps.length === 0) return;
if (navManager !== undefined) {
let navigationPayload: any = { event: ev }; let navigationPayload: any = { event: ev };
routerProps.forEach(prop => { routerProps.forEach(prop => {
navigationPayload[prop] = (props as any)[prop]; navigationPayload[prop] = (props as any)[prop];
}); });
navManager.navigate(navigationPayload); navManager.navigate(navigationPayload);
} else {
console.warn('Tried to navigate, but no router was found. Make sure you have mounted Vue Router.');
}
} }
} }