@koordinates/xstate-tree 4.6.6 → 4.7.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.
- package/lib/builders.js +10 -2
- package/lib/index.js +2 -1
- package/lib/routing/index.js +3 -1
- package/lib/routing/useOnRoute.js +26 -0
- package/lib/xstate-tree.d.ts +12 -0
- package/package.json +1 -1
package/lib/builders.js
CHANGED
|
@@ -180,11 +180,19 @@ exports.viewToMachine = viewToMachine;
|
|
|
180
180
|
* @returns an xstate-tree machine that will render the right machines based on the routing events
|
|
181
181
|
*/
|
|
182
182
|
function buildRoutingMachine(_routes, mappings) {
|
|
183
|
+
/**
|
|
184
|
+
* States in xstate can't contain dots, since the states are named after the routing events
|
|
185
|
+
* if the routing event contains a dot that will make a state with a dot in it
|
|
186
|
+
* this function sanitizes the event name to remove dots and is used for the state names and targets
|
|
187
|
+
*/
|
|
188
|
+
function sanitizeEventName(event) {
|
|
189
|
+
return event.replace(/\.([a-zA-Z])/g, (_, letter) => letter.toUpperCase());
|
|
190
|
+
}
|
|
183
191
|
const contentSlot = (0, slots_1.singleSlot)("Content");
|
|
184
192
|
const mappingsToStates = Object.entries(mappings).reduce((acc, [event, _machine]) => {
|
|
185
193
|
return {
|
|
186
194
|
...acc,
|
|
187
|
-
[event]: {
|
|
195
|
+
[sanitizeEventName(event)]: {
|
|
188
196
|
invoke: {
|
|
189
197
|
src: (_ctx, e) => {
|
|
190
198
|
return mappings[e.type];
|
|
@@ -197,7 +205,7 @@ function buildRoutingMachine(_routes, mappings) {
|
|
|
197
205
|
const mappingsToEvents = Object.keys(mappings).reduce((acc, event) => ({
|
|
198
206
|
...acc,
|
|
199
207
|
[event]: {
|
|
200
|
-
target: `.${event}`,
|
|
208
|
+
target: `.${sanitizeEventName(event)}`,
|
|
201
209
|
},
|
|
202
210
|
}), {});
|
|
203
211
|
const machine = (0, xstate_1.createMachine)({
|
package/lib/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.lazy = exports.loggingMetaOptions = exports.TestRoutingContext = exports.useActiveRouteEvents = exports.useRouteArgsIfActive = exports.useIsRouteActive = exports.matchRoute = exports.buildCreateRoute = exports.Link = exports.slotTestingDummyFactory = exports.genericSlotsTestingDummy = exports.buildViewProps = exports.buildTestRootComponent = exports.onBroadcast = exports.buildRootComponent = exports.broadcast = void 0;
|
|
17
|
+
exports.lazy = exports.loggingMetaOptions = exports.useOnRoute = exports.TestRoutingContext = exports.useActiveRouteEvents = exports.useRouteArgsIfActive = exports.useIsRouteActive = exports.matchRoute = exports.buildCreateRoute = exports.Link = exports.slotTestingDummyFactory = exports.genericSlotsTestingDummy = exports.buildViewProps = exports.buildTestRootComponent = exports.onBroadcast = exports.buildRootComponent = exports.broadcast = void 0;
|
|
18
18
|
__exportStar(require("./builders"), exports);
|
|
19
19
|
__exportStar(require("./slots"), exports);
|
|
20
20
|
var xstateTree_1 = require("./xstateTree");
|
|
@@ -35,6 +35,7 @@ Object.defineProperty(exports, "useIsRouteActive", { enumerable: true, get: func
|
|
|
35
35
|
Object.defineProperty(exports, "useRouteArgsIfActive", { enumerable: true, get: function () { return routing_1.useRouteArgsIfActive; } });
|
|
36
36
|
Object.defineProperty(exports, "useActiveRouteEvents", { enumerable: true, get: function () { return routing_1.useActiveRouteEvents; } });
|
|
37
37
|
Object.defineProperty(exports, "TestRoutingContext", { enumerable: true, get: function () { return routing_1.TestRoutingContext; } });
|
|
38
|
+
Object.defineProperty(exports, "useOnRoute", { enumerable: true, get: function () { return routing_1.useOnRoute; } });
|
|
38
39
|
var useService_1 = require("./useService");
|
|
39
40
|
Object.defineProperty(exports, "loggingMetaOptions", { enumerable: true, get: function () { return useService_1.loggingMetaOptions; } });
|
|
40
41
|
var lazy_1 = require("./lazy");
|
package/lib/routing/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useActiveRouteEvents = exports.useInTestRoutingContext = exports.useInRoutingContext = exports.TestRoutingContext = exports.RoutingContext = exports.useRouteArgsIfActive = exports.useIsRouteActive = exports.handleLocationChange = exports.matchRoute = exports.Link = exports.joinRoutes = exports.buildCreateRoute = void 0;
|
|
3
|
+
exports.useActiveRouteEvents = exports.useInTestRoutingContext = exports.useInRoutingContext = exports.TestRoutingContext = exports.RoutingContext = exports.useOnRoute = exports.useRouteArgsIfActive = exports.useIsRouteActive = exports.handleLocationChange = exports.matchRoute = exports.Link = exports.joinRoutes = exports.buildCreateRoute = void 0;
|
|
4
4
|
var createRoute_1 = require("./createRoute");
|
|
5
5
|
Object.defineProperty(exports, "buildCreateRoute", { enumerable: true, get: function () { return createRoute_1.buildCreateRoute; } });
|
|
6
6
|
var joinRoutes_1 = require("./joinRoutes");
|
|
@@ -15,6 +15,8 @@ var useIsRouteActive_1 = require("./useIsRouteActive");
|
|
|
15
15
|
Object.defineProperty(exports, "useIsRouteActive", { enumerable: true, get: function () { return useIsRouteActive_1.useIsRouteActive; } });
|
|
16
16
|
var useRouteArgsIfActive_1 = require("./useRouteArgsIfActive");
|
|
17
17
|
Object.defineProperty(exports, "useRouteArgsIfActive", { enumerable: true, get: function () { return useRouteArgsIfActive_1.useRouteArgsIfActive; } });
|
|
18
|
+
var useOnRoute_1 = require("./useOnRoute");
|
|
19
|
+
Object.defineProperty(exports, "useOnRoute", { enumerable: true, get: function () { return useOnRoute_1.useOnRoute; } });
|
|
18
20
|
var providers_1 = require("./providers");
|
|
19
21
|
Object.defineProperty(exports, "RoutingContext", { enumerable: true, get: function () { return providers_1.RoutingContext; } });
|
|
20
22
|
Object.defineProperty(exports, "TestRoutingContext", { enumerable: true, get: function () { return providers_1.TestRoutingContext; } });
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useOnRoute = void 0;
|
|
4
|
+
const providers_1 = require("./providers");
|
|
5
|
+
/**
|
|
6
|
+
* @public
|
|
7
|
+
* Accepts a single Route and returns true if the route is currently active and marked as an index route.
|
|
8
|
+
* False if not.
|
|
9
|
+
*
|
|
10
|
+
* If used outside of a RoutingContext, an error will be thrown.
|
|
11
|
+
* @param route - the route to check
|
|
12
|
+
* @returns true if the route is active and an index route, false if not
|
|
13
|
+
* @throws if used outside of an xstate-tree root
|
|
14
|
+
*/
|
|
15
|
+
function useOnRoute(route) {
|
|
16
|
+
const activeRouteEvents = (0, providers_1.useActiveRouteEvents)();
|
|
17
|
+
if (!activeRouteEvents) {
|
|
18
|
+
throw new Error("useOnRoute must be used within a RoutingContext. Are you using it outside of an xstate-tree Root?");
|
|
19
|
+
}
|
|
20
|
+
return activeRouteEvents.some((activeRouteEvent) => {
|
|
21
|
+
var _a;
|
|
22
|
+
return activeRouteEvent.type === route.event &&
|
|
23
|
+
((_a = activeRouteEvent.meta) === null || _a === void 0 ? void 0 : _a.indexEvent) === true;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
exports.useOnRoute = useOnRoute;
|
package/lib/xstate-tree.d.ts
CHANGED
|
@@ -809,6 +809,18 @@ export declare function useActiveRouteEvents(): {
|
|
|
809
809
|
*/
|
|
810
810
|
export declare function useIsRouteActive(...routes: AnyRoute[]): boolean;
|
|
811
811
|
|
|
812
|
+
/**
|
|
813
|
+
* @public
|
|
814
|
+
* Accepts a single Route and returns true if the route is currently active and marked as an index route.
|
|
815
|
+
* False if not.
|
|
816
|
+
*
|
|
817
|
+
* If used outside of a RoutingContext, an error will be thrown.
|
|
818
|
+
* @param route - the route to check
|
|
819
|
+
* @returns true if the route is active and an index route, false if not
|
|
820
|
+
* @throws if used outside of an xstate-tree root
|
|
821
|
+
*/
|
|
822
|
+
export declare function useOnRoute(route: AnyRoute): boolean;
|
|
823
|
+
|
|
812
824
|
/**
|
|
813
825
|
* @public
|
|
814
826
|
* Returns the arguments for the given route if the route is active.
|
package/package.json
CHANGED