piral-breadcrumbs 0.15.0-beta.4725 → 0.15.0-beta.4739
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/esm/actions.d.ts +3 -3
- package/esm/actions.js +8 -5
- package/esm/actions.js.map +1 -1
- package/esm/create.js +20 -7
- package/esm/create.js.map +1 -1
- package/esm/types.d.ts +12 -6
- package/lib/actions.d.ts +3 -3
- package/lib/actions.js +11 -8
- package/lib/actions.js.map +1 -1
- package/lib/create.js +20 -7
- package/lib/create.js.map +1 -1
- package/lib/types.d.ts +12 -6
- package/package.json +3 -3
- package/piral-breadcrumbs.min.js +1 -1
- package/src/actions.test.ts +5 -3
- package/src/actions.ts +11 -5
- package/src/create.test.ts +21 -24
- package/src/create.ts +21 -7
- package/src/types.ts +10 -6
package/esm/actions.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GlobalStateContext } from 'piral-core';
|
|
1
|
+
import type { GlobalStateContext, Dict } from 'piral-core';
|
|
2
2
|
import { BreadcrumbRegistration } from './types';
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
3
|
+
export declare function registerBreadcrumbs(ctx: GlobalStateContext, values: Dict<BreadcrumbRegistration>): void;
|
|
4
|
+
export declare function unregisterBreadcrumbs(ctx: GlobalStateContext, names: Array<string>): void;
|
package/esm/actions.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export function
|
|
3
|
-
ctx.dispatch((state) => (Object.assign(Object.assign({}, state), { registry: Object.assign(Object.assign({}, state.registry), { breadcrumbs:
|
|
1
|
+
import { __rest } from "tslib";
|
|
2
|
+
export function registerBreadcrumbs(ctx, values) {
|
|
3
|
+
ctx.dispatch((state) => (Object.assign(Object.assign({}, state), { registry: Object.assign(Object.assign({}, state.registry), { breadcrumbs: Object.assign(Object.assign({}, state.registry.breadcrumbs), values) }) })));
|
|
4
4
|
}
|
|
5
|
-
export function
|
|
6
|
-
ctx.dispatch((state) => (Object.assign(Object.assign({}, state), { registry: Object.assign(Object.assign({}, state.registry), { breadcrumbs:
|
|
5
|
+
export function unregisterBreadcrumbs(ctx, names) {
|
|
6
|
+
ctx.dispatch((state) => (Object.assign(Object.assign({}, state), { registry: Object.assign(Object.assign({}, state.registry), { breadcrumbs: names.reduce((prev, name) => {
|
|
7
|
+
const _a = prev, _b = name, _ = _a[_b], rest = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
|
|
8
|
+
return rest;
|
|
9
|
+
}, state.registry.breadcrumbs) }) })));
|
|
7
10
|
}
|
|
8
11
|
//# sourceMappingURL=actions.js.map
|
package/esm/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":";AAGA,MAAM,UAAU,mBAAmB,CAAC,GAAuB,EAAE,MAAoC;IAC/F,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iCACnB,KAAK,KACR,QAAQ,kCACH,KAAK,CAAC,QAAQ,KACjB,WAAW,kCACN,KAAK,CAAC,QAAQ,CAAC,WAAW,GAC1B,MAAM,QAGb,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAuB,EAAE,KAAoB;IACjF,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iCACnB,KAAK,KACR,QAAQ,kCACH,KAAK,CAAC,QAAQ,KACjB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;gBACvC,MAA+B,KAAA,IAAI,EAA3B,KAAC,IAAK,EAAE,CAAC,SAAA,EAAK,IAAI,cAApB,uCAAsB,CAAO,CAAC;gBACpC,OAAO,IAAI,CAAC;YACd,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,OAEhC,CAAC,CAAC;AACN,CAAC"}
|
package/esm/create.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { __rest } from "tslib";
|
|
1
2
|
import * as actions from './actions';
|
|
2
3
|
import { buildName, withRootExtension, withAll } from 'piral-core';
|
|
3
4
|
import { DefaultBreadbrumbItem, DefaultBreadcrumbsContainer } from './default';
|
|
@@ -39,26 +40,38 @@ export function createBreadcrumbsApi(config = {}) {
|
|
|
39
40
|
return (context) => {
|
|
40
41
|
context.defineActions(actions);
|
|
41
42
|
context.dispatch(withAll(withBreadcrumbs(getBreadcrumbs(breadcrumbs)), withRootExtension('piral-breadcrumbs', Breadcrumbs)));
|
|
42
|
-
return (
|
|
43
|
+
return (_, target) => {
|
|
43
44
|
const pilet = target.name;
|
|
44
45
|
let next = 0;
|
|
45
46
|
return {
|
|
47
|
+
registerBreadcrumbs(values) {
|
|
48
|
+
const bc = {};
|
|
49
|
+
for (const value of values) {
|
|
50
|
+
const { name = next++ } = value, settings = __rest(value, ["name"]);
|
|
51
|
+
const id = buildName(pilet, name);
|
|
52
|
+
bc[id] = settings;
|
|
53
|
+
}
|
|
54
|
+
context.registerBreadcrumbs(bc);
|
|
55
|
+
return () => context.unregisterBreadcrumbs(Object.keys(bc));
|
|
56
|
+
},
|
|
46
57
|
registerBreadcrumb(name, settings) {
|
|
47
58
|
if (typeof name !== 'string') {
|
|
48
59
|
settings = name;
|
|
49
60
|
name = next++;
|
|
50
61
|
}
|
|
51
62
|
const id = buildName(pilet, name);
|
|
52
|
-
context.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
63
|
+
context.registerBreadcrumbs({
|
|
64
|
+
[id]: {
|
|
65
|
+
pilet,
|
|
66
|
+
matcher: getMatcher(settings),
|
|
67
|
+
settings,
|
|
68
|
+
},
|
|
56
69
|
});
|
|
57
|
-
return () =>
|
|
70
|
+
return () => context.unregisterBreadcrumbs([id]);
|
|
58
71
|
},
|
|
59
72
|
unregisterBreadcrumb(name) {
|
|
60
73
|
const id = buildName(pilet, name);
|
|
61
|
-
context.
|
|
74
|
+
context.unregisterBreadcrumbs([id]);
|
|
62
75
|
},
|
|
63
76
|
};
|
|
64
77
|
};
|
package/esm/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAqB,iBAAiB,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AACnG,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,4BAA4B;AAC5B,4EAA4E;AAC5E,MAAM,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAatC,SAAS,UAAU,CAAC,QAA4B;IAC9C,IAAI,QAAQ,CAAC,OAAO,YAAY,MAAM,EAAE;QACtC,OAAO,QAAQ,CAAC,OAAO,CAAC;KACzB;SAAM,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC/C,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC9B;SAAM;QACL,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC3B;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAgC;IACtD,MAAM,WAAW,GAAiC,EAAE,CAAC;IACrD,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE;QAC5B,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG;YAC7B,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC7B,QAAQ;SACT,CAAC;KACH;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,WAAyC;IAChE,OAAO,CAAC,KAAkB,EAAe,EAAE,CAAC,iCACvC,KAAK,KACR,UAAU,kBACR,cAAc,EAAE,qBAAqB,EACrC,oBAAoB,EAAE,2BAA2B,IAC9C,KAAK,CAAC,UAAU,GAErB,QAAQ,kCACH,KAAK,CAAC,QAAQ,KACjB,WAAW,OAEb,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAA0B,EAAE;IAC/D,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAEpC,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE/B,OAAO,CAAC,QAAQ,CACd,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,iBAAiB,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAC3G,CAAC;QAEF,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
package/esm/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ComponentType,
|
|
1
|
+
import type { ComponentType, ReactNode } from 'react';
|
|
2
2
|
import type { Dict, BaseRegistration, RegistrationDisposer } from 'piral-core';
|
|
3
3
|
declare module 'piral-core/lib/types/custom' {
|
|
4
4
|
interface PiletCustomApi extends PiletBreadcrumbsApi {
|
|
@@ -8,15 +8,14 @@ declare module 'piral-core/lib/types/custom' {
|
|
|
8
8
|
interface PiralCustomActions {
|
|
9
9
|
/**
|
|
10
10
|
* Registers a new breadcrumb.
|
|
11
|
-
* @param
|
|
12
|
-
* @param value The breadcrumb registration.
|
|
11
|
+
* @param values The breadcrumbs to register.
|
|
13
12
|
*/
|
|
14
|
-
|
|
13
|
+
registerBreadcrumbs(values: Dict<BreadcrumbRegistration>): void;
|
|
15
14
|
/**
|
|
16
15
|
* Unregisters an existing breadcrumb.
|
|
17
16
|
* @param name The name of the breadcrumb to be removed.
|
|
18
17
|
*/
|
|
19
|
-
|
|
18
|
+
unregisterBreadcrumbs(names: Array<string>): void;
|
|
20
19
|
}
|
|
21
20
|
interface PiralCustomRegistryState {
|
|
22
21
|
/**
|
|
@@ -78,13 +77,20 @@ export interface BreadcrumbSettings extends PiralCustomBreadcrumbSettings {
|
|
|
78
77
|
/**
|
|
79
78
|
* The title of the breadcrumb.
|
|
80
79
|
*/
|
|
81
|
-
title:
|
|
80
|
+
title: ReactNode;
|
|
82
81
|
}
|
|
83
82
|
export interface BreadcrumbRegistration extends BaseRegistration {
|
|
84
83
|
matcher: RegExp;
|
|
85
84
|
settings: BreadcrumbSettings;
|
|
86
85
|
}
|
|
87
86
|
export interface PiletBreadcrumbsApi {
|
|
87
|
+
/**
|
|
88
|
+
* Registers a set of breadcrumbs.
|
|
89
|
+
* @param values The different breadcrumb settings.
|
|
90
|
+
*/
|
|
91
|
+
registerBreadcrumbs(values: Array<{
|
|
92
|
+
name?: string;
|
|
93
|
+
} & BreadcrumbSettings>): RegistrationDisposer;
|
|
88
94
|
/**
|
|
89
95
|
* Registers a breadcrumb with the provided settings.
|
|
90
96
|
* @param settings The settings for configuring the breadcrumb.
|
package/lib/actions.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GlobalStateContext } from 'piral-core';
|
|
1
|
+
import type { GlobalStateContext, Dict } from 'piral-core';
|
|
2
2
|
import { BreadcrumbRegistration } from './types';
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
3
|
+
export declare function registerBreadcrumbs(ctx: GlobalStateContext, values: Dict<BreadcrumbRegistration>): void;
|
|
4
|
+
export declare function unregisterBreadcrumbs(ctx: GlobalStateContext, names: Array<string>): void;
|
package/lib/actions.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
5
|
-
function
|
|
6
|
-
ctx.dispatch((state) => (Object.assign(Object.assign({}, state), { registry: Object.assign(Object.assign({}, state.registry), { breadcrumbs: (
|
|
3
|
+
exports.unregisterBreadcrumbs = exports.registerBreadcrumbs = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
function registerBreadcrumbs(ctx, values) {
|
|
6
|
+
ctx.dispatch((state) => (Object.assign(Object.assign({}, state), { registry: Object.assign(Object.assign({}, state.registry), { breadcrumbs: Object.assign(Object.assign({}, state.registry.breadcrumbs), values) }) })));
|
|
7
7
|
}
|
|
8
|
-
exports.
|
|
9
|
-
function
|
|
10
|
-
ctx.dispatch((state) => (Object.assign(Object.assign({}, state), { registry: Object.assign(Object.assign({}, state.registry), { breadcrumbs:
|
|
8
|
+
exports.registerBreadcrumbs = registerBreadcrumbs;
|
|
9
|
+
function unregisterBreadcrumbs(ctx, names) {
|
|
10
|
+
ctx.dispatch((state) => (Object.assign(Object.assign({}, state), { registry: Object.assign(Object.assign({}, state.registry), { breadcrumbs: names.reduce((prev, name) => {
|
|
11
|
+
const _a = prev, _b = name, _ = _a[_b], rest = tslib_1.__rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
|
|
12
|
+
return rest;
|
|
13
|
+
}, state.registry.breadcrumbs) }) })));
|
|
11
14
|
}
|
|
12
|
-
exports.
|
|
15
|
+
exports.unregisterBreadcrumbs = unregisterBreadcrumbs;
|
|
13
16
|
//# sourceMappingURL=actions.js.map
|
package/lib/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":";;;;AAGA,SAAgB,mBAAmB,CAAC,GAAuB,EAAE,MAAoC;IAC/F,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iCACnB,KAAK,KACR,QAAQ,kCACH,KAAK,CAAC,QAAQ,KACjB,WAAW,kCACN,KAAK,CAAC,QAAQ,CAAC,WAAW,GAC1B,MAAM,QAGb,CAAC,CAAC;AACN,CAAC;AAXD,kDAWC;AAED,SAAgB,qBAAqB,CAAC,GAAuB,EAAE,KAAoB;IACjF,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iCACnB,KAAK,KACR,QAAQ,kCACH,KAAK,CAAC,QAAQ,KACjB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;gBACvC,MAA+B,KAAA,IAAI,EAA3B,KAAC,IAAK,EAAE,CAAC,SAAA,EAAK,IAAI,sBAApB,uCAAsB,CAAO,CAAC;gBACpC,OAAO,IAAI,CAAC;YACd,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,OAEhC,CAAC,CAAC;AACN,CAAC;AAXD,sDAWC"}
|
package/lib/create.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createBreadcrumbsApi = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
const actions = require("./actions");
|
|
5
6
|
const piral_core_1 = require("piral-core");
|
|
6
7
|
const default_1 = require("./default");
|
|
@@ -42,26 +43,38 @@ function createBreadcrumbsApi(config = {}) {
|
|
|
42
43
|
return (context) => {
|
|
43
44
|
context.defineActions(actions);
|
|
44
45
|
context.dispatch((0, piral_core_1.withAll)(withBreadcrumbs(getBreadcrumbs(breadcrumbs)), (0, piral_core_1.withRootExtension)('piral-breadcrumbs', Breadcrumbs_1.Breadcrumbs)));
|
|
45
|
-
return (
|
|
46
|
+
return (_, target) => {
|
|
46
47
|
const pilet = target.name;
|
|
47
48
|
let next = 0;
|
|
48
49
|
return {
|
|
50
|
+
registerBreadcrumbs(values) {
|
|
51
|
+
const bc = {};
|
|
52
|
+
for (const value of values) {
|
|
53
|
+
const { name = next++ } = value, settings = tslib_1.__rest(value, ["name"]);
|
|
54
|
+
const id = (0, piral_core_1.buildName)(pilet, name);
|
|
55
|
+
bc[id] = settings;
|
|
56
|
+
}
|
|
57
|
+
context.registerBreadcrumbs(bc);
|
|
58
|
+
return () => context.unregisterBreadcrumbs(Object.keys(bc));
|
|
59
|
+
},
|
|
49
60
|
registerBreadcrumb(name, settings) {
|
|
50
61
|
if (typeof name !== 'string') {
|
|
51
62
|
settings = name;
|
|
52
63
|
name = next++;
|
|
53
64
|
}
|
|
54
65
|
const id = (0, piral_core_1.buildName)(pilet, name);
|
|
55
|
-
context.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
66
|
+
context.registerBreadcrumbs({
|
|
67
|
+
[id]: {
|
|
68
|
+
pilet,
|
|
69
|
+
matcher: getMatcher(settings),
|
|
70
|
+
settings,
|
|
71
|
+
},
|
|
59
72
|
});
|
|
60
|
-
return () =>
|
|
73
|
+
return () => context.unregisterBreadcrumbs([id]);
|
|
61
74
|
},
|
|
62
75
|
unregisterBreadcrumb(name) {
|
|
63
76
|
const id = (0, piral_core_1.buildName)(pilet, name);
|
|
64
|
-
context.
|
|
77
|
+
context.unregisterBreadcrumbs([id]);
|
|
65
78
|
},
|
|
66
79
|
};
|
|
67
80
|
};
|
package/lib/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";;;;AAAA,qCAAqC;AACrC,2CAAmG;AACnG,uCAA+E;AAC/E,+CAA4C;AAG5C,4BAA4B;AAC5B,4EAA4E;AAC5E,MAAM,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAatC,SAAS,UAAU,CAAC,QAA4B;IAC9C,IAAI,QAAQ,CAAC,OAAO,YAAY,MAAM,EAAE;QACtC,OAAO,QAAQ,CAAC,OAAO,CAAC;KACzB;SAAM,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC/C,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC9B;SAAM;QACL,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC3B;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAgC;IACtD,MAAM,WAAW,GAAiC,EAAE,CAAC;IACrD,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE;QAC5B,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG;YAC7B,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC7B,QAAQ;SACT,CAAC;KACH;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,WAAyC;IAChE,OAAO,CAAC,KAAkB,EAAe,EAAE,CAAC,iCACvC,KAAK,KACR,UAAU,kBACR,cAAc,EAAE,+BAAqB,EACrC,oBAAoB,EAAE,qCAA2B,IAC9C,KAAK,CAAC,UAAU,GAErB,QAAQ,kCACH,KAAK,CAAC,QAAQ,KACjB,WAAW,OAEb,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,SAA0B,EAAE;IAC/D,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAEpC,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE/B,OAAO,CAAC,QAAQ,CACd,IAAA,oBAAO,EAAC,eAAe,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,IAAA,8BAAiB,EAAC,mBAAmB,EAAE,yBAAW,CAAC,CAAC,CAC3G,CAAC;QAEF,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACnB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;YAC1B,IAAI,IAAI,GAAG,CAAC,CAAC;YAEb,OAAO;gBACL,mBAAmB,CAAC,MAAM;oBACxB,MAAM,EAAE,GAAG,EAAE,CAAC;oBAEd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;wBAC1B,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,KAAkB,KAAK,EAAlB,QAAQ,kBAAK,KAAK,EAAtC,QAA8B,CAAQ,CAAC;wBAC7C,MAAM,EAAE,GAAG,IAAA,sBAAS,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wBAClC,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;qBACnB;oBAED,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;oBAChC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9D,CAAC;gBACD,kBAAkB,CAAC,IAAI,EAAE,QAAS;oBAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;wBAC5B,QAAQ,GAAG,IAAI,CAAC;wBAChB,IAAI,GAAG,IAAI,EAAE,CAAC;qBACf;oBAED,MAAM,EAAE,GAAG,IAAA,sBAAS,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAClC,OAAO,CAAC,mBAAmB,CAAC;wBAC1B,CAAC,EAAE,CAAC,EAAE;4BACJ,KAAK;4BACL,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC;4BAC7B,QAAQ;yBACT;qBACF,CAAC,CAAC;oBACH,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnD,CAAC;gBACD,oBAAoB,CAAC,IAAI;oBACvB,MAAM,EAAE,GAAG,IAAA,sBAAS,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAClC,OAAO,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtC,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAlDD,oDAkDC"}
|
package/lib/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ComponentType,
|
|
1
|
+
import type { ComponentType, ReactNode } from 'react';
|
|
2
2
|
import type { Dict, BaseRegistration, RegistrationDisposer } from 'piral-core';
|
|
3
3
|
declare module 'piral-core/lib/types/custom' {
|
|
4
4
|
interface PiletCustomApi extends PiletBreadcrumbsApi {
|
|
@@ -8,15 +8,14 @@ declare module 'piral-core/lib/types/custom' {
|
|
|
8
8
|
interface PiralCustomActions {
|
|
9
9
|
/**
|
|
10
10
|
* Registers a new breadcrumb.
|
|
11
|
-
* @param
|
|
12
|
-
* @param value The breadcrumb registration.
|
|
11
|
+
* @param values The breadcrumbs to register.
|
|
13
12
|
*/
|
|
14
|
-
|
|
13
|
+
registerBreadcrumbs(values: Dict<BreadcrumbRegistration>): void;
|
|
15
14
|
/**
|
|
16
15
|
* Unregisters an existing breadcrumb.
|
|
17
16
|
* @param name The name of the breadcrumb to be removed.
|
|
18
17
|
*/
|
|
19
|
-
|
|
18
|
+
unregisterBreadcrumbs(names: Array<string>): void;
|
|
20
19
|
}
|
|
21
20
|
interface PiralCustomRegistryState {
|
|
22
21
|
/**
|
|
@@ -78,13 +77,20 @@ export interface BreadcrumbSettings extends PiralCustomBreadcrumbSettings {
|
|
|
78
77
|
/**
|
|
79
78
|
* The title of the breadcrumb.
|
|
80
79
|
*/
|
|
81
|
-
title:
|
|
80
|
+
title: ReactNode;
|
|
82
81
|
}
|
|
83
82
|
export interface BreadcrumbRegistration extends BaseRegistration {
|
|
84
83
|
matcher: RegExp;
|
|
85
84
|
settings: BreadcrumbSettings;
|
|
86
85
|
}
|
|
87
86
|
export interface PiletBreadcrumbsApi {
|
|
87
|
+
/**
|
|
88
|
+
* Registers a set of breadcrumbs.
|
|
89
|
+
* @param values The different breadcrumb settings.
|
|
90
|
+
*/
|
|
91
|
+
registerBreadcrumbs(values: Array<{
|
|
92
|
+
name?: string;
|
|
93
|
+
} & BreadcrumbSettings>): RegistrationDisposer;
|
|
88
94
|
/**
|
|
89
95
|
* Registers a breadcrumb with the provided settings.
|
|
90
96
|
* @param settings The settings for configuring the breadcrumb.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "piral-breadcrumbs",
|
|
3
|
-
"version": "0.15.0-beta.
|
|
3
|
+
"version": "0.15.0-beta.4739",
|
|
4
4
|
"description": "Plugin for creating a breadcrumb manager in Piral.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"piral",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@types/react": "^18.0.0",
|
|
68
68
|
"@types/react-router": "^5.1.8",
|
|
69
|
-
"piral-core": "0.15.0-beta.
|
|
69
|
+
"piral-core": "0.15.0-beta.4739",
|
|
70
70
|
"react": "^18.0.0",
|
|
71
71
|
"react-router": "^5.2.0"
|
|
72
72
|
},
|
|
@@ -75,5 +75,5 @@
|
|
|
75
75
|
"react": ">=16.8.0",
|
|
76
76
|
"react-router": "5.x"
|
|
77
77
|
},
|
|
78
|
-
"gitHead": "
|
|
78
|
+
"gitHead": "6e7b1a13a5178d9123a80e44bc59d52a7310e41f"
|
|
79
79
|
}
|
package/piral-breadcrumbs.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var pr=Object.create;var
|
|
1
|
+
(()=>{var pr=Object.create;var C=Object.defineProperty,lr=Object.defineProperties,dr=Object.getOwnPropertyDescriptor,fr=Object.getOwnPropertyDescriptors,br=Object.getOwnPropertyNames,S=Object.getOwnPropertySymbols,gr=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable;var H=(r,e,t)=>e in r?C(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,f=(r,e)=>{for(var t in e||(e={}))G.call(e,t)&&H(r,t,e[t]);if(S)for(var t of S(e))z.call(e,t)&&H(r,t,e[t]);return r},g=(r,e)=>lr(r,fr(e)),K=r=>C(r,"__esModule",{value:!0});var B=(r=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(r,{get:(e,t)=>(typeof require!="undefined"?require:e)[t]}):r)(function(r){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')}),L=r=>typeof r=="symbol"?r:r+"",y=(r,e)=>{var t={};for(var a in r)G.call(r,a)&&e.indexOf(a)<0&&(t[a]=r[a]);if(r!=null&&S)for(var a of S(r))e.indexOf(a)<0&&z.call(r,a)&&(t[a]=r[a]);return t};var W=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),hr=(r,e)=>{K(r);for(var t in e)C(r,t,{get:e[t],enumerable:!0})},Br=(r,e,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of br(e))!G.call(r,a)&&a!=="default"&&C(r,a,{get:()=>e[a],enumerable:!(t=dr(e,a))||t.enumerable});return r},x=r=>Br(K(C(r!=null?pr(gr(r)):{},"default",r&&r.__esModule&&"default"in r?{get:()=>r.default,enumerable:!0}:{value:r,enumerable:!0})),r);var tr=W((qr,er)=>{er.exports=Array.isArray||function(r){return Object.prototype.toString.call(r)=="[object Array]"}});var cr=W((Jr,R)=>{var D=tr();R.exports=ir;R.exports.parse=N;R.exports.compile=Er;R.exports.tokensToFunction=ar;R.exports.tokensToRegExp=nr;var Cr=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function N(r,e){for(var t=[],a=0,o=0,i="",m=e&&e.delimiter||"/",n;(n=Cr.exec(r))!=null;){var s=n[0],u=n[1],p=n.index;if(i+=r.slice(o,p),o=p+s.length,u){i+=u[1];continue}var c=r[o],l=n[2],d=n[3],b=n[4],w=n[5],v=n[6],P=n[7];i&&(t.push(i),i="");var A=l!=null&&c!=null&&c!==l,sr=v==="+"||v==="*",mr=v==="?"||v==="*",J=n[2]||m,M=b||w;t.push({name:d||a++,prefix:l||"",delimiter:J,optional:mr,repeat:sr,partial:A,asterisk:!!P,pattern:M?Ar(M):P?".*":"[^"+$(J)+"]+?"})}return o<r.length&&(i+=r.substr(o)),i&&t.push(i),t}function Er(r,e){return ar(N(r,e),e)}function wr(r){return encodeURI(r).replace(/[\/?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Pr(r){return encodeURI(r).replace(/[?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function ar(r,e){for(var t=new Array(r.length),a=0;a<r.length;a++)typeof r[a]=="object"&&(t[a]=new RegExp("^(?:"+r[a].pattern+")$",q(e)));return function(o,i){for(var m="",n=o||{},s=i||{},u=s.pretty?wr:encodeURIComponent,p=0;p<r.length;p++){var c=r[p];if(typeof c=="string"){m+=c;continue}var l=n[c.name],d;if(l==null)if(c.optional){c.partial&&(m+=c.prefix);continue}else throw new TypeError('Expected "'+c.name+'" to be defined');if(D(l)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(l)+"`");if(l.length===0){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var b=0;b<l.length;b++){if(d=u(l[b]),!t[p].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");m+=(b===0?c.prefix:c.delimiter)+d}continue}if(d=c.asterisk?Pr(l):u(l),!t[p].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');m+=c.prefix+d}return m}}function $(r){return r.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function Ar(r){return r.replace(/([=!:$\/()])/g,"\\$1")}function O(r,e){return r.keys=e,r}function q(r){return r&&r.sensitive?"":"i"}function Sr(r,e){var t=r.source.match(/\((?!\?)/g);if(t)for(var a=0;a<t.length;a++)e.push({name:a,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return O(r,e)}function Ir(r,e,t){for(var a=[],o=0;o<r.length;o++)a.push(ir(r[o],e,t).source);var i=new RegExp("(?:"+a.join("|")+")",q(t));return O(i,e)}function Tr(r,e,t){return nr(N(r,t),e,t)}function nr(r,e,t){D(e)||(t=e||t,e=[]),t=t||{};for(var a=t.strict,o=t.end!==!1,i="",m=0;m<r.length;m++){var n=r[m];if(typeof n=="string")i+=$(n);else{var s=$(n.prefix),u="(?:"+n.pattern+")";e.push(n),n.repeat&&(u+="(?:"+s+u+")*"),n.optional?n.partial?u=s+"("+u+")?":u="(?:"+s+"("+u+"))?":u=s+"("+u+")",i+=u}}var p=$(t.delimiter||"/"),c=i.slice(-p.length)===p;return a||(i=(c?i.slice(0,-p.length):i)+"(?:"+p+"(?=$))?"),o?i+="$":i+=a&&c?"":"(?="+p+"|$)",O(new RegExp("^"+i,q(t)),e)}function ir(r,e,t){return D(e)||(t=e||t,e=[]),t=t||{},r instanceof RegExp?Sr(r,e):D(r)?Ir(r,e,t):Tr(r,e,t)}});var U=x(B("react")),T=x(B("react-router"));var _=x(B("piral-core")),X=(0,_.getPiralComponent)("BreadcrumbsContainer"),Z=(0,_.getPiralComponent)("BreadcrumbItem");var Q=x(B("piral-core"));function xr(r,e){let[t]=r.filter(a=>a.matcher.test(e));return t}function vr(r,e){let t=e.split("/");for(;t.length>1;){t.pop();let a=t.join("/"),o=I(r,a);if(o)return o}}function I(r,e){if(e)return xr(r,e)||vr(r,e)}function V(r){let e=(0,Q.useGlobalState)(a=>a.registry.breadcrumbs),t=Object.keys(e).map(a=>e[a]);if(t.length>0){let a=I(t,r);if(a){let o=[a],i=I(t,a.settings.parent);for(;i!==void 0;)o.push(i),i=I(t,i.settings.parent);return o.reverse()}}return[]}var j=()=>{var m;let r=(0,T.useLocation)(),e=V(r.pathname),t=e.length-1,a=e[t],{params:o}=(0,T.useRouteMatch)((m=a==null?void 0:a.settings.path)!=null?m:"/"),i=e.map(({settings:n},s)=>{let w=n,{title:u,path:p}=w,c=y(w,["title","path"]),l=`bc_${s}_${n.path}`,d=s===t,b=p.replace(/:([A-Za-z0-9_]+)/g,(v,P)=>{var A;return(A=o[P])!=null?A:v});return U.createElement(Z,f({key:l,current:d,path:b},c),u)});return U.createElement(X,{children:i})};j.displayName="Breadcrumbs";var F={};hr(F,{registerBreadcrumbs:()=>yr,unregisterBreadcrumbs:()=>Rr});function yr(r,e){r.dispatch(t=>g(f({},t),{registry:g(f({},t.registry),{breadcrumbs:f(f({},t.registry.breadcrumbs),e)})}))}function Rr(r,e){r.dispatch(t=>g(f({},t),{registry:g(f({},t.registry),{breadcrumbs:e.reduce((a,o)=>{let n=a,{[o]:i}=n;return y(n,[L(o)])},t.registry.breadcrumbs)})}))}var h=x(B("piral-core"));var Y=x(B("react")),E=x(B("piral-core")),k=r=>Y.createElement(E.ExtensionSlot,{name:"breadcrumbs",params:r,empty:()=>(0,E.defaultRender)(r.children,"default_breadcrumbs")}),rr=r=>(0,E.defaultRender)(r.children);var or=cr();function ur(r){return r.matcher instanceof RegExp?r.matcher:typeof r.matcher=="string"?or(r.matcher):or(r.path)}function Dr(r){let e={},t=0;for(let a of r)e[`global-${t++}`]={pilet:void 0,matcher:ur(a),settings:a};return e}function $r(r){return e=>g(f({},e),{components:f({BreadcrumbItem:rr,BreadcrumbsContainer:k},e.components),registry:g(f({},e.registry),{breadcrumbs:r})})}function Wr(r={}){let{breadcrumbs:e=[]}=r;return t=>(t.defineActions(F),t.dispatch((0,h.withAll)($r(Dr(e)),(0,h.withRootExtension)("piral-breadcrumbs",j))),(a,o)=>{let i=o.name,m=0;return{registerBreadcrumbs(n){let s={};for(let p of n){let u=p,{name:c=m++}=u,l=y(u,["name"]),d=(0,h.buildName)(i,c);s[d]=l}return t.registerBreadcrumbs(s),()=>t.unregisterBreadcrumbs(Object.keys(s))},registerBreadcrumb(n,s){typeof n!="string"&&(s=n,n=m++);let u=(0,h.buildName)(i,n);return t.registerBreadcrumbs({[u]:{pilet:i,matcher:ur(s),settings:s}}),()=>t.unregisterBreadcrumbs([u])},unregisterBreadcrumb(n){let s=(0,h.buildName)(i,n);t.unregisterBreadcrumbs([s])}}})}})();
|
package/src/actions.test.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import create from 'zustand';
|
|
2
2
|
import { createListener } from 'piral-base';
|
|
3
3
|
import { createActions } from 'piral-core';
|
|
4
|
-
import {
|
|
4
|
+
import { registerBreadcrumbs, unregisterBreadcrumbs } from './actions';
|
|
5
5
|
|
|
6
6
|
describe('Breadcrumbs Actions Module', () => {
|
|
7
7
|
it('registerBreadcrumb and unregisterBreadcrumb', () => {
|
|
@@ -13,7 +13,9 @@ describe('Breadcrumbs Actions Module', () => {
|
|
|
13
13
|
},
|
|
14
14
|
}));
|
|
15
15
|
const ctx = createActions(state, createListener({}));
|
|
16
|
-
|
|
16
|
+
registerBreadcrumbs(ctx, {
|
|
17
|
+
foo: 10 as any,
|
|
18
|
+
});
|
|
17
19
|
expect((state.getState())).toEqual({
|
|
18
20
|
foo: 5,
|
|
19
21
|
registry: {
|
|
@@ -23,7 +25,7 @@ describe('Breadcrumbs Actions Module', () => {
|
|
|
23
25
|
},
|
|
24
26
|
},
|
|
25
27
|
});
|
|
26
|
-
|
|
28
|
+
unregisterBreadcrumbs(ctx, ['foo']);
|
|
27
29
|
expect((state.getState())).toEqual({
|
|
28
30
|
foo: 5,
|
|
29
31
|
registry: {
|
package/src/actions.ts
CHANGED
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { GlobalStateContext, Dict } from 'piral-core';
|
|
2
2
|
import { BreadcrumbRegistration } from './types';
|
|
3
3
|
|
|
4
|
-
export function
|
|
4
|
+
export function registerBreadcrumbs(ctx: GlobalStateContext, values: Dict<BreadcrumbRegistration>) {
|
|
5
5
|
ctx.dispatch((state) => ({
|
|
6
6
|
...state,
|
|
7
7
|
registry: {
|
|
8
8
|
...state.registry,
|
|
9
|
-
breadcrumbs:
|
|
9
|
+
breadcrumbs: {
|
|
10
|
+
...state.registry.breadcrumbs,
|
|
11
|
+
...values,
|
|
12
|
+
},
|
|
10
13
|
},
|
|
11
14
|
}));
|
|
12
15
|
}
|
|
13
16
|
|
|
14
|
-
export function
|
|
17
|
+
export function unregisterBreadcrumbs(ctx: GlobalStateContext, names: Array<string>) {
|
|
15
18
|
ctx.dispatch((state) => ({
|
|
16
19
|
...state,
|
|
17
20
|
registry: {
|
|
18
21
|
...state.registry,
|
|
19
|
-
breadcrumbs:
|
|
22
|
+
breadcrumbs: names.reduce((prev, name) => {
|
|
23
|
+
const { [name]: _, ...rest } = prev;
|
|
24
|
+
return rest;
|
|
25
|
+
}, state.registry.breadcrumbs),
|
|
20
26
|
},
|
|
21
27
|
}));
|
|
22
28
|
}
|
package/src/create.test.ts
CHANGED
|
@@ -38,55 +38,52 @@ const moduleMetadata = {
|
|
|
38
38
|
describe('Create Breadcrumb API Extensions', () => {
|
|
39
39
|
it('createBreadcrumbsApi can register and unregister a breadcrumb', () => {
|
|
40
40
|
const container = createMockContainer();
|
|
41
|
-
container.context.
|
|
42
|
-
container.context.
|
|
41
|
+
container.context.registerBreadcrumbs = jest.fn();
|
|
42
|
+
container.context.unregisterBreadcrumbs = jest.fn();
|
|
43
43
|
const api = createApi(container);
|
|
44
44
|
api.registerBreadcrumb('my-bc', {
|
|
45
45
|
title: 'My breadcrumb',
|
|
46
46
|
path: '/example',
|
|
47
47
|
});
|
|
48
|
-
expect(container.context.
|
|
49
|
-
expect(container.context.
|
|
48
|
+
expect(container.context.registerBreadcrumbs).toHaveBeenCalledTimes(1);
|
|
49
|
+
expect(container.context.unregisterBreadcrumbs).toHaveBeenCalledTimes(0);
|
|
50
50
|
api.unregisterBreadcrumb('my-bc');
|
|
51
|
-
expect(container.context.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
);
|
|
51
|
+
expect(container.context.unregisterBreadcrumbs).toHaveBeenCalledTimes(1);
|
|
52
|
+
const ids = Object.keys(container.context.registerBreadcrumbs.mock.calls[0][0]);
|
|
53
|
+
expect(container.context.unregisterBreadcrumbs.mock.calls[0][0]).toEqual(ids);
|
|
55
54
|
});
|
|
56
55
|
|
|
57
56
|
it('createBreadcrumbsApi can dispose a registered breadcrumb', () => {
|
|
58
57
|
const container = createMockContainer();
|
|
59
|
-
container.context.
|
|
60
|
-
container.context.
|
|
58
|
+
container.context.registerBreadcrumbs = jest.fn();
|
|
59
|
+
container.context.unregisterBreadcrumbs = jest.fn();
|
|
61
60
|
const api = createApi(container);
|
|
62
61
|
const dispose = api.registerBreadcrumb('my-bc', {
|
|
63
62
|
title: 'My breadcrumb',
|
|
64
63
|
path: '/example',
|
|
65
64
|
});
|
|
66
|
-
expect(container.context.
|
|
67
|
-
expect(container.context.
|
|
65
|
+
expect(container.context.registerBreadcrumbs).toHaveBeenCalledTimes(1);
|
|
66
|
+
expect(container.context.unregisterBreadcrumbs).toHaveBeenCalledTimes(0);
|
|
68
67
|
dispose();
|
|
69
|
-
expect(container.context.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
);
|
|
68
|
+
expect(container.context.unregisterBreadcrumbs).toHaveBeenCalledTimes(1);
|
|
69
|
+
const ids = Object.keys(container.context.registerBreadcrumbs.mock.calls[0][0]);
|
|
70
|
+
expect(container.context.unregisterBreadcrumbs.mock.calls[0][0]).toEqual(ids);
|
|
73
71
|
});
|
|
74
72
|
|
|
75
73
|
it('createBreadcrumbsApi can dispose a registered anonymous breadcrumb', () => {
|
|
76
74
|
const container = createMockContainer();
|
|
77
|
-
container.context.
|
|
78
|
-
container.context.
|
|
75
|
+
container.context.registerBreadcrumbs = jest.fn();
|
|
76
|
+
container.context.unregisterBreadcrumbs = jest.fn();
|
|
79
77
|
const api = createApi(container);
|
|
80
78
|
const dispose = api.registerBreadcrumb({
|
|
81
79
|
title: 'My breadcrumb',
|
|
82
80
|
path: '/example',
|
|
83
81
|
});
|
|
84
|
-
expect(container.context.
|
|
85
|
-
expect(container.context.
|
|
82
|
+
expect(container.context.registerBreadcrumbs).toHaveBeenCalledTimes(1);
|
|
83
|
+
expect(container.context.unregisterBreadcrumbs).toHaveBeenCalledTimes(0);
|
|
86
84
|
dispose();
|
|
87
|
-
expect(container.context.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
);
|
|
85
|
+
expect(container.context.unregisterBreadcrumbs).toHaveBeenCalledTimes(1);
|
|
86
|
+
const ids = Object.keys(container.context.registerBreadcrumbs.mock.calls[0][0]);
|
|
87
|
+
expect(container.context.unregisterBreadcrumbs.mock.calls[0][0]).toEqual(ids);
|
|
91
88
|
});
|
|
92
89
|
});
|
package/src/create.ts
CHANGED
|
@@ -72,11 +72,23 @@ export function createBreadcrumbsApi(config: DashboardConfig = {}): PiralPlugin<
|
|
|
72
72
|
withAll(withBreadcrumbs(getBreadcrumbs(breadcrumbs)), withRootExtension('piral-breadcrumbs', Breadcrumbs)),
|
|
73
73
|
);
|
|
74
74
|
|
|
75
|
-
return (
|
|
75
|
+
return (_, target) => {
|
|
76
76
|
const pilet = target.name;
|
|
77
77
|
let next = 0;
|
|
78
78
|
|
|
79
79
|
return {
|
|
80
|
+
registerBreadcrumbs(values) {
|
|
81
|
+
const bc = {};
|
|
82
|
+
|
|
83
|
+
for (const value of values) {
|
|
84
|
+
const { name = next++, ...settings } = value;
|
|
85
|
+
const id = buildName(pilet, name);
|
|
86
|
+
bc[id] = settings;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
context.registerBreadcrumbs(bc);
|
|
90
|
+
return () => context.unregisterBreadcrumbs(Object.keys(bc));
|
|
91
|
+
},
|
|
80
92
|
registerBreadcrumb(name, settings?) {
|
|
81
93
|
if (typeof name !== 'string') {
|
|
82
94
|
settings = name;
|
|
@@ -84,16 +96,18 @@ export function createBreadcrumbsApi(config: DashboardConfig = {}): PiralPlugin<
|
|
|
84
96
|
}
|
|
85
97
|
|
|
86
98
|
const id = buildName(pilet, name);
|
|
87
|
-
context.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
99
|
+
context.registerBreadcrumbs({
|
|
100
|
+
[id]: {
|
|
101
|
+
pilet,
|
|
102
|
+
matcher: getMatcher(settings),
|
|
103
|
+
settings,
|
|
104
|
+
},
|
|
91
105
|
});
|
|
92
|
-
return () =>
|
|
106
|
+
return () => context.unregisterBreadcrumbs([id]);
|
|
93
107
|
},
|
|
94
108
|
unregisterBreadcrumb(name) {
|
|
95
109
|
const id = buildName(pilet, name);
|
|
96
|
-
context.
|
|
110
|
+
context.unregisterBreadcrumbs([id]);
|
|
97
111
|
},
|
|
98
112
|
};
|
|
99
113
|
};
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ComponentType,
|
|
1
|
+
import type { ComponentType, ReactNode } from 'react';
|
|
2
2
|
import type { Dict, BaseRegistration, RegistrationDisposer } from 'piral-core';
|
|
3
3
|
|
|
4
4
|
declare module 'piral-core/lib/types/custom' {
|
|
@@ -9,15 +9,14 @@ declare module 'piral-core/lib/types/custom' {
|
|
|
9
9
|
interface PiralCustomActions {
|
|
10
10
|
/**
|
|
11
11
|
* Registers a new breadcrumb.
|
|
12
|
-
* @param
|
|
13
|
-
* @param value The breadcrumb registration.
|
|
12
|
+
* @param values The breadcrumbs to register.
|
|
14
13
|
*/
|
|
15
|
-
|
|
14
|
+
registerBreadcrumbs(values: Dict<BreadcrumbRegistration>): void;
|
|
16
15
|
/**
|
|
17
16
|
* Unregisters an existing breadcrumb.
|
|
18
17
|
* @param name The name of the breadcrumb to be removed.
|
|
19
18
|
*/
|
|
20
|
-
|
|
19
|
+
unregisterBreadcrumbs(names: Array<string>): void;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
interface PiralCustomRegistryState {
|
|
@@ -84,7 +83,7 @@ export interface BreadcrumbSettings extends PiralCustomBreadcrumbSettings {
|
|
|
84
83
|
/**
|
|
85
84
|
* The title of the breadcrumb.
|
|
86
85
|
*/
|
|
87
|
-
title:
|
|
86
|
+
title: ReactNode;
|
|
88
87
|
}
|
|
89
88
|
|
|
90
89
|
export interface BreadcrumbRegistration extends BaseRegistration {
|
|
@@ -93,6 +92,11 @@ export interface BreadcrumbRegistration extends BaseRegistration {
|
|
|
93
92
|
}
|
|
94
93
|
|
|
95
94
|
export interface PiletBreadcrumbsApi {
|
|
95
|
+
/**
|
|
96
|
+
* Registers a set of breadcrumbs.
|
|
97
|
+
* @param values The different breadcrumb settings.
|
|
98
|
+
*/
|
|
99
|
+
registerBreadcrumbs(values: Array<{ name?: string; } & BreadcrumbSettings>): RegistrationDisposer;
|
|
96
100
|
/**
|
|
97
101
|
* Registers a breadcrumb with the provided settings.
|
|
98
102
|
* @param settings The settings for configuring the breadcrumb.
|