@colisweb/rescript-toolkit 4.29.3 → 5.0.1

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.
Files changed (49) hide show
  1. package/package.json +25 -23
  2. package/{bsconfig.json → rescript.json} +10 -5
  3. package/src/decoders/Decoders__UnitMeasure.res +251 -0
  4. package/src/decoders/Toolkit__Decoders.res +118 -412
  5. package/src/decoders/index.md +5 -5
  6. package/src/form/Reform.res +18 -18
  7. package/src/form/Toolkit__Form.res +53 -50
  8. package/src/hooks/Toolkit__Hooks.res +41 -60
  9. package/src/hooks/index.md +2 -2
  10. package/src/identifier/Toolkit__Identifier.res +27 -70
  11. package/src/identifier/index.md +3 -3
  12. package/src/intl/Toolkit__Intl.res +1 -1
  13. package/src/mock/MockOverlay.res +1 -1
  14. package/src/request/index.md +11 -11
  15. package/src/router/Toolkit__Router.res +11 -11
  16. package/src/ui/Toolkit__Ui_Autocomplete.res +2 -2
  17. package/src/ui/Toolkit__Ui_Button.res +1 -1
  18. package/src/ui/Toolkit__Ui_ButtonGroup2.res +1 -1
  19. package/src/ui/Toolkit__Ui_Checkbox.res +1 -1
  20. package/src/ui/Toolkit__Ui_Coordinates.res +4 -4
  21. package/src/ui/Toolkit__Ui_DatetimeInput.res +3 -4
  22. package/src/ui/Toolkit__Ui_Dropdown.res +1 -1
  23. package/src/ui/Toolkit__Ui_DropdownList.res +1 -1
  24. package/src/ui/Toolkit__Ui_IconButton.res +5 -5
  25. package/src/ui/Toolkit__Ui_Layout.res +6 -6
  26. package/src/ui/Toolkit__Ui_Listbox.res +17 -21
  27. package/src/ui/Toolkit__Ui_MultiSelect.res +1 -1
  28. package/src/ui/Toolkit__Ui_MultiSelectWithValidation.res +1 -1
  29. package/src/ui/Toolkit__Ui_Notice.res +37 -26
  30. package/src/ui/Toolkit__Ui_Portal.res +1 -1
  31. package/src/ui/Toolkit__Ui_PortalDropdown.res +8 -6
  32. package/src/ui/Toolkit__Ui_RadioGroup.res +1 -1
  33. package/src/ui/Toolkit__Ui_SearchListbox.res +4 -5
  34. package/src/ui/Toolkit__Ui_SelectWithValidation.res +1 -1
  35. package/src/ui/Toolkit__Ui_Snackbar.res +2 -2
  36. package/src/ui/Toolkit__Ui_Switch.res +1 -1
  37. package/src/ui/Toolkit__Ui_TextInput.res +3 -4
  38. package/src/ui/Toolkit__Ui_TextareaInput.res +2 -23
  39. package/src/ui/Toolkit__Ui_Tooltip.res +1 -1
  40. package/src/ui/Toolkit__Ui_WeekDateFilter.res +1 -1
  41. package/src/unleash/Toolkit__Unleash.res +6 -6
  42. package/src/unleash/index.md +1 -1
  43. package/src/utils/Toolkit__Utils.res +20 -0
  44. package/src/utils/Toolkit__Utils_UnitMeasure.res +72 -110
  45. package/src/vendors/Axios.res +2 -2
  46. package/src/vendors/DatadogRum.res +3 -3
  47. package/src/vendors/ReactDayPicker.res +4 -4
  48. package/src/vendors/ReactUse.res +1 -1
  49. package/src/vendors/Zendesk.res +1 -1
