react-rx 2.0.0 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/useObservable.js +16 -21
- package/dist/es2015/useObservable.js +16 -19
- package/dist/esm/useObservable.js +17 -22
- package/package.json +3 -3
- package/src/useObservable.ts +20 -37
|
@@ -3,35 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.useMemoObservable = exports.useObservable = void 0;
|
|
4
4
|
var rxjs_1 = require("rxjs");
|
|
5
5
|
var react_1 = require("react");
|
|
6
|
-
var useAsObservable_1 = require("./useAsObservable");
|
|
7
|
-
var operators_1 = require("rxjs/operators");
|
|
8
6
|
var shim_1 = require("use-sync-external-store/shim");
|
|
9
7
|
function getValue(value) {
|
|
10
8
|
return typeof value === 'function' ? value() : value;
|
|
11
9
|
}
|
|
12
|
-
function
|
|
13
|
-
var
|
|
14
|
-
var currentValue;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
function useObservable(observable, initialValue) {
|
|
11
|
+
var _a = (0, react_1.useMemo)(function () {
|
|
12
|
+
var currentValue = getValue(initialValue);
|
|
13
|
+
var subject = new rxjs_1.Subject();
|
|
14
|
+
var subscription = observable.subscribe(function (value) {
|
|
15
|
+
currentValue = value;
|
|
16
|
+
subject.next(value);
|
|
17
|
+
});
|
|
18
|
+
return [
|
|
19
|
+
function () { return currentValue; },
|
|
20
|
+
function (callback) {
|
|
21
|
+
var subjectSub = subject.subscribe(function (value) { return callback(value); });
|
|
23
22
|
return function () {
|
|
24
23
|
subscription.unsubscribe();
|
|
24
|
+
subjectSub.unsubscribe();
|
|
25
25
|
};
|
|
26
26
|
},
|
|
27
|
-
|
|
28
|
-
}, [observable]);
|
|
29
|
-
return (0, shim_1.useSyncExternalStore)(
|
|
30
|
-
}
|
|
31
|
-
function useObservable(observable, initialValue) {
|
|
32
|
-
return useObservableSubscription((0, useAsObservable_1.useAsObservable)(observable, (0, rxjs_1.pipe)((0, operators_1.distinctUntilChanged)(), (0, operators_1.switchMap)(function (observable) {
|
|
33
|
-
return (0, rxjs_1.merge)((0, rxjs_1.defer)(function () { return (0, rxjs_1.of)(getValue(initialValue)); }), observable);
|
|
34
|
-
}))));
|
|
27
|
+
];
|
|
28
|
+
}, [observable]), getSnapshot = _a[0], subscribe = _a[1];
|
|
29
|
+
return (0, shim_1.useSyncExternalStore)(subscribe, getSnapshot);
|
|
35
30
|
}
|
|
36
31
|
exports.useObservable = useObservable;
|
|
37
32
|
function useMemoObservable(observableOrFactory, deps, initialValue) {
|
|
@@ -1,32 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
|
-
import { useAsObservable } from './useAsObservable';
|
|
4
|
-
import { distinctUntilChanged, switchMap } from 'rxjs/operators';
|
|
5
3
|
import { useSyncExternalStore } from 'use-sync-external-store/shim';
|
|
6
4
|
function getValue(value) {
|
|
7
5
|
return typeof value === 'function' ? value() : value;
|
|
8
6
|
}
|
|
9
|
-
function
|
|
10
|
-
const
|
|
11
|
-
let currentValue;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
7
|
+
export function useObservable(observable, initialValue) {
|
|
8
|
+
const [getSnapshot, subscribe] = useMemo(() => {
|
|
9
|
+
let currentValue = getValue(initialValue);
|
|
10
|
+
const subject = new Subject();
|
|
11
|
+
const subscription = observable.subscribe(value => {
|
|
12
|
+
currentValue = value;
|
|
13
|
+
subject.next(value);
|
|
14
|
+
});
|
|
15
|
+
return [
|
|
16
|
+
() => currentValue,
|
|
17
|
+
(callback) => {
|
|
18
|
+
const subjectSub = subject.subscribe(value => callback(value));
|
|
20
19
|
return () => {
|
|
21
20
|
subscription.unsubscribe();
|
|
21
|
+
subjectSub.unsubscribe();
|
|
22
22
|
};
|
|
23
23
|
},
|
|
24
|
-
|
|
24
|
+
];
|
|
25
25
|
}, [observable]);
|
|
26
|
-
return useSyncExternalStore(
|
|
27
|
-
}
|
|
28
|
-
export function useObservable(observable, initialValue) {
|
|
29
|
-
return useObservableSubscription(useAsObservable(observable, pipe(distinctUntilChanged(), switchMap(observable => merge(defer(() => of(getValue(initialValue))), observable)))));
|
|
26
|
+
return useSyncExternalStore(subscribe, getSnapshot);
|
|
30
27
|
}
|
|
31
28
|
export function useMemoObservable(observableOrFactory, deps, initialValue) {
|
|
32
29
|
return useObservable(useMemo(() => getValue(observableOrFactory), deps), initialValue);
|
|
@@ -1,34 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
|
-
import { useAsObservable } from './useAsObservable';
|
|
4
|
-
import { distinctUntilChanged, switchMap } from 'rxjs/operators';
|
|
5
3
|
import { useSyncExternalStore } from 'use-sync-external-store/shim';
|
|
6
4
|
function getValue(value) {
|
|
7
5
|
return typeof value === 'function' ? value() : value;
|
|
8
6
|
}
|
|
9
|
-
function
|
|
10
|
-
var
|
|
11
|
-
var currentValue;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
7
|
+
export function useObservable(observable, initialValue) {
|
|
8
|
+
var _a = useMemo(function () {
|
|
9
|
+
var currentValue = getValue(initialValue);
|
|
10
|
+
var subject = new Subject();
|
|
11
|
+
var subscription = observable.subscribe(function (value) {
|
|
12
|
+
currentValue = value;
|
|
13
|
+
subject.next(value);
|
|
14
|
+
});
|
|
15
|
+
return [
|
|
16
|
+
function () { return currentValue; },
|
|
17
|
+
function (callback) {
|
|
18
|
+
var subjectSub = subject.subscribe(function (value) { return callback(value); });
|
|
20
19
|
return function () {
|
|
21
20
|
subscription.unsubscribe();
|
|
21
|
+
subjectSub.unsubscribe();
|
|
22
22
|
};
|
|
23
23
|
},
|
|
24
|
-
|
|
25
|
-
}, [observable]);
|
|
26
|
-
return useSyncExternalStore(
|
|
27
|
-
}
|
|
28
|
-
export function useObservable(observable, initialValue) {
|
|
29
|
-
return useObservableSubscription(useAsObservable(observable, pipe(distinctUntilChanged(), switchMap(function (observable) {
|
|
30
|
-
return merge(defer(function () { return of(getValue(initialValue)); }), observable);
|
|
31
|
-
}))));
|
|
24
|
+
];
|
|
25
|
+
}, [observable]), getSnapshot = _a[0], subscribe = _a[1];
|
|
26
|
+
return useSyncExternalStore(subscribe, getSnapshot);
|
|
32
27
|
}
|
|
33
28
|
export function useMemoObservable(observableOrFactory, deps, initialValue) {
|
|
34
29
|
return useObservable(useMemo(function () { return getValue(observableOrFactory); }, deps), initialValue);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-rx",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"description": "React + RxJS = <3",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"types": "dist/cjs/index.d.ts",
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"author": "Bjørge Næss <bjoerge@gmail.com>",
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"observable-callback": "^1.0.1"
|
|
25
|
+
"observable-callback": "^1.0.1",
|
|
26
|
+
"use-sync-external-store": "^1.2.0"
|
|
26
27
|
},
|
|
27
28
|
"peerDependencies": {
|
|
28
29
|
"react": "^16.8 || ^17 || ^18",
|
|
@@ -49,7 +50,6 @@
|
|
|
49
50
|
"react": "^17.0.1",
|
|
50
51
|
"react-dom": "^17.0.1",
|
|
51
52
|
"react-test-renderer": "^17.0.1",
|
|
52
|
-
"use-sync-external-store": "^1.2.0",
|
|
53
53
|
"rimraf": "^3.0.2",
|
|
54
54
|
"rxjs": "^6.5.5",
|
|
55
55
|
"ts-jest": "^26.5.2",
|
package/src/useObservable.ts
CHANGED
|
@@ -1,51 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {DependencyList, useMemo} from 'react'
|
|
3
|
-
import {useAsObservable} from './useAsObservable'
|
|
4
|
-
import {distinctUntilChanged, switchMap} from 'rxjs/operators'
|
|
1
|
+
import {Observable, Subject, Subscription} from 'rxjs'
|
|
2
|
+
import {DependencyList, useMemo, useRef} from 'react'
|
|
5
3
|
import {useSyncExternalStore} from 'use-sync-external-store/shim'
|
|
6
4
|
|
|
7
5
|
function getValue<T>(value: T): T extends () => infer U ? U : T {
|
|
8
6
|
return typeof value === 'function' ? value() : value
|
|
9
7
|
}
|
|
10
8
|
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
9
|
+
export function useObservable<T>(observable: Observable<T>): T | undefined
|
|
10
|
+
export function useObservable<T>(observable: Observable<T>, initialValue: T): T
|
|
11
|
+
export function useObservable<T>(observable: Observable<T>, initialValue: () => T): T
|
|
12
|
+
export function useObservable<T>(observable: Observable<T>, initialValue?: T | (() => T)) {
|
|
13
|
+
const [getSnapshot, subscribe] = useMemo(() => {
|
|
14
|
+
let currentValue = getValue(initialValue)
|
|
15
|
+
const subject = new Subject<T>()
|
|
16
|
+
const subscription = observable.subscribe(value => {
|
|
17
|
+
currentValue = value
|
|
18
|
+
subject.next(value)
|
|
19
|
+
})
|
|
20
|
+
return [
|
|
21
|
+
() => currentValue,
|
|
22
|
+
(callback: (value: T) => void) => {
|
|
23
|
+
const subjectSub = subject.subscribe(value => callback(value))
|
|
22
24
|
return () => {
|
|
23
25
|
subscription.unsubscribe()
|
|
26
|
+
subjectSub.unsubscribe()
|
|
24
27
|
}
|
|
25
28
|
},
|
|
26
|
-
|
|
29
|
+
]
|
|
27
30
|
}, [observable])
|
|
28
|
-
return useSyncExternalStore(
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function useObservable<T>(observable: Observable<T>): T | undefined
|
|
32
|
-
export function useObservable<T>(observable: Observable<T>, initialValue: T): T
|
|
33
|
-
export function useObservable<T>(observable: Observable<T>, initialValue: () => T): T
|
|
34
|
-
export function useObservable<T>(observable: Observable<T>, initialValue?: T | (() => T)) {
|
|
35
|
-
return useObservableSubscription(
|
|
36
|
-
useAsObservable(
|
|
37
|
-
observable,
|
|
38
|
-
pipe(
|
|
39
|
-
distinctUntilChanged(),
|
|
40
|
-
switchMap(observable =>
|
|
41
|
-
merge(
|
|
42
|
-
defer(() => of(getValue(initialValue))),
|
|
43
|
-
observable,
|
|
44
|
-
),
|
|
45
|
-
),
|
|
46
|
-
),
|
|
47
|
-
),
|
|
48
|
-
)
|
|
31
|
+
return useSyncExternalStore(subscribe, getSnapshot)
|
|
49
32
|
}
|
|
50
33
|
|
|
51
34
|
export function useMemoObservable<T>(
|