mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-26 11:30:50 +02:00
Removed sections
This commit is contained in:
@@ -33,21 +33,14 @@ enum UserOtherSessionsViewModelResult: Equatable {
|
||||
struct UserOtherSessionsViewState: BindableState, Equatable {
|
||||
var bindings: UserOtherSessionsBindings
|
||||
let title: String
|
||||
var sections: [UserOtherSessionsSection]
|
||||
var header: UserOtherSessionsHeaderViewData
|
||||
var emptyItemsTitle: String?
|
||||
}
|
||||
|
||||
struct UserOtherSessionsBindings: Equatable {
|
||||
var filter: UserOtherSessionsFilter
|
||||
var isEditModeEnabled: Bool
|
||||
}
|
||||
|
||||
enum UserOtherSessionsSection: Hashable, Identifiable {
|
||||
var id: Self {
|
||||
self
|
||||
}
|
||||
|
||||
case sessionItems(header: UserOtherSessionsHeaderViewData, items: [UserSessionListItemViewData])
|
||||
case emptySessionItems(header: UserOtherSessionsHeaderViewData, title: String)
|
||||
var items: [UserSessionListItemViewData]
|
||||
}
|
||||
|
||||
enum UserOtherSessionsViewAction {
|
||||
|
||||
+34
-26
@@ -27,9 +27,14 @@ class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessi
|
||||
filter: UserOtherSessionsFilter,
|
||||
title: String) {
|
||||
self.sessionInfos = sessionInfos
|
||||
super.init(initialViewState: UserOtherSessionsViewState(bindings: UserOtherSessionsBindings(filter: filter, isEditModeEnabled: false),
|
||||
let bindings = UserOtherSessionsBindings(filter: filter,
|
||||
isEditModeEnabled: false,
|
||||
items: [])
|
||||
let header = UserOtherSessionsHeaderViewDataFactory().createHeaderData(filter: filter)
|
||||
super.init(initialViewState: UserOtherSessionsViewState(bindings: bindings,
|
||||
title: title,
|
||||
sections: []))
|
||||
header: header,
|
||||
emptyItemsTitle: nil))
|
||||
updateViewState()
|
||||
}
|
||||
|
||||
@@ -73,18 +78,16 @@ class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessi
|
||||
// MARK: - Private
|
||||
|
||||
private func updateViewState() {
|
||||
let sectionItems = createSectionItems(sessionInfos: sessionInfos, filter: state.bindings.filter)
|
||||
let sectionHeader = createHeaderData(filter: state.bindings.filter)
|
||||
if sectionItems.isEmpty {
|
||||
state.sections = [.emptySessionItems(header: sectionHeader,
|
||||
title: noSessionsTitle(filter: state.bindings.filter))]
|
||||
} else {
|
||||
state.sections = [.sessionItems(header: sectionHeader,
|
||||
items: sectionItems)]
|
||||
state.bindings.items = createItems(sessionInfos: sessionInfos, filter: state.bindings.filter)
|
||||
|
||||
state.header = UserOtherSessionsHeaderViewDataFactory().createHeaderData(filter: state.bindings.filter)
|
||||
|
||||
if state.bindings.items.isEmpty {
|
||||
state.emptyItemsTitle = noSessionsTitle(filter: state.bindings.filter)
|
||||
}
|
||||
}
|
||||
|
||||
private func createSectionItems(sessionInfos: [UserSessionInfo], filter: UserOtherSessionsFilter) -> [UserSessionListItemViewData] {
|
||||
private func createItems(sessionInfos: [UserSessionInfo], filter: UserOtherSessionsFilter) -> [UserSessionListItemViewData] {
|
||||
filterSessions(sessionInfos: sessionInfos, by: filter)
|
||||
.map {
|
||||
UserSessionListItemViewDataFactory().create(from: $0,
|
||||
@@ -106,7 +109,26 @@ class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessi
|
||||
}
|
||||
}
|
||||
|
||||
private func createHeaderData(filter: UserOtherSessionsFilter) -> UserOtherSessionsHeaderViewData {
|
||||
|
||||
|
||||
private func noSessionsTitle(filter: UserOtherSessionsFilter) -> String {
|
||||
switch filter {
|
||||
case .all:
|
||||
assertionFailure("The view is not intended to be displayed without any session")
|
||||
return ""
|
||||
case .verified:
|
||||
return VectorL10n.userOtherSessionNoVerifiedSessions
|
||||
case .unverified:
|
||||
return VectorL10n.userOtherSessionNoUnverifiedSessions
|
||||
case .inactive:
|
||||
return VectorL10n.userOtherSessionNoInactiveSessions
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct UserOtherSessionsHeaderViewDataFactory {
|
||||
|
||||
func createHeaderData(filter: UserOtherSessionsFilter) -> UserOtherSessionsHeaderViewData {
|
||||
switch filter {
|
||||
case .all:
|
||||
return UserOtherSessionsHeaderViewData(title: nil,
|
||||
@@ -126,18 +148,4 @@ class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessi
|
||||
iconName: Asset.Images.userOtherSessionsVerified.name)
|
||||
}
|
||||
}
|
||||
|
||||
private func noSessionsTitle(filter: UserOtherSessionsFilter) -> String {
|
||||
switch filter {
|
||||
case .all:
|
||||
assertionFailure("The view is not intended to be displayed without any session")
|
||||
return ""
|
||||
case .verified:
|
||||
return VectorL10n.userOtherSessionNoVerifiedSessions
|
||||
case .unverified:
|
||||
return VectorL10n.userOtherSessionNoUnverifiedSessions
|
||||
case .inactive:
|
||||
return VectorL10n.userOtherSessionNoInactiveSessions
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,13 +23,17 @@ struct UserOtherSessions: View {
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
ForEach(viewModel.viewState.sections) { section in
|
||||
switch section {
|
||||
case let .sessionItems(header: header, items: items):
|
||||
createSessionItemsSection(header: header, items: items)
|
||||
case let .emptySessionItems(header: header, title: title):
|
||||
createEmptySessionsItemsSection(header: header, title: title)
|
||||
SwiftUI.Section {
|
||||
LazyVStack(spacing: 0) {
|
||||
ForEach(viewModel.items) { viewData in
|
||||
UserSessionListItem(viewData: viewData, isEditModeEnabled: viewModel.isEditModeEnabled, onBackgroundTap: { sessionId in
|
||||
viewModel.send(viewAction: .userOtherSessionSelected(sessionId: sessionId))
|
||||
})
|
||||
}
|
||||
}
|
||||
.background(theme.colors.background)
|
||||
} header: {
|
||||
headerView(header: viewModel.viewState.header)
|
||||
}
|
||||
}
|
||||
.background(theme.colors.system.ignoresSafeArea())
|
||||
@@ -73,20 +77,7 @@ struct UserOtherSessions: View {
|
||||
.accentColor(theme.colors.accent)
|
||||
}
|
||||
|
||||
private func createSessionItemsSection(header: UserOtherSessionsHeaderViewData, items: [UserSessionListItemViewData]) -> some View {
|
||||
SwiftUI.Section {
|
||||
LazyVStack(spacing: 0) {
|
||||
ForEach(items) { viewData in
|
||||
UserSessionListItem(viewData: viewData, isEditModeEnabled: viewModel.isEditModeEnabled, onBackgroundTap: { sessionId in
|
||||
viewModel.send(viewAction: .userOtherSessionSelected(sessionId: sessionId))
|
||||
})
|
||||
}
|
||||
}
|
||||
.background(theme.colors.background)
|
||||
} header: {
|
||||
headerView(header: header)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private func createEmptySessionsItemsSection(header: UserOtherSessionsHeaderViewData, title: String) -> some View {
|
||||
SwiftUI.Section {
|
||||
|
||||
Reference in New Issue
Block a user