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
Branches
Tags
2 merge requests!153Release 1.1.0,!151[Messenger example] join group
......@@ -287,6 +287,7 @@ let package = Package(
name: "GroupsFeature",
dependencies: [
.target(name: "AppCore"),
.target(name: "GroupFeature"),
.target(name: "NewGroupFeature"),
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
.product(name: "ComposablePresentation", package: "swift-composable-presentation"),
......
......@@ -2,6 +2,7 @@ import AppCore
import ComposableArchitecture
import ComposablePresentation
import Foundation
import GroupFeature
import NewGroupFeature
import XXModels
......@@ -9,23 +10,28 @@ public struct GroupsComponent: ReducerProtocol {
public struct State: Equatable {
public init(
groups: IdentifiedArrayOf<Group> = [],
newGroup: NewGroupComponent.State? = nil
newGroup: NewGroupComponent.State? = nil,
group: GroupComponent.State? = nil
) {
self.groups = groups
self.newGroup = newGroup
self.group = group
}
public var groups: IdentifiedArrayOf<XXModels.Group> = []
public var newGroup: NewGroupComponent.State?
public var group: GroupComponent.State?
}
public enum Action: Equatable {
case start
case didFetchGroups([XXModels.Group])
case didSelectGroup(XXModels.Group)
case didDismissGroup
case newGroupButtonTapped
case newGroupDismissed
case newGroup(NewGroupComponent.Action)
case group(GroupComponent.Action)
}
public init() {}
......@@ -51,7 +57,12 @@ public struct GroupsComponent: ReducerProtocol {
state.groups = IdentifiedArray(uniqueElements: groups)
return .none
case .didSelectGroup(_):
case .didSelectGroup(let group):
state.group = GroupComponent.State(group: group)
return .none
case .didDismissGroup:
state.group = nil
return .none
case .newGroupButtonTapped:
......@@ -66,7 +77,7 @@ public struct GroupsComponent: ReducerProtocol {
state.newGroup = nil
return .none
case .newGroup(_):
case .newGroup(_), .group(_):
return .none
}
}
......@@ -76,5 +87,11 @@ public struct GroupsComponent: ReducerProtocol {
action: /Action.newGroup,
presented: { NewGroupComponent() }
)
.presenting(
state: .keyPath(\.group),
id: .notNil(),
action: /Action.group,
presented: { GroupComponent() }
)
}
}
import AppCore
import ComposableArchitecture
import ComposablePresentation
import GroupFeature
import NewGroupFeature
import SwiftUI
import XXModels
......@@ -41,6 +42,14 @@ public struct GroupsView: View {
onDeactivate: { viewStore.send(.newGroupDismissed) },
destination: NewGroupView.init
))
.background(NavigationLinkWithStore(
store.scope(
state: \.group,
action: Component.Action.group
),
onDeactivate: { viewStore.send(.didDismissGroup) },
destination: GroupView.init
))
.task { viewStore.send(.start) }
}
}
......
import Combine
import ComposableArchitecture
import CustomDump
import GroupFeature
import NewGroupFeature
import XCTest
import XXModels
......@@ -72,7 +73,29 @@ final class GroupsComponentTests: XCTestCase {
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() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment