mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-05-02 06:06:57 +02:00
Made StateStoreViewModel state mutable and removed the reducer for all the features using it.
This commit is contained in:
committed by
Stefan Ceriu
parent
fc9e95aee8
commit
313b05485a
@@ -47,10 +47,6 @@ extension TemplateSimpleScreenPromptType: Identifiable, CaseIterable {
|
||||
|
||||
// MARK: View model
|
||||
|
||||
enum TemplateSimpleScreenStateAction {
|
||||
case viewAction(TemplateSimpleScreenViewAction)
|
||||
}
|
||||
|
||||
enum TemplateSimpleScreenViewModelResult {
|
||||
case accept
|
||||
case cancel
|
||||
|
||||
+5
-18
@@ -18,7 +18,7 @@ import SwiftUI
|
||||
|
||||
@available(iOS 14, *)
|
||||
typealias TemplateSimpleScreenViewModelType = StateStoreViewModel<TemplateSimpleScreenViewState,
|
||||
TemplateSimpleScreenStateAction,
|
||||
Never,
|
||||
TemplateSimpleScreenViewAction>
|
||||
@available(iOS 14, *)
|
||||
class TemplateSimpleScreenViewModel: TemplateSimpleScreenViewModelType, TemplateSimpleScreenViewModelProtocol {
|
||||
@@ -45,23 +45,10 @@ class TemplateSimpleScreenViewModel: TemplateSimpleScreenViewModelType, Template
|
||||
completion?(.accept)
|
||||
case .cancel:
|
||||
completion?(.cancel)
|
||||
case .incrementCount, .decrementCount:
|
||||
dispatch(action: .viewAction(viewAction))
|
||||
case .incrementCount:
|
||||
state.count += 1
|
||||
case .decrementCount:
|
||||
state.count -= 1
|
||||
}
|
||||
}
|
||||
|
||||
override class func reducer(state: inout TemplateSimpleScreenViewState, action: TemplateSimpleScreenStateAction) {
|
||||
switch action {
|
||||
case .viewAction(let viewAction):
|
||||
switch viewAction {
|
||||
case .incrementCount:
|
||||
state.count += 1
|
||||
case .decrementCount:
|
||||
state.count -= 1
|
||||
case .accept, .cancel:
|
||||
break
|
||||
}
|
||||
}
|
||||
UILog.debug("[TemplateSimpleScreenViewModel] reducer with action \(action) produced state: \(state)")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,11 +41,6 @@ extension TemplateUserProfilePresence: Identifiable, CaseIterable {
|
||||
|
||||
// MARK: View model
|
||||
|
||||
enum TemplateUserProfileStateAction {
|
||||
case viewAction(TemplateUserProfileViewAction)
|
||||
case updatePresence(TemplateUserProfilePresence)
|
||||
}
|
||||
|
||||
enum TemplateUserProfileViewModelResult {
|
||||
case cancel
|
||||
case done
|
||||
|
||||
+15
-36
@@ -19,7 +19,7 @@ import Combine
|
||||
|
||||
@available(iOS 14, *)
|
||||
typealias TemplateUserProfileViewModelType = StateStoreViewModel<TemplateUserProfileViewState,
|
||||
TemplateUserProfileStateAction,
|
||||
Never,
|
||||
TemplateUserProfileViewAction>
|
||||
@available(iOS 14, *)
|
||||
class TemplateUserProfileViewModel: TemplateUserProfileViewModelType, TemplateUserProfileViewModelProtocol {
|
||||
@@ -54,49 +54,28 @@ class TemplateUserProfileViewModel: TemplateUserProfileViewModelType, TemplateUs
|
||||
count: 0
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
private func setupPresenceObserving() {
|
||||
let presenceUpdatePublisher = templateUserProfileService.presenceSubject
|
||||
.map(TemplateUserProfileStateAction.updatePresence)
|
||||
.eraseToAnyPublisher()
|
||||
dispatch(actionPublisher: presenceUpdatePublisher)
|
||||
templateUserProfileService
|
||||
.presenceSubject
|
||||
.sink(receiveValue: { [weak self] presence in
|
||||
self?.state.presence = presence
|
||||
})
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
override func process(viewAction: TemplateUserProfileViewAction) {
|
||||
switch viewAction {
|
||||
case .cancel:
|
||||
cancel()
|
||||
completion?(.cancel)
|
||||
case .done:
|
||||
done()
|
||||
case .incrementCount, .decrementCount:
|
||||
dispatch(action: .viewAction(viewAction))
|
||||
completion?(.done)
|
||||
case .incrementCount:
|
||||
state.count += 1
|
||||
case .decrementCount:
|
||||
state.count -= 1
|
||||
}
|
||||
}
|
||||
|
||||
override class func reducer(state: inout TemplateUserProfileViewState, action: TemplateUserProfileStateAction) {
|
||||
switch action {
|
||||
case .updatePresence(let presence):
|
||||
state.presence = presence
|
||||
case .viewAction(let viewAction):
|
||||
switch viewAction {
|
||||
case .incrementCount:
|
||||
state.count += 1
|
||||
case .decrementCount:
|
||||
state.count -= 1
|
||||
case .cancel, .done:
|
||||
break
|
||||
}
|
||||
}
|
||||
UILog.debug("[TemplateUserProfileViewModel] reducer with action \(action) produced state: \(state)")
|
||||
}
|
||||
|
||||
private func done() {
|
||||
completion?(.done)
|
||||
}
|
||||
|
||||
private func cancel() {
|
||||
completion?(.cancel)
|
||||
}
|
||||
}
|
||||
|
||||
-7
@@ -83,13 +83,6 @@ enum TemplateRoomChatRoomInitializationStatus {
|
||||
case failedToInitialize
|
||||
}
|
||||
|
||||
/// Actions to be performed on the `ViewModel` State
|
||||
enum TemplateRoomChatStateAction {
|
||||
case updateRoomInitializationStatus(TemplateRoomChatRoomInitializationStatus)
|
||||
case updateBubbles([TemplateRoomChatBubble])
|
||||
case clearMessageInput
|
||||
}
|
||||
|
||||
/// Actions sent by the `ViewModel` to the `Coordinator`
|
||||
enum TemplateRoomChatViewModelAction {
|
||||
case done
|
||||
|
||||
+13
-29
@@ -19,7 +19,7 @@ import Combine
|
||||
|
||||
@available(iOS 14, *)
|
||||
typealias TemplateRoomChatViewModelType = StateStoreViewModel<TemplateRoomChatViewState,
|
||||
TemplateRoomChatStateAction,
|
||||
Never,
|
||||
TemplateRoomChatViewAction>
|
||||
|
||||
@available(iOS 14, *)
|
||||
@@ -48,21 +48,22 @@ class TemplateRoomChatViewModel: TemplateRoomChatViewModelType, TemplateRoomChat
|
||||
}
|
||||
|
||||
private func setupRoomInitializationObserving() {
|
||||
let initializationPublisher = templateRoomChatService
|
||||
templateRoomChatService
|
||||
.roomInitializationStatus
|
||||
.map(TemplateRoomChatStateAction.updateRoomInitializationStatus)
|
||||
.eraseToAnyPublisher()
|
||||
|
||||
dispatch(actionPublisher: initializationPublisher)
|
||||
.sink { [weak self] status in
|
||||
self?.state.roomInitializationStatus = status
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
|
||||
private func setupMessageObserving() {
|
||||
let messageActionPublisher = templateRoomChatService
|
||||
templateRoomChatService
|
||||
.chatMessagesSubject
|
||||
.map(Self.makeBubbles(messages:))
|
||||
.map(TemplateRoomChatStateAction.updateBubbles)
|
||||
.eraseToAnyPublisher()
|
||||
dispatch(actionPublisher: messageActionPublisher)
|
||||
.sink { [weak self] bubbles in
|
||||
self?.state.bubbles = bubbles
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
private static func defaultState(templateRoomChatService: TemplateRoomChatServiceProtocol) -> TemplateRoomChatViewState {
|
||||
@@ -117,27 +118,10 @@ class TemplateRoomChatViewModel: TemplateRoomChatViewModelType, TemplateRoomChat
|
||||
override func process(viewAction: TemplateRoomChatViewAction) {
|
||||
switch viewAction {
|
||||
case .done:
|
||||
done()
|
||||
callback?(.done)
|
||||
case .sendMessage:
|
||||
templateRoomChatService.send(textMessage: state.bindings.messageInput)
|
||||
dispatch(action: .clearMessageInput)
|
||||
}
|
||||
}
|
||||
|
||||
override class func reducer(state: inout TemplateRoomChatViewState, action: TemplateRoomChatStateAction) {
|
||||
switch action {
|
||||
case .updateRoomInitializationStatus(let status):
|
||||
state.roomInitializationStatus = status
|
||||
case .clearMessageInput:
|
||||
state.bindings.messageInput = ""
|
||||
case .updateBubbles(let bubbles):
|
||||
state.bubbles = bubbles
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func done() {
|
||||
callback?(.done)
|
||||
}
|
||||
}
|
||||
|
||||
-5
@@ -32,11 +32,6 @@ enum TemplateRoomListCoordinatorAction {
|
||||
|
||||
// MARK: - View model
|
||||
|
||||
/// Actions to be performed on the `ViewModel` State
|
||||
enum TemplateRoomListStateAction {
|
||||
case updateRooms([TemplateRoomListRoom])
|
||||
}
|
||||
|
||||
/// Actions sent by the`ViewModel` to the `Coordinator`.
|
||||
enum TemplateRoomListViewModelAction {
|
||||
case didSelectRoom(String)
|
||||
|
||||
+7
-12
@@ -19,7 +19,7 @@ import Combine
|
||||
|
||||
@available(iOS 14, *)
|
||||
typealias TemplateRoomListViewModelType = StateStoreViewModel<TemplateRoomListViewState,
|
||||
TemplateRoomListStateAction,
|
||||
Never,
|
||||
TemplateRoomListViewAction>
|
||||
@available(iOS 14.0, *)
|
||||
class TemplateRoomListViewModel: TemplateRoomListViewModelType, TemplateRoomListViewModelProtocol {
|
||||
@@ -47,10 +47,12 @@ class TemplateRoomListViewModel: TemplateRoomListViewModelType, TemplateRoomList
|
||||
}
|
||||
|
||||
private func startObservingRooms() {
|
||||
let roomsUpdatePublisher = templateRoomListService.roomsSubject
|
||||
.map(TemplateRoomListStateAction.updateRooms)
|
||||
.eraseToAnyPublisher()
|
||||
dispatch(actionPublisher: roomsUpdatePublisher)
|
||||
templateRoomListService
|
||||
.roomsSubject
|
||||
.sink { [weak self] rooms in
|
||||
self?.state.rooms = rooms
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
@@ -64,13 +66,6 @@ class TemplateRoomListViewModel: TemplateRoomListViewModelType, TemplateRoomList
|
||||
}
|
||||
}
|
||||
|
||||
override class func reducer(state: inout TemplateRoomListViewState, action: TemplateRoomListStateAction) {
|
||||
switch action {
|
||||
case .updateRooms(let rooms):
|
||||
state.rooms = rooms
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func done() {
|
||||
|
||||
Reference in New Issue
Block a user