@@ -21,13 +21,15 @@ import {
2121 removeWorkspaceMessageId ,
2222} from "./message-workspace-order.lib" ;
2323import type {
24+ WorkspaceConversationMessageWindowState ,
2425 WorkspaceConversationMessagesStatus ,
2526 WorkspaceMessageStoreData ,
2627 WorkspaceMessageStoreState ,
2728 WorkspaceOptimisticMessageReadChange ,
2829} from "./message.model.types" ;
2930
3031export type {
32+ WorkspaceConversationMessageWindowState ,
3133 WorkspaceConversationMessagesStatus ,
3234 WorkspaceConversationPagination ,
3335 WorkspaceConversationWindowMarkers ,
@@ -42,6 +44,9 @@ export type {
4244
4345const EMPTY_MESSAGES_BY_ID : Record < MessengerUuid , MessengerMessage > = { } ;
4446const EMPTY_MESSAGE_IDS_BY_CONVERSATION_ID : Record < MessengerConversationId , MessengerUuid [ ] > = { } ;
47+ const EMPTY_MESSAGE_WINDOW_STATE_BY_CONVERSATION_ID : Partial <
48+ Record < MessengerConversationId , WorkspaceConversationMessageWindowState >
49+ > = { } ;
4550const EMPTY_MESSAGES_LOADING_BY_CONVERSATION_ID : Record < MessengerConversationId , boolean > = { } ;
4651const EMPTY_MESSAGES_ERROR_BY_CONVERSATION_ID : Record < MessengerConversationId , string | null > = { } ;
4752const EMPTY_NEXT_PAGE_MARKER_BY_CONVERSATION_ID : Record < MessengerConversationId , string | null > =
@@ -160,6 +165,7 @@ function createEmptyWorkspaceMessageData(): WorkspaceMessageStoreData {
160165 return {
161166 messagesById : EMPTY_MESSAGES_BY_ID ,
162167 messageIdsByConversationId : EMPTY_MESSAGE_IDS_BY_CONVERSATION_ID ,
168+ messageWindowStateByConversationId : EMPTY_MESSAGE_WINDOW_STATE_BY_CONVERSATION_ID ,
163169 messagesLoadingByConversationId : EMPTY_MESSAGES_LOADING_BY_CONVERSATION_ID ,
164170 messagesErrorByConversationId : EMPTY_MESSAGES_ERROR_BY_CONVERSATION_ID ,
165171 nextPageMarkerByConversationId : EMPTY_NEXT_PAGE_MARKER_BY_CONVERSATION_ID ,
@@ -799,13 +805,28 @@ export const useWorkspaceMessageStore = create<WorkspaceMessageStoreState>((set)
799805 } ) ) ;
800806 } ,
801807
808+ setConversationMessageWindowState ( conversationId , windowState ) {
809+ if ( isRemovedStreamConversation ( conversationId ) ) return ;
810+ logStoreAction ( "workspaceMessage" , "setConversationMessageWindowState" , {
811+ conversationId,
812+ windowState,
813+ } ) ;
814+ set ( ( state ) => ( {
815+ messageWindowStateByConversationId : {
816+ ...state . messageWindowStateByConversationId ,
817+ [ conversationId ] : windowState ,
818+ } ,
819+ } ) ) ;
820+ } ,
821+
802822 removeMessagesForStream ( streamUuid ) {
803823 logStoreAction ( "workspaceMessage" , "removeMessagesForStream" , { streamUuid } ) ;
804824 removedStreamUuids . add ( streamUuid ) ;
805825 set ( ( state ) => {
806826 const removedConversationIds = new Set (
807827 [
808828 ...Object . keys ( state . messageIdsByConversationId ) ,
829+ ...Object . keys ( state . messageWindowStateByConversationId ) ,
809830 ...Object . keys ( state . messagesLoadingByConversationId ) ,
810831 ...Object . keys ( state . messagesErrorByConversationId ) ,
811832 ...Object . keys ( state . nextPageMarkerByConversationId ) ,
@@ -828,6 +849,10 @@ export const useWorkspaceMessageStore = create<WorkspaceMessageStoreState>((set)
828849 state . messageIdsByConversationId ,
829850 removedConversationIds ,
830851 ) ,
852+ messageWindowStateByConversationId : omitConversationRecords (
853+ state . messageWindowStateByConversationId ,
854+ removedConversationIds ,
855+ ) ,
831856 messagesLoadingByConversationId : omitConversationRecords (
832857 state . messagesLoadingByConversationId ,
833858 removedConversationIds ,
@@ -903,6 +928,13 @@ export function selectWorkspaceMessagesForConversation(
903928 return messages ;
904929}
905930
931+ export function selectWorkspaceMessageWindowStateForConversation (
932+ state : WorkspaceMessageStoreState ,
933+ conversationId : MessengerConversationId ,
934+ ) : WorkspaceConversationMessageWindowState | null {
935+ return state . messageWindowStateByConversationId [ conversationId ] ?? null ;
936+ }
937+
906938interface ConversationStatusCacheEntry {
907939 loading : boolean ;
908940 error : string | null ;
0 commit comments