-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.ts
27 lines (23 loc) 路 875 Bytes
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { reaction, IReactionPublic, IReactionOptions } from 'mobx'
import { Observable } from 'rxjs'
export function reaction$<T>(
expression: (r: IReactionPublic) => T,
opts: IReactionOptions<T, true>,
): Observable<{ current: T; prev: T | undefined; r: IReactionPublic }>
export function reaction$<T>(
expression: (r: IReactionPublic) => T,
opts?: IReactionOptions<T, false>,
): Observable<{ current: T; prev: T; r: IReactionPublic }>
export function reaction$<T, FireImmediately extends boolean = false>(
expression: (r: IReactionPublic) => T,
opts?: IReactionOptions<T, FireImmediately>,
): Observable<{ current: T; prev?: T; r: IReactionPublic }> {
return new Observable((observer) => {
const dispose = reaction(
expression,
(current, prev, r) => observer.next({ current, prev, r }),
opts,
)
return () => dispose()
})
}