fix(vue): correctly update property values (#22218)

resolves #22079
This commit is contained in:
Liam DeBeasi
2020-09-30 10:19:26 -04:00
committed by GitHub
parent 2c6259c1f6
commit 25271897e2
3 changed files with 20 additions and 28 deletions

View File

@@ -1385,9 +1385,9 @@
"dev": true
},
"@stencil/vue-output-target": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@stencil/vue-output-target/-/vue-output-target-0.1.3.tgz",
"integrity": "sha512-+X1/gjiHh88Q+sQ9EWEHb4PIQs0k4pjTYxqsjqF5Yq9oaQGOPoKzOzjiIs2PEcE0fB6yu/dtRNQUUsBo613dpA==",
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/@stencil/vue-output-target/-/vue-output-target-0.1.8.tgz",
"integrity": "sha512-ruZmJuv3T0i1ZHgpOn72k4xj0WVpaerSQvjovCEgDMQ6uZewcWxc41jI0GcxAt/dn2g/feZCsKdz8M8yB9RtfA==",
"dev": true
},
"@stylelint/postcss-css-in-js": {

View File

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

View File

@@ -60,32 +60,19 @@ export const defineContainer = <Props>(name: string, componentProps: string[] =
}
};
let finalProps: any = { ...props };
let handleClick: (ev: Event) => void;
if (routerLinkComponent) {
const navManager: NavManager = inject(NAV_MANAGER);
const handleClick = (ev: Event) => {
const routerProps = Object.keys(finalProps).filter(p => p.startsWith(ROUTER_PROP_REFIX));
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] = finalProps[prop];
navigationPayload[prop] = (props as any)[prop];
});
navManager.navigate(navigationPayload);
}
if (finalProps.onClick) {
const oldClick = finalProps.onClick;
finalProps.onClick = (ev: Event) => {
oldClick(ev);
if (!ev.defaultPrevented) {
handleClick(ev);
}
}
} else {
finalProps.onClick = handleClick;
}
}
return () => {
@@ -94,16 +81,21 @@ export const defineContainer = <Props>(name: string, componentProps: string[] =
});
let propsToAdd = {
...finalProps,
...props,
ref: containerRef,
class: getElementClasses(containerRef, classes)
class: getElementClasses(containerRef, classes),
onClick: (routerLinkComponent) ? handleClick : (props as any).onClick,
onVnodeBeforeMount: (modelUpdateEvent) ? onVnodeBeforeMount : undefined
};
if (modelUpdateEvent) {
propsToAdd = {
...propsToAdd,
onVnodeBeforeMount
}
if ((props as any).onClick) {
const oldClick = (props as any).onClick;
propsToAdd.onClick = (ev: Event) => {
oldClick(ev);
if (!ev.defaultPrevented) {
handleClick(ev);
}
};
}
if (modelProp) {