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(
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.
Finish editing this message first!
Please register or to comment