From b75b9ccca7ef7137a43eba649b646dc44967ee75 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 2 Dec 2022 11:05:22 +0100 Subject: [PATCH] Present group from groups list --- Examples/xx-messenger/Package.swift | 1 + .../GroupsFeature/GroupsComponent.swift | 23 ++++++++++++++--- .../Sources/GroupsFeature/GroupsView.swift | 9 +++++++ .../GroupsComponentTests.swift | 25 ++++++++++++++++++- 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/Examples/xx-messenger/Package.swift b/Examples/xx-messenger/Package.swift index 0a4226fd..2c22609f 100644 --- a/Examples/xx-messenger/Package.swift +++ b/Examples/xx-messenger/Package.swift @@ -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"), diff --git a/Examples/xx-messenger/Sources/GroupsFeature/GroupsComponent.swift b/Examples/xx-messenger/Sources/GroupsFeature/GroupsComponent.swift index a5f3077d..0a22359f 100644 --- a/Examples/xx-messenger/Sources/GroupsFeature/GroupsComponent.swift +++ b/Examples/xx-messenger/Sources/GroupsFeature/GroupsComponent.swift @@ -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() } + ) } } diff --git a/Examples/xx-messenger/Sources/GroupsFeature/GroupsView.swift b/Examples/xx-messenger/Sources/GroupsFeature/GroupsView.swift index 44c38ce9..1391f6d9 100644 --- a/Examples/xx-messenger/Sources/GroupsFeature/GroupsView.swift +++ b/Examples/xx-messenger/Sources/GroupsFeature/GroupsView.swift @@ -1,6 +1,7 @@ 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) } } } diff --git a/Examples/xx-messenger/Tests/GroupsFeatureTests/GroupsComponentTests.swift b/Examples/xx-messenger/Tests/GroupsFeatureTests/GroupsComponentTests.swift index f8b06a18..49778aab 100644 --- a/Examples/xx-messenger/Tests/GroupsFeatureTests/GroupsComponentTests.swift +++ b/Examples/xx-messenger/Tests/GroupsFeatureTests/GroupsComponentTests.swift @@ -1,6 +1,7 @@ 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() { -- GitLab