Skip to content

Commit 066228d

Browse files
authored
Merge pull request #68 from fpillet/rewrite-executing-observable
Rewrite executing observable
2 parents 23d3eb7 + 5a17cfe commit 066228d

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

Sources/Action/Action.swift

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ public final class Action<Input, Element> {
3838
public let elements: Observable<Element>
3939

4040
/// Whether or not we're currently executing.
41-
/// Always observed on MainScheduler.
4241
public let executing: Observable<Bool>
4342

4443
/// Observables returned by the workFactory.
@@ -98,19 +97,18 @@ public final class Action<Input, Element> {
9897
.of(notEnabledError, underlyingError)
9998
.merge()
10099

101-
let executionStart = executionObservables
102-
let executionEnd = executionObservables
103-
.flatMap { observable -> Observable<Void> in
104-
return observable
105-
.flatMap { _ in Observable<Void>.empty() }
106-
.concat(Observable.just())
107-
.catchErrorJustReturn()
108-
}
100+
executing = executionObservables.flatMap {
101+
execution -> Observable<Bool> in
102+
let execution = execution
103+
.flatMap { _ in Observable<Bool>.empty() }
104+
.catchError { _ in Observable.empty()}
109105

110-
executing = Observable
111-
.of(executionStart.map { _ in true }, executionEnd.map { _ in false })
112-
.merge()
106+
return Observable.concat([Observable.just(true),
107+
execution,
108+
Observable.just(false)])
109+
}
113110
.startWith(false)
111+
.shareReplay(1)
114112

115113
Observable
116114
.combineLatest(executing, enabledIf) { !$0 && $1 }
@@ -123,7 +121,7 @@ public final class Action<Input, Element> {
123121
defer {
124122
inputs.onNext(value)
125123
}
126-
124+
127125
let execution = executionObservables
128126
.take(1)
129127
.flatMap { $0 }

0 commit comments

Comments
 (0)