From a18b19284fd03338fa05d80594d90230f0d0fd4f Mon Sep 17 00:00:00 2001 From: "Pedram (PEBR)" Date: Fri, 28 Jul 2023 09:21:34 +0000 Subject: [PATCH] [FIX] mail: TypeError in cleanTerm function when email is falsy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `cleanTerm` function was throwing a TypeError ("term.toLowerCase is not a function") when the email value of a contact was falsy (like `false`, `null`, or `undefined`), as it was attempting to call `toLowerCase` on a non-string value. This was particularly problematic when two contacts had the same name and at least one of them didn't have an email. The solution was to make `cleanTerm` consider non-sring values as empty string, preventing the TypeError when value is `false` from partner having no email. opw-3439376 closes odoo/odoo#130233 X-original-commit: 2abdf7a8635ed90f0ad26c6407b21cf3c8c60fcd Signed-off-by: Alexandre Kühn (aku) Signed-off-by: Pedram Bi Ria (pebr) --- .../static/src/composer/suggestion_service_patch.js | 4 ++-- addons/mail/static/src/core/common/partner_compare.js | 8 ++++---- addons/mail/static/src/core/common/suggestion_service.js | 4 ++-- .../src/discuss/core/common/suggestion_service_patch.js | 4 ++-- addons/mail/static/src/utils/common/format.js | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/addons/im_livechat/static/src/composer/suggestion_service_patch.js b/addons/im_livechat/static/src/composer/suggestion_service_patch.js index e19ca9f86fc..4941fe26560 100644 --- a/addons/im_livechat/static/src/composer/suggestion_service_patch.js +++ b/addons/im_livechat/static/src/composer/suggestion_service_patch.js @@ -43,8 +43,8 @@ patch(SuggestionService.prototype, "im_livechat", { }; }); const sortFunc = (c1, c2) => { - const cleanedName1 = cleanTerm(c1.name ?? ""); - const cleanedName2 = cleanTerm(c2.name ?? ""); + const cleanedName1 = cleanTerm(c1.name); + const cleanedName2 = cleanTerm(c2.name); if ( cleanedName1.startsWith(cleanedSearchTerm) && !cleanedName2.startsWith(cleanedSearchTerm) diff --git a/addons/mail/static/src/core/common/partner_compare.js b/addons/mail/static/src/core/common/partner_compare.js index b192b92fdf3..cccaaa2feef 100644 --- a/addons/mail/static/src/core/common/partner_compare.js +++ b/addons/mail/static/src/core/common/partner_compare.js @@ -47,8 +47,8 @@ partnerCompareRegistry.add( partnerCompareRegistry.add( "mail.name", (p1, p2, { searchTerm }) => { - const cleanedName1 = cleanTerm(p1.name ?? ""); - const cleanedName2 = cleanTerm(p2.name ?? ""); + const cleanedName1 = cleanTerm(p1.name); + const cleanedName2 = cleanTerm(p2.name); if (cleanedName1.startsWith(searchTerm) && !cleanedName2.startsWith(searchTerm)) { return -1; } @@ -68,8 +68,8 @@ partnerCompareRegistry.add( partnerCompareRegistry.add( "mail.email", (p1, p2, { searchTerm }) => { - const cleanedEmail1 = cleanTerm(p1.email ?? ""); - const cleanedEmail2 = cleanTerm(p2.email ?? ""); + const cleanedEmail1 = cleanTerm(p1.email); + const cleanedEmail2 = cleanTerm(p2.email); if (cleanedEmail1.startsWith(searchTerm) && !cleanedEmail1.startsWith(searchTerm)) { return -1; } diff --git a/addons/mail/static/src/core/common/suggestion_service.js b/addons/mail/static/src/core/common/suggestion_service.js index f9ccda4ef3c..7d923c3ae45 100644 --- a/addons/mail/static/src/core/common/suggestion_service.js +++ b/addons/mail/static/src/core/common/suggestion_service.js @@ -218,8 +218,8 @@ export class SuggestionService { if (!c1.hasSelfAsMember && c2.hasSelfAsMember) { return 1; } - const cleanedDisplayName1 = cleanTerm(c1.displayName ?? ""); - const cleanedDisplayName2 = cleanTerm(c2.displayName ?? ""); + const cleanedDisplayName1 = cleanTerm(c1.displayName); + const cleanedDisplayName2 = cleanTerm(c2.displayName); if ( cleanedDisplayName1.startsWith(cleanedSearchTerm) && !cleanedDisplayName2.startsWith(cleanedSearchTerm) diff --git a/addons/mail/static/src/discuss/core/common/suggestion_service_patch.js b/addons/mail/static/src/discuss/core/common/suggestion_service_patch.js index c51123a6b02..f1f9068eaf3 100644 --- a/addons/mail/static/src/discuss/core/common/suggestion_service_patch.js +++ b/addons/mail/static/src/discuss/core/common/suggestion_service_patch.js @@ -53,8 +53,8 @@ patch(SuggestionService.prototype, "discuss/core/common", { if (!c1.channel_types && c2.channel_types) { return 1; } - const cleanedName1 = cleanTerm(c1.name || ""); - const cleanedName2 = cleanTerm(c2.name || ""); + const cleanedName1 = cleanTerm(c1.name); + const cleanedName2 = cleanTerm(c2.name); if ( cleanedName1.startsWith(cleanedSearchTerm) && !cleanedName2.startsWith(cleanedSearchTerm) diff --git a/addons/mail/static/src/utils/common/format.js b/addons/mail/static/src/utils/common/format.js index 6d7479a24e4..93d458e13c0 100644 --- a/addons/mail/static/src/utils/common/format.js +++ b/addons/mail/static/src/utils/common/format.js @@ -242,5 +242,5 @@ export function convertBrToLineBreak(str) { } export function cleanTerm(term) { - return unaccent(term.toLowerCase()); + return unaccent((typeof term === "string" ? term : "").toLowerCase()); }