@alepha/react 0.7.2 → 0.7.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/dist/{useRouterState-C2uo0jXu.cjs → ReactBrowserProvider-CXDElhnK.cjs} +2 -239
- package/dist/{useRouterState-D5__ZcUV.js → ReactBrowserProvider-ufHSOTmv.js} +3 -232
- package/dist/index.browser.cjs +14 -30
- package/dist/index.browser.js +10 -12
- package/dist/index.cjs +259 -32
- package/dist/index.d.ts +20 -58
- package/dist/index.js +239 -11
- package/package.json +6 -5
- package/src/index.browser.ts +11 -8
- package/src/index.ts +26 -16
- package/src/providers/ReactBrowserRenderer.ts +1 -0
- package/src/providers/ReactServerProvider.ts +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
3
|
var core = require('@alepha/core');
|
|
5
|
-
var React = require('react');
|
|
6
4
|
var server = require('@alepha/server');
|
|
7
5
|
var router = require('@alepha/router');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
8
|
|
|
9
9
|
const KEY = "PAGE";
|
|
10
10
|
const $page = (options) => {
|
|
@@ -945,253 +945,16 @@ class ReactBrowserProvider {
|
|
|
945
945
|
});
|
|
946
946
|
}
|
|
947
947
|
|
|
948
|
-
class RouterHookApi {
|
|
949
|
-
constructor(pages, state, layer, browser) {
|
|
950
|
-
this.pages = pages;
|
|
951
|
-
this.state = state;
|
|
952
|
-
this.layer = layer;
|
|
953
|
-
this.browser = browser;
|
|
954
|
-
}
|
|
955
|
-
get current() {
|
|
956
|
-
return this.state;
|
|
957
|
-
}
|
|
958
|
-
get pathname() {
|
|
959
|
-
return this.state.pathname;
|
|
960
|
-
}
|
|
961
|
-
get query() {
|
|
962
|
-
const query = {};
|
|
963
|
-
for (const [key, value] of new URLSearchParams(
|
|
964
|
-
this.state.search
|
|
965
|
-
).entries()) {
|
|
966
|
-
query[key] = String(value);
|
|
967
|
-
}
|
|
968
|
-
return query;
|
|
969
|
-
}
|
|
970
|
-
async back() {
|
|
971
|
-
this.browser?.history.back();
|
|
972
|
-
}
|
|
973
|
-
async forward() {
|
|
974
|
-
this.browser?.history.forward();
|
|
975
|
-
}
|
|
976
|
-
async invalidate(props) {
|
|
977
|
-
await this.browser?.invalidate(props);
|
|
978
|
-
}
|
|
979
|
-
/**
|
|
980
|
-
* Create a valid href for the given pathname.
|
|
981
|
-
*
|
|
982
|
-
* @param pathname
|
|
983
|
-
* @param layer
|
|
984
|
-
*/
|
|
985
|
-
createHref(pathname, layer = this.layer, options = {}) {
|
|
986
|
-
if (typeof pathname === "object") {
|
|
987
|
-
pathname = pathname.options.path ?? "";
|
|
988
|
-
}
|
|
989
|
-
if (options.params) {
|
|
990
|
-
for (const [key, value] of Object.entries(options.params)) {
|
|
991
|
-
pathname = pathname.replace(`:${key}`, String(value));
|
|
992
|
-
}
|
|
993
|
-
}
|
|
994
|
-
return pathname.startsWith("/") ? pathname : `${layer.path}/${pathname}`.replace(/\/\/+/g, "/");
|
|
995
|
-
}
|
|
996
|
-
async go(path, options) {
|
|
997
|
-
for (const page of this.pages) {
|
|
998
|
-
if (page.name === path) {
|
|
999
|
-
path = page.path ?? "";
|
|
1000
|
-
break;
|
|
1001
|
-
}
|
|
1002
|
-
}
|
|
1003
|
-
await this.browser?.go(this.createHref(path, this.layer, options), options);
|
|
1004
|
-
}
|
|
1005
|
-
anchor(path, options = {}) {
|
|
1006
|
-
for (const page of this.pages) {
|
|
1007
|
-
if (page.name === path) {
|
|
1008
|
-
path = page.path ?? "";
|
|
1009
|
-
break;
|
|
1010
|
-
}
|
|
1011
|
-
}
|
|
1012
|
-
const href = this.createHref(path, this.layer, options);
|
|
1013
|
-
return {
|
|
1014
|
-
href,
|
|
1015
|
-
onClick: (ev) => {
|
|
1016
|
-
ev.stopPropagation();
|
|
1017
|
-
ev.preventDefault();
|
|
1018
|
-
this.go(path, options).catch(console.error);
|
|
1019
|
-
}
|
|
1020
|
-
};
|
|
1021
|
-
}
|
|
1022
|
-
/**
|
|
1023
|
-
* Set query params.
|
|
1024
|
-
*
|
|
1025
|
-
* @param record
|
|
1026
|
-
* @param options
|
|
1027
|
-
*/
|
|
1028
|
-
setQueryParams(record, options = {}) {
|
|
1029
|
-
const func = typeof record === "function" ? record : () => record;
|
|
1030
|
-
const search = new URLSearchParams(func(this.query)).toString();
|
|
1031
|
-
const state = search ? `${this.pathname}?${search}` : this.pathname;
|
|
1032
|
-
if (options.push) {
|
|
1033
|
-
window.history.pushState({}, "", state);
|
|
1034
|
-
} else {
|
|
1035
|
-
window.history.replaceState({}, "", state);
|
|
1036
|
-
}
|
|
1037
|
-
}
|
|
1038
|
-
}
|
|
1039
|
-
|
|
1040
|
-
const useRouter = () => {
|
|
1041
|
-
const ctx = React.useContext(RouterContext);
|
|
1042
|
-
const layer = React.useContext(RouterLayerContext);
|
|
1043
|
-
if (!ctx || !layer) {
|
|
1044
|
-
throw new Error("useRouter must be used within a RouterProvider");
|
|
1045
|
-
}
|
|
1046
|
-
const pages = React.useMemo(() => {
|
|
1047
|
-
return ctx.alepha.get(PageDescriptorProvider).getPages();
|
|
1048
|
-
}, []);
|
|
1049
|
-
return React.useMemo(
|
|
1050
|
-
() => new RouterHookApi(
|
|
1051
|
-
pages,
|
|
1052
|
-
ctx.state,
|
|
1053
|
-
layer,
|
|
1054
|
-
ctx.alepha.isBrowser() ? ctx.alepha.get(ReactBrowserProvider) : void 0
|
|
1055
|
-
),
|
|
1056
|
-
[layer]
|
|
1057
|
-
);
|
|
1058
|
-
};
|
|
1059
|
-
|
|
1060
|
-
const Link = (props) => {
|
|
1061
|
-
React.useContext(RouterContext);
|
|
1062
|
-
const router = useRouter();
|
|
1063
|
-
const to = typeof props.to === "string" ? props.to : props.to[core.OPTIONS].path;
|
|
1064
|
-
if (!to) {
|
|
1065
|
-
return null;
|
|
1066
|
-
}
|
|
1067
|
-
const can = typeof props.to === "string" ? void 0 : props.to[core.OPTIONS].can;
|
|
1068
|
-
if (can && !can()) {
|
|
1069
|
-
return null;
|
|
1070
|
-
}
|
|
1071
|
-
const name = typeof props.to === "string" ? void 0 : props.to[core.OPTIONS].name;
|
|
1072
|
-
const anchorProps = {
|
|
1073
|
-
...props,
|
|
1074
|
-
to: void 0
|
|
1075
|
-
};
|
|
1076
|
-
return /* @__PURE__ */ jsxRuntime.jsx("a", { ...router.anchor(to), ...anchorProps, children: props.children ?? name });
|
|
1077
|
-
};
|
|
1078
|
-
|
|
1079
|
-
const useActive = (path) => {
|
|
1080
|
-
const router = useRouter();
|
|
1081
|
-
const ctx = React.useContext(RouterContext);
|
|
1082
|
-
const layer = React.useContext(RouterLayerContext);
|
|
1083
|
-
if (!ctx || !layer) {
|
|
1084
|
-
throw new Error("useRouter must be used within a RouterProvider");
|
|
1085
|
-
}
|
|
1086
|
-
let name;
|
|
1087
|
-
if (typeof path === "object" && path.options.name) {
|
|
1088
|
-
name = path.options.name;
|
|
1089
|
-
}
|
|
1090
|
-
const [current, setCurrent] = React.useState(ctx.state.pathname);
|
|
1091
|
-
const href = React.useMemo(() => router.createHref(path, layer), [path, layer]);
|
|
1092
|
-
const [isPending, setPending] = React.useState(false);
|
|
1093
|
-
const isActive = current === href;
|
|
1094
|
-
useRouterEvents({
|
|
1095
|
-
onEnd: ({ state }) => setCurrent(state.pathname)
|
|
1096
|
-
});
|
|
1097
|
-
return {
|
|
1098
|
-
name,
|
|
1099
|
-
isPending,
|
|
1100
|
-
isActive,
|
|
1101
|
-
anchorProps: {
|
|
1102
|
-
href,
|
|
1103
|
-
onClick: (ev) => {
|
|
1104
|
-
ev.stopPropagation();
|
|
1105
|
-
ev.preventDefault();
|
|
1106
|
-
if (isActive) return;
|
|
1107
|
-
if (isPending) return;
|
|
1108
|
-
setPending(true);
|
|
1109
|
-
router.go(href).then(() => {
|
|
1110
|
-
setPending(false);
|
|
1111
|
-
});
|
|
1112
|
-
}
|
|
1113
|
-
}
|
|
1114
|
-
};
|
|
1115
|
-
};
|
|
1116
|
-
|
|
1117
|
-
const useInject = (clazz) => {
|
|
1118
|
-
const ctx = React.useContext(RouterContext);
|
|
1119
|
-
if (!ctx) {
|
|
1120
|
-
throw new Error("useRouter must be used within a <RouterProvider>");
|
|
1121
|
-
}
|
|
1122
|
-
return React.useMemo(() => ctx.alepha.get(clazz), []);
|
|
1123
|
-
};
|
|
1124
|
-
|
|
1125
|
-
const useClient = (_scope) => {
|
|
1126
|
-
return useInject(server.HttpClient).of();
|
|
1127
|
-
};
|
|
1128
|
-
|
|
1129
|
-
const useQueryParams = (schema, options = {}) => {
|
|
1130
|
-
const ctx = React.useContext(RouterContext);
|
|
1131
|
-
if (!ctx) {
|
|
1132
|
-
throw new Error("useQueryParams must be used within a RouterProvider");
|
|
1133
|
-
}
|
|
1134
|
-
const key = options.key ?? "q";
|
|
1135
|
-
const router = useRouter();
|
|
1136
|
-
const querystring = router.query[key];
|
|
1137
|
-
const [queryParams, setQueryParams] = React.useState(
|
|
1138
|
-
decode(ctx.alepha, schema, router.query[key])
|
|
1139
|
-
);
|
|
1140
|
-
React.useEffect(() => {
|
|
1141
|
-
setQueryParams(decode(ctx.alepha, schema, querystring));
|
|
1142
|
-
}, [querystring]);
|
|
1143
|
-
return [
|
|
1144
|
-
queryParams,
|
|
1145
|
-
(queryParams2) => {
|
|
1146
|
-
setQueryParams(queryParams2);
|
|
1147
|
-
router.setQueryParams((data) => {
|
|
1148
|
-
return { ...data, [key]: encode(ctx.alepha, schema, queryParams2) };
|
|
1149
|
-
});
|
|
1150
|
-
}
|
|
1151
|
-
];
|
|
1152
|
-
};
|
|
1153
|
-
const encode = (alepha, schema, data) => {
|
|
1154
|
-
return btoa(JSON.stringify(alepha.parse(schema, data)));
|
|
1155
|
-
};
|
|
1156
|
-
const decode = (alepha, schema, data) => {
|
|
1157
|
-
try {
|
|
1158
|
-
return alepha.parse(schema, JSON.parse(atob(decodeURIComponent(data))));
|
|
1159
|
-
} catch (_error) {
|
|
1160
|
-
return {};
|
|
1161
|
-
}
|
|
1162
|
-
};
|
|
1163
|
-
|
|
1164
|
-
const useRouterState = () => {
|
|
1165
|
-
const ctx = React.useContext(RouterContext);
|
|
1166
|
-
const layer = React.useContext(RouterLayerContext);
|
|
1167
|
-
if (!ctx || !layer) {
|
|
1168
|
-
throw new Error("useRouter must be used within a RouterProvider");
|
|
1169
|
-
}
|
|
1170
|
-
const [state, setState] = React.useState(ctx.state);
|
|
1171
|
-
useRouterEvents({
|
|
1172
|
-
onEnd: ({ state: state2 }) => setState({ ...state2 })
|
|
1173
|
-
});
|
|
1174
|
-
return state;
|
|
1175
|
-
};
|
|
1176
|
-
|
|
1177
948
|
exports.$page = $page;
|
|
1178
949
|
exports.BrowserRouterProvider = BrowserRouterProvider;
|
|
1179
950
|
exports.ClientOnly = ClientOnly;
|
|
1180
951
|
exports.ErrorBoundary = ErrorBoundary;
|
|
1181
|
-
exports.Link = Link;
|
|
1182
952
|
exports.NestedView = NestedView;
|
|
1183
953
|
exports.PageDescriptorProvider = PageDescriptorProvider;
|
|
1184
954
|
exports.ReactBrowserProvider = ReactBrowserProvider;
|
|
1185
955
|
exports.RedirectionError = RedirectionError;
|
|
1186
956
|
exports.RouterContext = RouterContext;
|
|
1187
|
-
exports.RouterHookApi = RouterHookApi;
|
|
1188
957
|
exports.RouterLayerContext = RouterLayerContext;
|
|
1189
958
|
exports.isPageRoute = isPageRoute;
|
|
1190
|
-
exports.useActive = useActive;
|
|
1191
959
|
exports.useAlepha = useAlepha;
|
|
1192
|
-
exports.useClient = useClient;
|
|
1193
|
-
exports.useInject = useInject;
|
|
1194
|
-
exports.useQueryParams = useQueryParams;
|
|
1195
|
-
exports.useRouter = useRouter;
|
|
1196
960
|
exports.useRouterEvents = useRouterEvents;
|
|
1197
|
-
exports.useRouterState = useRouterState;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
1
|
import { __descriptor, OPTIONS, NotImplementedError, KIND, t, $logger, $inject, Alepha, $hook } from '@alepha/core';
|
|
3
|
-
import React, { useState, useEffect, createContext, useContext, createElement, StrictMode, useMemo } from 'react';
|
|
4
2
|
import { HttpClient } from '@alepha/server';
|
|
5
3
|
import { RouterProvider } from '@alepha/router';
|
|
4
|
+
import React, { useState, useEffect, createContext, useContext, createElement, StrictMode } from 'react';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
7
|
const KEY = "PAGE";
|
|
8
8
|
const $page = (options) => {
|
|
@@ -943,233 +943,4 @@ class ReactBrowserProvider {
|
|
|
943
943
|
});
|
|
944
944
|
}
|
|
945
945
|
|
|
946
|
-
|
|
947
|
-
constructor(pages, state, layer, browser) {
|
|
948
|
-
this.pages = pages;
|
|
949
|
-
this.state = state;
|
|
950
|
-
this.layer = layer;
|
|
951
|
-
this.browser = browser;
|
|
952
|
-
}
|
|
953
|
-
get current() {
|
|
954
|
-
return this.state;
|
|
955
|
-
}
|
|
956
|
-
get pathname() {
|
|
957
|
-
return this.state.pathname;
|
|
958
|
-
}
|
|
959
|
-
get query() {
|
|
960
|
-
const query = {};
|
|
961
|
-
for (const [key, value] of new URLSearchParams(
|
|
962
|
-
this.state.search
|
|
963
|
-
).entries()) {
|
|
964
|
-
query[key] = String(value);
|
|
965
|
-
}
|
|
966
|
-
return query;
|
|
967
|
-
}
|
|
968
|
-
async back() {
|
|
969
|
-
this.browser?.history.back();
|
|
970
|
-
}
|
|
971
|
-
async forward() {
|
|
972
|
-
this.browser?.history.forward();
|
|
973
|
-
}
|
|
974
|
-
async invalidate(props) {
|
|
975
|
-
await this.browser?.invalidate(props);
|
|
976
|
-
}
|
|
977
|
-
/**
|
|
978
|
-
* Create a valid href for the given pathname.
|
|
979
|
-
*
|
|
980
|
-
* @param pathname
|
|
981
|
-
* @param layer
|
|
982
|
-
*/
|
|
983
|
-
createHref(pathname, layer = this.layer, options = {}) {
|
|
984
|
-
if (typeof pathname === "object") {
|
|
985
|
-
pathname = pathname.options.path ?? "";
|
|
986
|
-
}
|
|
987
|
-
if (options.params) {
|
|
988
|
-
for (const [key, value] of Object.entries(options.params)) {
|
|
989
|
-
pathname = pathname.replace(`:${key}`, String(value));
|
|
990
|
-
}
|
|
991
|
-
}
|
|
992
|
-
return pathname.startsWith("/") ? pathname : `${layer.path}/${pathname}`.replace(/\/\/+/g, "/");
|
|
993
|
-
}
|
|
994
|
-
async go(path, options) {
|
|
995
|
-
for (const page of this.pages) {
|
|
996
|
-
if (page.name === path) {
|
|
997
|
-
path = page.path ?? "";
|
|
998
|
-
break;
|
|
999
|
-
}
|
|
1000
|
-
}
|
|
1001
|
-
await this.browser?.go(this.createHref(path, this.layer, options), options);
|
|
1002
|
-
}
|
|
1003
|
-
anchor(path, options = {}) {
|
|
1004
|
-
for (const page of this.pages) {
|
|
1005
|
-
if (page.name === path) {
|
|
1006
|
-
path = page.path ?? "";
|
|
1007
|
-
break;
|
|
1008
|
-
}
|
|
1009
|
-
}
|
|
1010
|
-
const href = this.createHref(path, this.layer, options);
|
|
1011
|
-
return {
|
|
1012
|
-
href,
|
|
1013
|
-
onClick: (ev) => {
|
|
1014
|
-
ev.stopPropagation();
|
|
1015
|
-
ev.preventDefault();
|
|
1016
|
-
this.go(path, options).catch(console.error);
|
|
1017
|
-
}
|
|
1018
|
-
};
|
|
1019
|
-
}
|
|
1020
|
-
/**
|
|
1021
|
-
* Set query params.
|
|
1022
|
-
*
|
|
1023
|
-
* @param record
|
|
1024
|
-
* @param options
|
|
1025
|
-
*/
|
|
1026
|
-
setQueryParams(record, options = {}) {
|
|
1027
|
-
const func = typeof record === "function" ? record : () => record;
|
|
1028
|
-
const search = new URLSearchParams(func(this.query)).toString();
|
|
1029
|
-
const state = search ? `${this.pathname}?${search}` : this.pathname;
|
|
1030
|
-
if (options.push) {
|
|
1031
|
-
window.history.pushState({}, "", state);
|
|
1032
|
-
} else {
|
|
1033
|
-
window.history.replaceState({}, "", state);
|
|
1034
|
-
}
|
|
1035
|
-
}
|
|
1036
|
-
}
|
|
1037
|
-
|
|
1038
|
-
const useRouter = () => {
|
|
1039
|
-
const ctx = useContext(RouterContext);
|
|
1040
|
-
const layer = useContext(RouterLayerContext);
|
|
1041
|
-
if (!ctx || !layer) {
|
|
1042
|
-
throw new Error("useRouter must be used within a RouterProvider");
|
|
1043
|
-
}
|
|
1044
|
-
const pages = useMemo(() => {
|
|
1045
|
-
return ctx.alepha.get(PageDescriptorProvider).getPages();
|
|
1046
|
-
}, []);
|
|
1047
|
-
return useMemo(
|
|
1048
|
-
() => new RouterHookApi(
|
|
1049
|
-
pages,
|
|
1050
|
-
ctx.state,
|
|
1051
|
-
layer,
|
|
1052
|
-
ctx.alepha.isBrowser() ? ctx.alepha.get(ReactBrowserProvider) : void 0
|
|
1053
|
-
),
|
|
1054
|
-
[layer]
|
|
1055
|
-
);
|
|
1056
|
-
};
|
|
1057
|
-
|
|
1058
|
-
const Link = (props) => {
|
|
1059
|
-
React.useContext(RouterContext);
|
|
1060
|
-
const router = useRouter();
|
|
1061
|
-
const to = typeof props.to === "string" ? props.to : props.to[OPTIONS].path;
|
|
1062
|
-
if (!to) {
|
|
1063
|
-
return null;
|
|
1064
|
-
}
|
|
1065
|
-
const can = typeof props.to === "string" ? void 0 : props.to[OPTIONS].can;
|
|
1066
|
-
if (can && !can()) {
|
|
1067
|
-
return null;
|
|
1068
|
-
}
|
|
1069
|
-
const name = typeof props.to === "string" ? void 0 : props.to[OPTIONS].name;
|
|
1070
|
-
const anchorProps = {
|
|
1071
|
-
...props,
|
|
1072
|
-
to: void 0
|
|
1073
|
-
};
|
|
1074
|
-
return /* @__PURE__ */ jsx("a", { ...router.anchor(to), ...anchorProps, children: props.children ?? name });
|
|
1075
|
-
};
|
|
1076
|
-
|
|
1077
|
-
const useActive = (path) => {
|
|
1078
|
-
const router = useRouter();
|
|
1079
|
-
const ctx = useContext(RouterContext);
|
|
1080
|
-
const layer = useContext(RouterLayerContext);
|
|
1081
|
-
if (!ctx || !layer) {
|
|
1082
|
-
throw new Error("useRouter must be used within a RouterProvider");
|
|
1083
|
-
}
|
|
1084
|
-
let name;
|
|
1085
|
-
if (typeof path === "object" && path.options.name) {
|
|
1086
|
-
name = path.options.name;
|
|
1087
|
-
}
|
|
1088
|
-
const [current, setCurrent] = useState(ctx.state.pathname);
|
|
1089
|
-
const href = useMemo(() => router.createHref(path, layer), [path, layer]);
|
|
1090
|
-
const [isPending, setPending] = useState(false);
|
|
1091
|
-
const isActive = current === href;
|
|
1092
|
-
useRouterEvents({
|
|
1093
|
-
onEnd: ({ state }) => setCurrent(state.pathname)
|
|
1094
|
-
});
|
|
1095
|
-
return {
|
|
1096
|
-
name,
|
|
1097
|
-
isPending,
|
|
1098
|
-
isActive,
|
|
1099
|
-
anchorProps: {
|
|
1100
|
-
href,
|
|
1101
|
-
onClick: (ev) => {
|
|
1102
|
-
ev.stopPropagation();
|
|
1103
|
-
ev.preventDefault();
|
|
1104
|
-
if (isActive) return;
|
|
1105
|
-
if (isPending) return;
|
|
1106
|
-
setPending(true);
|
|
1107
|
-
router.go(href).then(() => {
|
|
1108
|
-
setPending(false);
|
|
1109
|
-
});
|
|
1110
|
-
}
|
|
1111
|
-
}
|
|
1112
|
-
};
|
|
1113
|
-
};
|
|
1114
|
-
|
|
1115
|
-
const useInject = (clazz) => {
|
|
1116
|
-
const ctx = useContext(RouterContext);
|
|
1117
|
-
if (!ctx) {
|
|
1118
|
-
throw new Error("useRouter must be used within a <RouterProvider>");
|
|
1119
|
-
}
|
|
1120
|
-
return useMemo(() => ctx.alepha.get(clazz), []);
|
|
1121
|
-
};
|
|
1122
|
-
|
|
1123
|
-
const useClient = (_scope) => {
|
|
1124
|
-
return useInject(HttpClient).of();
|
|
1125
|
-
};
|
|
1126
|
-
|
|
1127
|
-
const useQueryParams = (schema, options = {}) => {
|
|
1128
|
-
const ctx = useContext(RouterContext);
|
|
1129
|
-
if (!ctx) {
|
|
1130
|
-
throw new Error("useQueryParams must be used within a RouterProvider");
|
|
1131
|
-
}
|
|
1132
|
-
const key = options.key ?? "q";
|
|
1133
|
-
const router = useRouter();
|
|
1134
|
-
const querystring = router.query[key];
|
|
1135
|
-
const [queryParams, setQueryParams] = useState(
|
|
1136
|
-
decode(ctx.alepha, schema, router.query[key])
|
|
1137
|
-
);
|
|
1138
|
-
useEffect(() => {
|
|
1139
|
-
setQueryParams(decode(ctx.alepha, schema, querystring));
|
|
1140
|
-
}, [querystring]);
|
|
1141
|
-
return [
|
|
1142
|
-
queryParams,
|
|
1143
|
-
(queryParams2) => {
|
|
1144
|
-
setQueryParams(queryParams2);
|
|
1145
|
-
router.setQueryParams((data) => {
|
|
1146
|
-
return { ...data, [key]: encode(ctx.alepha, schema, queryParams2) };
|
|
1147
|
-
});
|
|
1148
|
-
}
|
|
1149
|
-
];
|
|
1150
|
-
};
|
|
1151
|
-
const encode = (alepha, schema, data) => {
|
|
1152
|
-
return btoa(JSON.stringify(alepha.parse(schema, data)));
|
|
1153
|
-
};
|
|
1154
|
-
const decode = (alepha, schema, data) => {
|
|
1155
|
-
try {
|
|
1156
|
-
return alepha.parse(schema, JSON.parse(atob(decodeURIComponent(data))));
|
|
1157
|
-
} catch (_error) {
|
|
1158
|
-
return {};
|
|
1159
|
-
}
|
|
1160
|
-
};
|
|
1161
|
-
|
|
1162
|
-
const useRouterState = () => {
|
|
1163
|
-
const ctx = useContext(RouterContext);
|
|
1164
|
-
const layer = useContext(RouterLayerContext);
|
|
1165
|
-
if (!ctx || !layer) {
|
|
1166
|
-
throw new Error("useRouter must be used within a RouterProvider");
|
|
1167
|
-
}
|
|
1168
|
-
const [state, setState] = useState(ctx.state);
|
|
1169
|
-
useRouterEvents({
|
|
1170
|
-
onEnd: ({ state: state2 }) => setState({ ...state2 })
|
|
1171
|
-
});
|
|
1172
|
-
return state;
|
|
1173
|
-
};
|
|
1174
|
-
|
|
1175
|
-
export { $page as $, BrowserRouterProvider as B, ClientOnly as C, ErrorBoundary as E, Link as L, NestedView as N, PageDescriptorProvider as P, RedirectionError as R, RouterContext as a, RouterLayerContext as b, RouterHookApi as c, useAlepha as d, useClient as e, useInject as f, useQueryParams as g, useRouter as h, useRouterEvents as i, useRouterState as j, isPageRoute as k, ReactBrowserProvider as l, useActive as u };
|
|
946
|
+
export { $page as $, BrowserRouterProvider as B, ClientOnly as C, ErrorBoundary as E, NestedView as N, PageDescriptorProvider as P, RouterContext as R, RouterLayerContext as a, ReactBrowserProvider as b, RedirectionError as c, useAlepha as d, isPageRoute as i, useRouterEvents as u };
|
package/dist/index.browser.cjs
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var core = require('@alepha/core');
|
|
4
|
-
var
|
|
4
|
+
var ReactBrowserProvider = require('./ReactBrowserProvider-CXDElhnK.cjs');
|
|
5
5
|
var client = require('react-dom/client');
|
|
6
|
-
require('react/jsx-runtime');
|
|
7
|
-
require('react');
|
|
8
6
|
require('@alepha/server');
|
|
9
7
|
require('@alepha/router');
|
|
8
|
+
require('react');
|
|
9
|
+
require('react/jsx-runtime');
|
|
10
10
|
|
|
11
11
|
const envSchema = core.t.object({
|
|
12
12
|
REACT_ROOT_ID: core.t.string({ default: "root" })
|
|
13
13
|
});
|
|
14
14
|
class ReactBrowserRenderer {
|
|
15
|
-
browserProvider = core.$inject(
|
|
16
|
-
browserRouterProvider = core.$inject(
|
|
15
|
+
browserProvider = core.$inject(ReactBrowserProvider.ReactBrowserProvider);
|
|
16
|
+
browserRouterProvider = core.$inject(ReactBrowserProvider.BrowserRouterProvider);
|
|
17
17
|
env = core.$inject(envSchema);
|
|
18
18
|
log = core.$logger();
|
|
19
19
|
root;
|
|
@@ -45,30 +45,14 @@ class ReactBrowserRenderer {
|
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
class
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
this.alepha.with(useRouterState.PageDescriptorProvider).with(useRouterState.ReactBrowserProvider).with(useRouterState.BrowserRouterProvider).with(ReactBrowserRenderer);
|
|
52
|
-
}
|
|
48
|
+
class AlephaReact {
|
|
49
|
+
name = "alepha.react";
|
|
50
|
+
$services = (alepha) => alepha.with(ReactBrowserProvider.PageDescriptorProvider).with(ReactBrowserProvider.ReactBrowserProvider).with(ReactBrowserProvider.BrowserRouterProvider).with(ReactBrowserRenderer);
|
|
53
51
|
}
|
|
54
|
-
core.__bind(
|
|
52
|
+
core.__bind(ReactBrowserProvider.$page, AlephaReact);
|
|
55
53
|
|
|
56
|
-
exports
|
|
57
|
-
exports.
|
|
58
|
-
exports.
|
|
59
|
-
exports.
|
|
60
|
-
exports.
|
|
61
|
-
exports.ReactBrowserProvider = useRouterState.ReactBrowserProvider;
|
|
62
|
-
exports.RedirectionError = useRouterState.RedirectionError;
|
|
63
|
-
exports.RouterContext = useRouterState.RouterContext;
|
|
64
|
-
exports.RouterHookApi = useRouterState.RouterHookApi;
|
|
65
|
-
exports.RouterLayerContext = useRouterState.RouterLayerContext;
|
|
66
|
-
exports.useActive = useRouterState.useActive;
|
|
67
|
-
exports.useAlepha = useRouterState.useAlepha;
|
|
68
|
-
exports.useClient = useRouterState.useClient;
|
|
69
|
-
exports.useInject = useRouterState.useInject;
|
|
70
|
-
exports.useQueryParams = useRouterState.useQueryParams;
|
|
71
|
-
exports.useRouter = useRouterState.useRouter;
|
|
72
|
-
exports.useRouterEvents = useRouterState.useRouterEvents;
|
|
73
|
-
exports.useRouterState = useRouterState.useRouterState;
|
|
74
|
-
exports.ReactModule = ReactModule;
|
|
54
|
+
exports.BrowserRouterProvider = ReactBrowserProvider.BrowserRouterProvider;
|
|
55
|
+
exports.PageDescriptorProvider = ReactBrowserProvider.PageDescriptorProvider;
|
|
56
|
+
exports.ReactBrowserProvider = ReactBrowserProvider.ReactBrowserProvider;
|
|
57
|
+
exports.isPageRoute = ReactBrowserProvider.isPageRoute;
|
|
58
|
+
exports.AlephaReact = AlephaReact;
|
package/dist/index.browser.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { t, $inject, $logger, $hook, __bind
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
1
|
+
import { t, $inject, $logger, $hook, __bind } from '@alepha/core';
|
|
2
|
+
import { b as ReactBrowserProvider, B as BrowserRouterProvider, $ as $page, P as PageDescriptorProvider } from './ReactBrowserProvider-ufHSOTmv.js';
|
|
3
|
+
export { i as isPageRoute } from './ReactBrowserProvider-ufHSOTmv.js';
|
|
4
4
|
import { hydrateRoot, createRoot } from 'react-dom/client';
|
|
5
|
-
import 'react/jsx-runtime';
|
|
6
|
-
import 'react';
|
|
7
5
|
import '@alepha/server';
|
|
8
6
|
import '@alepha/router';
|
|
7
|
+
import 'react';
|
|
8
|
+
import 'react/jsx-runtime';
|
|
9
9
|
|
|
10
10
|
const envSchema = t.object({
|
|
11
11
|
REACT_ROOT_ID: t.string({ default: "root" })
|
|
@@ -44,12 +44,10 @@ class ReactBrowserRenderer {
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
class
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
this.alepha.with(PageDescriptorProvider).with(ReactBrowserProvider).with(BrowserRouterProvider).with(ReactBrowserRenderer);
|
|
51
|
-
}
|
|
47
|
+
class AlephaReact {
|
|
48
|
+
name = "alepha.react";
|
|
49
|
+
$services = (alepha) => alepha.with(PageDescriptorProvider).with(ReactBrowserProvider).with(BrowserRouterProvider).with(ReactBrowserRenderer);
|
|
52
50
|
}
|
|
53
|
-
__bind($page,
|
|
51
|
+
__bind($page, AlephaReact);
|
|
54
52
|
|
|
55
|
-
export {
|
|
53
|
+
export { AlephaReact, BrowserRouterProvider, PageDescriptorProvider, ReactBrowserProvider };
|