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

Present groups from home

parent 36ac49cf
No related branches found
No related tags found
2 merge requests!153Release 1.1.0,!149[Messenger example] create new group
This commit is part of merge request !149. Comments created here will be created in the context of that merge request.
...@@ -287,6 +287,7 @@ let package = Package( ...@@ -287,6 +287,7 @@ let package = Package(
.target(name: "AppCore"), .target(name: "AppCore"),
.target(name: "BackupFeature"), .target(name: "BackupFeature"),
.target(name: "ContactsFeature"), .target(name: "ContactsFeature"),
.target(name: "GroupsFeature"),
.target(name: "RegisterFeature"), .target(name: "RegisterFeature"),
.target(name: "UserSearchFeature"), .target(name: "UserSearchFeature"),
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"), .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
......
...@@ -5,6 +5,7 @@ import ComposableArchitecture ...@@ -5,6 +5,7 @@ import ComposableArchitecture
import ComposablePresentation import ComposablePresentation
import ContactsFeature import ContactsFeature
import Foundation import Foundation
import GroupsFeature
import RegisterFeature import RegisterFeature
import UserSearchFeature import UserSearchFeature
import XCTestDynamicOverlay import XCTestDynamicOverlay
...@@ -23,7 +24,8 @@ public struct HomeComponent: ReducerProtocol { ...@@ -23,7 +24,8 @@ public struct HomeComponent: ReducerProtocol {
register: RegisterComponent.State? = nil, register: RegisterComponent.State? = nil,
contacts: ContactsComponent.State? = nil, contacts: ContactsComponent.State? = nil,
userSearch: UserSearchComponent.State? = nil, userSearch: UserSearchComponent.State? = nil,
backup: BackupComponent.State? = nil backup: BackupComponent.State? = nil,
groups: GroupsComponent.State? = nil
) { ) {
self.failure = failure self.failure = failure
self.isNetworkHealthy = isNetworkHealthy self.isNetworkHealthy = isNetworkHealthy
...@@ -33,6 +35,7 @@ public struct HomeComponent: ReducerProtocol { ...@@ -33,6 +35,7 @@ public struct HomeComponent: ReducerProtocol {
self.contacts = contacts self.contacts = contacts
self.userSearch = userSearch self.userSearch = userSearch
self.backup = backup self.backup = backup
self.groups = groups
} }
public var failure: String? public var failure: String?
...@@ -44,6 +47,7 @@ public struct HomeComponent: ReducerProtocol { ...@@ -44,6 +47,7 @@ public struct HomeComponent: ReducerProtocol {
public var contacts: ContactsComponent.State? public var contacts: ContactsComponent.State?
public var userSearch: UserSearchComponent.State? public var userSearch: UserSearchComponent.State?
public var backup: BackupComponent.State? public var backup: BackupComponent.State?
public var groups: GroupsComponent.State?
} }
public enum Action: Equatable { public enum Action: Equatable {
...@@ -79,10 +83,13 @@ public struct HomeComponent: ReducerProtocol { ...@@ -79,10 +83,13 @@ public struct HomeComponent: ReducerProtocol {
case didDismissContacts case didDismissContacts
case backupButtonTapped case backupButtonTapped
case didDismissBackup case didDismissBackup
case groupsButtonTapped
case didDismissGroups
case register(RegisterComponent.Action) case register(RegisterComponent.Action)
case contacts(ContactsComponent.Action) case contacts(ContactsComponent.Action)
case userSearch(UserSearchComponent.Action) case userSearch(UserSearchComponent.Action)
case backup(BackupComponent.Action) case backup(BackupComponent.Action)
case groups(GroupsComponent.Action)
} }
public init() {} public init() {}
...@@ -264,7 +271,15 @@ public struct HomeComponent: ReducerProtocol { ...@@ -264,7 +271,15 @@ public struct HomeComponent: ReducerProtocol {
state.backup = nil state.backup = nil
return .none 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 return .none
} }
} }
...@@ -292,5 +307,11 @@ public struct HomeComponent: ReducerProtocol { ...@@ -292,5 +307,11 @@ public struct HomeComponent: ReducerProtocol {
action: /Action.backup, action: /Action.backup,
presented: { BackupComponent() } presented: { BackupComponent() }
) )
.presenting(
state: .keyPath(\.groups),
id: .notNil(),
action: /Action.groups,
presented: { GroupsComponent() }
)
} }
} }
...@@ -3,6 +3,7 @@ import BackupFeature ...@@ -3,6 +3,7 @@ import BackupFeature
import ComposableArchitecture import ComposableArchitecture
import ComposablePresentation import ComposablePresentation
import ContactsFeature import ContactsFeature
import GroupsFeature
import RegisterFeature import RegisterFeature
import SwiftUI import SwiftUI
import UserSearchFeature import UserSearchFeature
...@@ -109,6 +110,16 @@ public struct HomeView: View { ...@@ -109,6 +110,16 @@ public struct HomeView: View {
Image(systemName: "chevron.forward") Image(systemName: "chevron.forward")
} }
} }
Button {
viewStore.send(.groupsButtonTapped)
} label: {
HStack {
Text("Groups")
Spacer()
Image(systemName: "chevron.forward")
}
}
} header: { } header: {
Text("Contacts") Text("Contacts")
} }
...@@ -181,6 +192,16 @@ public struct HomeView: View { ...@@ -181,6 +192,16 @@ public struct HomeView: View {
}, },
destination: BackupView.init(store:) destination: BackupView.init(store:)
)) ))
.background(NavigationLinkWithStore(
store.scope(
state: \.groups,
action: HomeComponent.Action.groups
),
onDeactivate: {
viewStore.send(.didDismissGroups)
},
destination: GroupsView.init(store:)
))
} }
.navigationViewStyle(.stack) .navigationViewStyle(.stack)
.task { viewStore.send(.messenger(.start)) } .task { viewStore.send(.messenger(.start)) }
......
...@@ -3,6 +3,7 @@ import BackupFeature ...@@ -3,6 +3,7 @@ import BackupFeature
import ComposableArchitecture import ComposableArchitecture
import ContactsFeature import ContactsFeature
import CustomDump import CustomDump
import GroupsFeature
import RegisterFeature import RegisterFeature
import UserSearchFeature import UserSearchFeature
import XCTest import XCTest
...@@ -540,4 +541,28 @@ final class HomeComponentTests: XCTestCase { ...@@ -540,4 +541,28 @@ final class HomeComponentTests: XCTestCase {
$0.backup = nil $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
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment