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

Extract SendRequestFeature to separate library

parent b2b508d2
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!68Messenger example - send auth request
This commit is part of merge request !68. Comments created here will be created in the context of that merge request.
Showing
with 168 additions and 17 deletions
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1340"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "SendRequestFeature"
BuildableName = "SendRequestFeature"
BlueprintName = "SendRequestFeature"
ReferencedContainer = "container:">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "SendRequestFeatureTests"
BuildableName = "SendRequestFeatureTests"
BlueprintName = "SendRequestFeatureTests"
ReferencedContainer = "container:">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "SendRequestFeature"
BuildableName = "SendRequestFeature"
BlueprintName = "SendRequestFeature"
ReferencedContainer = "container:">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
...@@ -24,6 +24,7 @@ let package = Package( ...@@ -24,6 +24,7 @@ let package = Package(
.library(name: "HomeFeature", targets: ["HomeFeature"]), .library(name: "HomeFeature", targets: ["HomeFeature"]),
.library(name: "RegisterFeature", targets: ["RegisterFeature"]), .library(name: "RegisterFeature", targets: ["RegisterFeature"]),
.library(name: "RestoreFeature", targets: ["RestoreFeature"]), .library(name: "RestoreFeature", targets: ["RestoreFeature"]),
.library(name: "SendRequestFeature", targets: ["SendRequestFeature"]),
.library(name: "UserSearchFeature", targets: ["UserSearchFeature"]), .library(name: "UserSearchFeature", targets: ["UserSearchFeature"]),
.library(name: "WelcomeFeature", targets: ["WelcomeFeature"]), .library(name: "WelcomeFeature", targets: ["WelcomeFeature"]),
], ],
...@@ -74,6 +75,7 @@ let package = Package( ...@@ -74,6 +75,7 @@ let package = Package(
.target(name: "HomeFeature"), .target(name: "HomeFeature"),
.target(name: "RegisterFeature"), .target(name: "RegisterFeature"),
.target(name: "RestoreFeature"), .target(name: "RestoreFeature"),
.target(name: "SendRequestFeature"),
.target(name: "UserSearchFeature"), .target(name: "UserSearchFeature"),
.target(name: "WelcomeFeature"), .target(name: "WelcomeFeature"),
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"), .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
...@@ -94,6 +96,7 @@ let package = Package( ...@@ -94,6 +96,7 @@ let package = Package(
name: "ContactFeature", name: "ContactFeature",
dependencies: [ dependencies: [
.target(name: "AppCore"), .target(name: "AppCore"),
.target(name: "SendRequestFeature"),
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"), .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
.product(name: "ComposablePresentation", package: "swift-composable-presentation"), .product(name: "ComposablePresentation", package: "swift-composable-presentation"),
.product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"), .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
...@@ -158,6 +161,20 @@ let package = Package( ...@@ -158,6 +161,20 @@ let package = Package(
], ],
swiftSettings: swiftSettings swiftSettings: swiftSettings
), ),
.target(
name: "SendRequestFeature",
dependencies: [
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
],
swiftSettings: swiftSettings
),
.testTarget(
name: "SendRequestFeatureTests",
dependencies: [
.target(name: "SendRequestFeature"),
],
swiftSettings: swiftSettings
),
.target( .target(
name: "UserSearchFeature", name: "UserSearchFeature",
dependencies: [ dependencies: [
......
...@@ -89,6 +89,16 @@ ...@@ -89,6 +89,16 @@
ReferencedContainer = "container:.."> ReferencedContainer = "container:..">
</BuildableReference> </BuildableReference>
</TestableReference> </TestableReference>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "SendRequestFeatureTests"
BuildableName = "SendRequestFeatureTests"
BlueprintName = "SendRequestFeatureTests"
ReferencedContainer = "container:..">
</BuildableReference>
</TestableReference>
<TestableReference <TestableReference
skipped = "NO"> skipped = "NO">
<BuildableReference <BuildableReference
......
...@@ -62,7 +62,7 @@ extension AppEnvironment { ...@@ -62,7 +62,7 @@ extension AppEnvironment {
mainQueue: mainQueue, mainQueue: mainQueue,
bgQueue: bgQueue, bgQueue: bgQueue,
sendRequest: { sendRequest: {
ContactSendRequestEnvironment() SendRequestEnvironment()
} }
) )
} }
......
...@@ -2,6 +2,7 @@ import AppCore ...@@ -2,6 +2,7 @@ import AppCore
import ComposableArchitecture import ComposableArchitecture
import ComposablePresentation import ComposablePresentation
import Foundation import Foundation
import SendRequestFeature
import XCTestDynamicOverlay import XCTestDynamicOverlay
import XXClient import XXClient
import XXMessengerClient import XXMessengerClient
...@@ -12,7 +13,7 @@ public struct ContactState: Equatable { ...@@ -12,7 +13,7 @@ public struct ContactState: Equatable {
id: Data, id: Data,
dbContact: XXModels.Contact? = nil, dbContact: XXModels.Contact? = nil,
xxContact: XXClient.Contact? = nil, xxContact: XXClient.Contact? = nil,
sendRequest: ContactSendRequestState? = nil sendRequest: SendRequestState? = nil
) { ) {
self.id = id self.id = id
self.dbContact = dbContact self.dbContact = dbContact
...@@ -23,7 +24,7 @@ public struct ContactState: Equatable { ...@@ -23,7 +24,7 @@ public struct ContactState: Equatable {
public var id: Data public var id: Data
public var dbContact: XXModels.Contact? public var dbContact: XXModels.Contact?
public var xxContact: XXClient.Contact? public var xxContact: XXClient.Contact?
public var sendRequest: ContactSendRequestState? public var sendRequest: SendRequestState?
} }
public enum ContactAction: Equatable { public enum ContactAction: Equatable {
...@@ -32,7 +33,7 @@ public enum ContactAction: Equatable { ...@@ -32,7 +33,7 @@ public enum ContactAction: Equatable {
case saveFactsTapped case saveFactsTapped
case sendRequestTapped case sendRequestTapped
case sendRequestDismissed case sendRequestDismissed
case sendRequest(ContactSendRequestAction) case sendRequest(SendRequestAction)
} }
public struct ContactEnvironment { public struct ContactEnvironment {
...@@ -41,7 +42,7 @@ public struct ContactEnvironment { ...@@ -41,7 +42,7 @@ public struct ContactEnvironment {
db: DBManagerGetDB, db: DBManagerGetDB,
mainQueue: AnySchedulerOf<DispatchQueue>, mainQueue: AnySchedulerOf<DispatchQueue>,
bgQueue: AnySchedulerOf<DispatchQueue>, bgQueue: AnySchedulerOf<DispatchQueue>,
sendRequest: @escaping () -> ContactSendRequestEnvironment sendRequest: @escaping () -> SendRequestEnvironment
) { ) {
self.messenger = messenger self.messenger = messenger
self.db = db self.db = db
...@@ -54,7 +55,7 @@ public struct ContactEnvironment { ...@@ -54,7 +55,7 @@ public struct ContactEnvironment {
public var db: DBManagerGetDB public var db: DBManagerGetDB
public var mainQueue: AnySchedulerOf<DispatchQueue> public var mainQueue: AnySchedulerOf<DispatchQueue>
public var bgQueue: AnySchedulerOf<DispatchQueue> public var bgQueue: AnySchedulerOf<DispatchQueue>
public var sendRequest: () -> ContactSendRequestEnvironment public var sendRequest: () -> SendRequestEnvironment
} }
#if DEBUG #if DEBUG
...@@ -103,7 +104,7 @@ public let contactReducer = Reducer<ContactState, ContactAction, ContactEnvironm ...@@ -103,7 +104,7 @@ public let contactReducer = Reducer<ContactState, ContactAction, ContactEnvironm
.eraseToEffect() .eraseToEffect()
case .sendRequestTapped: case .sendRequestTapped:
state.sendRequest = ContactSendRequestState() state.sendRequest = SendRequestState()
return .none return .none
case .sendRequestDismissed: case .sendRequestDismissed:
...@@ -115,7 +116,7 @@ public let contactReducer = Reducer<ContactState, ContactAction, ContactEnvironm ...@@ -115,7 +116,7 @@ public let contactReducer = Reducer<ContactState, ContactAction, ContactEnvironm
} }
} }
.presenting( .presenting(
contactSendRequestReducer, sendRequestReducer,
state: .keyPath(\.sendRequest), state: .keyPath(\.sendRequest),
id: .notNil(), id: .notNil(),
action: /ContactAction.sendRequest, action: /ContactAction.sendRequest,
......
import AppCore import AppCore
import ComposableArchitecture import ComposableArchitecture
import ComposablePresentation import ComposablePresentation
import SendRequestFeature
import SwiftUI import SwiftUI
import XXClient import XXClient
import XXModels import XXModels
...@@ -167,7 +168,7 @@ public struct ContactView: View { ...@@ -167,7 +168,7 @@ public struct ContactView: View {
action: ContactAction.sendRequest action: ContactAction.sendRequest
), ),
onDeactivate: { viewStore.send(.sendRequestDismissed) }, onDeactivate: { viewStore.send(.sendRequestDismissed) },
destination: ContactSendRequestView.init(store:) destination: SendRequestView.init(store:)
)) ))
} }
} }
......
import ComposableArchitecture import ComposableArchitecture
import XCTestDynamicOverlay import XCTestDynamicOverlay
public struct ContactSendRequestState: Equatable { public struct SendRequestState: Equatable {
public init() {} public init() {}
} }
public enum ContactSendRequestAction: Equatable { public enum SendRequestAction: Equatable {
case start case start
} }
public struct ContactSendRequestEnvironment { public struct SendRequestEnvironment {
public init() {} public init() {}
} }
#if DEBUG #if DEBUG
extension ContactSendRequestEnvironment { extension SendRequestEnvironment {
public static let unimplemented = ContactSendRequestEnvironment() public static let unimplemented = SendRequestEnvironment()
} }
#endif #endif
public let contactSendRequestReducer = Reducer<ContactSendRequestState, ContactSendRequestAction, ContactSendRequestEnvironment> public let sendRequestReducer = Reducer<SendRequestState, SendRequestAction, SendRequestEnvironment>
{ state, action, env in { state, action, env in
switch action { switch action {
case .start: case .start:
......
import ComposableArchitecture import ComposableArchitecture
import SwiftUI import SwiftUI
public struct ContactSendRequestView: View { public struct SendRequestView: View {
public init(store: Store<ContactSendRequestState, ContactSendRequestAction>) { public init(store: Store<SendRequestState, SendRequestAction>) {
self.store = store self.store = store
} }
let store: Store<ContactSendRequestState, ContactSendRequestAction> let store: Store<SendRequestState, SendRequestAction>
struct ViewState: Equatable { struct ViewState: Equatable {
init(state: ContactSendRequestState) {} init(state: SendRequestState) {}
} }
public var body: some View { public var body: some View {
...@@ -24,10 +24,10 @@ public struct ContactSendRequestView: View { ...@@ -24,10 +24,10 @@ public struct ContactSendRequestView: View {
} }
#if DEBUG #if DEBUG
public struct ContactSendRequestView_Previews: PreviewProvider { public struct SendRequestView_Previews: PreviewProvider {
public static var previews: some View { public static var previews: some View {
ContactSendRequestView(store: Store( SendRequestView(store: Store(
initialState: ContactSendRequestState(), initialState: SendRequestState(),
reducer: .empty, reducer: .empty,
environment: () environment: ()
)) ))
......
import Combine import Combine
import ComposableArchitecture import ComposableArchitecture
import CustomDump import CustomDump
import SendRequestFeature
import XCTest import XCTest
import XXClient import XXClient
import XXModels import XXModels
...@@ -104,7 +105,7 @@ final class ContactFeatureTests: XCTestCase { ...@@ -104,7 +105,7 @@ final class ContactFeatureTests: XCTestCase {
) )
store.send(.sendRequestTapped) { store.send(.sendRequestTapped) {
$0.sendRequest = ContactSendRequestState() $0.sendRequest = SendRequestState()
} }
store.send(.sendRequestDismissed) { store.send(.sendRequestDismissed) {
......
import ComposableArchitecture import ComposableArchitecture
import XCTest import XCTest
@testable import ContactFeature @testable import SendRequestFeature
final class ContactSendRequestFeatureTests: XCTestCase { final class SendRequestFeatureTests: XCTestCase {
func testStart() { func testStart() {
let store = TestStore( let store = TestStore(
initialState: ContactSendRequestState(), initialState: SendRequestState(),
reducer: contactSendRequestReducer, reducer: sendRequestReducer,
environment: .unimplemented environment: .unimplemented
) )
......
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