Sign out menu button

This commit is contained in:
Aleksandrs Proskurins
2022-10-25 08:41:05 +03:00
parent 2be5583e9c
commit 8a0d3ffcba
8 changed files with 56 additions and 14 deletions
@@ -56,6 +56,8 @@ final class UserOtherSessionsCoordinator: Coordinator, Presentable {
switch result {
case let .showUserSessionOverview(sessionInfo: session):
self.completion?(.openSessionOverview(sessionInfo: session))
case let .singOutFromUserSessions(sessionInfos: sessionInfos):
self.completion?(.singOutFromUserSessions(sessionInfos: sessionInfos))
}
MXLog.debug("[UserOtherSessionsCoordinator] UserOtherSessionsViewModel did complete with result: \(result).")
}
@@ -20,12 +20,14 @@ import Foundation
enum UserOtherSessionsCoordinatorResult {
case openSessionOverview(sessionInfo: UserSessionInfo)
case singOutFromUserSessions(sessionInfos: [UserSessionInfo])
}
// MARK: View model
enum UserOtherSessionsViewModelResult: Equatable {
case showUserSessionOverview(sessionInfo: UserSessionInfo)
case singOutFromUserSessions(sessionInfos: [UserSessionInfo])
}
// MARK: View
@@ -50,4 +52,5 @@ enum UserOtherSessionsViewAction {
case clearFilter
case editModeWasToggled
case toggleAllSelection
case signOut
}
@@ -61,6 +61,8 @@ class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessi
case .toggleAllSelection:
toggleAllSelection()
updateViewState()
case .signOut:
completion?(.singOutFromUserSessions(sessionInfos: sessionInfos))
}
}
@@ -47,9 +47,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.items.count,
onToggleSelection: { viewModel.send(viewAction: .toggleAllSelection)},
onSignOut: { viewModel.send(viewAction: .signOut)})
}
.navigationBarBackButtonHidden(viewModel.isEditModeEnabled)
.accentColor(theme.colors.accent)
@@ -21,8 +21,10 @@ struct UserOtherSessionsToolbar: ToolbarContent {
@Binding var isEditModeEnabled: Bool
@Binding var filter: UserOtherSessionsFilter
var allItemsSelected: Bool
let allItemsSelected: Bool
let sessionCount: Int
let onToggleSelection: () -> Void
let onSignOut: () -> Void
var body: some ToolbarContent {
navigationBarLeading()
@@ -83,7 +85,7 @@ struct UserOtherSessionsToolbar: ToolbarContent {
} label: {
Label(VectorL10n.userOtherSessionMenuSelectSessions, systemImage: "checkmark.circle")
}
signOutButton()
} label: {
Image(systemName: "ellipsis")
.padding(.horizontal, 4)
@@ -91,4 +93,22 @@ struct UserOtherSessionsToolbar: ToolbarContent {
}
}
}
@ViewBuilder
private func signOutButton() -> some View {
let label = Label(VectorL10n.userOtherSessionMenuSignOutSessions(String(sessionCount)), systemImage: "rectangle.portrait.and.arrow.forward.fill")
if #available(iOS 15, *) {
Button(role: .destructive) {
onSignOut()
} label: {
label
}
} else {
Button {
onSignOut()
} label: {
label
}
}
}
}