@alepha/react 0.11.3 → 0.11.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/components/ClientOnly.tsx","../src/errors/Redirection.ts","../src/providers/ReactPageProvider.ts","../src/services/ReactPageService.ts","../src/descriptors/$page.ts","../src/providers/ReactBrowserRouterProvider.ts","../src/providers/ReactBrowserProvider.ts","../src/components/ErrorBoundary.tsx","../src/components/ErrorViewer.tsx","../src/components/Link.tsx","../src/components/NestedView.tsx","../src/components/NotFound.tsx","../src/contexts/AlephaContext.ts","../src/contexts/RouterLayerContext.ts","../src/hooks/useAction.ts","../src/hooks/useActive.ts","../src/hooks/useAlepha.ts","../src/hooks/useClient.ts","../src/hooks/useEvents.ts","../src/hooks/useInject.ts","../src/hooks/useQueryParams.ts","../src/services/ReactRouter.ts","../src/hooks/useRouter.ts","../src/hooks/useRouterState.ts","../src/hooks/useSchema.ts","../src/hooks/useStore.ts","../src/providers/ReactServerProvider.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,17 +1,28 @@
1
1
  import { $env, $hook, $inject, $module, Alepha, AlephaError, Descriptor, KIND, createDescriptor, t } from "@alepha/core";
2
+ import { AlephaDateTime, DateTimeProvider } from "@alepha/datetime";
2
3
  import { AlephaServer, HttpClient, ServerProvider, ServerRouterProvider, ServerTimingProvider } from "@alepha/server";
3
4
  import { AlephaServerCache } from "@alepha/server-cache";
4
5
  import { AlephaServerLinks, LinkProvider, ServerLinksProvider } from "@alepha/server-links";
5
6
  import { $logger } from "@alepha/logger";
