mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-27 19:56:57 +02:00
Sign out menu button
This commit is contained in:
+2
@@ -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)
|
||||
|
||||
+22
-2
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user