mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-19 08:03:50 +02:00
App Layout: Cancel and Back on Spaces Bottom Sheet
- Fixed
This commit is contained in:
+5
-2
@@ -22,15 +22,18 @@ struct SpaceSelectorCoordinatorParameters {
|
||||
let parentSpaceId: String?
|
||||
let selectedSpaceId: String?
|
||||
let showHomeSpace: Bool
|
||||
let showCancel: Bool
|
||||
|
||||
init(session: MXSession,
|
||||
parentSpaceId: String? = nil,
|
||||
selectedSpaceId: String? = nil,
|
||||
showHomeSpace: Bool = false) {
|
||||
showHomeSpace: Bool = false,
|
||||
showCancel: Bool) {
|
||||
self.session = session
|
||||
self.parentSpaceId = parentSpaceId
|
||||
self.selectedSpaceId = selectedSpaceId
|
||||
self.showHomeSpace = showHomeSpace
|
||||
self.showCancel = showCancel
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +61,7 @@ final class SpaceSelectorCoordinator: Coordinator, Presentable {
|
||||
init(parameters: SpaceSelectorCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
let service = SpaceSelectorService(session: parameters.session, parentSpaceId: parameters.parentSpaceId, showHomeSpace: parameters.showHomeSpace, selectedSpaceId: parameters.selectedSpaceId)
|
||||
let viewModel = SpaceSelectorViewModel.makeViewModel(service: service)
|
||||
let viewModel = SpaceSelectorViewModel.makeViewModel(service: service, showCancel: parameters.showCancel)
|
||||
let view = SpaceSelector(viewModel: viewModel.context)
|
||||
.addDependency(AvatarService.instantiate(mediaManager: parameters.session.mediaManager))
|
||||
self.viewModel = viewModel
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@ enum MockSpaceSelectorScreenState: MockScreenState, CaseIterable {
|
||||
case .selection:
|
||||
service = MockSpaceSelectorService(selectedSpaceId: MockSpaceSelectorService.defaultSpaceList[2].id)
|
||||
}
|
||||
let viewModel = SpaceSelectorViewModel.makeViewModel(service: service)
|
||||
let viewModel = SpaceSelectorViewModel.makeViewModel(service: service, showCancel: true)
|
||||
|
||||
// can simulate service and viewModel actions here if needs be.
|
||||
|
||||
|
||||
+2
@@ -96,6 +96,8 @@ struct SpaceSelectorViewState: BindableState {
|
||||
var selectedSpaceId: String?
|
||||
/// String to be displayed as title for the navigation bar
|
||||
var navigationTitle: String
|
||||
/// `true` if the view should display the cancel button in the navigation bar
|
||||
let showCancel: Bool
|
||||
}
|
||||
|
||||
enum SpaceSelectorViewAction {
|
||||
|
||||
+7
-6
@@ -35,20 +35,21 @@ class SpaceSelectorViewModel: SpaceSelectorViewModelType, SpaceSelectorViewModel
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
static func makeViewModel(service: SpaceSelectorServiceProtocol) -> SpaceSelectorViewModelProtocol {
|
||||
return SpaceSelectorViewModel(service: service)
|
||||
static func makeViewModel(service: SpaceSelectorServiceProtocol, showCancel: Bool) -> SpaceSelectorViewModelProtocol {
|
||||
return SpaceSelectorViewModel(service: service, showCancel: showCancel)
|
||||
}
|
||||
|
||||
private init(service: SpaceSelectorServiceProtocol) {
|
||||
private init(service: SpaceSelectorServiceProtocol, showCancel: Bool) {
|
||||
self.service = service
|
||||
super.init(initialViewState: Self.defaultState(service: service))
|
||||
super.init(initialViewState: Self.defaultState(service: service, showCancel: showCancel))
|
||||
}
|
||||
|
||||
private static func defaultState(service: SpaceSelectorServiceProtocol) -> SpaceSelectorViewState {
|
||||
private static func defaultState(service: SpaceSelectorServiceProtocol, showCancel: Bool) -> SpaceSelectorViewState {
|
||||
let parentName = service.parentSpaceNameSubject.value
|
||||
return SpaceSelectorViewState(items: service.spaceListSubject.value,
|
||||
selectedSpaceId: service.selectedSpaceId,
|
||||
navigationTitle: parentName ?? VectorL10n.spaceSelectorTitle)
|
||||
navigationTitle: parentName ?? VectorL10n.spaceSelectorTitle,
|
||||
showCancel: showCancel)
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
+1
-1
@@ -19,6 +19,6 @@ import Foundation
|
||||
protocol SpaceSelectorViewModelProtocol {
|
||||
|
||||
var completion: ((SpaceSelectorViewModelResult) -> Void)? { get set }
|
||||
static func makeViewModel(service: SpaceSelectorServiceProtocol) -> SpaceSelectorViewModelProtocol
|
||||
static func makeViewModel(service: SpaceSelectorServiceProtocol, showCancel: Bool) -> SpaceSelectorViewModelProtocol
|
||||
var context: SpaceSelectorViewModelType.Context { get }
|
||||
}
|
||||
|
||||
+4
-2
@@ -59,8 +59,10 @@ struct SpaceSelector: View {
|
||||
}
|
||||
}
|
||||
ToolbarItem(placement: .cancellationAction) {
|
||||
Button(VectorL10n.cancel) {
|
||||
viewModel.send(viewAction: .cancel)
|
||||
if viewModel.viewState.showCancel {
|
||||
Button(VectorL10n.cancel) {
|
||||
viewModel.send(viewAction: .cancel)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user