Address the real lifetime issue of the SDK's Client by making Context.mediaProvider weak. (#4466)

This reverts commit 927aea4bfe.
This commit is contained in:
Doug
2025-09-05 18:18:14 +01:00
committed by GitHub
parent f30f3b1a63
commit c794144ef1
58 changed files with 380 additions and 161 deletions
@@ -135,9 +135,12 @@ private struct MediaPreviewViewController: UIViewControllerRepresentable {
// MARK: - Previews
struct TimelineMediaPreviewModifier_Previews: PreviewProvider {
static let viewModel = makeViewModel()
static let downloadingViewModel = makeViewModel(isDownloading: true)
static let downloadErrorViewModel = makeViewModel(isDownloadError: true)
static let viewModel = makeViewModel(mediaProvider: mediaProvider)
static let mediaProvider = MediaProviderMock(.init())
static let downloadingViewModel = makeViewModel(isDownloading: true, mediaProvider: downloadingMediaProvider)
static let downloadingMediaProvider = MediaProviderMock(.init())
static let downloadErrorViewModel = makeViewModel(isDownloadError: true, mediaProvider: downloadErrorMediaProvider)
static let downloadErrorMediaProvider = MediaProviderMock(.init())
static var previews: some View {
MediaPreviewViewController(viewModel: viewModel, dismissalPublisher: .init()) { }
@@ -148,7 +151,7 @@ struct TimelineMediaPreviewModifier_Previews: PreviewProvider {
.previewDisplayName("Download Error")
}
static func makeViewModel(isDownloading: Bool = false, isDownloadError: Bool = false) -> TimelineMediaPreviewViewModel {
static func makeViewModel(isDownloading: Bool = false, isDownloadError: Bool = false, mediaProvider: MediaProviderMock) -> TimelineMediaPreviewViewModel {
let item = FileRoomTimelineItem(id: .randomEvent,
timestamp: .mock,
isOutgoing: false,
@@ -165,8 +168,6 @@ struct TimelineMediaPreviewModifier_Previews: PreviewProvider {
let timelineController = MockTimelineController(timelineKind: .media(.mediaFilesScreen))
timelineController.timelineItems = [item]
let mediaProvider = MediaProviderMock(configuration: .init())
if isDownloading {
mediaProvider.loadFileFromSourceFilenameClosure = { _, _ in
try? await Task.sleep(for: .seconds(3600))
@@ -229,7 +229,7 @@ struct TimelineMediaPreviewDetailsView_Previews: PreviewProvider, TestablePrevie
let viewModel = TimelineMediaPreviewViewModel(initialItem: item,
timelineViewModel: TimelineViewModel.mock(timelineKind: timelineKind,
timelineController: timelineController),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
photoLibraryManager: PhotoLibraryManagerMock(.init()),
userIndicatorController: UserIndicatorControllerMock(),
appMediator: AppMediatorMock())
@@ -147,7 +147,7 @@ struct TimelineMediaPreviewRedactConfirmationView_Previews: PreviewProvider, Tes
return TimelineMediaPreviewViewModel(initialItem: item,
timelineViewModel: TimelineViewModel.mock(timelineKind: timelineController.timelineKind,
timelineController: timelineController),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
photoLibraryManager: PhotoLibraryManagerMock(.init()),
userIndicatorController: UserIndicatorControllerMock(),
appMediator: AppMediatorMock())
@@ -206,7 +206,7 @@ private class GlobalSearchTextField: UITextField {
struct GlobalSearchScreen_Previews: PreviewProvider, TestablePreview {
static let viewModel = GlobalSearchScreenViewModel(roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
static var previews: some View {
NavigationStack {
@@ -37,7 +37,7 @@ struct GlobalSearchScreenListRow: View {
struct GlobalSearchScreenListRow_Previews: PreviewProvider, TestablePreview {
static let viewModel = GlobalSearchScreenViewModel(roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
static var previews: some View {
List {
@@ -176,17 +176,17 @@ struct HomeScreenRoomCell_Previews: PreviewProvider, TestablePreview {
static var previews: some View {
VStack(spacing: 0) {
ForEach(genericRooms) { room in
HomeScreenRoomCell(room: room, isSelected: false, mediaProvider: MediaProviderMock(configuration: .init())) { _ in }
HomeScreenRoomCell(room: room, isSelected: false, mediaProvider: .mock) { _ in }
}
HomeScreenRoomCell(room: .placeholder(), isSelected: false, mediaProvider: MediaProviderMock(configuration: .init())) { _ in }
HomeScreenRoomCell(room: .placeholder(), isSelected: false, mediaProvider: .mock) { _ in }
.redacted(reason: .placeholder)
}
.previewDisplayName("Generic")
VStack(spacing: 0) {
ForEach(notificationsStateRooms) { room in
HomeScreenRoomCell(room: room, isSelected: false, mediaProvider: MediaProviderMock(configuration: .init())) { _ in }
HomeScreenRoomCell(room: room, isSelected: false, mediaProvider: .mock) { _ in }
}
}
.previewLayout(.sizeThatFits)
@@ -53,7 +53,7 @@ struct InviteUsersScreenSelectedItem_Previews: PreviewProvider, TestablePreview
ScrollView(.horizontal) {
HStack(spacing: 28) {
ForEach(people, id: \.userID) { user in
InviteUsersScreenSelectedItem(user: user, mediaProvider: MediaProviderMock(configuration: .init())) { }
InviteUsersScreenSelectedItem(user: user, mediaProvider: .mock) { }
.frame(width: 72)
}
}
@@ -163,7 +163,7 @@ extension KnockRequestsListScreenViewModel {
knockRequestsState: requestsState,
ownUserID: RoomMemberProxyMock.mockAdmin.userID,
joinRule: .knock)),
mediaProvider: MediaProviderMock(),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock())
}
}
@@ -113,6 +113,6 @@ private extension ManageRoomMemberSheetViewModel {
roomProxy: JoinedRoomProxyMock(.init()),
userIndicatorController: UserIndicatorControllerMock(),
analyticsService: ServiceLocator.shared.analytics,
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
}
}
@@ -285,7 +285,7 @@ struct MediaEventsTimelineScreen_Previews: PreviewProvider, TestablePreview {
MediaEventsTimelineScreenViewModel(mediaTimelineViewModel: makeTimelineViewModel(empty: empty),
filesTimelineViewModel: makeTimelineViewModel(empty: empty),
initialScreenMode: screenMode,
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock(),
appMediator: AppMediatorMock())
}
@@ -120,13 +120,13 @@ struct SessionVerificationRequestDetailsView_Previews: PreviewProvider, Testable
static var previews: some View {
SessionVerificationRequestDetailsView(details: details,
isUserVerification: true,
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
.padding()
.previewDisplayName("User")
SessionVerificationRequestDetailsView(details: details,
isUserVerification: false,
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
.padding()
.previewDisplayName("Device")
}
@@ -263,7 +263,7 @@ struct SessionVerification_Previews: PreviewProvider, TestablePreview {
let viewModel = SessionVerificationScreenViewModel(sessionVerificationControllerProxy: SessionVerificationControllerProxyMock.configureMock(),
flow: flow,
appSettings: AppSettings(),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
verificationState: state)
return SessionVerificationScreen(context: viewModel.context)
@@ -146,7 +146,7 @@ struct RoomChangeRolesScreen_Previews: PreviewProvider, TestablePreview {
return RoomChangeRolesScreenViewModel(mode: mode,
roomProxy: JoinedRoomProxyMock(.init(members: members)),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock(),
analytics: ServiceLocator.shared.analytics)
}
@@ -39,34 +39,34 @@ struct RoomChangeRolesScreenRow_Previews: PreviewProvider, TestablePreview {
static var previews: some View {
Form {
RoomChangeRolesScreenRow(member: .init(withProxy: RoomMemberProxyMock.mockAlice),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
isSelected: true,
action: action)
RoomChangeRolesScreenRow(member: .init(withProxy: RoomMemberProxyMock.mockBob),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
isSelected: false,
action: action)
RoomChangeRolesScreenRow(member: .init(withProxy: RoomMemberProxyMock.mockInvited),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
isSelected: false,
action: action)
RoomChangeRolesScreenRow(member: .init(withProxy: RoomMemberProxyMock.mockCharlie),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
isSelected: true,
action: action)
.disabled(true)
RoomChangeRolesScreenRow(member: .init(withProxy: RoomMemberProxyMock(with: .init(userID: "@someone:matrix.org", membership: .join))),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
isSelected: false,
action: action)
.disabled(true)
RoomChangeRolesScreenRow(member: .init(withProxy: RoomMemberProxyMock(with: .init(userID: "@someone:matrix.org", membership: .join))),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
isSelected: false,
action: action)
}
@@ -75,7 +75,7 @@ struct RoomChangeRolesScreenSelectedItem_Previews: PreviewProvider, TestablePrev
HStack(spacing: 12) {
ForEach(members, id: \.id) { member in
RoomChangeRolesScreenSelectedItem(member: member,
mediaProvider: MediaProviderMock(configuration: .init())) { }
mediaProvider: .mock) { }
.frame(width: 72)
}
}
@@ -55,7 +55,7 @@ struct RoomDirectorySearchCell_Previews: PreviewProvider, TestablePreview {
name: "Test title",
avatarURL: nil),
canBeJoined: true),
mediaProvider: MediaProviderMock(configuration: .init())) { }
mediaProvider: .mock) { }
RoomDirectorySearchCell(result: .init(id: "!test_id_2:matrix.org",
alias: "#test:example.com",
@@ -65,7 +65,7 @@ struct RoomDirectorySearchCell_Previews: PreviewProvider, TestablePreview {
name: nil,
avatarURL: nil),
canBeJoined: true),
mediaProvider: MediaProviderMock(configuration: .init())) { }
mediaProvider: .mock) { }
RoomDirectorySearchCell(result: .init(id: "!test_id_3:example.com",
alias: "#test_no_topic:example.com",
@@ -75,7 +75,7 @@ struct RoomDirectorySearchCell_Previews: PreviewProvider, TestablePreview {
name: "Test title no topic",
avatarURL: nil),
canBeJoined: true),
mediaProvider: MediaProviderMock(configuration: .init())) { }
mediaProvider: .mock) { }
RoomDirectorySearchCell(result: .init(id: "!test_id_4:example.com",
alias: "#test_no_topic:example.com",
@@ -85,7 +85,7 @@ struct RoomDirectorySearchCell_Previews: PreviewProvider, TestablePreview {
name: nil,
avatarURL: nil),
canBeJoined: true),
mediaProvider: MediaProviderMock(configuration: .init())) { }
mediaProvider: .mock) { }
RoomDirectorySearchCell(result: .init(id: "!test_id_5:example.com",
alias: nil,
@@ -95,7 +95,7 @@ struct RoomDirectorySearchCell_Previews: PreviewProvider, TestablePreview {
name: "Test title no alias",
avatarURL: nil),
canBeJoined: false),
mediaProvider: MediaProviderMock(configuration: .init())) { }
mediaProvider: .mock) { }
RoomDirectorySearchCell(result: .init(id: "!test_id_6:example.com",
alias: nil,
@@ -105,7 +105,7 @@ struct RoomDirectorySearchCell_Previews: PreviewProvider, TestablePreview {
name: "Test title no alias",
avatarURL: nil),
canBeJoined: false),
mediaProvider: MediaProviderMock(configuration: .init())) { }
mediaProvider: .mock) { }
RoomDirectorySearchCell(result: .init(id: "!test_id_7:example.com",
alias: nil,
@@ -115,7 +115,7 @@ struct RoomDirectorySearchCell_Previews: PreviewProvider, TestablePreview {
name: nil,
avatarURL: nil),
canBeJoined: false),
mediaProvider: MediaProviderMock(configuration: .init())) { }
mediaProvider: .mock) { }
RoomDirectorySearchCell(result: .init(id: "!test_id_8:example.com",
alias: nil,
name: nil,
@@ -124,7 +124,7 @@ struct RoomDirectorySearchCell_Previews: PreviewProvider, TestablePreview {
name: nil,
avatarURL: nil),
canBeJoined: false),
mediaProvider: MediaProviderMock(configuration: .init())) { }
mediaProvider: .mock) { }
}
.compoundList()
}
@@ -113,13 +113,13 @@ struct CompletionSuggestion_Previews: PreviewProvider, TestablePreview {
static var previews: some View {
// Putting them is VStack allows the preview to work properly in tests
VStack(spacing: 8) {
CompletionSuggestionView(mediaProvider: MediaProviderMock(configuration: .init()),
CompletionSuggestionView(mediaProvider: .mock,
items: [.init(suggestionType: .user(.init(id: "@user_mention_1:matrix.org", displayName: "User 1", avatarURL: nil)), range: .init(), rawSuggestionText: ""),
.init(suggestionType: .user(.init(id: "@user_mention_2:matrix.org", displayName: "User 2", avatarURL: .mockMXCUserAvatar)), range: .init(), rawSuggestionText: "")]) { _ in }
}
VStack(spacing: 8) {
CompletionSuggestionView(mediaProvider: MediaProviderMock(configuration: .init()),
CompletionSuggestionView(mediaProvider: .mock,
items: multipleItems) { _ in }
}
}
@@ -333,7 +333,7 @@ struct ComposerToolbar_Previews: PreviewProvider, TestablePreview {
static let composerViewModel = ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init(suggestions: suggestions)),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -383,7 +383,7 @@ extension ComposerToolbar {
let model = ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -400,7 +400,7 @@ extension ComposerToolbar {
let model = ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -417,7 +417,7 @@ extension ComposerToolbar {
let model = ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -435,7 +435,7 @@ extension ComposerToolbar {
let model = ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -456,7 +456,7 @@ extension ComposerToolbar {
let model = ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -479,7 +479,7 @@ extension ComposerToolbar {
let model = ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -45,16 +45,14 @@ struct MentionSuggestionItemView: View {
}
struct MentionSuggestionItemView_Previews: PreviewProvider, TestablePreview {
static let mockMediaProvider = MediaProviderMock(configuration: .init())
static var previews: some View {
MentionSuggestionItemView(mediaProvider: mockMediaProvider, item: .init(suggestionType: .user(.init(id: "test", displayName: "Test", avatarURL: .mockMXCUserAvatar)), range: .init(), rawSuggestionText: ""))
MentionSuggestionItemView(mediaProvider: .mock, item: .init(suggestionType: .user(.init(id: "test", displayName: "Test", avatarURL: .mockMXCUserAvatar)), range: .init(), rawSuggestionText: ""))
.previewDisplayName("User")
MentionSuggestionItemView(mediaProvider: mockMediaProvider, item: .init(suggestionType: .user(.init(id: "test2", displayName: nil, avatarURL: nil)), range: .init(), rawSuggestionText: ""))
MentionSuggestionItemView(mediaProvider: .mock, item: .init(suggestionType: .user(.init(id: "test2", displayName: nil, avatarURL: nil)), range: .init(), rawSuggestionText: ""))
.previewDisplayName("User no display name")
MentionSuggestionItemView(mediaProvider: mockMediaProvider, item: .init(suggestionType: .allUsers(.room(id: "room", name: "Room", avatarURL: .mockMXCAvatar)), range: .init(), rawSuggestionText: ""))
MentionSuggestionItemView(mediaProvider: .mock, item: .init(suggestionType: .allUsers(.room(id: "room", name: "Room", avatarURL: .mockMXCAvatar)), range: .init(), rawSuggestionText: ""))
.previewDisplayName("All users")
MentionSuggestionItemView(mediaProvider: mockMediaProvider,
MentionSuggestionItemView(mediaProvider: .mock,
item: .init(suggestionType: .room(.init(id: "room",
canonicalAlias: "#room:matrix.org",
name: "Room",
@@ -91,7 +91,7 @@ struct RoomAttachmentPicker_Previews: PreviewProvider, TestablePreview {
static let viewModel = ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: WysiwygComposerViewModel(),
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -166,11 +166,11 @@ struct RoomScreenFooterView_Previews: PreviewProvider, TestablePreview {
learnMoreURL: "https://element.io/")
static var previews: some View {
RoomScreenFooterView(details: bobDetails, mediaProvider: MediaProviderMock(configuration: .init())) { _ in }
RoomScreenFooterView(details: bobDetails, mediaProvider: .mock) { _ in }
.previewDisplayName("With displayname")
RoomScreenFooterView(details: noNameDetails, mediaProvider: MediaProviderMock(configuration: .init())) { _ in }
RoomScreenFooterView(details: noNameDetails, mediaProvider: .mock) { _ in }
.previewDisplayName("Without displayname")
RoomScreenFooterView(details: verificationViolationDetails, mediaProvider: MediaProviderMock(configuration: .init())) { _ in }
RoomScreenFooterView(details: verificationViolationDetails, mediaProvider: .mock) { _ in }
.previewDisplayName("Verification Violation")
}
}
@@ -151,14 +151,12 @@ struct SpaceHeaderMembersView: View {
}
struct SpaceHeaderView_Previews: PreviewProvider, TestablePreview {
static let mediaProvider = MediaProviderMock(configuration: .init())
static let spaces = makeSpaceRooms()
static var previews: some View {
VStack(spacing: 0) {
ForEach(spaces, id: \.id) { space in
SpaceHeaderView(spaceRoomProxy: space, mediaProvider: mediaProvider)
SpaceHeaderView(spaceRoomProxy: space, mediaProvider: .mock)
}
}
}
@@ -134,8 +134,6 @@ struct SpaceRoomCellButtonStyle: ButtonStyle {
}
struct SpaceRoomCell_Previews: PreviewProvider, TestablePreview {
static let mediaProvider = MediaProviderMock(configuration: .init())
static let spaces = [SpaceRoomProxyProtocol].mockSpaceList
static var previews: some View {
@@ -143,7 +141,7 @@ struct SpaceRoomCell_Previews: PreviewProvider, TestablePreview {
ForEach(spaces, id: \.id) { space in
SpaceRoomCell(spaceRoomProxy: space,
isSelected: false,
mediaProvider: mediaProvider) { _ in }
mediaProvider: .mock) { _ in }
}
}
}
@@ -78,7 +78,7 @@ struct SpaceScreen_Previews: PreviewProvider, TestablePreview {
let viewModel = SpaceScreenViewModel(spaceRoomListProxy: spaceRoomListProxy,
spaceServiceProxy: SpaceServiceProxyMock(.init()),
selectedSpaceRoomPublisher: .init(nil),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock())
return viewModel
}
@@ -63,18 +63,18 @@ struct ReadReceiptCell_Previews: PreviewProvider, TestablePreview {
formattedTimestamp: "10:00"),
memberState: .init(displayName: "Test",
avatarURL: nil),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
.previewDisplayName("No Image")
ReadReceiptCell(readReceipt: .init(userID: "@test:matrix.org",
formattedTimestamp: "10:00"),
memberState: .init(displayName: "Test",
avatarURL: .mockMXCUserAvatar),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
.previewDisplayName("With Image")
ReadReceiptCell(readReceipt: .init(userID: "@test:matrix.org",
formattedTimestamp: "10:00"),
memberState: nil,
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
.previewDisplayName("Loading Member")
}
}
@@ -139,7 +139,7 @@ struct ReactionsSummaryView_Previews: PreviewProvider, TestablePreview {
static var previews: some View {
ReactionsSummaryView(reactions: AggregatedReaction.mockReactions,
members: [:],
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
selectedReactionKey: AggregatedReaction.mockReactions[0].key)
}
}