Merge branch 'develop' into alfogrillo/learn_more_sheet

# Conflicts:
#	RiotSwiftUI/Modules/UserSessions/Coordinator/UserSessionsFlowCoordinator.swift
#	RiotSwiftUI/Modules/UserSessions/UserOtherSessions/Coordinator/UserOtherSessionsCoordinator.swift
#	RiotSwiftUI/Modules/UserSessions/UserOtherSessions/Test/UI/UserOtherSessionsUITests.swift
#	RiotSwiftUI/Modules/UserSessions/UserOtherSessions/UserOtherSessionsModels.swift
#	RiotSwiftUI/Modules/UserSessions/UserOtherSessions/UserOtherSessionsViewModel.swift
#	RiotSwiftUI/Modules/UserSessions/UserOtherSessions/View/UserOtherSessions.swift
#	RiotSwiftUI/Modules/UserSessions/UserSessionOverview/Test/UI/UserSessionOverviewUITests.swift
This commit is contained in:
Alfonso Grillo
2022-11-03 09:20:58 +01:00
95 changed files with 858 additions and 363 deletions
@@ -22,22 +22,25 @@ struct UserOtherSessions: View {
@ObservedObject var viewModel: UserOtherSessionsViewModel.Context
var body: some View {
ScrollView {
SwiftUI.Section {
if viewModel.viewState.sessionItems.isEmpty {
noItemsView()
} else {
itemsView()
}
} header: {
UserOtherSessionsHeaderView(
viewData: viewModel.viewState.header,
onLearnMoreAction: {
viewModel.send(viewAction: .viewSessionInfo)
VStack(spacing: 0) {
ScrollView {
SwiftUI.Section {
if viewModel.viewState.sessionItems.isEmpty {
noItemsView()
} else {
itemsView()
}
)
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.top, 24.0)
} header: {
UserOtherSessionsHeaderView(
viewData: viewModel.viewState.header,
onLearnMoreAction: {
viewModel.send(viewAction: .viewSessionInfo)
}
)
}
}
if viewModel.isEditModeEnabled {
bottomToolbar()
}
}
.onChange(of: viewModel.isEditModeEnabled) { _ in
@@ -52,9 +55,10 @@ struct UserOtherSessions: View {
.toolbar {
UserOtherSessionsToolbar(isEditModeEnabled: $viewModel.isEditModeEnabled,
filter: $viewModel.filter,
allItemsSelected: viewModel.viewState.allItemsSelected) {
viewModel.send(viewAction: .toggleAllSelection)
}
allItemsSelected: viewModel.viewState.allItemsSelected,
sessionCount: viewModel.viewState.sessionItems.count,
onToggleSelection: { viewModel.send(viewAction: .toggleAllSelection) },
onSignOut: { viewModel.send(viewAction: .logoutAllUserSessions) })
}
.navigationBarBackButtonHidden(viewModel.isEditModeEnabled)
.accentColor(theme.colors.accent)
@@ -87,6 +91,7 @@ struct UserOtherSessions: View {
LazyVStack(spacing: 0) {
ForEach(viewModel.viewState.sessionItems) { viewData in
UserSessionListItem(viewData: viewData,
isSeparatorHidden: viewData == viewModel.viewState.sessionItems.last,
isEditModeEnabled: viewModel.isEditModeEnabled,
onBackgroundTap: { sessionId in viewModel.send(viewAction: .userOtherSessionSelected(sessionId: sessionId)) },
onBackgroundLongPress: { _ in viewModel.isEditModeEnabled = true })
@@ -94,6 +99,24 @@ struct UserOtherSessions: View {
}
.background(theme.colors.background)
}
private func bottomToolbar() -> some View {
VStack(spacing: 0) {
SeparatorLine()
HStack {
Spacer()
Button {
viewModel.send(viewAction: .logoutSelectedUserSessions)
} label: {
Text(VectorL10n.signOut)
.foregroundColor(viewModel.viewState.enableSignOutButton ? theme.colors.alert : theme.colors.tertiaryContent)
}
.padding(.trailing, 16)
.padding(.vertical, 12)
.disabled(!viewModel.viewState.enableSignOutButton)
}
}
}
}
// MARK: - Previews