From 3910762990c02ec2378401468b37b6b2c2dffbb0 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Wed, 30 Nov 2022 10:18:27 +0100 Subject: [PATCH] Present groups from home --- Examples/xx-messenger/Package.swift | 1 + .../Sources/HomeFeature/HomeComponent.swift | 25 +++++++++++++++++-- .../Sources/HomeFeature/HomeView.swift | 21 ++++++++++++++++ .../HomeFeatureTests/HomeComponentTests.swift | 25 +++++++++++++++++++ 4 files changed, 70 insertions(+), 2 deletions(-) diff --git a/Examples/xx-messenger/Package.swift b/Examples/xx-messenger/Package.swift index edfeba7e..484c0112 100644 --- a/Examples/xx-messenger/Package.swift +++ b/Examples/xx-messenger/Package.swift @@ -287,6 +287,7 @@ let package = Package( .target(name: "AppCore"), .target(name: "BackupFeature"), .target(name: "ContactsFeature"), + .target(name: "GroupsFeature"), .target(name: "RegisterFeature"), .target(name: "UserSearchFeature"), .product(name: "ComposableArchitecture", package: "swift-composable-architecture"), diff --git a/Examples/xx-messenger/Sources/HomeFeature/HomeComponent.swift b/Examples/xx-messenger/Sources/HomeFeature/HomeComponent.swift index 1f209ba3..91b0acff 100644 --- a/Examples/xx-messenger/Sources/HomeFeature/HomeComponent.swift +++ b/Examples/xx-messenger/Sources/HomeFeature/HomeComponent.swift @@ -5,6 +5,7 @@ import ComposableArchitecture import ComposablePresentation import ContactsFeature import Foundation +import GroupsFeature import RegisterFeature import UserSearchFeature import XCTestDynamicOverlay @@ -23,7 +24,8 @@ public struct HomeComponent: ReducerProtocol { register: RegisterComponent.State? = nil, contacts: ContactsComponent.State? = nil, userSearch: UserSearchComponent.State? = nil, - backup: BackupComponent.State? = nil + backup: BackupComponent.State? = nil, + groups: GroupsComponent.State? = nil ) { self.failure = failure self.isNetworkHealthy = isNetworkHealthy @@ -33,6 +35,7 @@ public struct HomeComponent: ReducerProtocol { self.contacts = contacts self.userSearch = userSearch self.backup = backup + self.groups = groups } public var failure: String? @@ -44,6 +47,7 @@ public struct HomeComponent: ReducerProtocol { public var contacts: ContactsComponent.State? public var userSearch: UserSearchComponent.State? public var backup: BackupComponent.State? + public var groups: GroupsComponent.State? } public enum Action: Equatable { @@ -79,10 +83,13 @@ public struct HomeComponent: ReducerProtocol { case didDismissContacts case backupButtonTapped case didDismissBackup + case groupsButtonTapped + case didDismissGroups case register(RegisterComponent.Action) case contacts(ContactsComponent.Action) case userSearch(UserSearchComponent.Action) case backup(BackupComponent.Action) + case groups(GroupsComponent.Action) } public init() {} @@ -264,7 +271,15 @@ public struct HomeComponent: ReducerProtocol { state.backup = nil return .none - case .register(_), .contacts(_), .userSearch(_), .backup(_): + case .groupsButtonTapped: + state.groups = GroupsComponent.State() + return .none + + case .didDismissGroups: + state.groups = nil + return .none + + case .register(_), .contacts(_), .userSearch(_), .backup(_), .groups(_): return .none } } @@ -292,5 +307,11 @@ public struct HomeComponent: ReducerProtocol { action: /Action.backup, presented: { BackupComponent() } ) + .presenting( + state: .keyPath(\.groups), + id: .notNil(), + action: /Action.groups, + presented: { GroupsComponent() } + ) } } diff --git a/Examples/xx-messenger/Sources/HomeFeature/HomeView.swift b/Examples/xx-messenger/Sources/HomeFeature/HomeView.swift index f2fb823c..24465f6e 100644 --- a/Examples/xx-messenger/Sources/HomeFeature/HomeView.swift +++ b/Examples/xx-messenger/Sources/HomeFeature/HomeView.swift @@ -3,6 +3,7 @@ import BackupFeature import ComposableArchitecture import ComposablePresentation import ContactsFeature +import GroupsFeature import RegisterFeature import SwiftUI import UserSearchFeature @@ -109,6 +110,16 @@ public struct HomeView: View { Image(systemName: "chevron.forward") } } + + Button { + viewStore.send(.groupsButtonTapped) + } label: { + HStack { + Text("Groups") + Spacer() + Image(systemName: "chevron.forward") + } + } } header: { Text("Contacts") } @@ -181,6 +192,16 @@ public struct HomeView: View { }, destination: BackupView.init(store:) )) + .background(NavigationLinkWithStore( + store.scope( + state: \.groups, + action: HomeComponent.Action.groups + ), + onDeactivate: { + viewStore.send(.didDismissGroups) + }, + destination: GroupsView.init(store:) + )) } .navigationViewStyle(.stack) .task { viewStore.send(.messenger(.start)) } diff --git a/Examples/xx-messenger/Tests/HomeFeatureTests/HomeComponentTests.swift b/Examples/xx-messenger/Tests/HomeFeatureTests/HomeComponentTests.swift index f381d204..813a4534 100644 --- a/Examples/xx-messenger/Tests/HomeFeatureTests/HomeComponentTests.swift +++ b/Examples/xx-messenger/Tests/HomeFeatureTests/HomeComponentTests.swift @@ -3,6 +3,7 @@ import BackupFeature import ComposableArchitecture import ContactsFeature import CustomDump +import GroupsFeature import RegisterFeature import UserSearchFeature import XCTest @@ -540,4 +541,28 @@ final class HomeComponentTests: XCTestCase { $0.backup = nil } } + + func testGroupsButtonTapped() { + let store = TestStore( + initialState: HomeComponent.State(), + reducer: HomeComponent() + ) + + store.send(.groupsButtonTapped) { + $0.groups = GroupsComponent.State() + } + } + + func testDidDismissGroups() { + let store = TestStore( + initialState: HomeComponent.State( + groups: GroupsComponent.State() + ), + reducer: HomeComponent() + ) + + store.send(.didDismissGroups) { + $0.groups = nil + } + } } -- GitLab