@@ -127,7 +127,7 @@ module Make = (Config: Config) => {
127
127
  let {handleChange, getFieldError, getFieldState, validateField, state} = useFormContext()
128
128
 
129
129
  {
130
- handleChange: handleChange(field),
130
+ handleChange: handleChange(field, ...),
131
131
  error: getFieldError(Field(field)),
132
132
  state: getFieldState(Field(field)),
133
133
  validate: () => validateField(Field(field)),
@@ -369,32 +369,32 @@ module Make = (Config: Config) => {
369
369
  },
370
370
  )
371
371
 
372
- let getFieldState = field =>
373
- state.fieldsState
374
- ->Belt.List.fromArray
375
- ->Belt.List.getBy(((nameField, _nameFieldState)) =>
376
- switch nameField == field {
377
- | true => true
378
- | _ => false
379
- }
380
- )
381
- |> (
382
- field =>
383
- switch field {
384
- | Some((_nameField, nameFieldState)) => nameFieldState
385
- | None => Pristine
386
- }
372
+ let getFieldState = field => {
373
+ let tmp =
374
+ state.fieldsState
375
+ ->Belt.List.fromArray
376
+ ->Belt.List.getBy(((nameField, _nameFieldState)) =>
377
+ switch nameField == field {
378
+ | true => true
379
+ | _ => false
380
+ }
387
381
  )
388
382
 
383
+ switch tmp {
384
+ | Some((_nameField, nameFieldState)) => nameFieldState
385
+ | None => Pristine
386
+ }
387
+ }
388
+
389
389
  let getFieldError = field =>
390
- getFieldState(field) |> (
390
+ (
391
391
  x =>
392
392
  switch x {
393
393
  | Error(error) => Some(error)
394
394
  | NestedErrors(_errors) => None
395
395
  | _ => None
396
396
  }
397
- )
397
+ )(getFieldState(field))
398
398
 
399
399
  let getNestedFieldError = (field, subfield, index) =>
400
400
  switch getFieldState(field) {
@@ -26,12 +26,13 @@ module Make = (StateLenses: Config) => {
26
26
  let make = (~field, ~elements, ~inline=?) =>
27
27
  <Field
28
28
  field
29
- render={({handleChange, error, value}) => <>
30
- <Toolkit__Ui_RadioGroup
31
- defaultValue=value onChange={v => handleChange(v)} elements ?inline
32
- />
33
- <ErrorMessage ?error />
34
- </>}
29
+ render={({handleChange, error, value}) =>
30
+ <React.Fragment>
31
+ <Toolkit__Ui_RadioGroup
32
+ defaultValue=value onChange={v => handleChange(v)} elements ?inline
33
+ />
34
+ <ErrorMessage ?error />
35
+ </React.Fragment>}
35
36
  />
36
37
  }
37
38
  module Input = {
@@ -75,7 +76,7 @@ module Make = (StateLenses: Config) => {
75
76
  | _ => validate()
76
77
  }
77
78
 
78
- <>
79
+ <React.Fragment>
79
80
  <div
80
81
  className={cx([
81
82
  "flex",
@@ -142,7 +143,7 @@ module Make = (StateLenses: Config) => {
142
143
  </div>
143
144
  </div>
144
145
  <ErrorMessage ?error className=?errorClassName />
145
- </>
146
+ </React.Fragment>
146
147
  }}
147
148
  />
148
149
  }
@@ -185,7 +186,7 @@ module Make = (StateLenses: Config) => {
185
186
  | _ => validate()
186
187
  }
187
188
 
188
- <>
189
+ <React.Fragment>
189
190
  {switch label {
190
191
  | None => React.null
191
192
  | Some(label) =>
@@ -214,7 +215,7 @@ module Make = (StateLenses: Config) => {
214
215
  onBlur
215
216
  />
216
217
  <ErrorMessage ?error />
217
- </>
218
+ </React.Fragment>
218
219
  }}
219
220
  />
220
221
  }
@@ -258,7 +259,7 @@ module Make = (StateLenses: Config) => {
258
259
  | _ => validate()
259
260
  }
260
261
 
261
- <>
262
+ <React.Fragment>
262
263
  {switch label {
263
264
  | None => React.null
264
265
  | Some(label) =>
@@ -295,7 +296,7 @@ module Make = (StateLenses: Config) => {
295
296
  isInvalid
296
297
  />
297
298
  <ErrorMessage ?error />
298
- </>
299
+ </React.Fragment>
299
300
  }}
300
301
  />
301
302
  }
@@ -327,7 +328,7 @@ module Make = (StateLenses: Config) => {
327
328
  | _ => validate()
328
329
  }
329
330
 
330
- <>
331
+ <React.Fragment>
331
332
  {switch label {
332
333
  | None => React.null
333
334
  | Some(label) =>
@@ -353,7 +354,7 @@ module Make = (StateLenses: Config) => {
353
354
  onBlur
354
355
  />
355
356
  <ErrorMessage ?error />
356
- </>
357
+ </React.Fragment>
357
358
  }}
358
359
  />
359
360
  }
@@ -363,18 +364,19 @@ module Make = (StateLenses: Config) => {
363
364
  let make = (~field, ~label, ~name=?, ~disabled=?, ~className=?) =>
364
365
  <Field
365
366
  field
366
- render={({handleChange, error, value}) => <>
367
- <Toolkit__Ui_Checkbox
368
- ?className
369
- checked={value->Obj.magic}
370
- value={value->Obj.magic}
371
- ?name
372
- ?disabled
373
- onChange={(checked, _value) => handleChange(checked)}>
374
- label
375
- </Toolkit__Ui_Checkbox>
376
- <ErrorMessage ?error />
377
- </>}
367
+ render={({handleChange, error, value}) =>
368
+ <React.Fragment>
369
+ <Toolkit__Ui_Checkbox
370
+ ?className
371
+ checked={value->Obj.magic}
372
+ value={value->Obj.magic}
373
+ ?name
374
+ ?disabled
375
+ onChange={(checked, _value) => handleChange(checked)}>
376
+ label
377
+ </Toolkit__Ui_Checkbox>
378
+ <ErrorMessage ?error />
379
+ </React.Fragment>}
378
380
  />
379
381
  }
380
382
 
@@ -404,7 +406,7 @@ module Make = (StateLenses: Config) => {
404
406
  }
405
407
  }
406
408
 
407
- <>
409
+ <React.Fragment>
408
410
  {switch label {
409
411
  | None => React.null
410
412
  | Some(label) =>
@@ -432,7 +434,7 @@ module Make = (StateLenses: Config) => {
432
434
  }}
433
435
  />
434
436
  <ErrorMessage ?error />
435
- </>
437
+ </React.Fragment>
436
438
  }}
437
439
  />
438
440
  }
@@ -466,7 +468,7 @@ module Make = (StateLenses: Config) => {
466
468
  }
467
469
  }
468
470
 
469
- <>
471
+ <React.Fragment>
470
472
  {switch label {
471
473
  | None => React.null
472
474
  | Some(label) =>
@@ -496,7 +498,7 @@ module Make = (StateLenses: Config) => {
496
498
  }}
497
499
  />
498
500
  <ErrorMessage ?error />
499
- </>
501
+ </React.Fragment>
500
502
  }}
