@colisweb/rescript-toolkit 2.13.1 → 2.13.4

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/bsconfig.json CHANGED
@@ -26,7 +26,6 @@
26
26
  "bs-css",
27
27
  "bs-css-emotion",
28
28
  "@rescript/react",
29
- "bs-axios",
30
29
  "reason-promise",
31
30
  "reason-react",
32
31
  "decco",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@colisweb/rescript-toolkit",
3
- "version": "2.13.1",
3
+ "version": "2.13.4",
4
4
  "scripts": {
5
5
  "clean": "rescript clean",
6
6
  "build": "rescript build",
@@ -1,200 +1,12 @@
1
- type config
2
- type headers
3
- type undecodedData
4
- type failedResponseData
5
-
6
- type undecodedResponse = {
7
- data: undecodedData,
8
- headers: headers,
9
- config: config,
10
- status: int,
11
- }
12
-
13
- type noResponse = {
14
- message: string,
15
- config: config,
16
- }
17
-
18
- type rec failedResponse = {
19
- message: string,
20
- config: config,
21
- response: response,
22
- }
23
- and response = {
24
- data: failedResponseData,
25
- headers: headers,
26
- status: int,
27
- }
28
-
29
- external castToJs: 'a => Js.t<'b> = "%identity"
30
- external castToFailedResponse: Js.Promise.error => failedResponse = "%identity"
31
- external castToNoResponse: Js.Promise.error => noResponse = "%identity"
32
- external castToUndecodedResponse: Js.t<'a> => undecodedResponse = "%identity"
33
-
34
- type error<'a> = [
35
- | #noResponse(noResponse)
36
- | #invalidResponse(failedResponse)
37
- | #invalidResponseData(undecodedResponse, string)
38
- | #invalidErrorData
39
- | #unknown(Js.Promise.error)
40
- | #custom('a)
41
- ]
42
-
43
- let toResult = (
44
- promise,
45
- ~mapError: option<failedResponse => option<result<'data, error<'a>>>>=?,
46
- ~errorDecoder=?,
47
- mapData: Js.Json.t => result<'data, Decco.decodeError>,
48
- ): Promise.promise<result<'data, error<'error>>> =>
49
- promise
50
- ->Promise.Js.fromBsPromise
51
- ->Promise.Js.toResult
52
- ->Promise.map(res =>
53
- switch res {
54
- | Ok(response) =>
55
- switch response["data"]->mapData {
56
- | Ok(_) as ok => ok
57
- | Error(error) => {
58
- Toolkit__BrowserLogger.error2("Decoder failure", error)
59
- Error(
60
- #invalidResponseData(
61
- response->castToUndecodedResponse,
62
- "\"" ++ (error.path ++ ("\" " ++ error.message)),
63
- ),
64
- )
65
- }
66
- }
67
- | Error(error) =>
68
- if (error->castToJs)["response"] {
69
- switch (mapError, errorDecoder) {
70
- | (_, Some(errorDecoder)) =>
71
- let error = (error->castToFailedResponse).response.data->Obj.magic->errorDecoder
72
-
73
- switch error {
74
- | Ok(err) => Error(#custom(err))
75
- | Error(_err) =>
76
- Toolkit__BrowserLogger.error2("errorDecoder", _err)
77
-
78
- Error(#invalidErrorData)
79
- }
80
-
81
- | (Some(mapError), _) =>
82
- switch error->castToFailedResponse->mapError {
83
- | None => Error(#invalidResponse(error->castToFailedResponse))
84
- | Some(result) => result
85
- }
86
- | _ => Error(#invalidResponse(error->castToFailedResponse))
87
- }
88
- } else if (error->castToJs)["request"] {
89
- Error(#noResponse(error->castToNoResponse))
90
- } else {
91
- Error(#unknown(error))
92
- }
93
- }
94
- )
95
-
96
- type requestError<'a> = error<'a>
97
-
98
1
  module type Config = {
99
2
  type argument
100
3
  type response
101
4
  type error
102
- let exec: argument => Promise.promise<result<response, requestError<error>>>
5
+ let exec: argument => Promise.promise<
6
+ result<response, Axios.WithResult.customError<error, Js.Json.t>>,
7
+ >
103
8
  }
104
9
 
105
10
  module Make = (Config: Config) => {
106
11
  include Config
107
12
  }
108
-
109
- /* Http method */
110
-
111
- let get = (
112
- request: Axios.Instance.t,
113
- url: string,
114
- ~mapError: option<failedResponse => option<result<'data, error<'a>>>>=?,
115
- ~errorDecoder=?,
116
- mapData: Js.Json.t => result<'response, Decco.decodeError>,
117
- ): Promise.promise<result<'response, error<'error>>> =>
118
- request->Axios.Instance.get(url)->toResult(~mapError?, ~errorDecoder?, mapData)
119
-
120
- let getc = (
121
- request: Axios.Instance.t,
122
- url: string,
123
- ~mapError: option<failedResponse => option<result<'data, error<'a>>>>=?,
124
- ~errorDecoder=?,
125
- ~config,
126
- mapData: Js.Json.t => result<'response, Decco.decodeError>,
127
- ): Promise.promise<result<'response, error<'error>>> =>
128
- request->Axios.Instance.getc(url, config)->toResult(~mapError?, ~errorDecoder?, mapData)
129
-
130
- let post = (
131
- request: Axios.Instance.t,
132
- url: string,
133
- ~mapError: option<failedResponse => option<result<'data, error<'a>>>>=?,
134
- ~errorDecoder=?,
135
- mapData: Js.Json.t => result<'response, Decco.decodeError>,
136
- ): Promise.promise<result<'response, error<'error>>> =>
137
- request->Axios.Instance.post(url)->toResult(~mapError?, ~errorDecoder?, mapData)
138
-
139
- let postData = (
140
- request: Axios.Instance.t,
141
- url: string,
142
- ~mapError: option<failedResponse => option<result<'data, error<'a>>>>=?,
143
- ~errorDecoder=?,
144
- ~config=?,
145
- mapData: Js.Json.t => result<'response, Decco.decodeError>,
146
- body: Js.Json.t,
147
- ): Promise.promise<result<'response, error<'error>>> =>
148
- switch config {
149
- | None =>
150
- request
151
- ->Axios.Instance.postData(url, body->castToJs)
152
- ->toResult(~mapError?, ~errorDecoder?, mapData)
153
- | Some(c) =>
154
- request
155
- ->Axios.Instance.postDatac(url, body->castToJs, c)
156
- ->toResult(~mapError?, ~errorDecoder?, mapData)
157
- }
158
-
159
- let put = (
160
- request: Axios.Instance.t,
161
- url: string,
162
- ~mapError: option<failedResponse => option<result<'data, error<'a>>>>=?,
163
- ~errorDecoder=?,
164
- mapData: Js.Json.t => result<'response, Decco.decodeError>,
165
- ): Promise.promise<result<'response, error<'error>>> =>
166
- request->Axios.Instance.put(url)->toResult(~mapError?, ~errorDecoder?, mapData)
167
-
168
- let putData = (
169
- request: Axios.Instance.t,
170
- url: string,
171
- ~mapError: option<failedResponse => option<result<'data, error<'a>>>>=?,
172
- ~errorDecoder=?,
173
- ~config=?,
174
- mapData: Js.Json.t => result<'response, Decco.decodeError>,
175
- body: Js.Json.t,
176
- ): Promise.promise<result<'response, error<'error>>> =>
177
- switch config {
178
- | None =>
179
- request
180
- ->Axios.Instance.putData(url, body->castToJs)
181
- ->toResult(~mapError?, ~errorDecoder?, mapData)
182
- | Some(c) =>
183
- request
184
- ->Axios.Instance.putDatac(url, body->castToJs, c)
185
- ->toResult(~mapError?, ~errorDecoder?, mapData)
186
- }
187
-
188
- let delete = (
189
- request: Axios.Instance.t,
190
- url: string,
191
- ~mapError: option<failedResponse => option<result<'data, error<'a>>>>=?,
192
- ~errorDecoder=?,
193
- ~config=?,
194
- mapData: Js.Json.t => result<'response, Decco.decodeError>,
195
- ): Promise.promise<result<'response, error<'error>>> =>
196
- switch config {
197
- | None => request->Axios.Instance.delete(url)->toResult(~mapError?, ~errorDecoder?, mapData)
198
- | Some(c) =>
199
- request->Axios.Instance.deletec(url, c)->toResult(~mapError?, ~errorDecoder?, mapData)
200
- }
@@ -254,7 +254,7 @@ module Make = (Config: RouterConfig) => {
254
254
  <span
255
255
  className={cx([
256
256
  "transition-all duration-200 ease-in-out absolute ml-12 w-40 transform top-1/2 -translate-y-1/2 text-left",
257
- isNavOpen ? "pl-1 opacity-100" : "opacity-0",
257
+ isNavOpen ? "pl-1 opacity-100 delay-75" : "opacity-0 invisible",
258
258
  ])}>
259
259
  groupInfo.label
260
260
  </span>
@@ -27,7 +27,7 @@ module MakeFeature = (C: Config) => {
27
27
  type t = config<C.argument>
28
28
 
29
29
  let exec = (var: C.input) =>
30
- Axios2.get(C.envUrl ++ C.featureName, ())
30
+ Axios.get(C.envUrl ++ C.featureName, ())
31
31
  ->Promise.Js.toResult
32
32
  ->Promise.flatMapOk(({data}) => {
33
33
  Promise.resolved(t_decode(data))
File without changes
@@ -127,3 +127,68 @@ module ReactAsyncSelectMultiple = {
127
127
  ~loadOptions: string => Promise.Js.t<array<labelOption<'value>>, string>,
128
128
  ) => React.element = "default"
129
129
  }
130
+
131
+ module ReactSelectMultipleCreateInput = {
132
+ module ReactSelect = {
133
+ type components = {"DropDownIndicator": React.element}
134
+
135
+ @module("react-select/creatable") @react.component
136
+ external make: (
137
+ ~components: components,
138
+ ~inputValue: string,
139
+ ~isClearable: option<bool>=?,
140
+ ~isMulti: option<bool>=?,
141
+ ~menuIsOpen: option<bool>=?,
142
+ ~onChange: array<string> => unit,
143
+ ~onInputChange: string => unit,
144
+ ~onKeyDown: ReactEvent.Keyboard.t => unit,
145
+ ~placeholder: option<string>=?,
146
+ ~value: array<string>,
147
+ ~isDisabled: option<bool>=?,
148
+ ~isLoading: option<bool>=?,
149
+ ~className: option<string>=?,
150
+ ) => React.element = "CreatableSelect"
151
+ }
152
+
153
+ @react.component
154
+ let make = (
155
+ ~inputValue: string,
156
+ ~onInputChange: string => unit,
157
+ ~value: array<string>,
158
+ ~onChange: array<string> => unit,
159
+ ~isClearable=true,
160
+ ~placeholder="",
161
+ ~isDisabled=false,
162
+ ~isLoading=false,
163
+ ~className="",
164
+ ) =>
165
+ <ReactSelect
166
+ components={"DropDownIndicator": React.null}
167
+ isMulti=true
168
+ onKeyDown={e => {
169
+ if inputValue === "" {
170
+ ()
171
+ } else {
172
+ switch e->ReactEvent.Keyboard.key {
173
+ | "Enter"
174
+ | "Tab" => {
175
+ onInputChange("")
176
+ onChange(value->Array.concat([inputValue]))
177
+ e->ReactEvent.Keyboard.preventDefault
178
+ }
179
+ | _ => ()
180
+ }
181
+ }
182
+ }}
183
+ menuIsOpen={false}
184
+ inputValue
185
+ isClearable
186
+ onChange
187
+ onInputChange
188
+ placeholder
189
+ value
190
+ isDisabled
191
+ isLoading
192
+ className
193
+ />
194
+ }
@@ -1,28 +0,0 @@
1
- module type Config = {
2
- module Request: Toolkit__Request2.Config
3
- let key: Request.argument => array<string>
4
- }
5
-
6
- module Make = (Config: Config) => {
7
- let key: Config.Request.argument => array<string> = Config.key
8
-
9
- let use = (
10
- ~options: option<Swr.fetcherOptions>=?,
11
- key: option<Config.Request.argument>,
12
- ): Toolkit__Hooks.fetcher<Config.Request.response> =>
13
- Toolkit__Hooks.useFetcher(~options?, key->Option.map(Config.key), () => {
14
- let key = key->Option.getExn
15
-
16
- Config.Request.exec(key)->Promise.Js.fromResult
17
- })
18
-
19
- let useOptional = (
20
- ~options: option<Swr.fetcherOptions>=?,
21
- key: option<Config.Request.argument>,
22
- ): Toolkit__Hooks.fetcher<option<Config.Request.response>> =>
23
- Toolkit__Hooks.useOptionalFetcher(~options?, key->Option.map(Config.key), () => {
24
- let key = key->Option.getExn
25
-
26
- Config.Request.exec(key)->Promise.Js.fromResult
27
- })
28
- }
@@ -1,12 +0,0 @@
1
- module type Config = {
2
- type argument
3
- type response
4
- type error
5
- let exec: argument => Promise.promise<
6
- result<response, Axios2.WithResult.customError<error, Js.Json.t>>,
7
- >
8
- }
9
-
10
- module Make = (Config: Config) => {
11
- include Config
12
- }