@alepha/react 0.11.5 → 0.11.7
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/LICENSE +1 -1
- package/README.md +0 -4
- package/dist/index.browser.js +23 -17
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +66 -41
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -30
- package/dist/index.js.map +1 -1
- package/package.json +15 -15
- package/src/hooks/useAction.ts +1 -1
- package/src/hooks/useRouterState.ts +1 -1
- package/src/hooks/useStore.ts +22 -10
- package/src/index.ts +1 -1
- package/src/providers/ReactBrowserProvider.ts +29 -6
- package/src/providers/ReactBrowserRouterProvider.ts +2 -2
- package/src/providers/ReactServerProvider.ts +50 -26
- package/src/services/ReactRouter.ts +1 -1
package/LICENSE
CHANGED
package/README.md
CHANGED
package/dist/index.browser.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $env, $hook, $inject, $module, Alepha, AlephaError, Descriptor, KIND, createDescriptor, t } from "@alepha/core";
|
|
1
|
+
import { $atom, $env, $hook, $inject, $module, $use, Alepha, AlephaError, Atom, Descriptor, KIND, createDescriptor, t } from "@alepha/core";
|
|
2
2
|
import { AlephaDateTime, DateTimeProvider } from "@alepha/datetime";
|
|
3
3
|
import { AlephaServer, HttpClient } from "@alepha/server";
|
|
4
4
|
import { AlephaServerLinks, LinkProvider } from "@alepha/server-links";
|
|
@@ -417,30 +417,28 @@ const useEvents = (opts, deps) => {
|
|
|
417
417
|
|
|
418
418
|
//#endregion
|
|
419
419
|
//#region src/hooks/useStore.ts
|
|
420
|
-
|
|
421
|
-
* Hook to access and mutate the Alepha state.
|
|
422
|
-
*/
|
|
423
|
-
const useStore = (key, defaultValue) => {
|
|
420
|
+
function useStore(target, defaultValue) {
|
|
424
421
|
const alepha = useAlepha();
|
|
425
422
|
useMemo(() => {
|
|
426
|
-
if (defaultValue != null && alepha.state.get(
|
|
423
|
+
if (defaultValue != null && alepha.state.get(target) == null) alepha.state.set(target, defaultValue);
|
|
427
424
|
}, [defaultValue]);
|
|
428
|
-
const [state, setState] = useState(alepha.state.get(
|
|
425
|
+
const [state, setState] = useState(alepha.state.get(target));
|
|
429
426
|
useEffect(() => {
|
|
430
427
|
if (!alepha.isBrowser()) return;
|
|
428
|
+
const key = target instanceof Atom ? target.key : target;
|
|
431
429
|
return alepha.events.on("state:mutate", (ev) => {
|
|
432
430
|
if (ev.key === key) setState(ev.value);
|
|
433
431
|
});
|
|
434
432
|
}, []);
|
|
435
433
|
return [state, (value) => {
|
|
436
|
-
alepha.state.set(
|
|
434
|
+
alepha.state.set(target, value);
|
|
437
435
|
}];
|
|
438
|
-
}
|
|
436
|
+
}
|
|
439
437
|
|
|
440
438
|
//#endregion
|
|
441
439
|
//#region src/hooks/useRouterState.ts
|
|
442
440
|
const useRouterState = () => {
|
|
443
|
-
const [state] = useStore("react.router.state");
|
|
441
|
+
const [state] = useStore("alepha.react.router.state");
|
|
444
442
|
if (!state) throw new AlephaError("Missing react router state");
|
|
445
443
|
return state;
|
|
446
444
|
};
|
|
@@ -951,7 +949,7 @@ var ReactBrowserRouterProvider = class extends RouterProvider {
|
|
|
951
949
|
};
|
|
952
950
|
await this.alepha.events.emit("react:action:begin", { type: "transition" });
|
|
953
951
|
await this.alepha.events.emit("react:transition:begin", {
|
|
954
|
-
previous: this.alepha.state.get("react.router.state"),
|
|
952
|
+
previous: this.alepha.state.get("alepha.react.router.state"),
|
|
955
953
|
state
|
|
956
954
|
});
|
|
957
955
|
try {
|
|
@@ -993,7 +991,7 @@ var ReactBrowserRouterProvider = class extends RouterProvider {
|
|
|
993
991
|
const layer = previous[i];
|
|
994
992
|
if (state.layers[i]?.name !== layer.name) this.pageApi.page(layer.name)?.onLeave?.();
|
|
995
993
|
}
|
|
996
|
-
this.alepha.state.set("react.router.state", state);
|
|
994
|
+
this.alepha.state.set("alepha.react.router.state", state);
|
|
997
995
|
await this.alepha.events.emit("react:action:end", { type: "transition" });
|
|
998
996
|
await this.alepha.events.emit("react:transition:end", { state });
|
|
999
997
|
}
|
|
@@ -1005,6 +1003,14 @@ var ReactBrowserRouterProvider = class extends RouterProvider {
|
|
|
1005
1003
|
//#endregion
|
|
1006
1004
|
//#region src/providers/ReactBrowserProvider.ts
|
|
1007
1005
|
const envSchema = t.object({ REACT_ROOT_ID: t.text({ default: "root" }) });
|
|
1006
|
+
/**
|
|
1007
|
+
* React browser renderer configuration atom
|
|
1008
|
+
*/
|
|
1009
|
+
const reactBrowserOptions = $atom({
|
|
1010
|
+
name: "alepha.react.browser.options",
|
|
1011
|
+
schema: t.object({ scrollRestoration: t.enum(["top", "manual"]) }),
|
|
1012
|
+
default: { scrollRestoration: "top" }
|
|
1013
|
+
});
|
|
1008
1014
|
var ReactBrowserProvider = class {
|
|
1009
1015
|
env = $env(envSchema);
|
|
1010
1016
|
log = $logger();
|
|
@@ -1012,7 +1018,7 @@ var ReactBrowserProvider = class {
|
|
|
1012
1018
|
alepha = $inject(Alepha);
|
|
1013
1019
|
router = $inject(ReactBrowserRouterProvider);
|
|
1014
1020
|
dateTimeProvider = $inject(DateTimeProvider);
|
|
1015
|
-
options =
|
|
1021
|
+
options = $use(reactBrowserOptions);
|
|
1016
1022
|
getRootElement() {
|
|
1017
1023
|
const root = this.document.getElementById(this.env.REACT_ROOT_ID);
|
|
1018
1024
|
if (root) return root;
|
|
@@ -1023,7 +1029,7 @@ var ReactBrowserProvider = class {
|
|
|
1023
1029
|
}
|
|
1024
1030
|
transitioning;
|
|
1025
1031
|
get state() {
|
|
1026
|
-
return this.alepha.state.get("react.router.state");
|
|
1032
|
+
return this.alepha.state.get("alepha.react.router.state");
|
|
1027
1033
|
}
|
|
1028
1034
|
/**
|
|
1029
1035
|
* Accessor for Document DOM API.
|
|
@@ -1185,7 +1191,7 @@ var ReactRouter = class {
|
|
|
1185
1191
|
alepha = $inject(Alepha);
|
|
1186
1192
|
pageApi = $inject(ReactPageProvider);
|
|
1187
1193
|
get state() {
|
|
1188
|
-
return this.alepha.state.get("react.router.state");
|
|
1194
|
+
return this.alepha.state.get("alepha.react.router.state");
|
|
1189
1195
|
}
|
|
1190
1196
|
get pages() {
|
|
1191
1197
|
return this.pageApi.getPages();
|
|
@@ -1543,7 +1549,7 @@ function useAction(options, deps) {
|
|
|
1543
1549
|
}, []);
|
|
1544
1550
|
useEffect(() => {
|
|
1545
1551
|
if (options.runOnInit) handler(...[]);
|
|
1546
|
-
},
|
|
1552
|
+
}, deps);
|
|
1547
1553
|
useEffect(() => {
|
|
1548
1554
|
if (!options.runEvery) return;
|
|
1549
1555
|
intervalRef.current = dateTimeProvider.createInterval(() => handler(...[]), options.runEvery, true);
|
|
@@ -1692,5 +1698,5 @@ const AlephaReact = $module({
|
|
|
1692
1698
|
});
|
|
1693
1699
|
|
|
1694
1700
|
//#endregion
|
|
1695
|
-
export { $page, AlephaContext, AlephaReact, ClientOnly_default as ClientOnly, ErrorBoundary_default as ErrorBoundary, ErrorViewer_default as ErrorViewer, Link_default as Link, NestedView_default as NestedView, NotFoundPage as NotFound, PageDescriptor, ReactBrowserProvider, ReactBrowserRouterProvider, ReactPageProvider, ReactRouter, Redirection, RouterLayerContext, isPageRoute, ssrSchemaLoading, useAction, useActive, useAlepha, useClient, useEvents, useInject, useQueryParams, useRouter, useRouterState, useSchema, useStore };
|
|
1701
|
+
export { $page, AlephaContext, AlephaReact, ClientOnly_default as ClientOnly, ErrorBoundary_default as ErrorBoundary, ErrorViewer_default as ErrorViewer, Link_default as Link, NestedView_default as NestedView, NotFoundPage as NotFound, PageDescriptor, ReactBrowserProvider, ReactBrowserRouterProvider, ReactPageProvider, ReactRouter, Redirection, RouterLayerContext, isPageRoute, reactBrowserOptions, ssrSchemaLoading, useAction, useActive, useAlepha, useClient, useEvents, useInject, useQueryParams, useRouter, useRouterState, useSchema, useStore };
|
|
1696
1702
|
//# sourceMappingURL=index.browser.js.map
|