From d1e6087488360f4f62bf17abe0a915555700e812 Mon Sep 17 00:00:00 2001 From: trevor-signal <131492920+trevor-signal@users.noreply.github.com> Date: Wed, 29 Oct 2025 15:57:44 -0400 Subject: [PATCH] Show draftTimestamp in left pane preview --- ts/components/ConversationList.dom.tsx | 1 + .../conversationList/ConversationListItem.dom.tsx | 6 +++++- ts/state/ducks/composer.preload.ts | 1 - ts/state/ducks/conversations.preload.ts | 3 +-- ts/state/selectors/conversations.dom.ts | 9 +++++++-- ts/util/getConversation.preload.ts | 1 + 6 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ts/components/ConversationList.dom.tsx b/ts/components/ConversationList.dom.tsx index e84e6d305b..ca64165359 100644 --- a/ts/components/ConversationList.dom.tsx +++ b/ts/components/ConversationList.dom.tsx @@ -478,6 +478,7 @@ export function ConversationList({ 'badges', 'color', 'draftPreview', + 'draftTimestamp', 'groupId', 'hasAvatar', 'id', diff --git a/ts/components/conversationList/ConversationListItem.dom.tsx b/ts/components/conversationList/ConversationListItem.dom.tsx index 43db0a0eb6..79c0b2e5c6 100644 --- a/ts/components/conversationList/ConversationListItem.dom.tsx +++ b/ts/components/conversationList/ConversationListItem.dom.tsx @@ -33,6 +33,7 @@ export type PropsData = Pick< | 'badges' | 'color' | 'draftPreview' + | 'draftTimestamp' | 'groupId' | 'hasAvatar' | 'id' @@ -82,6 +83,7 @@ export const ConversationListItem: FunctionComponent = React.memo( buttonAriaLabel, color, draftPreview, + draftTimestamp, groupId, hasAvatar, i18n, @@ -131,6 +133,7 @@ export const ConversationListItem: FunctionComponent = React.memo( ); + let headerDate: number | undefined = lastUpdated; let messageText: ReactNode = null; let messageStatusIcon: ReactNode = null; @@ -167,6 +170,7 @@ export const ConversationListItem: FunctionComponent = React.memo( /> ); + headerDate = draftTimestamp; } else if (lastMessage?.deletedForEveryone) { messageText = ( @@ -216,7 +220,7 @@ export const ConversationListItem: FunctionComponent = React.memo( conversationType={type} groupId={groupId} hasAvatar={hasAvatar} - headerDate={lastUpdated} + headerDate={headerDate} headerName={headerName} i18n={i18n} id={id} diff --git a/ts/state/ducks/composer.preload.ts b/ts/state/ducks/composer.preload.ts index d987f0dc36..656a0b0d19 100644 --- a/ts/state/ducks/composer.preload.ts +++ b/ts/state/ducks/composer.preload.ts @@ -860,7 +860,6 @@ function addAttachment( active_at: activeAt, draftChanged: false, draftTimestamp: now, - timestamp: now, }); } diff --git a/ts/state/ducks/conversations.preload.ts b/ts/state/ducks/conversations.preload.ts index cca6c9dc58..18d6a26530 100644 --- a/ts/state/ducks/conversations.preload.ts +++ b/ts/state/ducks/conversations.preload.ts @@ -419,6 +419,7 @@ export type ConversationType = ReadonlyDeep< draftBodyRanges?: DraftBodyRanges; // Summary for the left pane draftPreview?: DraftPreviewType; + draftTimestamp?: number; sharedGroupNames: ReadonlyArray; groupDescription?: string; @@ -4980,8 +4981,6 @@ function onConversationClosed( active_at: activeAt, draftChanged: false, draftTimestamp: now, - timestamp: now, - lastMessageReceivedAtMs: now, }); } else { log.info(`${logId}: clearing draft info`); diff --git a/ts/state/selectors/conversations.dom.ts b/ts/state/selectors/conversations.dom.ts index 64d908e276..a48532fec8 100644 --- a/ts/state/selectors/conversations.dom.ts +++ b/ts/state/selectors/conversations.dom.ts @@ -324,8 +324,13 @@ const collator = new Intl.Collator(); export const _getConversationComparator = () => { return (left: ConversationType, right: ConversationType): number => { // These two fields can be sorted with each other; they are timestamps - const leftTimestamp = left.lastMessageReceivedAtMs || left.timestamp; - const rightTimestamp = right.lastMessageReceivedAtMs || right.timestamp; + const leftTimestamp = left.shouldShowDraft + ? left.draftTimestamp + : left.lastMessageReceivedAtMs || left.timestamp; + const rightTimestamp = right.shouldShowDraft + ? right.draftTimestamp + : right.lastMessageReceivedAtMs || right.timestamp; + if (leftTimestamp && !rightTimestamp) { return -1; } diff --git a/ts/util/getConversation.preload.ts b/ts/util/getConversation.preload.ts index 5d5164f81d..53814244b1 100644 --- a/ts/util/getConversation.preload.ts +++ b/ts/util/getConversation.preload.ts @@ -186,6 +186,7 @@ export function getConversation(model: ConversationModel): ConversationType { draftBodyRanges: attributes.draftBodyRanges, draftPreview, draftText, + draftTimestamp: dropNull(draftTimestamp), draftEditMessage, familyName: attributes.nicknameFamilyName ?? attributes.profileFamilyName, firstName: attributes.nicknameGivenName ?? attributes.profileName,