mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-05-04 06:58:20 +02:00
Sing out bottom bar
This commit is contained in:
@@ -39,6 +39,7 @@ struct UserOtherSessionsViewState: BindableState, Equatable {
|
||||
var header: UserOtherSessionsHeaderViewData
|
||||
var emptyItemsTitle: String
|
||||
var allItemsSelected: Bool
|
||||
var enableSignOutButton: Bool
|
||||
}
|
||||
|
||||
struct UserOtherSessionsBindings: Equatable {
|
||||
|
||||
@@ -36,7 +36,8 @@ class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessi
|
||||
sessionItems: sessionItems,
|
||||
header: filter.userOtherSessionsViewHeader,
|
||||
emptyItemsTitle: filter.userOtherSessionsViewEmptyResultsTitle,
|
||||
allItemsSelected: false))
|
||||
allItemsSelected: false,
|
||||
enableSignOutButton: false))
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
@@ -62,7 +63,10 @@ class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessi
|
||||
toggleAllSelection()
|
||||
updateViewState()
|
||||
case .signOut:
|
||||
completion?(.singOutFromUserSessions(sessionInfos: sessionInfos))
|
||||
let selectedSessionInfos = sessionInfos.filter { sessionInfo in
|
||||
selectedSessions.contains(sessionInfo.id)
|
||||
}
|
||||
completion?(.singOutFromUserSessions(sessionInfos: selectedSessionInfos))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,6 +103,8 @@ class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessi
|
||||
state.emptyItemsTitle = currentFilter.userOtherSessionsViewEmptyResultsTitle
|
||||
|
||||
state.allItemsSelected = sessionInfos.count == selectedSessions.count
|
||||
|
||||
state.enableSignOutButton = selectedSessions.count > 0
|
||||
}
|
||||
|
||||
private func toggleAllSelection() {
|
||||
|
||||
@@ -22,17 +22,22 @@ struct UserOtherSessions: View {
|
||||
@ObservedObject var viewModel: UserOtherSessionsViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
SwiftUI.Section {
|
||||
if viewModel.viewState.sessionItems.isEmpty {
|
||||
noItemsView()
|
||||
} else {
|
||||
itemsView()
|
||||
VStack {
|
||||
ScrollView {
|
||||
SwiftUI.Section {
|
||||
if viewModel.viewState.sessionItems.isEmpty {
|
||||
noItemsView()
|
||||
} else {
|
||||
itemsView()
|
||||
}
|
||||
} header: {
|
||||
UserOtherSessionsHeaderView(viewData: viewModel.viewState.header)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding(.top, 24.0)
|
||||
}
|
||||
} header: {
|
||||
UserOtherSessionsHeaderView(viewData: viewModel.viewState.header)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding(.top, 24.0)
|
||||
}
|
||||
if viewModel.isEditModeEnabled {
|
||||
bottomToolbar()
|
||||
}
|
||||
}
|
||||
.onChange(of: viewModel.isEditModeEnabled) { _ in
|
||||
@@ -48,7 +53,7 @@ struct UserOtherSessions: View {
|
||||
UserOtherSessionsToolbar(isEditModeEnabled: $viewModel.isEditModeEnabled,
|
||||
filter: $viewModel.filter,
|
||||
allItemsSelected: viewModel.viewState.allItemsSelected,
|
||||
sessionCount: viewModel.viewState.items.count,
|
||||
sessionCount: viewModel.viewState.sessionItems.count,
|
||||
onToggleSelection: { viewModel.send(viewAction: .toggleAllSelection)},
|
||||
onSignOut: { viewModel.send(viewAction: .signOut)})
|
||||
}
|
||||
@@ -90,6 +95,25 @@ struct UserOtherSessions: View {
|
||||
}
|
||||
.background(theme.colors.background)
|
||||
}
|
||||
|
||||
private func bottomToolbar() -> some View {
|
||||
VStack{
|
||||
SeparatorLine()
|
||||
.padding(0)
|
||||
HStack {
|
||||
Spacer()
|
||||
Button {
|
||||
viewModel.send(viewAction: .signOut)
|
||||
} label: {
|
||||
Text(VectorL10n.signOut)
|
||||
.foregroundColor(viewModel.viewState.enableSignOutButton ? theme.colors.alert : theme.colors.tertiaryContent)
|
||||
}
|
||||
.padding(.trailing, 16)
|
||||
.padding(.vertical, 10)
|
||||
.disabled(!viewModel.viewState.enableSignOutButton)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
Reference in New Issue
Block a user