Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ import SwiftUI
attachmentsDataSource = loadAttachments(from: messages)
}

private func loadAttachments(from messages: LazyCachedMapCollection<ChatMessage>) -> [MonthlyFileAttachments] {
private func loadAttachments(from messages: [ChatMessage]) -> [MonthlyFileAttachments] {
var attachmentMappings = [String: [ChatMessageFileAttachment]]()
var monthAndYearArray = [String]()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import StreamChat
/// - messages, the collection of updated messages.
func dataSource(
channelDataSource: ChannelDataSource,
didUpdateMessages messages: LazyCachedMapCollection<ChatMessage>,
didUpdateMessages messages: [ChatMessage],
changes: [ListChange<ChatMessage>]
)

Expand All @@ -35,7 +35,7 @@ import StreamChat
var delegate: MessagesDataSource? { get set }

/// List of the messages.
var messages: LazyCachedMapCollection<ChatMessage> { get }
var messages: [ChatMessage] { get }

/// Determines whether all new messages have been fetched.
var hasLoadedAllNextMessages: Bool { get }
Expand Down Expand Up @@ -82,8 +82,8 @@ class ChatChannelDataSource: ChannelDataSource, ChatChannelControllerDelegate {
let controller: ChatChannelController
weak var delegate: MessagesDataSource?

var messages: LazyCachedMapCollection<ChatMessage> {
controller.messages
var messages: [ChatMessage] {
Array(controller.messages)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why's an array needed here?

}

var hasLoadedAllNextMessages: Bool {
Expand Down Expand Up @@ -166,8 +166,8 @@ class MessageThreadDataSource: ChannelDataSource, ChatMessageControllerDelegate

weak var delegate: MessagesDataSource?

var messages: LazyCachedMapCollection<ChatMessage> {
var replies = messageController.replies
var messages: [ChatMessage] {
var replies = Array(messageController.replies)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

if let message = messageController.message, replies.last != message {
replies.append(message)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ import SwiftUI
@Published var showAlertBanner = false

@Published public var currentDateString: String?
@Published public var messages = LazyCachedMapCollection<ChatMessage>() {
@Published public var messages = [ChatMessage]() {
didSet {
if utils.messageListConfig.groupMessages {
groupMessages()
Expand Down Expand Up @@ -416,7 +416,7 @@ import SwiftUI

func dataSource(
channelDataSource: ChannelDataSource,
didUpdateMessages messages: LazyCachedMapCollection<ChatMessage>,
didUpdateMessages messages: [ChatMessage],
changes: [ListChange<ChatMessage>]
) {
if !isActive {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class MessageListDateUtils {
/// - Returns: optional index.
func indexForMessageDate(
message: ChatMessage,
in messages: LazyCachedMapCollection<ChatMessage>
in messages: [ChatMessage]
) -> Int? {
if messageListConfig.dateIndicatorPlacement != .messageList {
// Index computation will be done onAppear.
Expand All @@ -36,7 +36,7 @@ class MessageListDateUtils {
/// - Returns: optional index.
func index(
for message: ChatMessage,
in messages: LazyCachedMapCollection<ChatMessage>
in messages: [ChatMessage]
) -> Int? {
let index = messages.firstIndex { msg in
msg.id == message.id
Expand All @@ -52,7 +52,7 @@ class MessageListDateUtils {
/// - Returns: optional date, shown above a message.
func showMessageDate(
for index: Int?,
in messages: LazyCachedMapCollection<ChatMessage>
in messages: [ChatMessage]
) -> Date? {
guard let index else {
return nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public struct MessageListView<Factory: ViewFactory>: View, KeyboardReadable {

var factory: Factory
var channel: ChatChannel
var messages: LazyCachedMapCollection<ChatMessage>
var messages: [ChatMessage]
var messagesGroupingInfo: [String: [String]]
@Binding var scrolledId: String?
@Binding var showScrollToLatestButton: Bool
Expand Down Expand Up @@ -65,7 +65,7 @@ public struct MessageListView<Factory: ViewFactory>: View, KeyboardReadable {
public init(
factory: Factory,
channel: ChatChannel,
messages: LazyCachedMapCollection<ChatMessage>,
messages: [ChatMessage],
messagesGroupingInfo: [String: [String]],
scrolledId: Binding<String?>,
showScrollToLatestButton: Binding<Bool>,
Expand Down Expand Up @@ -108,10 +108,7 @@ public struct MessageListView<Factory: ViewFactory>: View, KeyboardReadable {
}
skipRenderingMessageIds = messageRenderingUtil.messagesToSkipRendering(newMessages: messages)
if !skipRenderingMessageIds.isEmpty {
self.messages = LazyCachedMapCollection(
source: messages.filter { !skipRenderingMessageIds.contains($0.id) },
map: { $0 }
)
self.messages = messages.filter { !skipRenderingMessageIds.contains($0.id) }
}
}

Expand Down Expand Up @@ -589,7 +586,7 @@ private class MessageRenderingUtil {
self.previousTopMessage = previousTopMessage
}

func messagesToSkipRendering(newMessages: LazyCachedMapCollection<ChatMessage>) -> [String] {
func messagesToSkipRendering(newMessages: [ChatMessage]) -> [String] {
let newTopMessage = newMessages.first
if newTopMessage?.id == previousTopMessage?.id {
return []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public struct ChannelList<Factory: ViewFactory>: View {
@Injected(\.colors) private var colors

private var factory: Factory
var channels: LazyCachedMapCollection<ChatChannel>
var channels: [ChatChannel]
@Binding var selectedChannel: ChannelSelectionInfo?
@Binding var swipedChannelId: String?
@Binding var scrolledChannelId: String?
Expand All @@ -28,7 +28,7 @@ public struct ChannelList<Factory: ViewFactory>: View {

public init(
factory: Factory,
channels: LazyCachedMapCollection<ChatChannel>,
channels: [ChatChannel],
selectedChannel: Binding<ChannelSelectionInfo?>,
swipedChannelId: Binding<String?>,
scrolledChannelId: Binding<String?> = .constant(nil),
Expand Down Expand Up @@ -123,7 +123,7 @@ public struct ChannelsLazyVStack<Factory: ViewFactory>: View {
@Injected(\.utils) private var utils

private var factory: Factory
var channels: LazyCachedMapCollection<ChatChannel>
var channels: [ChatChannel]
@Binding var selectedChannel: ChannelSelectionInfo?
@Binding var swipedChannelId: String?
private var onlineIndicatorShown: @MainActor (ChatChannel) -> Bool
Expand All @@ -138,7 +138,7 @@ public struct ChannelsLazyVStack<Factory: ViewFactory>: View {

public init(
factory: Factory,
channels: LazyCachedMapCollection<ChatChannel>,
channels: [ChatChannel],
selectedChannel: Binding<ChannelSelectionInfo?>,
swipedChannelId: Binding<String?>,
onlineIndicatorShown: @escaping @MainActor (ChatChannel) -> Bool,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import UIKit
private var selectedChannelId: String?

/// Temporarly holding changes while message list is shown.
private var queuedChannelsChanges = LazyCachedMapCollection<ChatChannel>()
private var queuedChannelsChanges = [ChatChannel]()

private var timer: Timer?

Expand All @@ -44,7 +44,7 @@ import UIKit
@Published public var scrolledChannelId: String?

/// Published variables.
@Published public var channels = LazyCachedMapCollection<ChatChannel>() {
@Published public var channels = [ChatChannel]() {
didSet {
if !markDirty {
queuedChannelsChanges = []
Expand Down Expand Up @@ -539,7 +539,7 @@ import UIKit
}

private func updateChannels() {
channels = controller?.channels ?? LazyCachedMapCollection<ChatChannel>()
channels = controller?.channels ?? [ChatChannel]()
}

private func handleChannelAppearance() {
Expand Down Expand Up @@ -586,7 +586,7 @@ import UIKit
temp[index] = selected
}
markDirty = true
channels = LazyCachedMapCollection(source: temp, map: { $0 })
channels = temp
}

private func scrollToAndOpen(channel: ChatChannel) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import SwiftUI
/// Stateless component for the channel list.
/// If used directly, you should provide the thread list.
public struct ThreadList<Factory: ViewFactory, HeaderView: View, FooterView: View>: View {
var threads: LazyCachedMapCollection<ChatThread>
var threads: [ChatThread]
private var factory: Factory
private var threadDestination: @MainActor (ChatThread) -> Factory.ThreadDestination
@Binding private var selectedThread: ThreadSelectionInfo?
Expand All @@ -24,7 +24,7 @@ public struct ThreadList<Factory: ViewFactory, HeaderView: View, FooterView: Vie

public init(
factory: Factory,
threads: LazyCachedMapCollection<ChatThread>,
threads: [ChatThread],
threadDestination: @escaping @MainActor (ChatThread) -> Factory.ThreadDestination,
selectedThread: Binding<ThreadSelectionInfo?>,
onItemTap: @escaping (ChatThread) -> Void,
Expand Down Expand Up @@ -63,15 +63,15 @@ public struct ThreadsLazyVStack<Factory: ViewFactory>: View {
@Injected(\.colors) private var colors

private var factory: Factory
var threads: LazyCachedMapCollection<ChatThread>
var threads: [ChatThread]
private var threadDestination: @MainActor (ChatThread) -> Factory.ThreadDestination
@Binding private var selectedThread: ThreadSelectionInfo?
private var onItemTap: (ChatThread) -> Void
private var onItemAppear: (Int) -> Void

public init(
factory: Factory,
threads: LazyCachedMapCollection<ChatThread>,
threads: [ChatThread],
threadDestination: @escaping @MainActor (ChatThread) -> Factory.ThreadDestination,
selectedThread: Binding<ThreadSelectionInfo?>,
onItemTap: @escaping (ChatThread) -> Void,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import StreamChat
@Published public var selectedThread: ThreadSelectionInfo?

/// The list of threads.
@Published public var threads = LazyCachedMapCollection<ChatThread>()
@Published public var threads = [ChatThread]()

/// A boolean indicating if it is loading data from the server and no local cache is available.
@Published public var isLoading = false
Expand Down
3 changes: 1 addition & 2 deletions StreamChatSwiftUI.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -2659,7 +2659,6 @@
8434E58127707F19001E1B83 /* GridMediaView.swift in Sources */,
ADE0F5662CB962470053B8B9 /* ActionBannerView.swift in Sources */,
84BB4C4C2841104700CBE004 /* MessageListDateUtils.swift in Sources */,
82D64BE72AD7E5B700C5C79E /* ImageTask.swift in Sources */,
84EB881A2E8ABA610076DC17 /* ParticipantInfoView.swift in Sources */,
8465FDC12746A95700AF091E /* NoChannelsView.swift in Sources */,
C14A465B284665B100EF498E /* SDKIdentifier.swift in Sources */,
Expand Down Expand Up @@ -3856,7 +3855,7 @@
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/GetStream/stream-chat-swift.git";
requirement = {
branch = v5;
branch = "v5-remove-stream-collection-lazy-cached-map-collection";
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert before merge

kind = branch;
};
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ public class ChatMessageControllerSUI_Mock: ChatMessageController, @unchecked Se
}

public var replies_mock: [ChatMessage]?
override public var replies: LazyCachedMapCollection<ChatMessage> {
replies_mock.map { $0.lazyCachedMap { $0 } } ?? super.replies
override public var replies: [ChatMessage] {
replies_mock ?? super.replies
}

public var state_mock: State?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ enum ChannelInfoMockUtils {
static func generateMessagesWithAttachments(
withImages: Int = 0,
withVideos: Int = 0
) -> LazyCachedMapCollection<ChatMessage> {
) -> [ChatMessage] {
var result = [ChatMessage]()
for i in 0..<withImages {
let message = ChatMessage.mock(
Expand All @@ -72,12 +72,12 @@ enum ChannelInfoMockUtils {
result.append(message)
}

return LazyCachedMapCollection(source: result) { $0 }
return result
}

static func generateMessagesWithFileAttachments(
count: Int
) -> LazyCachedMapCollection<ChatMessage> {
) -> [ChatMessage] {
var result = [ChatMessage]()
for i in 0..<count {
let message = ChatMessage.mock(
Expand All @@ -90,12 +90,12 @@ enum ChannelInfoMockUtils {
result.append(message)
}

return LazyCachedMapCollection(source: result) { $0 }
return result
}

static func generateMessagesWithPdfAttachments(
count: Int
) -> LazyCachedMapCollection<ChatMessage> {
) -> [ChatMessage] {
var result = [ChatMessage]()
for i in 0..<count {
let message = ChatMessage.mock(
Expand All @@ -108,7 +108,7 @@ enum ChannelInfoMockUtils {
result.append(message)
}

return LazyCachedMapCollection(source: result) { $0 }
return result
}

static func generateMockUsers(count: Int) -> [ChatUser] {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ import XCTest
let additional = Array(ChannelInfoMockUtils.generateMessagesWithFileAttachments(count: 20))
var current = Array(messages)
current.append(contentsOf: additional)
messages = LazyCachedMapCollection(source: current) { $0 }
messages = current
messageSearchController.messages_mock = messages

// Initial load, when only the 5th attachment is displayed.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ import XCTest

func dataSource(
channelDataSource: ChannelDataSource,
didUpdateMessages messages: LazyCachedMapCollection<ChatMessage>,
didUpdateMessages messages: [ChatMessage],
changes: [ListChange<ChatMessage>]
) {
updateMessagesCalled = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ import XCTest
viewModel.messageSentTapped()
viewModel.dataSource(
channelDataSource: ChatChannelDataSource(controller: channelController),
didUpdateMessages: LazyCachedMapCollection(elements: messages),
didUpdateMessages: messages,
changes: [
.insert(messages[0], index: .init(item: 0, section: 0)),
.update(messages[1], index: .init(item: 1, section: 0))
Expand Down Expand Up @@ -549,7 +549,7 @@ import XCTest
let message3 = ChatMessage.mock()
let channelController = makeChannelController(messages: [message1, message2])
let viewModel = ChatChannelViewModel(channelController: channelController)
let newMessages = LazyCachedMapCollection(elements: [message1, message2, message3])
let newMessages = [message1, message2, message3]

// When
viewModel.dataSource(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ class MessageListDateUtils_Tests: StreamChatTestCase {
createdAt: Date(timeIntervalSince1970: -100_000)
)

private lazy var messages = LazyCachedMapCollection(source: [testMessage], map: { $0 })
private lazy var messagesSameDay = LazyCachedMapCollection(source: [testMessage, testMessageSameDay], map: { $0 })
private lazy var messagesDifferentDay = LazyCachedMapCollection(source: [testMessage, testMessageOtherDay], map: { $0 })
private lazy var messages = [testMessage]
private lazy var messagesSameDay = [testMessage, testMessageSameDay]
private lazy var messagesDifferentDay = [testMessage, testMessageOtherDay]

func test_indexForMessageDate_messageListConfig() {
// Given
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ import XCTest
text: "Test",
author: .mock(id: .unique)
)]
let messages = LazyCachedMapCollection(source: temp, map: { $0 })
let messages = temp
let messageListView = MessageListView(
factory: DefaultViewFactory.shared,
channel: channel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ import XCTest
messages: [ChatMessage],
channel: ChatChannel
) -> some View {
let messages = LazyCachedMapCollection(source: messages, map: { $0 })
let messages = messages
let messageListView = MessageListView(
factory: DefaultViewFactory.shared,
channel: channel,
Expand Down
Loading
Loading