Rename the RoomScreen's roomContext to plain context

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