Skip to content
Snippets Groups Projects

[Messenger example] join group

4 files
+ 54
4
Compare changes
  • Side-by-side
  • Inline

Files

@@ -2,6 +2,7 @@ import AppCore
@@ -2,6 +2,7 @@ import AppCore
import ComposableArchitecture
import ComposableArchitecture
import ComposablePresentation
import ComposablePresentation
import Foundation
import Foundation
 
import GroupFeature
import NewGroupFeature
import NewGroupFeature
import XXModels
import XXModels
@@ -9,23 +10,28 @@ public struct GroupsComponent: ReducerProtocol {
@@ -9,23 +10,28 @@ public struct GroupsComponent: ReducerProtocol {
public struct State: Equatable {
public struct State: Equatable {
public init(
public init(
groups: IdentifiedArrayOf<Group> = [],
groups: IdentifiedArrayOf<Group> = [],
newGroup: NewGroupComponent.State? = nil
newGroup: NewGroupComponent.State? = nil,
 
group: GroupComponent.State? = nil
) {
) {
self.groups = groups
self.groups = groups
self.newGroup = newGroup
self.newGroup = newGroup
 
self.group = group
}
}
public var groups: IdentifiedArrayOf<XXModels.Group> = []
public var groups: IdentifiedArrayOf<XXModels.Group> = []
public var newGroup: NewGroupComponent.State?
public var newGroup: NewGroupComponent.State?
 
public var group: GroupComponent.State?
}
}
public enum Action: Equatable {
public enum Action: Equatable {
case start
case start
case didFetchGroups([XXModels.Group])
case didFetchGroups([XXModels.Group])
case didSelectGroup(XXModels.Group)
case didSelectGroup(XXModels.Group)
 
case didDismissGroup
case newGroupButtonTapped
case newGroupButtonTapped
case newGroupDismissed
case newGroupDismissed
case newGroup(NewGroupComponent.Action)
case newGroup(NewGroupComponent.Action)
 
case group(GroupComponent.Action)
}
}
public init() {}
public init() {}
@@ -51,7 +57,12 @@ public struct GroupsComponent: ReducerProtocol {
@@ -51,7 +57,12 @@ public struct GroupsComponent: ReducerProtocol {
state.groups = IdentifiedArray(uniqueElements: groups)
state.groups = IdentifiedArray(uniqueElements: groups)
return .none
return .none
case .didSelectGroup(_):
case .didSelectGroup(let group):
 
state.group = GroupComponent.State(group: group)
 
return .none
 
 
case .didDismissGroup:
 
state.group = nil
return .none
return .none
case .newGroupButtonTapped:
case .newGroupButtonTapped:
@@ -66,7 +77,7 @@ public struct GroupsComponent: ReducerProtocol {
@@ -66,7 +77,7 @@ public struct GroupsComponent: ReducerProtocol {
state.newGroup = nil
state.newGroup = nil
return .none
return .none
case .newGroup(_):
case .newGroup(_), .group(_):
return .none
return .none
}
}
}
}
@@ -76,5 +87,11 @@ public struct GroupsComponent: ReducerProtocol {
@@ -76,5 +87,11 @@ public struct GroupsComponent: ReducerProtocol {
action: /Action.newGroup,
action: /Action.newGroup,
presented: { NewGroupComponent() }
presented: { NewGroupComponent() }
)
)
 
.presenting(
 
state: .keyPath(\.group),
 
id: .notNil(),
 
action: /Action.group,
 
presented: { GroupComponent() }
 
)
}
}
}
}
Loading