Skip to content
Snippets Groups Projects
Commit b75b9ccc authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Present group from groups list

parent d29d68bd
No related branches found
No related tags found
2 merge requests!153Release 1.1.0,!151[Messenger example] join group
...@@ -287,6 +287,7 @@ let package = Package( ...@@ -287,6 +287,7 @@ let package = Package(
name: "GroupsFeature", name: "GroupsFeature",
dependencies: [ dependencies: [
.target(name: "AppCore"), .target(name: "AppCore"),
.target(name: "GroupFeature"),
.target(name: "NewGroupFeature"), .target(name: "NewGroupFeature"),
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"), .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
.product(name: "ComposablePresentation", package: "swift-composable-presentation"), .product(name: "ComposablePresentation", package: "swift-composable-presentation"),
......
...@@ -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() }
)
} }
} }
import AppCore import AppCore
import ComposableArchitecture import ComposableArchitecture
import ComposablePresentation import ComposablePresentation
import GroupFeature
import NewGroupFeature import NewGroupFeature
import SwiftUI import SwiftUI
import XXModels import XXModels
...@@ -41,6 +42,14 @@ public struct GroupsView: View { ...@@ -41,6 +42,14 @@ public struct GroupsView: View {
onDeactivate: { viewStore.send(.newGroupDismissed) }, onDeactivate: { viewStore.send(.newGroupDismissed) },
destination: NewGroupView.init destination: NewGroupView.init
)) ))
.background(NavigationLinkWithStore(
store.scope(
state: \.group,
action: Component.Action.group
),
onDeactivate: { viewStore.send(.didDismissGroup) },
destination: GroupView.init
))
.task { viewStore.send(.start) } .task { viewStore.send(.start) }
} }
} }
......
import Combine import Combine
import ComposableArchitecture import ComposableArchitecture
import CustomDump import CustomDump
import GroupFeature
import NewGroupFeature import NewGroupFeature
import XCTest import XCTest
import XXModels import XXModels
...@@ -72,7 +73,29 @@ final class GroupsComponentTests: XCTestCase { ...@@ -72,7 +73,29 @@ final class GroupsComponentTests: XCTestCase {
reducer: GroupsComponent() reducer: GroupsComponent()
) )
store.send(.didSelectGroup(.stub(2))) store.send(.didSelectGroup(.stub(2))) {
$0.group = GroupComponent.State(group: .stub(2))
}
}
func testDismissGroup() {
let store = TestStore(
initialState: GroupsComponent.State(
groups: IdentifiedArray(uniqueElements: [
.stub(1),
.stub(2),
.stub(3),
]),
group: GroupComponent.State(
group: .stub(2)
)
),
reducer: GroupsComponent()
)
store.send(.didDismissGroup) {
$0.group = nil
}
} }
func testPresentNewGroup() { func testPresentNewGroup() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment