Skip to content
Snippets Groups Projects

[Messenger example] create new group

Merged Dariusz Rybicki requested to merge feature/messenger-example-groups into development
2 files
+ 73
2
Compare changes
  • Side-by-side
  • Inline
Files
2
 
import AppCore
import ComposableArchitecture
import ComposableArchitecture
 
import Foundation
 
import XXModels
public struct NewGroupComponent: ReducerProtocol {
public struct NewGroupComponent: ReducerProtocol {
public struct State: Equatable {
public struct State: Equatable {
public init() {}
public init(
 
contacts: IdentifiedArrayOf<XXModels.Contact> = []
 
) {
 
self.contacts = contacts
 
}
 
 
public var contacts: IdentifiedArrayOf<XXModels.Contact>
}
}
public enum Action: Equatable {
public enum Action: Equatable {
case start
case start
 
case didFetchContacts([XXModels.Contact])
case didFinish
case didFinish
}
}
public init() {}
public init() {}
 
@Dependency(\.app.dbManager.getDB) var db: DBManagerGetDB
 
@Dependency(\.app.mainQueue) var mainQueue: AnySchedulerOf<DispatchQueue>
 
@Dependency(\.app.bgQueue) var bgQueue: AnySchedulerOf<DispatchQueue>
 
public func reduce(into state: inout State, action: Action) -> EffectTask<Action> {
public func reduce(into state: inout State, action: Action) -> EffectTask<Action> {
switch action {
switch action {
case .start:
case .start:
 
return Effect
 
.catching { try db() }
 
.flatMap { $0.fetchContactsPublisher(.init()) }
 
.assertNoFailure()
 
.map(Action.didFetchContacts)
 
.subscribe(on: bgQueue)
 
.receive(on: mainQueue)
 
.eraseToEffect()
 
 
case .didFetchContacts(let contacts):
 
state.contacts = IdentifiedArray(uniqueElements: contacts)
return .none
return .none
case .didFinish:
case .didFinish:
Loading