func update()

in AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/SwiftUI/Chat/ChatViewComponents/MessageListViewModel.swift [121:181]


    func update(chatState: ChatState, repositoryState: RepositoryState) {
        // Update messages
        if self.repositoryUpdatedTimestamp < repositoryState.lastUpdatedTimestamp {
            self.repositoryUpdatedTimestamp = repositoryState.lastUpdatedTimestamp
            messages = messageRepositoryManager.messages

            // Scroll to new received message
            if self.lastReceivedMessageTimestamp < chatState.lastReceivedMessageTimestamp {
                self.lastReceivedMessageTimestamp = chatState.lastReceivedMessageTimestamp
                shouldScrollToId = !isAtBottom()
            }

            // Check if initial messages have been fetched
            if self.hasFetchedInitialMessages != repositoryState.hasFetchedInitialMessages {
                self.hasFetchedInitialMessages = repositoryState.hasFetchedInitialMessages
                // Assume all messages are seen by others when re-joining the chat
                if let latestSeenMessage = messages.last(where: {$0.isLocalUser}) {
                    latestSeenMessageId = latestSeenMessage.id
                }
            }

            // Check if previous messages have been fetched
            if self.hasFetchedPreviousMessages != repositoryState.hasFetchedPreviousMessages {
                self.hasFetchedPreviousMessages = repositoryState.hasFetchedPreviousMessages
            }

            // Check if no more messages to be fetched
            if self.hasFetchedAllMessages != repositoryState.hasFetchedAllMessages {
                self.hasFetchedAllMessages = repositoryState.hasFetchedAllMessages
            }

            // Scroll to new sending message and get latest sending message id
            if let lastSendingMessageTimestamp = chatState.lastSendingMessageTimestamp,
               self.lastSendingMessageTimestamp < lastSendingMessageTimestamp {
                self.lastSendingMessageTimestamp = lastSendingMessageTimestamp
                shouldScrollToBottom = true

                if let latestSendingMessage = messages.last(where: {$0.sendStatus == .sending}) {
                    latestSendingOrSentMessageId = latestSendingMessage.id
                }
            }

            // Get latest sent message id
            if self.lastSentOrFailedMessageTimestamp < chatState.lastSentOrFailedMessageTimestamp {
                self.lastSentOrFailedMessageTimestamp = chatState.lastSentOrFailedMessageTimestamp
                if let latestSentMessage = messages.last(where: {$0.sendStatus == .sent}) {
                    latestSendingOrSentMessageId = latestSentMessage.id
                }
            }

            // Get latest seen message
            if self.lastReadReceiptReceivedTimestamp < chatState.lastReadReceiptReceivedTimestamp {
                self.lastReadReceiptReceivedTimestamp = chatState.lastReadReceiptReceivedTimestamp
                if let latestSeenMessage = messages.last(where: {$0.sendStatus == .seen}) {
                    latestSeenMessageId = latestSeenMessage.id
                }
            }

            updateJumpToNewMessages()
        }
    }