mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
protect against widget destruction before being started
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import h from "../../../libs/snabbdom/src/h";
|
||||
import sdAttrs from "../../../libs/snabbdom/src/modules/attributes";
|
||||
import sdListeners from "../../../libs/snabbdom/src/modules/eventlisteners";
|
||||
import { init } from "../../../libs/snabbdom/src/snabbdom";
|
||||
@@ -231,7 +232,7 @@ export class Component<
|
||||
this.__widget__.renderProps = this.props;
|
||||
this.__widget__.renderPromise = this.willStart().then(() => {
|
||||
if (this.__widget__.isDestroyed) {
|
||||
return Promise.resolve(this.env.qweb.render("default"));
|
||||
return Promise.resolve(h("div"));
|
||||
}
|
||||
this.__widget__.isStarted = true;
|
||||
if (this.inlineTemplate) {
|
||||
|
||||
@@ -821,12 +821,12 @@ const widgetDirective: Directive = {
|
||||
ctx.dedent();
|
||||
ctx.addLine(`} else {`); // not started
|
||||
ctx.indent();
|
||||
ctx.addLine(`isNew${widgetID} = true`);
|
||||
ctx.addLine(
|
||||
`if (props${widgetID} === w${widgetID}.__widget__.renderProps) {`
|
||||
);
|
||||
ctx.indent();
|
||||
ctx.addLine(`def${defID} = w${widgetID}.__widget__.renderPromise;`);
|
||||
ctx.addLine(`isNew${widgetID} = true`);
|
||||
ctx.dedent();
|
||||
ctx.addLine(`} else {`);
|
||||
ctx.indent();
|
||||
@@ -880,7 +880,7 @@ const widgetDirective: Directive = {
|
||||
ctx.addLine(`} else {`);
|
||||
ctx.indent();
|
||||
ctx.addLine(
|
||||
`def${defID} = def${defID}.then(()=>{let vnode=h(w${widgetID}.__widget__.vnode.sel, {key: ${templateID}});vnode.elm=w${widgetID}.el;c${
|
||||
`def${defID} = def${defID}.then(()=>{if (!w${widgetID}.__widget__.vnode) {return};let vnode=h(w${widgetID}.__widget__.vnode.sel, {key: ${templateID}});vnode.elm=w${widgetID}.el;c${
|
||||
ctx.parentNode
|
||||
}[_${dummyID}_index]=vnode;vnode.data.hook = {insert(a){a.elm.parentNode.replaceChild(w${widgetID}.el,a.elm);a.elm=w${widgetID}.el;w${widgetID}.__mount();},remove(){w${widgetID}.${
|
||||
keepAlive ? "detach" : "destroy"
|
||||
|
||||
Reference in New Issue
Block a user