Task-2759571 closes odoo/odoo#86802 Related: odoo/enterprise#25434 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
38 lines
1.1 KiB
JavaScript
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);
|
|
}
|
|
});
|
|
}
|