react-rx 2.0.1 → 2.0.2

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.
@@ -1,37 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useMemoObservable = exports.useObservable = void 0;
4
- var rxjs_1 = require("rxjs");
5
4
  var react_1 = require("react");
6
- var useAsObservable_1 = require("./useAsObservable");
7
- var operators_1 = require("rxjs/operators");
8
5
  var shim_1 = require("use-sync-external-store/shim");
9
6
  function getValue(value) {
10
7
  return typeof value === 'function' ? value() : value;
11
8
  }
12
- function useObservableSubscription(observable) {
13
- var store = (0, react_1.useMemo)(function () {
14
- var currentValue;
15
- return {
16
- // Note: this works because the given observable always emits a value synchronously by concat-ing the given initialValue
17
- getCurrentValue: function () { return currentValue; },
18
- subscribe: function (callback) {
9
+ function useObservable(observable, initialValue) {
10
+ var _a = (0, react_1.useMemo)(function () {
11
+ var currentValue = getValue(initialValue);
12
+ return [
13
+ function () { return currentValue; },
14
+ function (callback) {
19
15
  var subscription = observable.subscribe(function (value) {
20
16
  currentValue = value;
21
17
  callback(value);
22
18
  });
23
- return function () {
24
- subscription.unsubscribe();
25
- };
19
+ return function () { return subscription.unsubscribe(); };
26
20
  },
27
- };
28
- }, [observable]);
29
- return (0, shim_1.useSyncExternalStore)(store.subscribe, store.getCurrentValue);
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
- }))));
21
+ ];
22
+ }, [observable]), getSnapshot = _a[0], subscribe = _a[1];
23
+ return (0, shim_1.useSyncExternalStore)(subscribe, getSnapshot);
35
24
  }
36
25
  exports.useObservable = useObservable;
37
26
  function useMemoObservable(observableOrFactory, deps, initialValue) {
@@ -1,32 +1,23 @@
1
- import { defer, merge, of, pipe } from 'rxjs';
2
1
  import { useMemo } from 'react';
3
- import { useAsObservable } from './useAsObservable';
4
- import { distinctUntilChanged, switchMap } from 'rxjs/operators';
5
2
  import { useSyncExternalStore } from 'use-sync-external-store/shim';
6
3
  function getValue(value) {
7
4
  return typeof value === 'function' ? value() : value;
8
5
  }
9
- function useObservableSubscription(observable) {
10
- const store = useMemo(() => {
11
- let currentValue;
12
- return {
13
- // Note: this works because the given observable always emits a value synchronously by concat-ing the given initialValue
14
- getCurrentValue: () => currentValue,
15
- subscribe: (callback) => {
6
+ export function useObservable(observable, initialValue) {
7
+ const [getSnapshot, subscribe] = useMemo(() => {
8
+ let currentValue = getValue(initialValue);
9
+ return [
10
+ () => currentValue,
11
+ (callback) => {
16
12
  const subscription = observable.subscribe(value => {
17
13
  currentValue = value;
18
14
  callback(value);
19
15
  });
20
- return () => {
21
- subscription.unsubscribe();
22
- };
16
+ return () => subscription.unsubscribe();
23
17
  },
24
- };
18
+ ];
25
19
  }, [observable]);
26
- return useSyncExternalStore(store.subscribe, store.getCurrentValue);
27
- }
28
- export function useObservable(observable, initialValue) {
29
- return useObservableSubscription(useAsObservable(observable, pipe(distinctUntilChanged(), switchMap(observable => merge(defer(() => of(getValue(initialValue))), observable)))));
20
+ return useSyncExternalStore(subscribe, getSnapshot);
30
21
  }
31
22
  export function useMemoObservable(observableOrFactory, deps, initialValue) {
32
23
  return useObservable(useMemo(() => getValue(observableOrFactory), deps), initialValue);
@@ -1,34 +1,23 @@
1
- import { defer, merge, of, pipe } from 'rxjs';
2
1
  import { useMemo } from 'react';
3
- import { useAsObservable } from './useAsObservable';
4
- import { distinctUntilChanged, switchMap } from 'rxjs/operators';
5
2
  import { useSyncExternalStore } from 'use-sync-external-store/shim';
6
3
  function getValue(value) {
7
4
  return typeof value === 'function' ? value() : value;
8
5
  }
9
- function useObservableSubscription(observable) {
10
- var store = useMemo(function () {
11
- var currentValue;
12
- return {
13
- // Note: this works because the given observable always emits a value synchronously by concat-ing the given initialValue
14
- getCurrentValue: function () { return currentValue; },
15
- subscribe: function (callback) {
6
+ export function useObservable(observable, initialValue) {
7
+ var _a = useMemo(function () {
8
+ var currentValue = getValue(initialValue);
9
+ return [
10
+ function () { return currentValue; },
11
+ function (callback) {
16
12
  var subscription = observable.subscribe(function (value) {
17
13
  currentValue = value;
18
14
  callback(value);
19
15
  });
20
- return function () {
21
- subscription.unsubscribe();
22
- };
16
+ return function () { return subscription.unsubscribe(); };
23
17
  },
24
- };
25
- }, [observable]);
26
- return useSyncExternalStore(store.subscribe, store.getCurrentValue);
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
- }))));
18
+ ];
19
+ }, [observable]), getSnapshot = _a[0], subscribe = _a[1];
20
+ return useSyncExternalStore(subscribe, getSnapshot);
32
21
  }
33
22
  export function useMemoObservable(observableOrFactory, deps, initialValue) {
34
23
  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.1",
3
+ "version": "2.0.2",
4
4
  "description": "React + RxJS = <3",
5
5
  "main": "dist/cjs/index.js",
6
6
  "types": "dist/cjs/index.d.ts",
@@ -1,51 +1,29 @@
1
- import {defer, merge, Observable, of, pipe} from 'rxjs'
1
+ import {Observable} from 'rxjs'
2
2
  import {DependencyList, 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
 
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 useObservableSubscription<T>(observable: Observable<T>): T {
12
- const store = useMemo(() => {
13
- let currentValue: T
14
- return {
15
- // Note: this works because the given observable always emits a value synchronously by concat-ing the given initialValue
16
- getCurrentValue: () => currentValue,
17
- subscribe: (callback: (value: T) => void) => {
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
+ return [
16
+ () => currentValue,
17
+ (callback: (value: T) => void) => {
18
18
  const subscription = observable.subscribe(value => {
19
19
  currentValue = value
20
20
  callback(value)
21
21
  })
22
- return () => {
23
- subscription.unsubscribe()
24
- }
22
+ return () => subscription.unsubscribe()
25
23
  },
26
- }
24
+ ]
27
25
  }, [observable])
28
- return useSyncExternalStore(store.subscribe, store.getCurrentValue)
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
- )
26
+ return useSyncExternalStore(subscribe, getSnapshot)
49
27
  }
50
28
 
51
29
  export function useMemoObservable<T>(