Skip to content

Commit e1442a5

Browse files
author
Duke
committed
feat: renamed usePushObservable to useControllableObservable, added ControllableObservable type
1 parent 2845131 commit e1442a5

File tree

4 files changed

+21
-12
lines changed

4 files changed

+21
-12
lines changed

src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -821,7 +821,7 @@ export function createFamily<K, P>(
821821
return fn as Family<K, P>
822822
}
823823

824-
export { createOperator, operators, pipe, type Subscribable, observables } from './rx'
824+
export { createOperator, operators, pipe, type Subscribable, type ControllableObservable, observables } from './rx'
825825

826826
export type PushObservableExecutor<Value> = Executor<PushObservable<Value>>
827827

src/react/index.tsx

+6-4
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import {
77
type Executor,
88
type Scope,
99
type Subscribable,
10+
type ControllableObservable,
1011
observables,
11-
type OperatorLike,
1212
pipe,
1313
} from "../";
1414

@@ -199,10 +199,12 @@ const NOT_EMITTED = {
199199
/**
200200
* @param pobservable - The push observable executor to use.
201201
* @returns A tuple containing the emission and a subscriber for the push observable.
202+
* - left is the emission of the observable.
203+
* - right is the controller (or subscriber)
202204
*/
203-
export function usePushObservable<P>(
204-
pobservable: PushObservableExecutor<P>,
205-
): [Emission<P> & Result<P>, Subscriber<P>] {
205+
export function useControllableObservable<P, V>(
206+
pobservable: Executor<ControllableObservable<P, V>>,
207+
): [Emission<P> & Result<P>, V] {
206208
const [observable, subscriber] = useResolve(pobservable);
207209

208210
return [useObservableValue(observable), subscriber];

src/rx.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,14 @@ export type Subscriber<T> = {
6969
complete: () => void
7070
}
7171

72+
/** Utility type to force tuple Subscriber and controller */
73+
export type ControllableObservable<T, V> = [Subscribable<T>, V]
74+
7275
/**
7376
* Represents a push-based observable with a subscriber.
7477
* @template T The type of the value emitted by the observable.
7578
*/
76-
export type PushObservable<T> = [Subscribable<T>, Subscriber<T>];
79+
export type PushObservable<T> = ControllableObservable<T, Subscriber<T>>
7780

7881
type SubjectInit<T> = {
7982
kind: 'init'

tests/react/index.test.tsx

+10-6
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
import {
1111
ScopeProvider,
1212
useObservable,
13-
usePushObservable,
13+
useControllableObservable,
1414
useResolve,
1515
} from "../../src/react";
1616
import type { PropsWithChildren } from "react";
@@ -60,7 +60,8 @@ describe("test observable", () => {
6060
test("manual observable should just work", async () => {
6161
const { result } = renderHook(
6262
() => {
63-
const [counter, setCounter] = usePushObservable(observableCount);
63+
const [counter, setCounter] =
64+
useControllableObservable(observableCount);
6465

6566
return { counter, setCounter };
6667
},
@@ -89,8 +90,9 @@ describe("test observable", () => {
8990
test("useObservable with a little bit more complicated usecase", async () => {
9091
const { result } = renderHook(
9192
() => {
92-
const [selectedId, setSelectedId] = usePushObservable(selectedIdStream);
93-
const [list, setList] = usePushObservable(listStream);
93+
const [selectedId, setSelectedId] =
94+
useControllableObservable(selectedIdStream);
95+
const [list, setList] = useControllableObservable(listStream);
9496
const selected = useObservable(selectedItem);
9597

9698
return {
@@ -173,7 +175,8 @@ describe("test useOperator with useObservable and useObservableValue", () => {
173175
const { result } = renderHook(
174176
() => {
175177
const [factor, setFactor] = useState(1);
176-
const [counter, setCounter] = usePushObservable(observableCount);
178+
const [counter, setCounter] =
179+
useControllableObservable(observableCount);
177180
const doubledCounter = useObservable(observableCount, operator);
178181

179182
return { counter, setCounter, doubledCounter, factor, setFactor };
@@ -217,7 +220,8 @@ describe("test useOperator with useObservable and useObservableValue", () => {
217220
[],
218221
);
219222

220-
const [counter, setCounter] = usePushObservable(observableCount);
223+
const [counter, setCounter] =
224+
useControllableObservable(observableCount);
221225
const doubledCounter = useObservable(
222226
observableCount,
223227
operator,

0 commit comments

Comments
 (0)