@effect-rx/rx-react 0.1.3 → 0.1.5

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/index.d.ts CHANGED
@@ -21,20 +21,15 @@ export declare const useRxValue: <A>(rx: Rx.Rx<A>) => A;
21
21
  * @since 1.0.0
22
22
  * @category hooks
23
23
  */
24
- export declare const useSetRx: <R, W>(rx: Rx.Writeable<R, W>) => (_: W) => void;
24
+ export declare const useSetRx: <R, W>(rx: Rx.Writeable<R, W>) => (_: W | ((_: R) => W)) => void;
25
25
  /**
26
26
  * @since 1.0.0
27
27
  * @category hooks
28
28
  */
29
- export declare const useUpdateRx: <R, W>(rx: Rx.Writeable<R, W>) => (f: (_: R) => W) => void;
29
+ export declare const useRefreshRx: <A>(rx: Rx.Rx<A> & Rx.Refreshable) => () => void;
30
30
  /**
31
31
  * @since 1.0.0
32
32
  * @category hooks
33
33
  */
34
- export declare const useRx: <R, W>(rx: Rx.Writeable<R, W>) => readonly [R, (_: W) => void];
35
- /**
36
- * @since 1.0.0
37
- * @category hooks
38
- */
39
- export declare const useRxUpdate: <R, W>(rx: Rx.Writeable<R, W>) => readonly [R, (f: (_: R) => W) => void];
34
+ export declare const useRx: <R, W>(rx: Rx.Writeable<R, W>) => readonly [value: R, setOrUpdate: (_: W | ((_: R) => W)) => void];
40
35
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["./src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAEtC;;;GAGG;AACH,eAAO,MAAM,eAAe,kCAA0D,CAAA;AAuBtF;;;GAGG;AACH,eAAO,MAAM,UAAU,wBAOtB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,8CAA6C,IAGjE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,wDAAuD,IAG9E,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,2DAA0D,IAAI,CAIpE,CAAA;AAEZ;;;GAGG;AACH,eAAO,MAAM,WAAW,qEAAoE,IAAI,CAIpF,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["./src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAEtC;;;GAGG;AACH,eAAO,MAAM,eAAe,kCAA0D,CAAA;AAwBtF;;;GAGG;AACH,eAAO,MAAM,UAAU,wBAOtB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,8DAA6D,IAUjF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,wCAAuC,MAAM,IAKrE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,+FAA8F,IAAI,CAIxG,CAAA"}
package/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useUpdateRx = exports.useSetRx = exports.useRxValue = exports.useRxUpdate = exports.useRx = exports.Rx = exports.Result = exports.RegistryContext = exports.Registry = void 0;
6
+ exports.useSetRx = exports.useRxValue = exports.useRx = exports.useRefreshRx = exports.Rx = exports.Result = exports.RegistryContext = exports.Registry = void 0;
7
7
  var Registry = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect-rx/rx/Registry"));
8
8
  var Registry_1 = Registry;
9
9
  exports.Registry = Registry;
@@ -24,25 +24,24 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
24
24
  */
25
25
  const RegistryContext = /*#__PURE__*/React.createContext( /*#__PURE__*/Registry.make());
26
26
  exports.RegistryContext = RegistryContext;
27
- class RxStore {
28
- constructor(registry, rx) {
29
- this.registry = registry;
30
- this.rx = rx;
31
- this.value = this.registry.get(this.rx);
32
- this.init = false;
33
- this.subscribe = f => {
34
- if (this.init === true) {
35
- this.value = this.registry.get(this.rx);
36
- } else {
37
- this.init = true;
38
- }
39
- return this.registry.subscribe(this.rx, a => {
40
- this.value = a;
41
- f();
42
- });
43
- };
44
- this.snapshot = () => this.value;
27
+ function makeStore(registry, rx) {
28
+ let getter = function () {
29
+ return registry.get(rx);
30
+ };
31
+ function subscribe(f) {
32
+ const [get, unmount] = registry.subscribeGetter(rx, f);
33
+ getter = get;
34
+ return unmount;
45
35
  }
36
+ function snapshot() {
37
+ return getter();
38
+ }
39
+ return {
40
+ rx,
41
+ registry,
42
+ subscribe,
43
+ snapshot
44
+ };
46
45
  }
47
46
  /**
48
47
  * @since 1.0.0
@@ -52,7 +51,7 @@ const useRxValue = rx => {
52
51
  const registry = React.useContext(RegistryContext);
53
52
  const store = React.useRef(undefined);
54
53
  if (store.current?.rx !== rx || store.current?.registry !== registry) {
55
- store.current = new RxStore(registry, rx);
54
+ store.current = makeStore(registry, rx);
56
55
  }
57
56
  return React.useSyncExternalStore(store.current.subscribe, store.current.snapshot);
58
57
  };
@@ -63,28 +62,31 @@ const useRxValue = rx => {
63
62
  exports.useRxValue = useRxValue;
64
63
  const useSetRx = rx => {
65
64
  const registry = React.useContext(RegistryContext);
66
- return React.useCallback(value => registry.set(rx, value), [registry, rx]);
65
+ return React.useCallback(value => {
66
+ if (typeof value === "function") {
67
+ registry.set(rx, value(registry.get(rx)));
68
+ return;
69
+ } else {
70
+ registry.set(rx, value);
71
+ }
72
+ }, [registry, rx]);
67
73
  };
68
74
  /**
69
75
  * @since 1.0.0
70
76
  * @category hooks
71
77
  */
72
78
  exports.useSetRx = useSetRx;
73
- const useUpdateRx = rx => {
79
+ const useRefreshRx = rx => {
74
80
  const registry = React.useContext(RegistryContext);
75
- return React.useCallback(f => registry.set(rx, f(registry.get(rx))), [registry, rx]);
81
+ return React.useCallback(() => {
82
+ registry.refresh(rx);
83
+ }, [registry, rx]);
76
84
  };
77
85
  /**
78
86
  * @since 1.0.0
79
87
  * @category hooks
80
88
  */
81
- exports.useUpdateRx = useUpdateRx;
89
+ exports.useRefreshRx = useRefreshRx;
82
90
  const useRx = rx => [useRxValue(rx), useSetRx(rx)];
83
- /**
84
- * @since 1.0.0
85
- * @category hooks
86
- */
87
91
  exports.useRx = useRx;
88
- const useRxUpdate = rx => [useRxValue(rx), useUpdateRx(rx)];
89
- exports.useRxUpdate = useRxUpdate;
90
92
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Registry","_interopRequireWildcard","require","Registry_1","exports","React","Result","Result_1","Rx","Rx_1","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","RegistryContext","createContext","make","RxStore","constructor","registry","rx","value","init","subscribe","f","a","snapshot","useRxValue","useContext","store","useRef","undefined","current","useSyncExternalStore","useSetRx","useCallback","useUpdateRx","useRx","useRxUpdate"],"sources":["./src/index.ts"],"sourcesContent":[null],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["Registry","_interopRequireWildcard","require","Registry_1","exports","React","Result","Result_1","Rx","Rx_1","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","RegistryContext","createContext","make","makeStore","registry","rx","getter","subscribe","f","unmount","subscribeGetter","snapshot","useRxValue","useContext","store","useRef","undefined","current","useSyncExternalStore","useSetRx","useCallback","value","useRefreshRx","refresh","useRx"],"sources":["./src/index.ts"],"sourcesContent":[null],"mappings":"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"}
package/mjs/index.mjs CHANGED
@@ -14,25 +14,24 @@ export { Rx_1 as Rx };
14
14
  * @category context
15
15
  */
16
16
  export const RegistryContext = /*#__PURE__*/React.createContext( /*#__PURE__*/Registry.make());
17
- class RxStore {
18
- constructor(registry, rx) {
19
- this.registry = registry;
20
- this.rx = rx;
21
- this.value = this.registry.get(this.rx);
22
- this.init = false;
23
- this.subscribe = f => {
24
- if (this.init === true) {
25
- this.value = this.registry.get(this.rx);
26
- } else {
27
- this.init = true;
28
- }
29
- return this.registry.subscribe(this.rx, a => {
30
- this.value = a;
31
- f();
32
- });
33
- };
34
- this.snapshot = () => this.value;
17
+ function makeStore(registry, rx) {
18
+ let getter = function () {
19
+ return registry.get(rx);
20
+ };
21
+ function subscribe(f) {
22
+ const [get, unmount] = registry.subscribeGetter(rx, f);
23
+ getter = get;
24
+ return unmount;
35
25
  }
26
+ function snapshot() {
27
+ return getter();
28
+ }
29
+ return {
30
+ rx,
31
+ registry,
32
+ subscribe,
33
+ snapshot
34
+ };
36
35
  }
37
36
  /**
38
37
  * @since 1.0.0
@@ -42,7 +41,7 @@ export const useRxValue = rx => {
42
41
  const registry = React.useContext(RegistryContext);
43
42
  const store = React.useRef(undefined);
44
43
  if (store.current?.rx !== rx || store.current?.registry !== registry) {
45
- store.current = new RxStore(registry, rx);
44
+ store.current = makeStore(registry, rx);
46
45
  }
47
46
  return React.useSyncExternalStore(store.current.subscribe, store.current.snapshot);
48
47
  };
@@ -52,24 +51,28 @@ export const useRxValue = rx => {
52
51
  */
53
52
  export const useSetRx = rx => {
54
53
  const registry = React.useContext(RegistryContext);
55
- return React.useCallback(value => registry.set(rx, value), [registry, rx]);
54
+ return React.useCallback(value => {
55
+ if (typeof value === "function") {
56
+ registry.set(rx, value(registry.get(rx)));
57
+ return;
58
+ } else {
59
+ registry.set(rx, value);
60
+ }
61
+ }, [registry, rx]);
56
62
  };
57
63
  /**
58
64
  * @since 1.0.0
59
65
  * @category hooks
60
66
  */
61
- export const useUpdateRx = rx => {
67
+ export const useRefreshRx = rx => {
62
68
  const registry = React.useContext(RegistryContext);
63
- return React.useCallback(f => registry.set(rx, f(registry.get(rx))), [registry, rx]);
69
+ return React.useCallback(() => {
70
+ registry.refresh(rx);
71
+ }, [registry, rx]);
64
72
  };
65
73
  /**
66
74
  * @since 1.0.0
67
75
  * @category hooks
68
76
  */
69
77
  export const useRx = rx => [useRxValue(rx), useSetRx(rx)];
70
- /**
71
- * @since 1.0.0
72
- * @category hooks
73
- */
74
- export const useRxUpdate = rx => [useRxValue(rx), useUpdateRx(rx)];
75
78
  //# sourceMappingURL=index.mjs.map
package/mjs/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["Registry","React","Result","Rx","RegistryContext","createContext","make","RxStore","constructor","registry","rx","value","get","init","subscribe","f","a","snapshot","useRxValue","useContext","store","useRef","undefined","current","useSyncExternalStore","useSetRx","useCallback","set","useUpdateRx","useRx","useRxUpdate"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["Registry","React","Result","Rx","RegistryContext","createContext","make","makeStore","registry","rx","getter","get","subscribe","f","unmount","subscribeGetter","snapshot","useRxValue","useContext","store","useRef","undefined","current","useSyncExternalStore","useSetRx","useCallback","value","set","useRefreshRx","refresh","useRx"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,QAAQ,MAAM,wBAAwB;AAElD,OAAO,KAAKC,KAAK,MAAM,OAAO;4BAEJ,wBAAwB;uBAAtCD,QAAQ;0BACI,sBAAsB;qBAAlCE,MAAM;sBACE,kBAAkB;iBAA1BC,EAAE;AAEd;;;;AAIA,OAAO,MAAMC,eAAe,gBAAGH,KAAK,CAACI,aAAa,eAAoBL,QAAQ,CAACM,IAAI,EAAE,CAAC;AAStF,SAASC,SAASA,CAAIC,QAA2B,EAAEC,EAAY;EAC7D,IAAIC,MAAM,GAAG,SAAAA,CAAA;IACX,OAAOF,QAAQ,CAACG,GAAG,CAACF,EAAE,CAAC;EACzB,CAAC;EACD,SAASG,SAASA,CAACC,CAAa;IAC9B,MAAM,CAACF,GAAG,EAAEG,OAAO,CAAC,GAAGN,QAAQ,CAACO,eAAe,CAACN,EAAE,EAAEI,CAAC,CAAC;IACtDH,MAAM,GAAGC,GAAG;IACZ,OAAOG,OAAO;EAChB;EACA,SAASE,QAAQA,CAAA;IACf,OAAON,MAAM,EAAE;EACjB;EACA,OAAO;IAAED,EAAE;IAAED,QAAQ;IAAEI,SAAS;IAAEI;EAAQ,CAAE;AAC9C;AAEA;;;;AAIA,OAAO,MAAMC,UAAU,GAAOR,EAAY,IAAO;EAC/C,MAAMD,QAAQ,GAAGP,KAAK,CAACiB,UAAU,CAACd,eAAe,CAAC;EAClD,MAAMe,KAAK,GAAGlB,KAAK,CAACmB,MAAM,CAAaC,SAAgB,CAAC;EACxD,IAAIF,KAAK,CAACG,OAAO,EAAEb,EAAE,KAAKA,EAAE,IAAIU,KAAK,CAACG,OAAO,EAAEd,QAAQ,KAAKA,QAAQ,EAAE;IACpEW,KAAK,CAACG,OAAO,GAAGf,SAAS,CAACC,QAAQ,EAAEC,EAAE,CAAC;;EAEzC,OAAOR,KAAK,CAACsB,oBAAoB,CAACJ,KAAK,CAACG,OAAO,CAACV,SAAS,EAAEO,KAAK,CAACG,OAAO,CAACN,QAAQ,CAAC;AACpF,CAAC;AAED;;;;AAIA,OAAO,MAAMQ,QAAQ,GAAUf,EAAsB,IAAoC;EACvF,MAAMD,QAAQ,GAAGP,KAAK,CAACiB,UAAU,CAACd,eAAe,CAAC;EAClD,OAAOH,KAAK,CAACwB,WAAW,CAAEC,KAAK,IAAI;IACjC,IAAI,OAAOA,KAAK,KAAK,UAAU,EAAE;MAC/BlB,QAAQ,CAACmB,GAAG,CAAClB,EAAE,EAAGiB,KAAa,CAAClB,QAAQ,CAACG,GAAG,CAACF,EAAE,CAAC,CAAC,CAAC;MAClD;KACD,MAAM;MACLD,QAAQ,CAACmB,GAAG,CAAClB,EAAE,EAAEiB,KAAK,CAAC;;EAE3B,CAAC,EAAE,CAAClB,QAAQ,EAAEC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED;;;;AAIA,OAAO,MAAMmB,YAAY,GAAOnB,EAA6B,IAAgB;EAC3E,MAAMD,QAAQ,GAAGP,KAAK,CAACiB,UAAU,CAACd,eAAe,CAAC;EAClD,OAAOH,KAAK,CAACwB,WAAW,CAAC,MAAK;IAC5BjB,QAAQ,CAACqB,OAAO,CAACpB,EAAE,CAAC;EACtB,CAAC,EAAE,CAACD,QAAQ,EAAEC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED;;;;AAIA,OAAO,MAAMqB,KAAK,GAAUrB,EAAsB,IAChD,CACEQ,UAAU,CAACR,EAAE,CAAC,EACde,QAAQ,CAACf,EAAE,CAAC,CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-rx/rx-react",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Reactive toolkit for Effect",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -35,7 +35,7 @@
35
35
  "sideEffects": [],
36
36
  "author": "Effect contributors",
37
37
  "dependencies": {
38
- "@effect-rx/rx": "^0.1.3"
38
+ "@effect-rx/rx": "^0.1.5"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "@effect/data": "^0.18.5",
package/src/index.ts CHANGED
@@ -15,25 +15,26 @@ export * as Rx from "@effect-rx/rx/Rx"
15
15
  */
16
16
  export const RegistryContext = React.createContext<Registry.Registry>(Registry.make())
17
17
 
18
- class RxStore<A> {
19
- constructor(
20
- readonly registry: Registry.Registry,
21
- readonly rx: Rx.Rx<A>
22
- ) {}
23
- value = this.registry.get(this.rx)
24
- init = false
25
- subscribe = (f: () => void): () => void => {
26
- if (this.init === true) {
27
- this.value = this.registry.get(this.rx)
28
- } else {
29
- this.init = true
30
- }
31
- return this.registry.subscribe(this.rx, (a) => {
32
- this.value = a
33
- f()
34
- })
18
+ interface RxStore<A> {
19
+ readonly rx: Rx.Rx<A>
20
+ readonly registry: Registry.Registry
21
+ readonly subscribe: (f: () => void) => () => void
22
+ readonly snapshot: () => A
23
+ }
24
+
25
+ function makeStore<A>(registry: Registry.Registry, rx: Rx.Rx<A>): RxStore<A> {
26
+ let getter = function() {
27
+ return registry.get(rx)
35
28
  }
36
- snapshot = (): A => this.value
29
+ function subscribe(f: () => void): () => void {
30
+ const [get, unmount] = registry.subscribeGetter(rx, f)
31
+ getter = get
32
+ return unmount
33
+ }
34
+ function snapshot() {
35
+ return getter()
36
+ }
37
+ return { rx, registry, subscribe, snapshot }
37
38
  }
38
39
 
39
40
  /**
@@ -44,7 +45,7 @@ export const useRxValue = <A>(rx: Rx.Rx<A>): A => {
44
45
  const registry = React.useContext(RegistryContext)
45
46
  const store = React.useRef<RxStore<A>>(undefined as any)
46
47
  if (store.current?.rx !== rx || store.current?.registry !== registry) {
47
- store.current = new RxStore(registry, rx)
48
+ store.current = makeStore(registry, rx)
48
49
  }
49
50
  return React.useSyncExternalStore(store.current.subscribe, store.current.snapshot)
50
51
  }
@@ -53,36 +54,35 @@ export const useRxValue = <A>(rx: Rx.Rx<A>): A => {
53
54
  * @since 1.0.0
54
55
  * @category hooks
55
56
  */
56
- export const useSetRx = <R, W>(rx: Rx.Writeable<R, W>): (_: W) => void => {
57
+ export const useSetRx = <R, W>(rx: Rx.Writeable<R, W>): (_: W | ((_: R) => W)) => void => {
57
58
  const registry = React.useContext(RegistryContext)
58
- return React.useCallback((value) => registry.set(rx, value), [registry, rx])
59
+ return React.useCallback((value) => {
60
+ if (typeof value === "function") {
61
+ registry.set(rx, (value as any)(registry.get(rx)))
62
+ return
63
+ } else {
64
+ registry.set(rx, value)
65
+ }
66
+ }, [registry, rx])
59
67
  }
60
68
 
61
69
  /**
62
70
  * @since 1.0.0
63
71
  * @category hooks
64
72
  */
65
- export const useUpdateRx = <R, W>(rx: Rx.Writeable<R, W>): (f: (_: R) => W) => void => {
73
+ export const useRefreshRx = <A>(rx: Rx.Rx<A> & Rx.Refreshable): () => void => {
66
74
  const registry = React.useContext(RegistryContext)
67
- return React.useCallback((f) => registry.set(rx, f(registry.get(rx))), [registry, rx])
75
+ return React.useCallback(() => {
76
+ registry.refresh(rx)
77
+ }, [registry, rx])
68
78
  }
69
79
 
70
80
  /**
71
81
  * @since 1.0.0
72
82
  * @category hooks
73
83
  */
74
- export const useRx = <R, W>(rx: Rx.Writeable<R, W>): readonly [R, (_: W) => void] =>
84
+ export const useRx = <R, W>(rx: Rx.Writeable<R, W>): readonly [value: R, setOrUpdate: (_: W | ((_: R) => W)) => void] =>
75
85
  [
76
86
  useRxValue(rx),
77
87
  useSetRx(rx)
78
88
  ] as const
79
-
80
- /**
81
- * @since 1.0.0
82
- * @category hooks
83
- */
84
- export const useRxUpdate = <R, W>(rx: Rx.Writeable<R, W>): readonly [R, (f: (_: R) => W) => void] =>
85
- [
86
- useRxValue(rx),
87
- useUpdateRx(rx)
88
- ] as const