[FIX] components: wrap onWillRender/onRendered hooks instead of renderFn

Previously, we were wrapping the entire renderFn in a try/catch, causing
errors during template execution to be caught and wrapped by
onWillRender/onRendered which is undesirable. Now we only wrap the hook
that's being registered.
This commit is contained in:
Samuel Degueldre
2022-03-08 09:37:39 +01:00
committed by Géry Debongnie
parent 14d2328c88
commit 67f86a4ab8
3 changed files with 67 additions and 6 deletions
+8 -6
View File
@@ -77,21 +77,23 @@ export function onWillRender(fn: () => void | any) {
const node = getCurrent();
const renderFn = node.renderFn;
const decorate = node.app.dev ? wrapError : (fn: any) => fn;
node.renderFn = decorate(() => {
fn.call(node.component);
fn = decorate(fn.bind(node.component), "onWillRender");
node.renderFn = () => {
fn();
return renderFn();
}, "onWillRender");
};
}
export function onRendered(fn: () => void | any) {
const node = getCurrent();
const renderFn = node.renderFn;
const decorate = node.app.dev ? wrapError : (fn: any) => fn;
node.renderFn = decorate(() => {
fn = decorate(fn.bind(node.component), "onRendered");
node.renderFn = () => {
const result = renderFn();
fn.call(node.component);
fn();
return result;
}, "onRendered");
};
}
type OnErrorCallback = (error: any) => void | any;