rescript-relay 0.20.1 → 0.23.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.
@@ -0,0 +1,412 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+ 'use strict';
3
+
4
+ var Curry = require("rescript/lib/js/curry.js");
5
+ var React = require("react");
6
+ var Js_dict = require("rescript/lib/js/js_dict.js");
7
+ var Caml_obj = require("rescript/lib/js/caml_obj.js");
8
+ var Belt_Array = require("rescript/lib/js/belt_Array.js");
9
+ var Belt_Option = require("rescript/lib/js/belt_Option.js");
10
+ var Caml_option = require("rescript/lib/js/caml_option.js");
11
+ var Caml_exceptions = require("rescript/lib/js/caml_exceptions.js");
12
+ var RescriptReactRouter = require("@rescript/react/src/RescriptReactRouter.bs.js");
13
+
14
+ function matchesUrl(t, url) {
15
+ return Curry._1(t.matchesUrl, url);
16
+ }
17
+
18
+ function preload(t, url) {
19
+ return Curry._1(t.preload, url);
20
+ }
21
+
22
+ function render(t, url) {
23
+ return Curry._1(t.render, url);
24
+ }
25
+
26
+ function make(matchUrl, prepare, render) {
27
+ return {
28
+ preload: (function (url) {
29
+ var params = Curry._1(matchUrl, url);
30
+ if (params !== undefined) {
31
+ Curry._1(prepare, Caml_option.valFromOption(params));
32
+ return ;
33
+ }
34
+
35
+ }),
36
+ matchesUrl: (function (url) {
37
+ return Curry._1(matchUrl, url) !== undefined;
38
+ }),
39
+ render: (function (url) {
40
+ var params = Curry._1(matchUrl, url);
41
+ if (params !== undefined) {
42
+ return Curry._1(render, Curry._1(prepare, Caml_option.valFromOption(params)));
43
+ } else {
44
+ return null;
45
+ }
46
+ })
47
+ };
48
+ }
49
+
50
+ var RouteFamily = {
51
+ matchesUrl: matchesUrl,
52
+ preload: preload,
53
+ render: render,
54
+ make: make
55
+ };
56
+
57
+ function getHash(url) {
58
+ var index = url.indexOf("#");
59
+ if (index >= 0) {
60
+ return url.slice(index + 1 | 0);
61
+ } else {
62
+ return String("");
63
+ }
64
+ }
65
+
66
+ function pathParse(str) {
67
+ switch (str) {
68
+ case "" :
69
+ case "/" :
70
+ return /* [] */0;
71
+ default:
72
+ var raw = str.slice(1);
73
+ var match = raw[raw.length - 1 | 0];
74
+ var raw$1 = match === "/" ? raw.slice(0, -1) : raw;
75
+ var match$1 = raw$1.split("?", 2);
76
+ var raw$2 = match$1.length !== 2 ? raw$1 : match$1[0];
77
+ var a = raw$2.split("/").filter(function (item) {
78
+ return item.length !== 0;
79
+ });
80
+ var _i = a.length - 1 | 0;
81
+ var _res = /* [] */0;
82
+ while(true) {
83
+ var res = _res;
84
+ var i = _i;
85
+ if (i < 0) {
86
+ return res;
87
+ }
88
+ _res = {
89
+ hd: a[i],
90
+ tl: res
91
+ };
92
+ _i = i - 1 | 0;
93
+ continue ;
94
+ };
95
+ }
96
+ }
97
+
98
+ function searchParse(str) {
99
+ switch (str) {
100
+ case "" :
101
+ case "?" :
102
+ return "";
103
+ default:
104
+ var match = str.split("?", 2);
105
+ if (match.length !== 2) {
106
+ return "";
107
+ } else {
108
+ return match[1];
109
+ }
110
+ }
111
+ }
112
+
113
+ function parseUrl(url) {
114
+ return {
115
+ path: pathParse(url),
116
+ hash: getHash(url),
117
+ search: searchParse(url)
118
+ };
119
+ }
120
+
121
+ var context = React.createContext(undefined);
122
+
123
+ var make$1 = context.Provider;
124
+
125
+ function makeProps(value, children, param) {
126
+ return {
127
+ value: value,
128
+ children: children
129
+ };
130
+ }
131
+
132
+ var No_router_in_context = /* @__PURE__ */Caml_exceptions.create("RescriptRelayRouter.No_router_in_context");
133
+
134
+ function replaceShallow(path) {
135
+ var match = typeof history === "undefined" ? undefined : history;
136
+ var match$1 = typeof window === "undefined" ? undefined : window;
137
+ if (match !== undefined && match$1 !== undefined) {
138
+ match.replaceState(null, "", path);
139
+ return ;
140
+ }
141
+
142
+ }
143
+
144
+ function pushShallow(path) {
145
+ var match = typeof history === "undefined" ? undefined : history;
146
+ var match$1 = typeof window === "undefined" ? undefined : window;
147
+ if (match !== undefined && match$1 !== undefined) {
148
+ match.pushState(null, "", path);
149
+ return ;
150
+ }
151
+
152
+ }
153
+
154
+ var NavigationUtils = {
155
+ replaceShallow: replaceShallow,
156
+ pushShallow: pushShallow
157
+ };
158
+
159
+ function make$2(routes) {
160
+ var initialUrl = RescriptReactRouter.dangerouslyGetInitialUrl(undefined, undefined);
161
+ var matchRoutes = function (routes, url) {
162
+ return Belt_Array.getBy(routes, (function (r) {
163
+ return Curry._1(r.matchesUrl, url);
164
+ }));
165
+ };
166
+ var currentRoute = {
167
+ contents: {
168
+ route: matchRoutes(routes, initialUrl),
169
+ url: initialUrl
170
+ }
171
+ };
172
+ var subscribers = {};
173
+ var subId = {
174
+ contents: 0
175
+ };
176
+ var getNextId = function (param) {
177
+ subId.contents = subId.contents + 1 | 0;
178
+ return String(subId.contents);
179
+ };
180
+ RescriptReactRouter.watchUrl(function (url) {
181
+ if (!Caml_obj.caml_notequal(url.path, currentRoute.contents.url.path)) {
182
+ return ;
183
+ }
184
+ var route = matchRoutes(routes, url);
185
+ if (route !== undefined) {
186
+ Curry._1(route.preload, url);
187
+ }
188
+ var nextEntry = {
189
+ route: route,
190
+ url: url
191
+ };
192
+ currentRoute.contents = nextEntry;
193
+ return Belt_Array.forEach(Js_dict.values(subscribers), (function (x) {
194
+ if (x !== undefined) {
195
+ return Curry._1(x, nextEntry);
196
+ }
197
+
198
+ }));
199
+ });
200
+ return {
201
+ get: (function (param) {
202
+ return currentRoute.contents;
203
+ }),
204
+ preload: (function (url) {
205
+ var asRouterUrl = parseUrl(url);
206
+ var r = matchRoutes(routes, asRouterUrl);
207
+ if (r !== undefined) {
208
+ return Curry._1(r.preload, asRouterUrl);
209
+ }
210
+
211
+ }),
212
+ subscribe: (function (cb) {
213
+ var id = getNextId(undefined);
214
+ subscribers[id] = cb;
215
+ return function (param) {
216
+ subscribers[id] = undefined;
217
+
218
+ };
219
+ })
220
+ };
221
+ }
222
+
223
+ function useRouter(param) {
224
+ var router = React.useContext(context);
225
+ return React.useMemo((function () {
226
+ return {
227
+ push: RescriptReactRouter.push,
228
+ pushShallow: pushShallow,
229
+ replace: RescriptReactRouter.replace,
230
+ replaceShallow: pushShallow,
231
+ preload: router.preload
232
+ };
233
+ }), [router.preload]);
234
+ }
235
+
236
+ function RescriptRelayRouter$RouteRenderer(Props) {
237
+ var renderPending = Props.renderPending;
238
+ var renderFallback = Props.renderFallback;
239
+ var renderNotFound = Props.renderNotFound;
240
+ var match = React.useState(function () {
241
+ return false;
242
+ });
243
+ var initialized = match[0];
244
+ var router = React.useContext(context);
245
+ var match$1 = React.useTransition();
246
+ var startTransition = match$1[1];
247
+ var match$2 = React.useState(function () {
248
+ return Curry._1(router.get, undefined);
249
+ });
250
+ var setRouteEntry = match$2[1];
251
+ var routeEntry = match$2[0];
252
+ var match$3 = routeEntry.route;
253
+ if (initialized || match$3 === undefined) {
254
+
255
+ } else {
256
+ Curry._1(match$3.preload, routeEntry.url);
257
+ Curry._1(match[1], (function (param) {
258
+ return true;
259
+ }));
260
+ }
261
+ React.useEffect((function () {
262
+ var currentEntry = Curry._1(router.get, undefined);
263
+ if (Caml_obj.caml_notequal(routeEntry.url, currentEntry.url)) {
264
+ Curry._1(setRouteEntry, (function (param) {
265
+ return currentEntry;
266
+ }));
267
+ return ;
268
+ } else {
269
+ return Curry._1(router.subscribe, (function (nextRoute) {
270
+ return Curry._1(startTransition, (function (param) {
271
+ return Curry._1(setRouteEntry, (function (param) {
272
+ return nextRoute;
273
+ }));
274
+ }));
275
+ }));
276
+ }
277
+ }), [
278
+ router,
279
+ startTransition
280
+ ]);
281
+ var match$4 = routeEntry.route;
282
+ var renderedContent = initialized && match$4 !== undefined ? Caml_option.some(Curry._1(match$4.render, routeEntry.url)) : undefined;
283
+ if (initialized) {
284
+ return React.createElement(React.Fragment, undefined, renderPending !== undefined ? Curry._1(renderPending, match$1[0]) : null, React.createElement(React.Suspense, {
285
+ children: renderedContent !== undefined ? Caml_option.valFromOption(renderedContent) : (
286
+ renderNotFound !== undefined ? Curry._1(renderNotFound, routeEntry.url) : null
287
+ ),
288
+ fallback: renderFallback !== undefined ? Curry._1(renderFallback, undefined) : null
289
+ }));
290
+ } else {
291
+ return null;
292
+ }
293
+ }
294
+
295
+ var RouteRenderer = {
296
+ make: RescriptRelayRouter$RouteRenderer
297
+ };
298
+
299
+ function isModifiedEvent(e) {
300
+ var match = e.metaKey;
301
+ var match$1 = e.altKey;
302
+ var match$2 = e.ctrlKey;
303
+ var match$3 = e.shiftKey;
304
+ if (match$2 || match$3 || match$1 || match) {
305
+ return true;
306
+ } else {
307
+ return false;
308
+ }
309
+ }
310
+
311
+ function RescriptRelayRouter$Link(Props) {
312
+ var to_ = Props.to_;
313
+ var title = Props.title;
314
+ var id = Props.id;
315
+ var className = Props.className;
316
+ var classNameDynamic = Props.classNameDynamic;
317
+ var browserTarget = Props.target;
318
+ var mode = Props.mode;
319
+ var render = Props.render;
320
+ var preloadOnHover = Props.preloadOnHover;
321
+ var children = Props.children;
322
+ var router = React.useContext(context);
323
+ var url = RescriptReactRouter.useUrl(undefined, undefined);
324
+ var changeRoute = React.useCallback((function (e) {
325
+ var match = e.isDefaultPrevented();
326
+ var match$1 = e.button;
327
+ var match$2 = isModifiedEvent(e);
328
+ if (match) {
329
+ return ;
330
+ }
331
+ if (match$1 !== 0) {
332
+ return ;
333
+ }
334
+ if (browserTarget !== undefined && browserTarget !== "self") {
335
+ return ;
336
+ }
337
+ if (match$2) {
338
+ return ;
339
+ }
340
+ e.preventDefault();
341
+ var navigate = function (param) {
342
+ if (mode === "replace") {
343
+ return RescriptReactRouter.replace(to_);
344
+ } else {
345
+ return RescriptReactRouter.push(to_);
346
+ }
347
+ };
348
+ navigate(undefined);
349
+
350
+ }), [
351
+ to_,
352
+ router
353
+ ]);
354
+ var preload = React.useCallback((function (param) {
355
+ return Curry._1(router.preload, to_);
356
+ }), [
357
+ to_,
358
+ router
359
+ ]);
360
+ if (render !== undefined) {
361
+ var linkUrl = parseUrl(to_);
362
+ return Curry._4(render, preload, changeRoute, url, linkUrl);
363
+ }
364
+ var tmp = {
365
+ className: Belt_Option.getWithDefault(className, "") + (
366
+ classNameDynamic !== undefined ? " " + Curry._2(classNameDynamic, url, parseUrl(to_)) : ""
367
+ ),
368
+ href: to_,
369
+ target: browserTarget !== undefined ? (
370
+ browserTarget === "blank" ? "_blank" : "_self"
371
+ ) : "",
372
+ onClick: changeRoute,
373
+ onMouseDown: (function (param) {
374
+ return Curry._1(preload, undefined);
375
+ }),
376
+ onMouseEnter: (function (param) {
377
+ if (preloadOnHover !== undefined && preloadOnHover) {
378
+ return Curry._1(preload, undefined);
379
+ }
380
+
381
+ }),
382
+ onTouchStart: (function (param) {
383
+ return Curry._1(preload, undefined);
384
+ })
385
+ };
386
+ if (id !== undefined) {
387
+ tmp.id = Caml_option.valFromOption(id);
388
+ }
389
+ if (title !== undefined) {
390
+ tmp.title = Caml_option.valFromOption(title);
391
+ }
392
+ return React.createElement("a", tmp, children);
393
+ }
394
+
395
+ var Link = {
396
+ make: RescriptRelayRouter$Link
397
+ };
398
+
399
+ var Provider = {
400
+ makeProps: makeProps,
401
+ make: make$1
402
+ };
403
+
404
+ exports.RouteFamily = RouteFamily;
405
+ exports.Provider = Provider;
406
+ exports.No_router_in_context = No_router_in_context;
407
+ exports.useRouter = useRouter;
408
+ exports.make = make$2;
409
+ exports.RouteRenderer = RouteRenderer;
410
+ exports.Link = Link;
411
+ exports.NavigationUtils = NavigationUtils;
412
+ /* context Not a pure module */