mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 19:44:05 +00:00
Rename the RoomScreen's roomContext to plain context
This commit is contained in:
committed by
Stefan Ceriu
parent
21e07e164c
commit
952e4f86c2
@@ -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")
|
||||||
|
|||||||
+1
-1
@@ -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())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user