From 0b7ff0bafe835ef51b1be181736c0ab01ee2f5a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20K=C3=BChn?= Date: Mon, 24 Jan 2022 13:44:54 +0000 Subject: [PATCH] [FIX] mail: no infinite loop with `useXToModel` hooks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before this commit, implementation of `useXToModel` performed essentially 2 updates in succession, even when ref or component hasn't changed. This is a problem, especially when 2 components in hierarchy make use of `useXToComponents`, as this could lead to infinite loops. closes odoo/odoo#83344 X-original-commit: 95cb2648484f8529947e2bed14d86a20e6ad37b6 Signed-off-by: Sébastien Theys (seb) Signed-off-by: Alexandre Kühn (aku) --- .../use_component_to_model/use_component_to_model.js | 4 ++-- .../src/component_hooks/use_ref_to_model/use_ref_to_model.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/mail/static/src/component_hooks/use_component_to_model/use_component_to_model.js b/addons/mail/static/src/component_hooks/use_component_to_model/use_component_to_model.js index fdc80fab382..b337cc782e2 100644 --- a/addons/mail/static/src/component_hooks/use_component_to_model/use_component_to_model.js +++ b/addons/mail/static/src/component_hooks/use_component_to_model/use_component_to_model.js @@ -22,10 +22,10 @@ export function useComponentToModel({ fieldName, modelName }) { } onWillUpdateProps(nextProps => { const currentRecord = modelManager.models[modelName].get(component.props.localId); - if (currentRecord) { + const nextRecord = modelManager.models[modelName].get(nextProps.localId); + if (currentRecord && currentRecord !== nextRecord) { currentRecord.update({ [fieldName]: clear() }); } - const nextRecord = modelManager.models[modelName].get(nextProps.localId); if (nextRecord) { nextRecord.update({ [fieldName]: component }); } diff --git a/addons/mail/static/src/component_hooks/use_ref_to_model/use_ref_to_model.js b/addons/mail/static/src/component_hooks/use_ref_to_model/use_ref_to_model.js index ec186423bd8..a9e613b3125 100644 --- a/addons/mail/static/src/component_hooks/use_ref_to_model/use_ref_to_model.js +++ b/addons/mail/static/src/component_hooks/use_ref_to_model/use_ref_to_model.js @@ -24,10 +24,10 @@ export function useRefToModel({ fieldName, modelName, refName }) { } onWillUpdateProps(nextProps => { const currentRecord = modelManager.models[modelName].get(component.props.localId); - if (currentRecord) { + const nextRecord = modelManager.models[modelName].get(nextProps.localId); + if (currentRecord && currentRecord !== nextRecord) { currentRecord.update({ [fieldName]: clear() }); } - const nextRecord = modelManager.models[modelName].get(nextProps.localId); if (nextRecord) { nextRecord.update({ [fieldName]: ref }); }