diff --git a/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift b/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift index b0952500b..d11f7fade 100644 --- a/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift +++ b/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift @@ -219,7 +219,7 @@ final class RoomScreenCoordinator: CoordinatorProtocol { wysiwygViewModel: wysiwygViewModel, keyCommands: composerViewModel.keyCommands) - return AnyView(RoomScreen(roomContext: roomViewModel.context, + return AnyView(RoomScreen(context: roomViewModel.context, timelineContext: timelineViewModel.context, composerToolbar: composerToolbar) .onDisappear { [weak self] in diff --git a/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift b/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift index 92a0f796f..40444d9d0 100644 --- a/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift +++ b/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift @@ -10,16 +10,16 @@ import SwiftUI import WysiwygComposer struct RoomScreen: View { - @ObservedObject private var roomContext: RoomScreenViewModelType.Context + @ObservedObject private var context: RoomScreenViewModelType.Context @ObservedObject private var timelineContext: TimelineViewModelType.Context @ObservedObject private var composerToolbarContext: ComposerToolbarViewModelType.Context @State private var dragOver = false let composerToolbar: ComposerToolbar - init(roomContext: RoomScreenViewModelType.Context, + init(context: RoomScreenViewModelType.Context, timelineContext: TimelineViewModelType.Context, composerToolbar: ComposerToolbar) { - self.roomContext = roomContext + self.context = context self.timelineContext = timelineContext self.composerToolbar = composerToolbar composerToolbarContext = composerToolbar.context @@ -40,9 +40,9 @@ struct RoomScreen: View { } .safeAreaInset(edge: .bottom, spacing: 0) { VStack(spacing: 0) { - RoomScreenFooterView(details: roomContext.viewState.footerDetails, - mediaProvider: roomContext.mediaProvider) { action in - roomContext.send(viewAction: .footerViewAction(action)) + RoomScreenFooterView(details: context.viewState.footerDetails, + mediaProvider: context.mediaProvider) { action in + context.send(viewAction: .footerViewAction(action)) } composer @@ -68,7 +68,7 @@ struct RoomScreen: View { .toolbar { toolbar } .toolbarBackground(.visible, for: .navigationBar) // Fix the toolbar's background. .overlay { loadingIndicator } - .timelineMediaPreview(viewModel: $roomContext.mediaPreviewViewModel) + .timelineMediaPreview(viewModel: $context.mediaPreviewViewModel) .track(screen: .Room) .onDrop(of: ["public.item", "public.file-url"], isTargeted: $dragOver) { providers -> Bool in guard let provider = providers.first, @@ -85,42 +85,42 @@ struct RoomScreen: View { @ViewBuilder private var pinnedItemsBanner: some View { Group { - if roomContext.viewState.shouldShowPinnedEventsBanner { - PinnedItemsBannerView(state: roomContext.viewState.pinnedEventsBannerState, - onMainButtonTap: { roomContext.send(viewAction: .tappedPinnedEventsBanner) }, - onViewAllButtonTap: { roomContext.send(viewAction: .viewAllPins) }) + if context.viewState.shouldShowPinnedEventsBanner { + PinnedItemsBannerView(state: context.viewState.pinnedEventsBannerState, + onMainButtonTap: { context.send(viewAction: .tappedPinnedEventsBanner) }, + onViewAllButtonTap: { context.send(viewAction: .viewAllPins) }) .transition(.move(edge: .top)) } } - .animation(.elementDefault, value: roomContext.viewState.shouldShowPinnedEventsBanner) + .animation(.elementDefault, value: context.viewState.shouldShowPinnedEventsBanner) } @ViewBuilder private var knockRequestsBanner: some View { Group { - if roomContext.viewState.shouldSeeKnockRequests { - KnockRequestsBannerView(requests: roomContext.viewState.displayedKnockRequests, + if context.viewState.shouldSeeKnockRequests { + KnockRequestsBannerView(requests: context.viewState.displayedKnockRequests, onDismiss: dismissKnockRequestsBanner, - onAccept: roomContext.viewState.canAcceptKnocks ? acceptKnockRequest : nil, + onAccept: context.viewState.canAcceptKnocks ? acceptKnockRequest : nil, onViewAll: onViewAllKnockRequests, - mediaProvider: roomContext.mediaProvider) + mediaProvider: context.mediaProvider) .padding(.top, 16) .transition(.move(edge: .top)) } } - .animation(.elementDefault, value: roomContext.viewState.shouldSeeKnockRequests) + .animation(.elementDefault, value: context.viewState.shouldSeeKnockRequests) } private func dismissKnockRequestsBanner() { - roomContext.send(viewAction: .dismissKnockRequests) + context.send(viewAction: .dismissKnockRequests) } private func acceptKnockRequest(eventID: String) { - roomContext.send(viewAction: .acceptKnock(eventID: eventID)) + context.send(viewAction: .acceptKnock(eventID: eventID)) } private func onViewAllKnockRequests() { - roomContext.send(viewAction: .viewKnockRequests) + context.send(viewAction: .viewKnockRequests) } private var scrollToBottomButton: some View { @@ -151,9 +151,9 @@ struct RoomScreen: View { @ViewBuilder private var composer: some View { - if roomContext.viewState.hasSuccessor { + if context.viewState.hasSuccessor { tombstonedDialogue - } else if roomContext.viewState.canSendMessage { + } else if context.viewState.canSendMessage { composerToolbar } else { Text(L10n.screenRoomTimelineNoPermissionToPost) @@ -171,7 +171,7 @@ struct RoomScreen: View { .foregroundStyle(.compound.textPrimary) Button { - roomContext.send(viewAction: .displaySuccessorRoom) + context.send(viewAction: .displaySuccessorRoom) } label: { Text(L10n.screenRoomTimelineTombstonedRoomAction) .frame(maxWidth: .infinity) @@ -203,22 +203,22 @@ struct RoomScreen: View { // .principal + .primaryAction works better than .navigation leading + trailing // as the latter disables interaction in the action button for rooms with long names ToolbarItem(placement: .principal) { - RoomHeaderView(roomName: roomContext.viewState.roomTitle, - roomAvatar: roomContext.viewState.roomAvatar, - dmRecipientVerificationState: roomContext.viewState.dmRecipientVerificationState, - mediaProvider: roomContext.mediaProvider) + RoomHeaderView(roomName: context.viewState.roomTitle, + roomAvatar: context.viewState.roomAvatar, + dmRecipientVerificationState: context.viewState.dmRecipientVerificationState, + mediaProvider: context.mediaProvider) // Using a button stops it from getting truncated in the navigation bar .contentShape(.rect) .onTapGesture { - roomContext.send(viewAction: .displayRoomDetails) + context.send(viewAction: .displayRoomDetails) } } if !ProcessInfo.processInfo.isiOSAppOnMac { ToolbarItem(placement: .primaryAction) { - if roomContext.viewState.shouldShowCallButton { + if context.viewState.shouldShowCallButton { callButton - .disabled(!roomContext.viewState.canJoinCall) + .disabled(!context.viewState.canJoinCall) } } } @@ -226,9 +226,9 @@ struct RoomScreen: View { @ViewBuilder private var callButton: some View { - if roomContext.viewState.hasOngoingCall { + if context.viewState.hasOngoingCall { Button { - roomContext.send(viewAction: .displayCall) + context.send(viewAction: .displayCall) } label: { Label(L10n.actionJoin, icon: \.videoCallSolid) .labelStyle(.titleAndIcon) @@ -238,7 +238,7 @@ struct RoomScreen: View { .accessibilityIdentifier(A11yIdentifiers.roomScreen.joinCall) } else { Button { - roomContext.send(viewAction: .displayCall) + context.send(viewAction: .displayCall) } label: { CompoundIcon(\.videoCallSolid) } @@ -261,14 +261,14 @@ struct RoomScreen_Previews: PreviewProvider, TestablePreview { static var previews: some View { NavigationStack { - RoomScreen(roomContext: viewModels.room.context, + RoomScreen(context: viewModels.room.context, timelineContext: viewModels.timeline.context, composerToolbar: ComposerToolbar.mock()) } .previewDisplayName("Normal") NavigationStack { - RoomScreen(roomContext: readOnlyViewModels.room.context, + RoomScreen(context: readOnlyViewModels.room.context, timelineContext: readOnlyViewModels.timeline.context, composerToolbar: ComposerToolbar.mock()) } @@ -276,8 +276,8 @@ struct RoomScreen_Previews: PreviewProvider, TestablePreview { .snapshotPreferences(expect: readOnlyViewModels.room.context.$viewState.map { !$0.canSendMessage }) NavigationStack { - RoomScreen(roomViewModel: tombstonedViewModels.room, - timelineViewModel: tombstonedViewModels.timeline, + RoomScreen(context: tombstonedViewModels.room.context, + timelineContext: tombstonedViewModels.timeline.context, composerToolbar: ComposerToolbar.mock()) } .previewDisplayName("Tombstoned") diff --git a/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/HighlightedTimelineItemModifier.swift b/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/HighlightedTimelineItemModifier.swift index b972d3978..e11ae4515 100644 --- a/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/HighlightedTimelineItemModifier.swift +++ b/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/HighlightedTimelineItemModifier.swift @@ -103,7 +103,7 @@ struct HighlightedTimelineItemTimeline_Previews: PreviewProvider { static var previews: some View { NavigationStack { - RoomScreen(roomContext: roomViewModel.context, + RoomScreen(context: roomViewModel.context, timelineContext: timelineViewModel.context, composerToolbar: ComposerToolbar.mock()) } diff --git a/ElementX/Sources/Screens/Timeline/View/TimelineView.swift b/ElementX/Sources/Screens/Timeline/View/TimelineView.swift index 123b1ad6a..3fecedc59 100644 --- a/ElementX/Sources/Screens/Timeline/View/TimelineView.swift +++ b/ElementX/Sources/Screens/Timeline/View/TimelineView.swift @@ -142,7 +142,7 @@ struct TimelineView_Previews: PreviewProvider, TestablePreview { static var previews: some View { NavigationStack { - RoomScreen(roomContext: roomViewModel.context, + RoomScreen(context: roomViewModel.context, timelineContext: timelineViewModel.context, composerToolbar: ComposerToolbar.mock()) }