501
503
  />
502
504
  }
@@ -524,7 +526,7 @@ module Make = (StateLenses: Config) => {
524
526
  render={({handleChange, error, value}) => {
525
527
  let isInvalid = error->Option.isSome
526
528
 
527
- <>
529
+ <React.Fragment>
528
530
  {switch label {
529
531
  | None => React.null
530
532
  | Some(label) =>
@@ -549,7 +551,7 @@ module Make = (StateLenses: Config) => {
549
551
  options
550
552
  />
551
553
  <ErrorMessage ?error />
552
- </>
554
+ </React.Fragment>
553
555
  }}
554
556
  />
555
557
  }
@@ -579,7 +581,7 @@ module Make = (StateLenses: Config) => {
579
581
  }
580
582
  }
581
583
 
582
- <>
584
+ <React.Fragment>
583
585
  {switch label {
584
586
  | None => React.null
585
587
  | Some(label) =>
@@ -603,7 +605,7 @@ module Make = (StateLenses: Config) => {
603
605
  placeholder
604
606
  />
605
607
  <ErrorMessage ?error />
606
- </>
608
+ </React.Fragment>
607
609
  }}
608
610
  />
609
611
  }
@@ -622,18 +624,19 @@ module Make = (StateLenses: Config) => {
622
624
  ) =>
623
625
  <Field
624
626
  field
625
- render={({handleChange, value}) => <>
626
- <Toolkit__Ui_Switch
627
- ?label
628
- onChange={value => handleChange(value)}
629
- name=id
630
- checked=value
631
- ?size
632
- ?displayTitle
633
- ?switchClassName
634
- className=?{labelClassName}
635
- />
636
- </>}
627
+ render={({handleChange, value}) =>
628
+ <React.Fragment>
629
+ <Toolkit__Ui_Switch
630
+ ?label
631
+ onChange={value => handleChange(value)}
632
+ name=id
633
+ checked=value
634
+ ?size
635
+ ?displayTitle
636
+ ?switchClassName
637
+ className=?{labelClassName}
638
+ />
639
+ </React.Fragment>}
637
640
  />
638
641
  }
639
642
 
@@ -652,7 +655,7 @@ module Make = (StateLenses: Config) => {
652
655
  <Field
653
656
  field
654
657
  render={({handleChange, value, error}) => {
655
- <>
658
+ <React.Fragment>
656
659
  {switch label {
657
660
  | None => React.null
658
661
  | Some(label) =>
@@ -684,7 +687,7 @@ module Make = (StateLenses: Config) => {
684
687
  <FormattedMessage defaultMessage="Choisissez une date" />,
685
688
  )}
686
689
  labelFormatter={date => {
687
- <>
690
+ <React.Fragment>
688
691
  <span>
689
692
  <FormattedDate
690
693
  value={date} weekday=#long day=#numeric month=#long year=#numeric
@@ -694,11 +697,11 @@ module Make = (StateLenses: Config) => {
694
697
  className="border inline-flex items-center justify-center w-8 h-8 rounded border-primary-700 text-primary-700">
695
698
  <ReactIcons.FaPencilAlt size={18} />
696
699
  </div>
697
- </>
700
+ </React.Fragment>
698
701
  }}
699
702
  />
700
703
  <ErrorMessage ?error />
701
- </>
704
+ </React.Fragment>
702
705
  }}
703
706
  />
704
707
  }
@@ -15,7 +15,7 @@ let useIsFirstMount = ReactUse.useFirstMountState
15
15
  let useUpdateEffect = (fn, deps) => {
16
16
  let isFirstMount = useIsFirstMount()
17
17
 
18
- React.useEffect1(() =>
18
+ React.useEffect(() =>
19
19
  if !isFirstMount {
20
20
  fn()
21
21
  } else {
@@ -24,7 +24,6 @@ let useUpdateEffect = (fn, deps) => {
24
24
  , deps)
25
25
  }
26
26
 
27
- let useIsMounted = ReactUse.useMountedState
28
27
  let useTimeoutFn = ReactUse.useTimeoutFn
29
28
  let useDebounce = ReactUse.useDebounce
30
29
  let useDebounce2 = ReactUse.useDebounce2
@@ -34,7 +33,7 @@ let useDebounce4 = ReactUse.useDebounce4
34
33
  let useUpdate = () => {
35
34
  let (_, setState) = React.useState(_ => 0)
36
35
 
37
- React.useCallback1(() => setState(SafeIncrement.increment), [])
36
+ React.useCallback(() => setState(SafeIncrement.increment), [])
38
37
  }
39
38
 
40
39
  let useDebounceValue = (~debounceDuration=200, value) => {
@@ -51,7 +50,7 @@ let useGetSet = initialStateGetter => {
51
50
  let state = React.useRef(initialStateGetter())
52
51
  let update = useUpdate()
53
52
 
54
- React.useMemo1(() => (
53
+ React.useMemo(() => (
55
54
  // get
56
55
  () => state.current,
57
56
  // set
@@ -65,7 +64,7 @@ let usePrevious = ReactUse.usePrevious
65
64
  let useInitialPrevious = value => {
66
65
  let previousRef = React.useRef(value)
67
66
 
68
- React.useEffect(() => {
67
+ React.useEffectOnEveryRender(() => {
69
68
  previousRef.current = value
70
69
  None
71
70
  })
@@ -106,7 +105,7 @@ let useFetcher = (~options: option<Swr.fetcherOptions>=?, key: 'key, fn: 'fn): f
106
105
  ),
107
106
  )
108
107
 
109
- (data->Obj.magic, isValidating, () => Promise.Js.fromBsPromise(mutate(.))->Promise.Js.toResult)
108
+ (data->Obj.magic, isValidating, () => Promise.Js.fromBsPromise(mutate())->Promise.Js.toResult)
110
109
  }
111
110
 
112
111
  let useOptionalFetcher = (~options: option<Swr.fetcherOptions>=?, key: 'key, fn: 'fn): fetcher<
@@ -124,7 +123,7 @@ let useOptionalFetcher = (~options: option<Swr.fetcherOptions>=?, key: 'key, fn:
124
123
  ),
125
124
  )
126
125
 
127
- (data->Obj.magic, isValidating, () => mutate(.)->Promise.Js.fromBsPromise->Promise.Js.toResult)
126
+ (data->Obj.magic, isValidating, () => mutate()->Promise.Js.fromBsPromise->Promise.Js.toResult)
128
127
  }
129
128
 
130
129
  // ----------------------
@@ -143,9 +142,9 @@ let useDisclosure = (~defaultIsOpen=?, ()) => {
143
142
 
144
143
  {
145
144
  isOpen,
146
- show: React.useCallback(() => setIsOpen(_ => true)),
147
- hide: React.useCallback(() => setIsOpen(_ => false)),
148
- toggle: React.useCallback(() => setIsOpen(isOpen => !isOpen)),
145
+ show: React.useCallback(() => setIsOpen(_ => true), []),
146
+ hide: React.useCallback(() => setIsOpen(_ => false), []),
147
+ toggle: React.useCallback(() => setIsOpen(isOpen => !isOpen), []),
149
148
  }
150
149
  }
151
150
 
@@ -162,7 +161,7 @@ type clipboard = {
162
161
 
163
162
  let useClipboard = (~onCopyNotificationMessage: option<string>=?, value: string) => {
164
163
  let (hasCopied, setHasCopied) = React.useState(() => false)
165
- let onCopy = React.useCallback1(() => {
164
+ let onCopy = React.useCallback(() => {
166
165
  onCopyNotificationMessage->Option.forEach(message =>
167
166
  Toolkit__Ui_Snackbar.show(~title=message, ~variant=#success, ())->ignore
168
167
  )
@@ -171,7 +170,7 @@ let useClipboard = (~onCopyNotificationMessage: option<string>=?, value: string)
171
170
  setHasCopied(_ => didCopy)
172
171
  }, [value])
173
172
 
174
- React.useEffect1(() =>
173
+ React.useEffect(() =>
175
174
  hasCopied
176
175
  ? {
177
176
  let id = Js.Global.setTimeout(() => setHasCopied(_ => false), 1500)
@@ -198,9 +197,9 @@ let useRequest = (~debounce=true, fn, deps) => {
198
197
  let lastCallId = React.useRef(0)
199
198
  let canceled = React.useRef(false)
200
199
  let (state, set) = React.useState(() => NotAsked)
201
- let isMounted = useIsMounted(.)
200
+ let isMounted = ReactUse.useMountedState(.)
202
201
 
203
- let trigger = React.useCallback1(args => {
202
+ let trigger = React.useCallback(args => {
204
203
  lastCallId.current = lastCallId.current->SafeIncrement.increment
205
204
  let callId = lastCallId.current
206
205
 
@@ -211,7 +210,7 @@ let useRequest = (~debounce=true, fn, deps) => {
211
210
  fn(args)->Promise.map(result => {
212
211
  let isCanceled = (debounce ? callId !== lastCallId.current : false) || canceled.current
213
212
 
214
- if isMounted(.) && !isCanceled {
213
+ if isMounted() && !isCanceled {
215
214
  set(_ => Done(result))
216
215
  }
217
216
 
@@ -219,7 +218,7 @@ let useRequest = (~debounce=true, fn, deps) => {
219
218
  })
220
219
  }, deps)
221
220
 
222
- let cancel = React.useCallback0(() => canceled.current = true)
221
+ let cancel = React.useCallback(() => canceled.current = true, [])
223
222
 
224
223
  (state, trigger, cancel)
225
224
  }
@@ -242,14 +241,14 @@ type mediaQuery = {
242
241
  }
243
242
 
244
243
  let useMediaQuery = () => {
245
- let isXs = React.useMemo0(() => matchMedia("(max-width: 639px)").matches)
246
- let isSm = React.useMemo0(() => matchMedia("(min-width: 640px)").matches)
247
- let isLg = React.useMemo0(() => matchMedia("(min-width: 1024px)").matches)
244
+ let isXs = React.useMemo(() => matchMedia("(max-width: 639px)").matches, [])
245
+ let isSm = React.useMemo(() => matchMedia("(min-width: 640px)").matches, [])
246
+ let isLg = React.useMemo(() => matchMedia("(min-width: 1024px)").matches, [])
248
247
  {isXs, isSm, isLg}
249
248
  }
250
249
 
251
250
  let useOnClickOutside = (ref: React.ref<Js.Nullable.t<Dom.element>>, handler) => {
252
- React.useEffect2(() => {
251
+ React.useEffect(() => {
253
252
  let listener = event => {
254
253
  switch ref.current->Js.Nullable.toOption {
255
254
  | None => ()
@@ -288,7 +287,7 @@ let useIsVisibleOnViewport = (~options: option<ReactUse.intersectionOptions<'a>>
288
287
  }),
289
288
  )
290
289
 
291
- React.useEffect1(() => {
290
+ React.useEffect(() => {
292
291
  intersection
293
292
  ->Js.Nullable.toOption
294
293
  ->Option.forEach(intersection => {
@@ -309,16 +308,14 @@ let useQueryParams = (~decoder, ~defaultParams) => {
309
308
  location->search
310
309
  }
311
310
 
312
- React.useMemo1(
313
- () =>
314
- queryString
315
- ->Js.String2.sliceToEnd(~from=1)
316
- ->Qs.parse
317
- ->Obj.magic
318
- ->decoder
319
- ->Result.getWithDefault(defaultParams),
320
- [queryString],
321
- )
311
+ React.useMemo(() =>
312
+ queryString
313
+ ->Js.String2.sliceToEnd(~from=1)
314
+ ->Qs.parse
315
+ ->Obj.magic
316
+ ->decoder
317
+ ->Result.getWithDefault(defaultParams)
318
+ , [queryString])
322
319
  }
323
320
 
324
321
  type localstorageStateOptions<'state> = {defaultValue?: 'state, storageSync?: bool}
@@ -329,31 +326,15 @@ external useLocalStorageState: (
329
326
  localstorageStateOptions<'state>,
330
327
  ) => ('state, ('state => 'state) => unit) = "default"
331
328
 
332
- // ----------------------
333
- // useIsMounted
334
- // ----------------------
335
-
336
- let useIsMounted = () => {
337
- let mountedRef = React.useRef(false)
338
- let get = React.useCallback0(() => mountedRef.current)
339
-
340
- React.useEffect(() => {
341
- mountedRef.current = true
342
- Some(() => mountedRef.current = false)
343
- })
344
-
345
- get
346
- }
347
-
348
329
  external promiseErrorToJsObj: Js.Promise.error => Js.Exn.t = "%identity"
349
330
 
350
331
  let usePromise = (~debounce=true, fn, deps) => {
351
332
  let lastCallId = React.useRef(0)
352
333
  let canceled = React.useRef(false)
353
334
  let (state, set) = React.useState(() => NotAsked)
354
- let isMounted = useIsMounted()
335
+ let isMounted = ReactUse.useMountedState()
355
336
 
356
- let trigger = React.useCallback1(args => {
337
+ let trigger = React.useCallback(args => {
357
338
  lastCallId.current = lastCallId.current->SafeIncrement.increment
358
339
 
359
340
  let callId = lastCallId.current
@@ -372,7 +353,7 @@ let usePromise = (~debounce=true, fn, deps) => {
372
353
  })
373
354
  }, deps)
374
355
 
375
- let cancel = React.useCallback0(() => canceled.current = true)
356
+ let cancel = React.useCallback(() => canceled.current = true, [])
376
357
 
377
358
  (state, trigger, cancel)
378
359
  }
@@ -386,9 +367,9 @@ let usePromiseV2 = (~debounce=true, fn, deps) => {
386
367
  let lastCallId = React.useRef(0)
387
368
  let canceled = React.useRef(false)
388
369
  let (state, set) = React.useState(() => NotAsked)
389
- let isMounted = useIsMounted()
370
+ let isMounted = ReactUse.useMountedState()
390
371
 
391
- let trigger = React.useCallback1(() => {
372
+ let trigger = React.useCallback(() => {
392
373
  lastCallId.current = lastCallId.current->SafeIncrement.increment
393
374
 
394
375
  fn()
@@ -411,12 +392,12 @@ let usePromiseV2 = (~debounce=true, fn, deps) => {
411
392
  ->ignore
412
393
  }, deps)
413
394
 
414
- let cancel = React.useCallback0(() => {
395
+ let cancel = React.useCallback(() => {
415
396
  canceled.current = true
416
397
  ()
417
- })
398
+ }, [])
418
399
 
419
- React.useEffect1(() => {
400
+ React.useEffect(() => {
420
401
  trigger()
421
402
  None
422
403
  }, deps)
@@ -433,9 +414,9 @@ let usePromiseV3 = (~debounce=true, fn, deps) => {
433
414
  let lastCallId = React.useRef(0)
434
415
  let canceled = React.useRef(false)
435
416
  let (state, set) = React.useState(() => NotAsked)
436
- let isMounted = useIsMounted()
417
+ let isMounted = ReactUse.useMountedState()
437
418
 
438
- let trigger = React.useCallback1(() => {
419
+ let trigger = React.useCallback(() => {
439
420
  lastCallId.current = lastCallId.current->SafeIncrement.increment
440
421
 
441
422
  fn()
@@ -458,12 +439,12 @@ let usePromiseV3 = (~debounce=true, fn, deps) => {
458
439
  ->ignore
459
440
  }, deps)
460
441
 
461
- let cancel = React.useCallback0(() => {
442
+ let cancel = React.useCallback(() => {
462
443
  canceled.current = true
463
444
  ()
464
- })
445
+ }, [])
465
446
 
466
- React.useEffect1(() => {
447
+ React.useEffect(() => {
467
448
  trigger()
468
449
  None
469
450
  }, deps)
@@ -26,9 +26,9 @@ module API = {
26
26
  module Config = {
27
27
  type argument = unit;
28
28
 
29
- [@decco]
29
+ [@spice]
30
30
  type response = array(user)
31
- [@decco]
31
+ [@spice]
32
32
  and user = {
33
33
  name: string
34
34
  };