Sing out bottom bar

This commit is contained in:
Aleksandrs Proskurins
2022-10-26 16:07:01 +03:00
parent 6cf4ccf744
commit ed627162e6
3 changed files with 44 additions and 13 deletions
@@ -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