diff --git a/addons/mail/static/src/core/common/partner_compare.js b/addons/mail/static/src/core/common/partner_compare.js index f494740a464..920aba90d3d 100644 --- a/addons/mail/static/src/core/common/partner_compare.js +++ b/addons/mail/static/src/core/common/partner_compare.js @@ -7,7 +7,7 @@ import { registry } from "@web/core/registry"; * Registry of functions to sort partner suggestions. * The expected value is a function with the following * signature: - * (partner1: Partner, partner2: Partner, { env: OdooEnv, searchTerm: string, thread?: Thread }) => number|undefined + * (partner1: Partner, partner2: Partner, { env: OdooEnv, searchTerm: string, thread?: Thread , context?: Object}) => number|undefined */ export const partnerCompareRegistry = registry.category("mail.partner_compare"); diff --git a/addons/mail/static/src/core/common/persona_service.js b/addons/mail/static/src/core/common/persona_service.js index 8acb9998e15..58b0abdb955 100644 --- a/addons/mail/static/src/core/common/persona_service.js +++ b/addons/mail/static/src/core/common/persona_service.js @@ -84,16 +84,17 @@ export class PersonaService { return Object.values(this.store.Thread.records) .filter((thread) => thread.type === "chat") .sort((a, b) => { - if (!a.lastInterestDateTime && !b.lastInterestDateTime) { + const [a_dt , b_dt] = [a.lastInterestDateTime, b.lastInterestDateTime] + if (!a_dt && !b_dt) { return 0; } - if (a.lastInterestDateTime && !b.lastInterestDateTime) { + if (a_dt && !b_dt) { return -1; } - if (!a.lastInterestDateTime && b.lastInterestDateTime) { + if (!a_dt && b_dt) { return 1; } - return b.lastInterestDateTime.ts - a.lastInterestDateTime.ts; + return b_dt.ts - a_dt.ts; }) .map((thread) => thread.chatPartner?.id); } diff --git a/addons/mail/static/src/core/common/suggestion_service.js b/addons/mail/static/src/core/common/suggestion_service.js index 4f69e8e603c..0777a64e83a 100644 --- a/addons/mail/static/src/core/common/suggestion_service.js +++ b/addons/mail/static/src/core/common/suggestion_service.js @@ -14,6 +14,7 @@ export class SuggestionService { this.env = env; this.orm = services.orm; this.store = services["mail.store"]; + this.personaService = services['mail.persona']; } getSupportedDelimiters(thread) { @@ -155,12 +156,14 @@ export class SuggestionService { sortPartnerSuggestions(partners, searchTerm = "", thread = undefined) { const cleanedSearchTerm = cleanTerm(searchTerm); const compareFunctions = partnerCompareRegistry.getAll(); + const context = { recentChatPartnerIds: this.personaService.getRecentChatPartnerIds() }; return partners.sort((p1, p2) => { for (const fn of compareFunctions) { const result = fn(p1, p2, { env: this.env, searchTerms: cleanedSearchTerm, thread, + context, }); if (result !== undefined) { return result; @@ -238,7 +241,7 @@ export class SuggestionService { } export const suggestionService = { - dependencies: ["orm", "mail.store"], + dependencies: ["orm", "mail.store", "mail.persona"], /** * @param {import("@web/env").OdooEnv} env * @param {Partial} services diff --git a/addons/mail/static/src/discuss/core/common/partner_compare.js b/addons/mail/static/src/discuss/core/common/partner_compare.js index 260a66f2512..f757bf1767b 100644 --- a/addons/mail/static/src/discuss/core/common/partner_compare.js +++ b/addons/mail/static/src/discuss/core/common/partner_compare.js @@ -4,8 +4,8 @@ import { partnerCompareRegistry } from "@mail/core/common/partner_compare"; partnerCompareRegistry.add( "discuss.recent-chats", - (p1, p2, { env }) => { - const recentChatPartnerIds = env.services["mail.persona"].getRecentChatPartnerIds(); + (p1, p2, { env, context }) => { + const recentChatPartnerIds = context.recentChatPartnerIds || env.services["mail.persona"].getRecentChatPartnerIds(); const recentChatIndex_p1 = recentChatPartnerIds.findIndex( (partnerId) => partnerId === p1.id );