@keycloakify/keycloak-account-ui 25.0.1-rc.9 → 25.0.2-rc.1

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.
@@ -18,8 +18,6 @@ export type KcContextLike = {
18
18
  scheme: string;
19
19
  };
20
20
  locale: string;
21
- referrerName?: string;
22
- referrer_uri?: string;
23
21
  isAuthorizationEnabled: boolean;
24
22
  deleteAccountAllowed: boolean;
25
23
  updateEmailFeatureEnabled: boolean;
@@ -33,7 +33,7 @@ function init(params) {
33
33
  var _a, _b;
34
34
  exit_condition: {
35
35
  const paramsFingerprint = JSON.stringify(params);
36
- if (paramsFingerprint === undefined) {
36
+ if (previousRunParamsFingerprint === undefined) {
37
37
  previousRunParamsFingerprint = paramsFingerprint;
38
38
  break exit_condition;
39
39
  }
@@ -43,12 +43,20 @@ function init(params) {
43
43
  }
44
44
  return;
45
45
  }
46
- const { content = defaultContent, kcContext, logoUrl = defaultLogoSvgUrl, } = params;
47
- {
48
- const url = new URL(window.location.href);
49
- url.searchParams.delete("referrer");
50
- url.searchParams.delete("referrer_uri");
51
- window.history.replaceState({}, "", url.toString());
46
+ const { content = defaultContent, kcContext } = params;
47
+ const logoUrl = (() => {
48
+ var _a;
49
+ const logoUrl_params = (_a = params.logoUrl) !== null && _a !== void 0 ? _a : defaultLogoSvgUrl;
50
+ const url = new URL(logoUrl_params.startsWith("http")
51
+ ? logoUrl_params
52
+ : joinPath(window.location.origin, logoUrl_params));
53
+ return url.href.substring(url.origin.length);
54
+ })();
55
+ const resourceUrl = kcContext.resourceUrl;
56
+ if (!logoUrl.startsWith(resourceUrl)) {
57
+ const error = new Error(`ERROR: The logo url can't be an external url.`);
58
+ alert(error.message);
59
+ throw error;
52
60
  }
53
61
  const environment = {
54
62
  serverBaseUrl: kcContext.serverBaseUrl,
@@ -56,13 +64,13 @@ function init(params) {
56
64
  authServerUrl: kcContext.authServerUrl,
57
65
  realm: kcContext.realm.name,
58
66
  clientId: kcContext.clientId,
59
- resourceUrl: kcContext.resourceUrl,
60
- logo: "",
67
+ resourceUrl,
68
+ logo: logoUrl.substring(resourceUrl.length),
61
69
  logoUrl: logoUrl,
62
70
  baseUrl: `${kcContext.baseUrl.scheme}:${kcContext.baseUrl.rawSchemeSpecificPart}`,
63
71
  locale: kcContext.locale,
64
- referrerName: (_a = kcContext.referrerName) !== null && _a !== void 0 ? _a : "",
65
- referrerUrl: (_b = kcContext.referrer_uri) !== null && _b !== void 0 ? _b : "",
72
+ referrerName: (_a = readQueryParamOrRestoreFromSessionStorage({ name: "referrer" })) !== null && _a !== void 0 ? _a : "",
73
+ referrerUrl: (_b = readQueryParamOrRestoreFromSessionStorage({ name: "referrer_uri" })) !== null && _b !== void 0 ? _b : "",
66
74
  features: {
67
75
  isRegistrationEmailAsUsername: kcContext.realm.registrationEmailAsUsername,
68
76
  isEditUserNameAllowed: kcContext.realm.editUsernameAllowed,
@@ -96,4 +104,18 @@ function init(params) {
96
104
  return realFetch(...args);
97
105
  };
98
106
  }
107
+ function readQueryParamOrRestoreFromSessionStorage(params) {
108
+ var _a;
109
+ const { name } = params;
110
+ const url = new URL(window.location.href);
111
+ const value = url.searchParams.get(name);
112
+ const PREFIX = "keycloakify:";
113
+ if (value !== null) {
114
+ sessionStorage.setItem(`${PREFIX}${name}`, value);
115
+ url.searchParams.delete(name);
116
+ window.history.replaceState({}, "", url.toString());
117
+ return value;
118
+ }
119
+ return (_a = sessionStorage.getItem(`${PREFIX}${name}`)) !== null && _a !== void 0 ? _a : undefined;
120
+ }
99
121
  //# sourceMappingURL=KcAccountUiLoader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KcAccountUiLoader.js","sourceRoot":"","sources":["src/KcAccountUiLoader.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KcAccountUiLoader.js","sourceRoot":"","sources":["src/KcAccountUiLoader.tsx"],"names":[],"mappings":"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"}
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
  <a href="https://github.com/keycloakify/keycloak-account-ui/actions">
9
9
  <img src="https://github.com/keycloakify/keycloak-account-ui/actions/workflows/ci.yaml/badge.svg?branch=main">
10
10
  </a>
11
- <a href="https://www.npmjs.com/package/@keycloakify/keycloak-account-ui/v/25.0.1-rc.9">
11
+ <a href="https://www.npmjs.com/package/@keycloakify/keycloak-account-ui/v/25.0.2-rc.1">
12
12
  <img src="https://img.shields.io/npm/dm/@keycloakify/keycloak-account-ui">
13
13
  </a>
14
14
  <p align="center">
@@ -26,19 +26,19 @@ All credits goes to the keycloak team for the original work. Mainly [@jonkoops
26
26
  This re-packaged distribution exists to make it possible to take ownership of
27
27
  some specific part of the Account UI to create your own custom version of it.
28
28
  In straight forward therms it make the Account UI ejectable, you can copy
29
- past [the source files](https://unpkg.com/browse/@keycloakify/keycloak-account-ui@25.0.1-rc.9/src/) that you want to modify into your codebase.
29
+ past [the source files](https://unpkg.com/browse/@keycloakify/keycloak-account-ui@25.0.2-rc.1/src/) that you want to modify into your codebase.
30
30
 
31
31
  For more details on integrating this package into your project, refer to the [Keycloakify documentation](https://keycloakify.dev).
32
32
 
33
33
  > **Note:** This package's GitHub repository does not contain any code as it is automatically generated at build time by [scripts/prepare.ts](/scripts/prepare.ts).
34
- > You can browse the sources includes int the NPM package [here](https://unpkg.com/browse/@keycloakify/keycloak-account-ui@25.0.1-rc.9/src/).
34
+ > You can browse the sources includes int the NPM package [here](https://unpkg.com/browse/@keycloakify/keycloak-account-ui@25.0.2-rc.1/src/).
35
35
 
36
36
  ## Installation
37
37
 
38
38
  > **Note:** This README file is automatically generated at build so the information above are guaranteed to be up to date.
39
- > You are currently viewing the README of [`@keycloakify/keycloak-account-ui@25.0.1-rc.9`](https://www.npmjs.com/package/@keycloakify/keycloak-account-ui/v/25.0.1-rc.9) that
40
- > mirrors [`@keycloak/keycloak-account-ui@25.0.1`](https://www.npmjs.com/package/@keycloak/keycloak-account-ui/v/25.0.1).
41
- > It is the version of the Account UI that ships with [**Keycloak 25.0.1**](https://github.com/keycloak/keycloak/tree/25.0.1/js/apps/account-ui).
39
+ > You are currently viewing the README of [`@keycloakify/keycloak-account-ui@25.0.2-rc.1`](https://www.npmjs.com/package/@keycloakify/keycloak-account-ui/v/25.0.2-rc.1) that
40
+ > mirrors [`@keycloak/keycloak-account-ui@25.0.2`](https://www.npmjs.com/package/@keycloak/keycloak-account-ui/v/25.0.2).
41
+ > It is the version of the Account UI that ships with [**Keycloak 25.0.2**](https://github.com/keycloak/keycloak/tree/25.0.2/js/apps/account-ui).
42
42
 
43
43
  Here are all the dependencies that are required to use the Account UI in your project.
44
44
  It's important to respect the exact version range listed here to avoid any compatibility issues.
@@ -48,7 +48,7 @@ It's important to respect the exact version range listed here to avoid any compa
48
48
  ```json
49
49
  {
50
50
  "dependencies": {
51
- "@keycloakify/keycloak-account-ui": "25.0.1-rc.9",
51
+ "@keycloakify/keycloak-account-ui": "25.0.2-rc.1",
52
52
  "@patternfly/patternfly": "^5.3.1",
53
53
  "@patternfly/react-core": "^5.3.3",
54
54
  "@patternfly/react-icons": "^5.3.2",
@@ -59,9 +59,9 @@ It's important to respect the exact version range listed here to avoid any compa
59
59
  "react-hook-form": "7.51.5",
60
60
  "react-i18next": "^14.1.2",
61
61
  "react-router-dom": "^6.23.1",
62
- "keycloak-js": "25.0.1",
62
+ "keycloak-js": "25.0.2",
63
63
  "@patternfly/react-styles": "^5.3.1",
64
- "@keycloak/keycloak-admin-client": "25.0.1"
64
+ "@keycloak/keycloak-admin-client": "25.0.2"
65
65
  },
66
66
  "devDependencies": {
67
67
  "@types/lodash-es": "^4.17.12"
@@ -72,4 +72,4 @@ It's important to respect the exact version range listed here to avoid any compa
72
72
  ## Ejecting
73
73
 
74
74
  You can take partial ownership of some parts of the Account UI by copy pasting the sources files you want to modify into your codebase.
75
- You can browse the sources files **[here](https://unpkg.com/browse/@keycloakify/keycloak-account-ui@25.0.1-rc.9/src/)**.
75
+ You can browse the sources files **[here](https://unpkg.com/browse/@keycloakify/keycloak-account-ui@25.0.2-rc.1/src/)**.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@keycloakify/keycloak-account-ui",
3
- "version": "25.0.1-rc.9",
4
- "description": "",
3
+ "version": "25.0.2-rc.1",
4
+ "description": "Repackaged Keycloak Account UI",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git://github.com/keycloakify/keycloak-account-ui.git"
@@ -397,9 +397,9 @@
397
397
  "react-hook-form": "7.51.5",
398
398
  "react-i18next": "^14.1.2",
399
399
  "react-router-dom": "^6.23.1",
400
- "keycloak-js": "25.0.1",
400
+ "keycloak-js": "25.0.2",
401
401
  "@patternfly/react-styles": "^5.3.1",
402
- "@keycloak/keycloak-admin-client": "25.0.1"
402
+ "@keycloak/keycloak-admin-client": "25.0.2"
403
403
  },
404
404
  "devDependencies": {
405
405
  "react": "^18.3.1",
@@ -431,9 +431,9 @@
431
431
  "react-hook-form": "7.51.5",
432
432
  "react-i18next": "^14.1.2",
433
433
  "react-router-dom": "^6.23.1",
434
- "keycloak-js": "25.0.1",
434
+ "keycloak-js": "25.0.2",
435
435
  "@patternfly/react-styles": "^5.3.1",
436
- "@keycloak/keycloak-admin-client": "25.0.1"
436
+ "@keycloak/keycloak-admin-client": "25.0.2"
437
437
  },
438
438
  "dependencies": {
439
439
  "tsafe": "^1.7.2"
@@ -1,6 +1,6 @@
1
1
  declare const content: readonly [{
2
2
  readonly label: "personalInfo";
3
- readonly path: "/";
3
+ readonly path: "";
4
4
  }, {
5
5
  readonly label: "accountSecurity";
6
6
  readonly children: readonly [{
package/public/content.js CHANGED
@@ -1,7 +1,7 @@
1
1
  const content = [
2
2
  {
3
3
  "label": "personalInfo",
4
- "path": "/"
4
+ "path": ""
5
5
  },
6
6
  {
7
7
  "label": "accountSecurity",
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/public/content.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;IACd;QACE,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,GAAG;KACZ;IACD;QACE,OAAO,EAAE,iBAAiB;QAC1B,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,WAAW;gBACpB,MAAM,EAAE,6BAA6B;aACtC;YACD;gBACE,OAAO,EAAE,gBAAgB;gBACzB,MAAM,EAAE,kCAAkC;aAC3C;YACD;gBACE,OAAO,EAAE,gBAAgB;gBACzB,MAAM,EAAE,kCAAkC;gBAC1C,WAAW,EAAE,yBAAyB;aACvC;SACF;KACF;IACD;QACE,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,cAAc;KACvB;IACD;QACE,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,sBAAsB;KACpC;IACD;QACE,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,kBAAkB;KAChC;CACO,CAAC;AACX,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/public/content.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;IACd;QACE,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,EAAE;KACX;IACD;QACE,OAAO,EAAE,iBAAiB;QAC1B,UAAU,EAAE;YACV;gBACE,OAAO,EAAE,WAAW;gBACpB,MAAM,EAAE,6BAA6B;aACtC;YACD;gBACE,OAAO,EAAE,gBAAgB;gBACzB,MAAM,EAAE,kCAAkC;aAC3C;YACD;gBACE,OAAO,EAAE,gBAAgB;gBACzB,MAAM,EAAE,kCAAkC;gBAC1C,WAAW,EAAE,yBAAyB;aACvC;SACF;KACF;IACD;QACE,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,cAAc;KACvB;IACD;QACE,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,sBAAsB;KACpC;IACD;QACE,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,kBAAkB;KAChC;CACO,CAAC;AACX,eAAe,OAAO,CAAC"}
package/root/PageNav.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { PropsWithChildren } from "react";
2
- import { To } from "react-router-dom";
3
2
  import { type Feature } from "../environment";
4
3
  import { TFuncKey } from "../i18n";
5
4
  type RootMenuItem = {
@@ -16,8 +15,8 @@ type MenuItemWithChildren = {
16
15
  export type MenuItem = RootMenuItem | MenuItemWithChildren;
17
16
  export declare const PageNav: () => import("react/jsx-runtime").JSX.Element;
18
17
  type NavLinkProps = {
19
- to: To;
18
+ path: string;
20
19
  isActive: boolean;
21
20
  };
22
- export declare const NavLink: ({ to, isActive, children, }: PropsWithChildren<NavLinkProps>) => import("react/jsx-runtime").JSX.Element;
21
+ export declare const NavLink: ({ path, isActive, children, }: PropsWithChildren<NavLinkProps>) => import("react/jsx-runtime").JSX.Element;
23
22
  export {};
package/root/PageNav.js CHANGED
@@ -21,23 +21,26 @@ function NavMenuItem({ menuItem }) {
21
21
  const { pathname } = useLocation();
22
22
  const isActive = useMemo(() => matchMenuItem(pathname, menuItem), [pathname, menuItem]);
23
23
  if ("path" in menuItem) {
24
- return (_jsx(NavLink, { to: menuItem.path, isActive: isActive, children: t(menuItem.label) }));
24
+ return (_jsx(NavLink, { path: menuItem.path, isActive: isActive, children: t(menuItem.label) }));
25
25
  }
26
26
  return (_jsx(NavExpandable, { "data-testid": menuItem.label, title: t(menuItem.label), isActive: isActive, isExpanded: isActive, children: menuItem.children
27
27
  .filter((menuItem) => menuItem.isVisible ? features[menuItem.isVisible] : true)
28
28
  .map((child) => (_jsx(NavMenuItem, { menuItem: child }, child.label))) }));
29
29
  }
30
+ function getFullUrl(path) {
31
+ return `${new URL(environment.baseUrl).pathname}${path}`;
32
+ }
30
33
  function matchMenuItem(currentPath, menuItem) {
31
34
  if ("path" in menuItem) {
32
- return !!matchPath(menuItem.path, currentPath);
35
+ return !!matchPath(getFullUrl(menuItem.path), currentPath);
33
36
  }
34
37
  return menuItem.children.some((child) => matchMenuItem(currentPath, child));
35
38
  }
36
- export const NavLink = ({ to, isActive, children, }) => {
37
- const menuItemPath = `${new URL(environment.baseUrl).pathname}${to}`;
39
+ export const NavLink = ({ path, isActive, children, }) => {
40
+ const menuItemPath = getFullUrl(path);
38
41
  const href = useHref(menuItemPath);
39
42
  const handleClick = useLinkClickHandler(menuItemPath);
40
- return (_jsx(NavItem, { "data-testid": to, to: href, isActive: isActive, onClick: (event) =>
43
+ return (_jsx(NavItem, { "data-testid": path, to: href, isActive: isActive, onClick: (event) =>
41
44
  // PatternFly does not have the correct type for this event, so we need to cast it.
42
45
  handleClick(event), children: children }));
43
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PageNav.js","sourceRoot":"","sources":["../src/root/PageNav.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PageNav.js","sourceRoot":"","sources":["../src/root/PageNav.tsx"],"names":[],"mappings":"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"}
@@ -26,8 +26,6 @@ export type KcContextLike = {
26
26
  scheme: string;
27
27
  };
28
28
  locale: string;
29
- referrerName?: string;
30
- referrer_uri?: string;
31
29
  isAuthorizationEnabled: boolean;
32
30
  deleteAccountAllowed: boolean;
33
31
  updateEmailFeatureEnabled: boolean;
@@ -78,7 +76,7 @@ function init(
78
76
  exit_condition: {
79
77
  const paramsFingerprint = JSON.stringify(params);
80
78
 
81
- if (paramsFingerprint === undefined) {
79
+ if (previousRunParamsFingerprint === undefined) {
82
80
  previousRunParamsFingerprint = paramsFingerprint;
83
81
  break exit_condition;
84
82
  }
@@ -91,19 +89,26 @@ function init(
91
89
  return;
92
90
  }
93
91
 
94
- const {
95
- content = defaultContent,
96
- kcContext,
97
- logoUrl = defaultLogoSvgUrl,
98
- } = params;
92
+ const { content = defaultContent, kcContext } = params;
99
93
 
100
- {
101
- const url = new URL(window.location.href);
94
+ const logoUrl = (() => {
95
+ const logoUrl_params = params.logoUrl ?? defaultLogoSvgUrl;
102
96
 
103
- url.searchParams.delete("referrer");
104
- url.searchParams.delete("referrer_uri");
97
+ const url = new URL(
98
+ logoUrl_params.startsWith("http")
99
+ ? logoUrl_params
100
+ : joinPath(window.location.origin, logoUrl_params),
101
+ );
105
102
 
106
- window.history.replaceState({}, "", url.toString());
103
+ return url.href.substring(url.origin.length);
104
+ })();
105
+
106
+ const resourceUrl = kcContext.resourceUrl;
107
+
108
+ if (!logoUrl.startsWith(resourceUrl)) {
109
+ const error = new Error(`ERROR: The logo url can't be an external url.`);
110
+ alert(error.message);
111
+ throw error;
107
112
  }
108
113
 
109
114
  const environment = {
@@ -112,13 +117,15 @@ function init(
112
117
  authServerUrl: kcContext.authServerUrl,
113
118
  realm: kcContext.realm.name,
114
119
  clientId: kcContext.clientId,
115
- resourceUrl: kcContext.resourceUrl,
116
- logo: "",
120
+ resourceUrl,
121
+ logo: logoUrl.substring(resourceUrl.length),
117
122
  logoUrl: logoUrl,
118
123
  baseUrl: `${kcContext.baseUrl.scheme}:${kcContext.baseUrl.rawSchemeSpecificPart}`,
119
124
  locale: kcContext.locale,
120
- referrerName: kcContext.referrerName ?? "",
121
- referrerUrl: kcContext.referrer_uri ?? "",
125
+ referrerName:
126
+ readQueryParamOrRestoreFromSessionStorage({ name: "referrer" }) ?? "",
127
+ referrerUrl:
128
+ readQueryParamOrRestoreFromSessionStorage({ name: "referrer_uri" }) ?? "",
122
129
  features: {
123
130
  isRegistrationEmailAsUsername:
124
131
  kcContext.realm.registrationEmailAsUsername,
@@ -162,3 +169,24 @@ function init(
162
169
  return realFetch(...args);
163
170
  };
164
171
  }
172
+
173
+ function readQueryParamOrRestoreFromSessionStorage(params: {
174
+ name: string;
175
+ }): string | undefined {
176
+ const { name } = params;
177
+
178
+ const url = new URL(window.location.href);
179
+
180
+ const value = url.searchParams.get(name);
181
+
182
+ const PREFIX = "keycloakify:";
183
+
184
+ if (value !== null) {
185
+ sessionStorage.setItem(`${PREFIX}${name}`, value);
186
+ url.searchParams.delete(name);
187
+ window.history.replaceState({}, "", url.toString());
188
+ return value;
189
+ }
190
+
191
+ return sessionStorage.getItem(`${PREFIX}${name}`) ?? undefined;
192
+ }
@@ -1,7 +1,7 @@
1
1
  const content = [
2
2
  {
3
3
  "label": "personalInfo",
4
- "path": "/"
4
+ "path": ""
5
5
  },
6
6
  {
7
7
  "label": "accountSecurity",
@@ -17,7 +17,6 @@ import {
17
17
  } from "react";
18
18
  import { useTranslation } from "react-i18next";
19
19
  import {
20
- To,
21
20
  matchPath,
22
21
  useHref,
23
22
  useLinkClickHandler,
@@ -92,7 +91,7 @@ function NavMenuItem({ menuItem }: NavMenuItemProps) {
92
91
 
93
92
  if ("path" in menuItem) {
94
93
  return (
95
- <NavLink to={menuItem.path} isActive={isActive}>
94
+ <NavLink path={menuItem.path} isActive={isActive}>
96
95
  {t(menuItem.label)}
97
96
  </NavLink>
98
97
  );
@@ -116,31 +115,35 @@ function NavMenuItem({ menuItem }: NavMenuItemProps) {
116
115
  );
117
116
  }
118
117
 
118
+ function getFullUrl(path: string) {
119
+ return `${new URL(environment.baseUrl).pathname}${path}`;
120
+ }
121
+
119
122
  function matchMenuItem(currentPath: string, menuItem: MenuItem): boolean {
120
123
  if ("path" in menuItem) {
121
- return !!matchPath(menuItem.path, currentPath);
124
+ return !!matchPath(getFullUrl(menuItem.path), currentPath);
122
125
  }
123
126
 
124
127
  return menuItem.children.some((child) => matchMenuItem(currentPath, child));
125
128
  }
126
129
 
127
130
  type NavLinkProps = {
128
- to: To;
131
+ path: string;
129
132
  isActive: boolean;
130
133
  };
131
134
 
132
135
  export const NavLink = ({
133
- to,
136
+ path,
134
137
  isActive,
135
138
  children,
136
139
  }: PropsWithChildren<NavLinkProps>) => {
137
- const menuItemPath = `${new URL(environment.baseUrl).pathname}${to}`;
140
+ const menuItemPath = getFullUrl(path);
138
141
  const href = useHref(menuItemPath);
139
142
  const handleClick = useLinkClickHandler(menuItemPath);
140
143
 
141
144
  return (
142
145
  <NavItem
143
- data-testid={to}
146
+ data-testid={path}
144
147
  to={href}
145
148
  isActive={isActive}
146
149
  onClick={(event) =>