Skip to content

Commit 09ef513

Browse files
committed
Update Wonka to v6
1 parent 414ec76 commit 09ef513

File tree

4 files changed

+36
-8
lines changed

4 files changed

+36
-8
lines changed

bsconfig.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@mobily/stacks",
3-
"version": "1.5.0",
3+
"version": "2.2.2",
44
"namespace": false,
55
"bsc-flags": ["-bs-super-errors", "-bs-no-version-header"],
66
"reason": {
@@ -32,8 +32,7 @@
3232
],
3333
"bs-dependencies": [
3434
"@rescript/react",
35-
"rescript-react-native",
36-
"wonka"
35+
"rescript-react-native"
3736
],
3837
"ppx-flags": []
3938
}

src/Stacks_hooks.res

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@ let useWindowDimensions = () => {
1111
React.useEffect0(() => {
1212
let subscription = {
1313
open Wonka
14-
dimensionsSource
14+
makeDimensionsSource()
1515
|> debounce((. _) => Platform.os == Platform.web ? 60 : 0)
16-
|> onPush((. layout: Dimensions.handler) => setDimensions(_ => layout.window))
17-
|> publish
16+
|> subscribe((. layout: Dimensions.handler) => setDimensions(_ => layout.window))
1817
}
1918

2019
Some(subscription.unsubscribe)

src/Stacks_utils.res

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,20 @@ let splitEvery = (xs, size) => {
7777
}
7878
}
7979

80+
let memo = fn => {
81+
let lastResult = ref(None)
82+
83+
() => {
84+
switch lastResult.contents {
85+
| Some(result) => result
86+
| None =>
87+
let result = fn()
88+
lastResult := Some(result)
89+
result
90+
}
91+
}
92+
}
93+
8094
let intersperse = (xs, delimiter) =>
8195
Belt.Array.reduceWithIndexU(xs, [], (. acc, value, index) => {
8296
switch index {
@@ -86,7 +100,7 @@ let intersperse = (xs, delimiter) =>
86100
acc
87101
})
88102

89-
let dimensionsSource = {
103+
let makeDimensionsSource = memo(() => {
90104
open Wonka
91105

92106
let source = make((. observer) => {
@@ -95,7 +109,7 @@ let dimensionsSource = {
95109
})
96110

97111
share(source)
98-
}
112+
})
99113

100114
let resolveCurrentBreakpoint = (~currentWidth: float, ~breakpoints: breakpoints) => {
101115
let defaultBreakpoint = Belt.Array.getUnsafe(defaultBreakpoints, 0)

src/Wonka.res

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
type signalT<'a>
2+
type sinkT<'a> = (. signalT<'a>) => unit
3+
type sourceT<'a> = sinkT<'a> => unit
4+
type observerT<'a> = {
5+
next: 'a => unit,
6+
complete: unit => unit,
7+
}
8+
type teardownT = (. unit) => unit
9+
type operatorT<'a, 'b> = sourceT<'a> => sourceT<'b>
10+
type subscriptionT = {unsubscribe: unit => unit}
11+
type subscribeConsumerT<'a> = sourceT<'a> => subscriptionT
12+
13+
@module("wonka") external make: ((. observerT<'a>) => teardownT) => sourceT<'a> = "make"
14+
@module("wonka") external share: sourceT<'a> => sourceT<'a> = "share"
15+
@module("wonka") external debounce: ((. 'a) => int) => operatorT<'a, 'a> = "debounce"
16+
@module("wonka") external subscribe: ((. 'a) => unit) => subscribeConsumerT<'a> = "subscribe"

0 commit comments

Comments
 (0)