@colisweb/rescript-toolkit 5.9.13 → 5.10.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@colisweb/rescript-toolkit",
3
- "version": "5.9.13",
3
+ "version": "5.10.0",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "clean": "rescript clean",
@@ -166,7 +166,8 @@ type state<'data, 'error> =
166
166
  let increment = (num: int): int => num !== maxInt ? num + 1 : minInt
167
167
  )
168
168
 
169
- let useManualRequest = (
169
+ // TODO: do real cancelation
170
+ let useCancelableRequest = (
170
171
  type argument response error,
171
172
  config: module(Config with
172
173
  type argument = argument
@@ -205,6 +206,32 @@ let useManualRequest = (
205
206
  (state, trigger, cancel)
206
207
  }
207
208
 
209
+ let useManualRequest = (
210
+ type argument response error,
211
+ config: module(Config with
212
+ type argument = argument
213
+ and type response = response
214
+ and type error = error
215
+ ),
216
+ ) => {
217
+ let module(Config) = config
218
+
219
+ let (state, set) = React.useState(() => NotAsked)
220
+ let isMounted = ReactUse.useMountedState(.)
221
+
222
+ let trigger = argument => {
223
+ set(_ => Loading)
224
+
225
+ fetchAPI(module(Config), argument)->Promise.tap(res => {
226
+ if isMounted() {
227
+ set(_ => Done(res))
228
+ }
229
+ })
230
+ }
231
+
232
+ (state, trigger)
233
+ }
234
+
208
235
  external exnToError: Js.Exn.t => error<'a> = "%identity"
209
236
 
210
237
  let decodeResponseError = (responseError, decoder) => {