Skip to content

Commit b744531

Browse files
committed
add provider subject and listen to the changes coming from the provider
1 parent 9ca2cc3 commit b744531

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

Sources/OpenFeature/OpenFeatureAPI.swift

+15-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,21 @@ import Combine
33

44
/// A global singleton which holds base configuration for the OpenFeature library.
55
/// Configuration here will be shared across all ``Client``s.
6-
public class OpenFeatureAPI: GlobalEventPublisher {
7-
private var _provider: FeatureProvider?
6+
public class OpenFeatureAPI {
7+
private var _provider: FeatureProvider? {
8+
set {
9+
providerSubject.send(newValue)
10+
}
11+
12+
get {
13+
providerSubject.value
14+
}
15+
}
816
private var _context: EvaluationContext?
917
private(set) var hooks: [any Hook] = []
1018
private var providerObserver: AnyCancellable?
1119
private var globalEventState = PassthroughSubject<ProviderEvent, Never>()
20+
private var providerSubject = CurrentValueSubject<FeatureProvider?, Never>(nil)
1221

1322
/// The ``OpenFeatureAPI`` singleton
1423
static public let shared = OpenFeatureAPI()
@@ -70,8 +79,10 @@ public class OpenFeatureAPI: GlobalEventPublisher {
7079
self.hooks.removeAll()
7180
}
7281

73-
public func observe() -> PassthroughSubject<ProviderEvent, Never> {
74-
return globalEventState
82+
public func observe() -> any Publisher<ProviderEvent, Never> {
83+
return providerSubject
84+
.filter({provider in provider != nil})
85+
.flatMap({ provider in provider!.observe()})
7586
}
7687

7788
struct Handler {

0 commit comments

Comments
 (0)