6
- import React, { StrictMode, createContext, createElement, memo, use, useContext, useEffect, useMemo, useRef, useState } from "react";
7
+ import React, { StrictMode, createContext, createElement, memo, use, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
7
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
9
  import { existsSync } from "node:fs";
9
10
  import { join } from "node:path";
10
11
  import { ServerStaticProvider } from "@alepha/server-static";
11
12
  import { renderToString } from "react-dom/server";
12
- import { DateTimeProvider } from "@alepha/datetime";
13
13
  import { RouterProvider } from "@alepha/router";
14
14
 
15
+ //#region src/services/ReactPageService.ts
16
+ var ReactPageService = class {
17
+ fetch(pathname, options = {}) {
18
+ throw new AlephaError("Fetch is not available for this environment.");
19
+ }
20
+ render(name, options = {}) {
21
+ throw new AlephaError("Render is not available for this environment.");
22
+ }
23
+ };
24
+
25
+ //#endregion
15
26
  //#region src/descriptors/$page.ts
16
27
  /**
17
28
  * Main descriptor for defining a React route in the application.
@@ -105,6 +116,7 @@ const $page = (options) => {
105
116
  return createDescriptor(PageDescriptor, options);
106
117
  };
107
118
  var PageDescriptor = class extends Descriptor {
119
+ reactPageService = $inject(ReactPageService);
108
120
  onInit() {
109
121
  if (this.options.static) this.options.cache ??= { store: {
110
122
  provider: "memory",
@@ -115,14 +127,16 @@ var PageDescriptor = class extends Descriptor {
115
127
  return this.options.name ?? this.config.propertyKey;
116
128
  }
117
129
  /**
118
- * For testing or build purposes, this will render the page (with or without the HTML layout) and return the HTML and context.
130
+ * For testing or build purposes.
131
+ *
132
+ * This will render the page (HTML layout included or not) and return the HTML + context.
119
133
  * Only valid for server-side rendering, it will throw an error if called on the client-side.
120
134
  */
121
135
  async render(options) {
122
- throw new AlephaError("render() method is not implemented in this environment");
136
+ return this.reactPageService.render(this.name, options);
123
137
  }
124
138
  async fetch(options) {
125
- throw new AlephaError("fetch() method is not implemented in this environment");
139
+ return this.reactPageService.fetch(this.options.path || "", options);
126
140
  }
127
141
  match(url) {
128
142
  return false;
@@ -344,29 +358,38 @@ const useAlepha = () => {
344
358
  };
345
359
 
346
360
  //#endregion
347
- //#region src/hooks/useRouterEvents.ts
361
+ //#region src/hooks/useEvents.ts
348
362
  /**
349
- * Subscribe to various router events.
363
+ * Allow subscribing to multiple Alepha events. See {@link Hooks} for available events.
364
+ *
365
+ * useEvents is fully typed to ensure correct event callback signatures.
366
+ *
367
+ * @example
368
+ * ```tsx
369
+ * useEvents(
370
+ * {
371
+ * "react:transition:begin": (ev) => {
372
+ * console.log("Transition began to:", ev.to);
373
+ * },
374
+ * "react:transition:error": {
375
+ * priority: "first",
376
+ * callback: (ev) => {
377
+ * console.error("Transition error:", ev.error);
378
+ * },
379
+ * },
380
+ * },
381
+ * [],
382
+ * );
383
+ * ```
350
384
  */
351
- const useRouterEvents = (opts = {}, deps = []) => {
385
+ const useEvents = (opts, deps) => {
352
386
  const alepha = useAlepha();
353
387
  useEffect(() => {
354
388
  if (!alepha.isBrowser()) return;
355
- const cb = (callback) => {
356
- if (typeof callback === "function") return { callback };
357
- return callback;
358
- };
359
389
  const subs = [];
360
- const onBegin = opts.onBegin;
361
- const onEnd = opts.onEnd;
362
- const onError = opts.onError;
363
- const onSuccess = opts.onSuccess;
364
- if (onBegin) subs.push(alepha.events.on("react:transition:begin", cb(onBegin)));
365
- if (onEnd) subs.push(alepha.events.on("react:transition:end", cb(onEnd)));
366
- if (onError) subs.push(alepha.events.on("react:transition:error", cb(onError)));
367
- if (onSuccess) subs.push(alepha.events.on("react:transition:success", cb(onSuccess)));
390
+ for (const [name, hook] of Object.entries(opts)) subs.push(alepha.events.on(name, hook));
368
391
  return () => {
369
- for (const sub of subs) sub();
392
+ for (const clear of subs) clear();
370
393
  };
371
394
  }, deps);
372
395
  };
@@ -462,8 +485,8 @@ const NestedView = (props) => {
462
485
  const [animation, setAnimation] = useState("");
463
486
  const animationExitDuration = useRef(0);
464
487
  const animationExitNow = useRef(0);
465
- useRouterEvents({
466
- onBegin: async ({ previous, state: state$1 }) => {
488
+ useEvents({
489
+ "react:transition:begin": async ({ previous, state: state$1 }) => {
467
490
  const layer = previous.layers[index];
468
491
  if (`${state$1.url.pathname}/`.startsWith(`${layer?.path}/`)) return;
469
492
  const animationExit = parseAnimation(layer.route?.animation, state$1, "exit");
@@ -478,7 +501,7 @@ const NestedView = (props) => {
478
501
  setAnimation("");
479
502
  }
480
503
  },
481
- onEnd: async ({ state: state$1 }) => {
504
+ "react:transition:end": async ({ state: state$1 }) => {
482
505
  const layer = state$1.layers[index];
483
506
  if (animationExitNow.current) {
484
507
  const duration = animationExitDuration.current;
@@ -590,9 +613,34 @@ var ReactPageProvider = class {
590
613
  getPages() {
591
614
  return this.pages;
592
615
  }
616
+ getConcretePages() {
617
+ const pages = [];
618
+ for (const page of this.pages) {
619
+ if (page.children && page.children.length > 0) continue;
620
+ const fullPath = this.pathname(page.name);
621
+ if (fullPath.includes(":") || fullPath.includes("*")) {
622
+ if (typeof page.static === "object") {
623
+ const entries = page.static.entries;
624
+ if (entries && entries.length > 0) for (const entry of entries) {
625
+ const params = entry.params;
626
+ const path = this.compile(page.path ?? "", params);
627
+ if (!path.includes(":") && !path.includes("*")) pages.push({
628
+ ...page,
629
+ name: params[Object.keys(params)[0]],
630
+ path,
631
+ ...entry
632
+ });
633
+ }
634
+ }
635
+ continue;
636
+ }
637
+ pages.push(page);
638
+ }
639
+ return pages;
640
+ }
593
641
  page(name) {
594
642
  for (const page of this.pages) if (page.name === name) return page;
595
- throw new Error(`Page ${name} not found`);
643
+ throw new AlephaError(`Page '${name}' not found`);
596
644
  }
597
645
  pathname(name, options = {}) {
598
646
  const page = this.page(name);
@@ -904,26 +952,8 @@ var ReactServerProvider = class {
904
952
  onConfigure = $hook({
905
953
  on: "configure",
906
954
  handler: async () => {
907
- const pages = this.alepha.descriptors($page);
908
- const ssrEnabled = pages.length > 0 && this.env.REACT_SSR_ENABLED !== false;
955
+ const ssrEnabled = this.alepha.descriptors($page).length > 0 && this.env.REACT_SSR_ENABLED !== false;
909
956
  this.alepha.state.set("react.server.ssr", ssrEnabled);
910
- for (const page of pages) {
911
- page.render = this.createRenderFunction(page.name);
912
- page.fetch = async (options) => {
913
- const response = await fetch(`${this.serverProvider.hostname}/${page.pathname(options)}`);
914
- const html = await response.text();
915
- if (options?.html) return {
916
- html,
917
- response
918
- };
919
- const match = html.match(this.ROOT_DIV_REGEX);
920
- if (match) return {
921
- html: match[3],
922
- response
923
- };
924
- throw new AlephaError("Invalid HTML response");
925
- };
926
- }
927
957
  if (this.alepha.isViteDev()) {
928
958
  await this.configureVite(ssrEnabled);
929
959
  return;
@@ -1010,53 +1040,51 @@ var ReactServerProvider = class {
1010
1040
  /**
1011
1041
  * For testing purposes, creates a render function that can be used.
1012
1042
  */
1013
- createRenderFunction(name, withIndex = false) {
1014
- return async (options = {}) => {
1015
- const page = this.pageApi.page(name);
1016
- const url = new URL(this.pageApi.url(name, options));
1017
- const state = {
1018
- url,
1019
- params: options.params ?? {},
1020
- query: options.query ?? {},
1021
- onError: () => null,
1022
- layers: [],
1023
- meta: {}
1024
- };
1025
- this.log.trace("Rendering", { url });
1026
- await this.alepha.events.emit("react:server:render:begin", { state });
1027
- const { redirect } = await this.pageApi.createLayers(page, state);
1028
- if (redirect) return {
1029
- state,
1030
- html: "",
1031
- redirect
1032
- };
1033
- if (!withIndex && !options.html) {
1034
- this.alepha.state.set("react.router.state", state);
1035
- return {
1036
- state,
1037
- html: renderToString(this.pageApi.root(state))
1038
- };
1039
- }
1040
- const template = this.template ?? "";
1041
- const html = this.renderToHtml(template, state, options.hydration);
1042
- if (html instanceof Redirection) return {
1043
- state,
1044
- html: "",
1045
- redirect
1046
- };
1047
- const result = {
1043
+ async render(name, options = {}) {
1044
+ const page = this.pageApi.page(name);
1045
+ const url = new URL(this.pageApi.url(name, options));
1046
+ const state = {
1047
+ url,
1048
+ params: options.params ?? {},
1049
+ query: options.query ?? {},
1050
+ onError: () => null,
1051
+ layers: [],
1052
+ meta: {}
1053
+ };
1054
+ this.log.trace("Rendering", { url });
1055
+ await this.alepha.events.emit("react:server:render:begin", { state });
1056
+ const { redirect } = await this.pageApi.createLayers(page, state);
1057
+ if (redirect) return {
1058
+ state,
1059
+ html: "",
1060
+ redirect
1061
+ };
1062
+ if (!options.html) {
1063
+ this.alepha.state.set("react.router.state", state);
1064
+ return {
1048
1065
  state,
1049
- html
1066
+ html: renderToString(this.pageApi.root(state))
1050
1067
  };
1051
- await this.alepha.events.emit("react:server:render:end", result);
1052
- return result;
1068
+ }
1069
+ const template = this.template ?? "";
1070
+ const html = this.renderToHtml(template, state, options.hydration);
1071
+ if (html instanceof Redirection) return {
1072
+ state,
1073
+ html: "",
1074
+ redirect
1053
1075
  };
1076
+ const result = {
1077
+ state,
1078
+ html
1079
+ };
1080
+ await this.alepha.events.emit("react:server:render:end", result);
1081
+ return result;
1054
1082
  }
1055
1083
  createHandler(route, templateLoader) {
1056
1084
  return async (serverRequest) => {
1057
1085
  const { url, reply, query, params } = serverRequest;
1058
1086
  const template = await templateLoader();
1059
- if (!template) throw new AlephaError("Template not found");
1087
+ if (!template) throw new AlephaError("Missing template for SSR rendering");
1060
1088
  this.log.trace("Rendering page", { name: route.name });
1061
1089
  const state = {
1062
1090
  url,
@@ -1186,6 +1214,30 @@ var ReactServerProvider = class {
1186
1214
  }
1187
1215
  };
1188
1216
 
1217
+ //#endregion
1218
+ //#region src/services/ReactPageServerService.ts
1219
+ var ReactPageServerService = class extends ReactPageService {
1220
+ reactServerProvider = $inject(ReactServerProvider);
1221
+ serverProvider = $inject(ServerProvider);
1222
+ async render(name, options = {}) {
1223
+ return this.reactServerProvider.render(name, options);
1224
+ }
1225
+ async fetch(pathname, options = {}) {
1226
+ const response = await fetch(`${this.serverProvider.hostname}/${pathname}`);
1227
+ const html = await response.text();
1228
+ if (options?.html) return {
1229
+ html,
1230
+ response
1231
+ };
1232
+ const match = html.match(this.reactServerProvider.ROOT_DIV_REGEX);
1233
+ if (match) return {
1234
+ html: match[3],
1235
+ response
1236
+ };
1237
+ throw new AlephaError("Invalid HTML response");
1238
+ }
1239
+ };
1240
+
1189
1241
  //#endregion
1190
1242
  //#region src/providers/ReactBrowserRouterProvider.ts
1191
1243
  var ReactBrowserRouterProvider = class extends RouterProvider {
@@ -1214,6 +1266,7 @@ var ReactBrowserRouterProvider = class extends RouterProvider {
1214
1266
  onError: () => null,
1215
1267
  meta
1216
1268
  };
1269
+ await this.alepha.events.emit("react:action:begin", { type: "transition" });
1217
1270
  await this.alepha.events.emit("react:transition:begin", {
1218
1271
  previous: this.alepha.state.get("react.router.state"),
1219
1272
  state
@@ -1234,6 +1287,7 @@ var ReactBrowserRouterProvider = class extends RouterProvider {
1234
1287
  index: 0,
1235
1288
  path: "/"
1236
1289
  });
1290
+ await this.alepha.events.emit("react:action:success", { type: "transition" });
1237
1291
  await this.alepha.events.emit("react:transition:success", { state });
1238
1292
  } catch (e) {
1239
1293
  this.log.error("Transition has failed", e);
@@ -1243,6 +1297,10 @@ var ReactBrowserRouterProvider = class extends RouterProvider {
1243
1297
  index: 0,
1244
1298
  path: "/"
1245
1299
  }];
1300
+ await this.alepha.events.emit("react:action:error", {
1301
+ type: "transition",
1302
+ error: e
1303
+ });
1246
1304
  await this.alepha.events.emit("react:transition:error", {
1247
1305
  error: e,
1248
1306
  state
@@ -1253,6 +1311,7 @@ var ReactBrowserRouterProvider = class extends RouterProvider {
1253
1311
  if (state.layers[i]?.name !== layer.name) this.pageApi.page(layer.name)?.onLeave?.();
1254
1312
  }
1255
1313
  this.alepha.state.set("react.router.state", state);
1314
+ await this.alepha.events.emit("react:action:end", { type: "transition" });
1256
1315
  await this.alepha.events.emit("react:transition:end", { state });
1257
1316
  }
1258
1317
  root(state) {
@@ -1428,9 +1487,18 @@ var ReactRouter = class {
1428
1487
  get pages() {
1429
1488
  return this.pageApi.getPages();
1430
1489
  }
1490
+ get concretePages() {
1491
+ return this.pageApi.getConcretePages();
1492
+ }
1431
1493
  get browser() {
1432
1494
  if (this.alepha.isBrowser()) return this.alepha.inject(ReactBrowserProvider);
1433
1495
  }
1496
+ isActive(href, options = {}) {
1497
+ const current = this.state.url.pathname;
1498
+ let isActive = current === href || current === `${href}/` || `${current}/` === href;
1499
+ if (options.startWith && !isActive) isActive = current.startsWith(href);
1500
+ return isActive;
1501
+ }
1434
1502
  path(name, config = {}) {
1435
1503
  return this.pageApi.pathname(name, {
1436
1504
  params: {
@@ -1564,19 +1632,245 @@ const Link = (props) => {
1564
1632
  };
1565
1633
  var Link_default = Link;
1566
1634
 
1635
+ //#endregion
1636
+ //#region src/hooks/useAction.ts
1637
+ /**
1638
+ * Hook for handling async actions with automatic error handling and event emission.
1639
+ *
1640
+ * By default, prevents concurrent executions - if an action is running and you call it again,
1641
+ * the second call will be ignored. Use `debounce` option to delay execution instead.
1642
+ *
1643
+ * Emits lifecycle events:
1644
+ * - `react:action:begin` - When action starts
1645
+ * - `react:action:success` - When action completes successfully
1646
+ * - `react:action:error` - When action throws an error
1647
+ * - `react:action:end` - Always emitted at the end
1648
+ *
1649
+ * @example Basic usage
1650
+ * ```tsx
1651
+ * const action = useAction({
1652
+ * handler: async (data) => {
1653
+ * await api.save(data);
1654
+ * }
1655
+ * }, []);
1656
+ *
1657
+ * <button onClick={() => action.run(data)} disabled={action.loading}>
1658
+ * Save
1659
+ * </button>
1660
+ * ```
1661
+ *
1662
+ * @example With debounce (search input)
1663
+ * ```tsx
1664
+ * const search = useAction({
1665
+ * handler: async (query: string) => {
1666
+ * await api.search(query);
1667
+ * },
1668
+ * debounce: 300 // Wait 300ms after last call
1669
+ * }, []);
1670
+ *
1671
+ * <input onChange={(e) => search.run(e.target.value)} />
1672
+ * ```
1673
+ *
1674
+ * @example Run on component mount
1675
+ * ```tsx
1676
+ * const fetchData = useAction({
1677
+ * handler: async () => {
1678
+ * const data = await api.getData();
1679
+ * return data;
1680
+ * },
1681
+ * runOnInit: true // Runs once when component mounts
1682
+ * }, []);
1683
+ * ```
1684
+ *
1685
+ * @example Run periodically (polling)
1686
+ * ```tsx
1687
+ * const pollStatus = useAction({
1688
+ * handler: async () => {
1689
+ * const status = await api.getStatus();
1690
+ * return status;
1691
+ * },
1692
+ * runEvery: 5000 // Run every 5 seconds
1693
+ * }, []);
1694
+ *
1695
+ * // Or with duration tuple
1696
+ * const pollStatus = useAction({
1697
+ * handler: async () => {
1698
+ * const status = await api.getStatus();
1699
+ * return status;
1700
+ * },
1701
+ * runEvery: [30, 'seconds'] // Run every 30 seconds
1702
+ * }, []);
1703
+ * ```
1704
+ *
1705
+ * @example With AbortController
1706
+ * ```tsx
1707
+ * const fetch = useAction({
1708
+ * handler: async (url, { signal }) => {
1709
+ * const response = await fetch(url, { signal });
1710
+ * return response.json();
1711
+ * }
1712
+ * }, []);
1713
+ * // Automatically cancelled on unmount or when new request starts
1714
+ * ```
1715
+ *
1716
+ * @example With error handling
1717
+ * ```tsx
1718
+ * const deleteAction = useAction({
1719
+ * handler: async (id: string) => {
1720
+ * await api.delete(id);
1721
+ * },
1722
+ * onError: (error) => {
1723
+ * if (error.code === 'NOT_FOUND') {
1724
+ * // Custom error handling
1725
+ * }
1726
+ * }
1727
+ * }, []);
1728
+ *
1729
+ * {deleteAction.error && <div>Error: {deleteAction.error.message}</div>}
1730
+ * ```
1731
+ *
1732
+ * @example Global error handling
1733
+ * ```tsx
1734
+ * // In your root app setup
1735
+ * alepha.events.on("react:action:error", ({ error }) => {
1736
+ * toast.danger(error.message);
1737
+ * Sentry.captureException(error);
1738
+ * });
1739
+ * ```
1740
+ */
1741
+ function useAction(options, deps) {
1742
+ const alepha = useAlepha();
1743
+ const dateTimeProvider = useInject(DateTimeProvider);
1744
+ const [loading, setLoading] = useState(false);
1745
+ const [error, setError] = useState();
1746
+ const isExecutingRef = useRef(false);
1747
+ const debounceTimerRef = useRef(void 0);
1748
+ const abortControllerRef = useRef(void 0);
1749
+ const isMountedRef = useRef(true);
1750
+ const intervalRef = useRef(void 0);
1751
+ useEffect(() => {
1752
+ return () => {
1753
+ isMountedRef.current = false;
1754
+ if (debounceTimerRef.current) {
1755
+ dateTimeProvider.clearTimeout(debounceTimerRef.current);
1756
+ debounceTimerRef.current = void 0;
1757
+ }
1758
+ if (intervalRef.current) {
1759
+ dateTimeProvider.clearInterval(intervalRef.current);
1760
+ intervalRef.current = void 0;
1761
+ }
1762
+ if (abortControllerRef.current) {
1763
+ abortControllerRef.current.abort();
1764
+ abortControllerRef.current = void 0;
1765
+ }
1766
+ };
1767
+ }, []);
1768
+ const executeAction = useCallback(async (...args) => {
1769
+ if (isExecutingRef.current) return;
1770
+ if (abortControllerRef.current) abortControllerRef.current.abort();
1771
+ const abortController = new AbortController();
1772
+ abortControllerRef.current = abortController;
1773
+ isExecutingRef.current = true;
1774
+ setLoading(true);
1775
+ setError(void 0);
1776
+ await alepha.events.emit("react:action:begin", {
1777
+ type: "custom",
1778
+ id: options.id
1779
+ });
1780
+ try {
1781
+ const result = await options.handler(...args, { signal: abortController.signal });
1782
+ if (!isMountedRef.current || abortController.signal.aborted) return;
1783
+ await alepha.events.emit("react:action:success", {
1784
+ type: "custom",
1785
+ id: options.id
1786
+ });
1787
+ if (options.onSuccess) await options.onSuccess(result);
1788
+ return result;
1789
+ } catch (err) {
1790
+ if (err instanceof Error && err.name === "AbortError") return;
1791
+ if (!isMountedRef.current) return;
1792
+ const error$1 = err;
1793
+ setError(error$1);
1794
+ await alepha.events.emit("react:action:error", {
1795
+ type: "custom",
1796
+ id: options.id,
1797
+ error: error$1
1798
+ });
1799
+ if (options.onError) await options.onError(error$1);
1800
+ else throw error$1;
1801
+ } finally {
1802
+ isExecutingRef.current = false;
1803
+ setLoading(false);
1804
+ await alepha.events.emit("react:action:end", {
1805
+ type: "custom",
1806
+ id: options.id
1807
+ });
1808
+ if (abortControllerRef.current === abortController) abortControllerRef.current = void 0;
1809
+ }
1810
+ }, [
1811
+ ...deps,
1812
+ options.id,
1813
+ options.onError,
1814
+ options.onSuccess
1815
+ ]);
1816
+ const handler = useCallback(async (...args) => {
1817
+ if (options.debounce) {
1818
+ if (debounceTimerRef.current) dateTimeProvider.clearTimeout(debounceTimerRef.current);
1819
+ return new Promise((resolve) => {
1820
+ debounceTimerRef.current = dateTimeProvider.createTimeout(async () => {
1821
+ resolve(await executeAction(...args));
1822
+ }, options.debounce ?? 0);
1823
+ });
1824
+ }
1825
+ return executeAction(...args);
1826
+ }, [executeAction, options.debounce]);
1827
+ const cancel = useCallback(() => {
1828
+ if (debounceTimerRef.current) {
1829
+ dateTimeProvider.clearTimeout(debounceTimerRef.current);
1830
+ debounceTimerRef.current = void 0;
1831
+ }
1832
+ if (abortControllerRef.current) {
1833
+ abortControllerRef.current.abort();
1834
+ abortControllerRef.current = void 0;
1835
+ }
1836
+ if (isMountedRef.current) {
1837
+ isExecutingRef.current = false;
1838
+ setLoading(false);
1839
+ }
1840
+ }, []);
1841
+ useEffect(() => {
1842
+ if (options.runOnInit) handler(...[]);
1843
+ }, []);
1844
+ useEffect(() => {
1845
+ if (!options.runEvery) return;
1846
+ intervalRef.current = dateTimeProvider.createInterval(() => handler(...[]), options.runEvery, true);
1847
+ return () => {
1848
+ if (intervalRef.current) {
1849
+ dateTimeProvider.clearInterval(intervalRef.current);
1850
+ intervalRef.current = void 0;
1851
+ }
1852
+ };
1853
+ }, [handler, options.runEvery]);
1854
+ return {
1855
+ run: handler,
1856
+ loading,
1857
+ error,
1858
+ cancel
1859
+ };
1860
+ }
1861
+
1567
1862
  //#endregion
1568
1863
  //#region src/hooks/useActive.ts
1569
1864
  const useActive = (args) => {
1570
1865
  const router = useRouter();
1571
1866
  const [isPending, setPending] = useState(false);
1572
- const current = useRouterState().url.pathname;
1867
+ useRouterState().url.pathname;
1573
1868
  const options = typeof args === "string" ? { href: args } : {
1574
1869
  ...args,
1575
1870
  href: args.href
1576
1871
  };
1577
1872
  const href = options.href;
1578
- let isActive = current === href || current === `${href}/` || `${current}/` === href;
1579
- if (options.startWith && !isActive) isActive = current.startsWith(href);
1873
+ const isActive = router.isActive(href, options);
1580
1874
  return {
1581
1875
  isPending,
1582
1876
  isActive,
@@ -1696,11 +1990,16 @@ const AlephaReact = $module({
1696
1990
  services: [
1697
1991
  ReactServerProvider,
1698
1992
  ReactPageProvider,
1699
- ReactRouter
1993
+ ReactRouter,
1994
+ ReactPageService,
1995
+ ReactPageServerService
1700
1996
  ],
1701
- register: (alepha) => alepha.with(AlephaServer).with(AlephaServerCache).with(AlephaServerLinks).with(ReactServerProvider).with(ReactPageProvider).with(ReactRouter)
1997
+ register: (alepha) => alepha.with(AlephaDateTime).with(AlephaServer).with(AlephaServerCache).with(AlephaServerLinks).with({
1998
+ provide: ReactPageService,
1999
+ use: ReactPageServerService
2000
+ }).with(ReactServerProvider).with(ReactPageProvider).with(ReactRouter)
1702
2001
  });
1703
2002
 
1704
2003
  //#endregion
1705
- 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, ReactPageProvider, ReactRouter, ReactServerProvider, Redirection, RouterLayerContext, isPageRoute, ssrSchemaLoading, useActive, useAlepha, useClient, useInject, useQueryParams, useRouter, useRouterEvents, useRouterState, useSchema, useStore };
1706
- //# sourceMappingURL=index.js.map
2004
+ 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, ReactPageProvider, ReactRouter, ReactServerProvider, Redirection, RouterLayerContext, isPageRoute, ssrSchemaLoading, useAction, useActive, useAlepha, useClient, useEvents, useInject, useQueryParams, useRouter, useRouterState, useSchema, useStore };
2005
+ //# sourceMappingURL=index.mjs.map