From 96f6e6f4cc1ab65a780a20bd5265fed643ea4672 Mon Sep 17 00:00:00 2001 From: trevor-signal <131492920+trevor-signal@users.noreply.github.com> Date: Wed, 22 Oct 2025 13:54:56 -0400 Subject: [PATCH] Adjust conversation search rankings for archived conversations --- ts/util/filterAndSortConversations.std.ts | 25 ++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/ts/util/filterAndSortConversations.std.ts b/ts/util/filterAndSortConversations.std.ts index d348ebd93e..acff35e966 100644 --- a/ts/util/filterAndSortConversations.std.ts +++ b/ts/util/filterAndSortConversations.std.ts @@ -11,8 +11,10 @@ import { getE164 } from './getE164.std.js'; import { removeDiacritics } from './removeDiacritics.std.js'; import { isAciString } from './isAciString.std.js'; -// Fuse.js scores have order of 0.01 +// See: https://fusejs.io/api/options.html#includescore +// 0 score is a perfect match, 1 - complete mismatch const ACTIVE_AT_SCORE_FACTOR = (1 / WEEK) * 0.01; +const ARCHIVED_PENALTY = 0.3; const LEFT_GROUP_PENALTY = 1; const FUSE_OPTIONS: Fuse.IFuseOptions = { @@ -184,19 +186,28 @@ export function filterAndSortConversations( ) .slice() .sort((a, b) => { - const { activeAt: aActiveAt = 0, left: aLeft = false } = a.item; - const { activeAt: bActiveAt = 0, left: bLeft = false } = b.item; + const { + activeAt: aActiveAt = 0, + left: aLeft = false, + isArchived: aArchived, + } = a.item; + const { + activeAt: bActiveAt = 0, + left: bLeft = false, + isArchived: bArchived, + } = b.item; - // See: https://fusejs.io/api/options.html#includescore - // 0 score is a perfect match, 1 - complete mismatch const aScore = (now - aActiveAt) * ACTIVE_AT_SCORE_FACTOR + (a.score ?? 0) + - (aLeft ? LEFT_GROUP_PENALTY : 0); + (aLeft ? LEFT_GROUP_PENALTY : 0) + + (aArchived ? ARCHIVED_PENALTY : 0); + const bScore = (now - bActiveAt) * ACTIVE_AT_SCORE_FACTOR + (b.score ?? 0) + - (bLeft ? LEFT_GROUP_PENALTY : 0); + (bLeft ? LEFT_GROUP_PENALTY : 0) + + (bArchived ? ARCHIVED_PENALTY : 0); const activeScore = aScore - bScore; if (activeScore !== 0) {