@colisweb/rescript-toolkit 2.6.0 → 2.8.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@colisweb/rescript-toolkit",
3
- "version": "2.6.0",
3
+ "version": "2.8.1",
4
4
  "scripts": {
5
5
  "clean": "rescript clean",
6
6
  "build": "rescript build",
@@ -62,7 +62,7 @@ module Int = {
62
62
  }
63
63
 
64
64
  module Boolean = {
65
- let encoder = value => value->Decco.intToJson
65
+ let encoder = value => value->Decco.boolToJson
66
66
 
67
67
  let decoder = json =>
68
68
  switch Js.Json.classify(json) {
@@ -83,7 +83,7 @@ module Boolean = {
83
83
  let codec = (encoder, decoder)
84
84
 
85
85
  @decco
86
- type t = @decco.codec(codec) int
86
+ type t = @decco.codec(codec) bool
87
87
  }
88
88
 
89
89
  module Float = {
@@ -169,14 +169,18 @@ module UnitMeasure = {
169
169
  let decoder: Decco.decoder<Toolkit__Utils_UnitMeasure.Dimension.t> = json =>
170
170
  switch Decco.stringFromJson(json) {
171
171
  | Belt.Result.Ok(v) =>
172
- let valueUnitArray = v |> Js.String.split(" ")
173
- switch valueUnitArray->Array.get(1) {
174
- | Some("mm") => #mm(valueUnitArray->Array.getExn(0)->Js.Float.fromString)->Ok
175
- | Some("cm") => #cm(valueUnitArray->Array.getExn(0)->Js.Float.fromString)->Ok
176
- | Some("dm") => #dm(valueUnitArray->Array.getExn(0)->Js.Float.fromString)->Ok
177
- | Some("km") => #km(valueUnitArray->Array.getExn(0)->Js.Float.fromString)->Ok
178
- | None => raise(Js.Exn.raiseError("unhandled no unit"))
179
- | _ => raise(Js.Exn.raiseError("unhandled weight unit"))
172
+ let valueUnitArray = v->Js.String2.split(" ")
173
+ switch (
174
+ valueUnitArray[0]->Belt.Option.flatMap(Belt.Float.fromString),
175
+ valueUnitArray[1],
176
+ ) {
177
+ | (Some(v), Some("mm")) => #mm(v)->Ok
178
+ | (Some(v), Some("cm")) => #cm(v)->Ok
179
+ | (Some(v), Some("dm")) => #dm(v)->Ok
180
+ | (Some(v), Some("km")) => #km(v)->Ok
181
+ | (None, _) => Decco.error("unhandled no value", json)
182
+ | (_, None) => Decco.error("unhandled no unit", json)
183
+ | (_, Some(_)) => Decco.error("unhandled dimension unit", json)
180
184
  }
181
185
  | Belt.Result.Error(_) as err => err
182
186
  }
@@ -233,12 +237,16 @@ module UnitMeasure = {
233
237
  let decoder: Decco.decoder<Toolkit__Utils_UnitMeasure.Weight.t> = json =>
234
238
  switch Decco.stringFromJson(json) {
235
239
  | Ok(v) =>
236
- let valueUnitArray = v |> Js.String.split(" ")
237
- switch valueUnitArray->Array.get(1) {
238
- | Some("g") => #g(valueUnitArray->Array.getExn(0)->Js.Float.fromString)->Ok
239
- | Some("kg") => #kg(valueUnitArray->Array.getExn(0)->Js.Float.fromString)->Ok
240
- | None => raise(Js.Exn.raiseError("unhandled no unit"))
241
- | _ => raise(Js.Exn.raiseError("unhandled weight unit"))
240
+ let valueUnitArray = v->Js.String2.split(" ")
241
+ switch (
242
+ valueUnitArray[0]->Belt.Option.flatMap(Belt.Float.fromString),
243
+ valueUnitArray[1],
244
+ ) {
245
+ | (Some(v), Some("g")) => #g(v)->Ok
246
+ | (Some(v), Some("kg")) => #kg(v)->Ok
247
+ | (None, _) => Decco.error("unhandled no value", json)
248
+ | (_, None) => Decco.error("unhandled no unit", json)
249
+ | (_, Some(_)) => Decco.error("unhandled weight unit", json)
242
250
  }
243
251
 
244
252
  | Error(_) as err => err
@@ -282,6 +290,74 @@ module UnitMeasure = {
282
290
  let convert = Toolkit__Utils_UnitMeasure.Weight.makeKg
283
291
  })
284
292
  }
293
+
294
+ module Time = {
295
+ module WithUnit = {
296
+ let encoder: Decco.encoder<Toolkit__Utils_UnitMeasure.Time.t> = value =>
297
+ switch value {
298
+ | #min(v) => Js.Json.string(v->Js.Float.toString ++ " min")
299
+ | #h(v) => Js.Json.string(v->Js.Float.toString ++ " h")
300
+ }
301
+
302
+ let decoder: Decco.decoder<Toolkit__Utils_UnitMeasure.Time.t> = json =>
303
+ switch Decco.stringFromJson(json) {
304
+ | Ok(v) =>
305
+ let valueUnitArray = v->Js.String2.split(" ")
306
+ switch (
307
+ valueUnitArray[0]->Belt.Option.flatMap(Belt.Float.fromString),
308
+ valueUnitArray[1],
309
+ ) {
310
+ | (Some(v), Some("min")) => #min(v)->Ok
311
+ | (Some(v), Some("h")) => #h(v)->Ok
312
+ | (None, _) => Decco.error("unhandled no value", json)
313
+ | (_, None) => Decco.error("unhandled no unit", json)
314
+ | (_, Some(_)) => Decco.error("unhandled time unit", json)
315
+ }
316
+
317
+ | Error(_) as err => err
318
+ }
319
+
320
+ let codec: Decco.codec<Toolkit__Utils_UnitMeasure.Time.t> = (encoder, decoder)
321
+
322
+ @decco
323
+ type t = @decco.codec(codec) Toolkit__Utils_UnitMeasure.Time.t
324
+ }
325
+
326
+ module type TimeConfig = {
327
+ let convert: float => Toolkit__Utils_UnitMeasure.Time.t
328
+ }
329
+
330
+ module Make = (C: TimeConfig) => {
331
+ type time = Toolkit__Utils_UnitMeasure.Time.t
332
+
333
+ let encoder: Decco.encoder<Toolkit__Utils_UnitMeasure.Time.t> = value =>
334
+ switch value {
335
+ | #min(v) => Js.Json.string(v->Js.Float.toString ++ " min")
336
+ | #h(v) => Js.Json.string(v->Js.Float.toString ++ " h")
337
+ }
338
+
339
+ let decoder: Decco.decoder<Toolkit__Utils_UnitMeasure.Time.t> = json =>
340
+ switch Decco.floatFromJson(json) {
341
+ | Ok(v) => v->C.convert->Ok
342
+ | Error(_) as err => err
343
+ }
344
+
345
+ let codec: Decco.codec<time> = (encoder, decoder)
346
+
347
+ let toValue = Toolkit__Utils_UnitMeasure.Time.toValue
348
+ let display = Toolkit__Utils_UnitMeasure.Time.display
349
+
350
+ @decco
351
+ type t = @decco.codec(codec) Toolkit__Utils_UnitMeasure.Time.t
352
+ }
353
+
354
+ module Min = Make({
355
+ let convert = Toolkit__Utils_UnitMeasure.Time.makeMin
356
+ })
357
+ module H = Make({
358
+ let convert = Toolkit__Utils_UnitMeasure.Time.makeH
359
+ })
360
+ }
285
361
  }
286
362
 
287
363
  // StringArray
@@ -68,6 +68,7 @@ module.exports = {
68
68
  white: defaultColors.white,
69
69
  black: defaultColors.black,
70
70
  transparent: defaultColors.transparent,
71
+ routeWithdraw: "#176693",
71
72
  gray: {
72
73
  100: "#f7fafc",
73
74
  200: "#edf2f7",
@@ -138,6 +139,15 @@ module.exports = {
138
139
  600: "#1A86FF",
139
140
  700: "#006CE6",
140
141
  },
142
+ purple: {
143
+ 50: "#F8F1FF",
144
+ 100: "#DDC8F0",
145
+ 300: "#8787E0",
146
+ 400: "#9151C9",
147
+ 500: "#6C1CB2",
148
+ 600: "#55158B",
149
+ 700: "#411766",
150
+ },
141
151
  },
142
152
  },
143
153
  content: [
@@ -17,6 +17,57 @@ module Weight = {
17
17
  let makeKg = (value: float) => #kg(value)
18
18
  }
19
19
 
20
+ module Time = {
21
+ type t = [#min(float) | #h(float)]
22
+
23
+ let toValue = value =>
24
+ switch value {
25
+ | #min(v)
26
+ | #h(v) => v
27
+ }
28
+
29
+ type separator = [#units | #colon]
30
+ let display = (value, ~separator=#units, ()) => {
31
+ let _initialDate = Js.Date.make()
32
+ let duration = switch value {
33
+ | #min(v) =>
34
+ BsDateFns.intervalToDuration(
35
+ ~interval={
36
+ start: _initialDate,
37
+ end_: _initialDate->BsDateFns.addMinutes(v),
38
+ },
39
+ )
40
+ | #h(v) =>
41
+ BsDateFns.intervalToDuration(
42
+ ~interval={start: _initialDate, end_: _initialDate->BsDateFns.addHours(v)},
43
+ )
44
+ }
45
+
46
+ let mainSeparator = {
47
+ switch separator {
48
+ | #units => " h "
49
+ | #colon => ":"
50
+ }
51
+ }
52
+ let secondarySeparator = {
53
+ switch separator {
54
+ | #units => " min"
55
+ | #colon => ""
56
+ }
57
+ }
58
+
59
+ switch (duration.hours, duration.minutes) {
60
+ | (Some(h), Some(min)) =>
61
+ `${h->Int.toString}${mainSeparator}${min->Int.toString}${secondarySeparator}`
62
+ | (Some(h), _) => `${h->Int.toString} h`
63
+ | (_, Some(min)) => `${min->Int.toString} min`
64
+ | _ => ""
65
+ }
66
+ }
67
+ let makeMin = (value: float) => #min(value)
68
+ let makeH = (value: float) => #h(value)
69
+ }
70
+
20
71
  module Dimension = {
21
72
  type t = [
22
73
  | #mm(float)
@@ -60,6 +60,8 @@ external setSeconds: (Js.Date.t, float) => Js.Date.t = "setSeconds"
60
60
  @module("date-fns")
61
61
  external setMinutes: (Js.Date.t, float) => Js.Date.t = "setMinutes"
62
62
  @module("date-fns")
63
+ external addMinutes: (Js.Date.t, float) => Js.Date.t = "addMinutes"
64
+ @module("date-fns")
63
65
  external setHours: (Js.Date.t, float) => Js.Date.t = "setHours"
64
66
  @module("date-fns")
65
67
  external addHours: (Js.Date.t, float) => Js.Date.t = "addHours"