Files
odoo_source/addons/mail/static/src/component_hooks/use_update.js
T
Louis Wicket (wil) bb1003893f [MOV] mail: move component hooks up
Task-2759571

closes odoo/odoo#86802

Related: odoo/enterprise#25434
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2022-03-22 19:39:44 +01:00

38 lines
1.1 KiB
JavaScript

/** @odoo-module **/
import { Listener } from '@mail/model/model_listener';
const { onMounted, onPatched, onWillDestroy, useComponent } = owl;
/**
* This hook provides support for executing code after update (render or patch).
*
* @param {Object} param0
* @param {function} param0.func the function to execute after the update.
*/
export function useUpdate({ func }) {
const component = useComponent();
const { modelManager } = component.env.services.messaging;
const listener = new Listener({
isLocking: false, // unfortunately onUpdate methods often have side effect
name: `useUpdate() of ${component}`,
onChange: () => component.render(),
});
function onUpdate() {
if (modelManager) {
modelManager.startListening(listener);
}
func();
if (modelManager) {
modelManager.stopListening(listener);
}
}
onMounted(onUpdate);
onPatched(onUpdate);
onWillDestroy(() => {
if (modelManager) {
modelManager.removeListener(listener);
}
});
}