Skip to content
Snippets Groups Projects

[Messenger example] join group

Merged Dariusz Rybicki requested to merge feature/messenger-example-join-group into development
5 files
+ 158
38
Compare changes
  • Side-by-side
  • Inline
Files
5
 
import AppCore
import ComposableArchitecture
import ComposableArchitecture
 
import Foundation
import XXModels
import XXModels
public struct GroupComponent: ReducerProtocol {
public struct GroupComponent: ReducerProtocol {
public struct State: Equatable {
public struct State: Equatable {
public init(
public init(
group: XXModels.Group
groupId: XXModels.Group.ID,
 
groupInfo: XXModels.GroupInfo? = nil
) {
) {
self.group = group
self.groupId = groupId
 
self.groupInfo = groupInfo
}
}
public var group: XXModels.Group
public var groupId: XXModels.Group.ID
 
public var groupInfo: XXModels.GroupInfo?
}
}
public enum Action: Equatable {
public enum Action: Equatable {
case start
case start
 
case didFetchGroupInfo(XXModels.GroupInfo?)
}
}
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 var body: some ReducerProtocol<State, Action> {
public var body: some ReducerProtocol<State, Action> {
Reduce { state, action in
Reduce { state, action in
switch action {
switch action {
case .start:
case .start:
 
return Effect
 
.catching { try db() }
 
.flatMap { [state] in
 
let query = GroupInfo.Query(groupId: state.groupId)
 
return $0.fetchGroupInfosPublisher(query).map(\.first)
 
}
 
.assertNoFailure()
 
.map(Action.didFetchGroupInfo)
 
.subscribe(on: bgQueue)
 
.receive(on: mainQueue)
 
.eraseToEffect()
 
 
case .didFetchGroupInfo(let groupInfo):
 
state.groupInfo = groupInfo
return .none
return .none
}
}
}
}
Loading