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

Present Backup from Home

parent bc69f0f2
No related branches found
No related tags found
2 merge requests!110Backup improvements & example,!102Release 1.0.0
......@@ -84,6 +84,7 @@ let package = Package(
name: "AppFeature",
dependencies: [
.target(name: "AppCore"),
.target(name: "BackupFeature"),
.target(name: "ChatFeature"),
.target(name: "CheckContactAuthFeature"),
.target(name: "ConfirmRequestFeature"),
......@@ -231,6 +232,7 @@ let package = Package(
name: "HomeFeature",
dependencies: [
.target(name: "AppCore"),
.target(name: "BackupFeature"),
.target(name: "ContactsFeature"),
.target(name: "RegisterFeature"),
.target(name: "UserSearchFeature"),
......
import AppCore
import BackupFeature
import ChatFeature
import CheckContactAuthFeature
import ConfirmRequestFeature
......@@ -149,6 +150,9 @@ extension AppEnvironment {
bgQueue: bgQueue,
contact: { contactEnvironment }
)
},
backup: {
BackupEnvironment()
}
)
}
......
import AppCore
import BackupFeature
import Combine
import ComposableArchitecture
import ComposablePresentation
......@@ -20,7 +21,8 @@ public struct HomeState: Equatable {
alert: AlertState<HomeAction>? = nil,
register: RegisterState? = nil,
contacts: ContactsState? = nil,
userSearch: UserSearchState? = nil
userSearch: UserSearchState? = nil,
backup: BackupState? = nil
) {
self.failure = failure
self.isNetworkHealthy = isNetworkHealthy
......@@ -29,6 +31,7 @@ public struct HomeState: Equatable {
self.register = register
self.contacts = contacts
self.userSearch = userSearch
self.backup = backup
}
public var failure: String?
......@@ -39,6 +42,7 @@ public struct HomeState: Equatable {
public var register: RegisterState?
public var contacts: ContactsState?
public var userSearch: UserSearchState?
public var backup: BackupState?
}
public enum HomeAction: Equatable {
......@@ -72,9 +76,12 @@ public enum HomeAction: Equatable {
case didDismissUserSearch
case contactsButtonTapped
case didDismissContacts
case backupButtonTapped
case didDismissBackup
case register(RegisterAction)
case contacts(ContactsAction)
case userSearch(UserSearchAction)
case backup(BackupAction)
}
public struct HomeEnvironment {
......@@ -85,7 +92,8 @@ public struct HomeEnvironment {
bgQueue: AnySchedulerOf<DispatchQueue>,
register: @escaping () -> RegisterEnvironment,
contacts: @escaping () -> ContactsEnvironment,
userSearch: @escaping () -> UserSearchEnvironment
userSearch: @escaping () -> UserSearchEnvironment,
backup: @escaping () -> BackupEnvironment
) {
self.messenger = messenger
self.dbManager = dbManager
......@@ -94,6 +102,7 @@ public struct HomeEnvironment {
self.register = register
self.contacts = contacts
self.userSearch = userSearch
self.backup = backup
}
public var messenger: Messenger
......@@ -103,6 +112,7 @@ public struct HomeEnvironment {
public var register: () -> RegisterEnvironment
public var contacts: () -> ContactsEnvironment
public var userSearch: () -> UserSearchEnvironment
public var backup: () -> BackupEnvironment
}
extension HomeEnvironment {
......@@ -113,7 +123,8 @@ extension HomeEnvironment {
bgQueue: .unimplemented,
register: { .unimplemented },
contacts: { .unimplemented },
userSearch: { .unimplemented }
userSearch: { .unimplemented },
backup: { .unimplemented }
)
}
......@@ -267,7 +278,15 @@ public let homeReducer = Reducer<HomeState, HomeAction, HomeEnvironment>
state.register = nil
return Effect(value: .messenger(.start))
case .register(_), .contacts(_), .userSearch(_):
case .backupButtonTapped:
state.backup = BackupState()
return .none
case .didDismissBackup:
state.backup = nil
return .none
case .register(_), .contacts(_), .userSearch(_), .backup(_):
return .none
}
}
......@@ -292,3 +311,10 @@ public let homeReducer = Reducer<HomeState, HomeAction, HomeEnvironment>
action: /HomeAction.userSearch,
environment: { $0.userSearch() }
)
.presenting(
backupReducer,
state: .keyPath(\.backup),
id: .notNil(),
action: /HomeAction.backup,
environment: { $0.backup() }
)
import BackupFeature
import ComposableArchitecture
import ComposablePresentation
import ContactsFeature
......@@ -111,6 +112,16 @@ public struct HomeView: View {
}
Section {
Button {
viewStore.send(.backupButtonTapped)
} label: {
HStack {
Text("Backup")
Spacer()
Image(systemName: "chevron.forward")
}
}
Button(role: .destructive) {
viewStore.send(.deleteAccount(.buttonTapped))
} label: {
......@@ -152,6 +163,16 @@ public struct HomeView: View {
},
destination: UserSearchView.init(store:)
))
.background(NavigationLinkWithStore(
store.scope(
state: \.backup,
action: HomeAction.backup
),
onDeactivate: {
viewStore.send(.didDismissBackup)
},
destination: BackupView.init(store:)
))
}
.navigationViewStyle(.stack)
.task { viewStore.send(.messenger(.start)) }
......
import AppCore
import BackupFeature
import ComposableArchitecture
import ContactsFeature
import CustomDump
......@@ -504,4 +505,30 @@ final class HomeFeatureTests: XCTestCase {
$0.contacts = nil
}
}
func testBackupButtonTapped() {
let store = TestStore(
initialState: HomeState(),
reducer: homeReducer,
environment: .unimplemented
)
store.send(.backupButtonTapped) {
$0.backup = BackupState()
}
}
func testDidDismissBackup() {
let store = TestStore(
initialState: HomeState(
backup: BackupState()
),
reducer: homeReducer,
environment: .unimplemented
)
store.send(.didDismissBackup) {
$0.backup = nil
}
}
}
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