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

Add HUDManager to HUDFeature

parent 68743f57
No related branches found
No related tags found
1 merge request!88HUD feature
......@@ -665,6 +665,8 @@ let package = Package(
dependencies: [
.target(name: "AppResources"),
.target(name: "Shared"),
.product(name: "Dependencies", package: "swift-composable-architecture"),
.product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
],
swiftSettings: swiftSettings
),
......
import Combine
import Dependencies
import Foundation
import XCTestDynamicOverlay
public struct HUDManager {
public struct Show {
public var run: (HUDModel?) -> Void
public func callAsFunction(_ model: HUDModel? = nil) {
run(model)
}
}
public var show: Show
public var hide: () -> Void
public var observe: () -> AnyPublisher<HUDModel?, Never>
}
extension HUDManager {
public static func live() -> HUDManager {
let subject = PassthroughSubject<HUDModel?, Never>()
return HUDManager(
show: .init { model in
let model = model ?? HUDModel(hasDotAnimation: true)
subject.send(model)
if model.isAutoDismissable {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
subject.send(nil)
}
}
},
hide: {
subject.send(nil)
},
observe: {
subject.eraseToAnyPublisher()
}
)
}
}
extension HUDManager {
public static let unimplemented = HUDManager(
show: .init(run: XCTestDynamicOverlay.unimplemented("\(Self.self).show")),
hide: XCTestDynamicOverlay.unimplemented("\(Self.self).hide"),
observe: XCTestDynamicOverlay.unimplemented(
"\(Self.self).observe",
placeholder: Empty().eraseToAnyPublisher()
)
)
}
private enum HUDManagerKey: DependencyKey {
static let liveValue: HUDManager = .live()
static let testValue: HUDManager = .unimplemented
}
extension DependencyValues {
public var hudManager: HUDManager {
get { self[HUDManagerKey.self] }
set { self[HUDManagerKey.self] = newValue }
}
}
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