Skip to content

Commit 4691482

Browse files
authored
fix: pipeState also enhanced as a React element (#282)
1 parent e47d32f commit 4691482

File tree

4 files changed

+42
-10
lines changed

4 files changed

+42
-10
lines changed

package-lock.json

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"Victor Oliva (https://github.com/voliva)"
5151
],
5252
"dependencies": {
53-
"@rx-state/core": "0.1.0",
53+
"@rx-state/core": "0.1.1",
5454
"use-sync-external-store": "^1.0.0"
5555
},
5656
"devDependencies": {

packages/core/src/stateJsx.test.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,32 @@ describe("stateJsx", () => {
4444
expect(screen.queryByText("Waiting")).toBeNull()
4545
subscription.unsubscribe()
4646
})
47+
48+
it("enhances the result of a pipeState to be used as a JSX element", async () => {
49+
const subject = new Subject<string>()
50+
const state$ = state(subject)
51+
52+
const derivedState$ = state$.pipeState(map((v) => `derived ${v}`))
53+
const derivedTwiceState$ = derivedState$.pipeState(map((v) => `${v} again`))
54+
const subscription = derivedTwiceState$.subscribe()
55+
56+
render(
57+
<Suspense fallback="Waiting">
58+
{derivedState$}, {derivedTwiceState$}
59+
</Suspense>,
60+
)
61+
62+
expect(screen.queryByText("Waiting")).not.toBeNull()
63+
64+
await act(() => {
65+
subject.next("Result")
66+
return Promise.resolve()
67+
})
68+
69+
expect(
70+
screen.queryByText("derived Result, derived Result again"),
71+
).not.toBeNull()
72+
expect(screen.queryByText("Waiting")).toBeNull()
73+
subscription.unsubscribe()
74+
})
4775
})

packages/core/src/stateJsx.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,9 @@ function enhanceState<T>(state$: StateObservable<T>) {
2323
createElement(() => useStateObservable(state$) as any, {}),
2424
)
2525

26-
return Object.assign(state$, cache.get(state$)!)
26+
const originalPipeState = state$.pipeState.bind(state$)
27+
return Object.assign(state$, cache.get(state$)!, {
28+
pipeState: (...operators: any[]) =>
29+
enhanceState((originalPipeState as any)(...operators)),
30+
})
2731
}

0 commit comments

Comments
 (0)