mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-21 09:02:44 +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
-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