Skip to content

Commit e3936ef

Browse files
authored
fix(docs): clicking the detail view link opens two new windows (#4989)
* refactor: integrated logic out of openVariantInNewWindow to getHref
1 parent 6af5246 commit e3936ef

File tree

2 files changed

+17
-34
lines changed

2 files changed

+17
-34
lines changed

showcases/react-showcase/src/components/default-component.tsx

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useCallback, useState } from 'react';
1+
import { useCallback, useState } from 'react';
22
import { DBCard, DBDivider, DBLink } from '../../../../output/react/src';
33
import type {
44
ReactDefaultComponentProps,
@@ -115,41 +115,24 @@ const DefaultComponent = ({
115115
const color = useQuery(redirectURLSearchParameters)[2];
116116

117117
const getHref = (variantName: string): string => {
118-
if (typeof globalThis !== 'undefined') {
119-
const searchParameters = new URLSearchParams(
120-
globalThis?.location?.href.split('?')[1]
121-
);
122-
searchParameters.set('page', variantName.toLowerCase());
123-
return `${globalThis?.location?.href.split('?')[0]}?${searchParameters.toString()}`;
124-
}
125-
126-
return '';
127-
};
128-
129-
const openVariantInNewWindow = (
130-
event: React.MouseEvent<HTMLAnchorElement>,
131-
variantName: string
132-
) => {
133118
if (
134-
typeof globalThis === 'undefined' ||
135-
!globalThis.location.origin ||
136-
!globalThis.location.href
119+
globalThis.window === undefined ||
120+
globalThis.location === undefined
137121
) {
138-
return;
122+
return `?page=${encodeURIComponent(variantName.toLowerCase())}`;
139123
}
140124

141-
const currentUrl = globalThis.location.href.split('?');
142-
const rawComponentUrl = currentUrl[0];
143-
const searchParameters = new URLSearchParams(currentUrl[1] ?? '');
125+
const [baseUrl, query = ''] = globalThis.location.href.split('?');
126+
const searchParameters = new URLSearchParams(query);
144127
searchParameters.set('page', variantName.toLowerCase());
145128

146129
const regexComponentOverviewFragment = /\/[a-z\d\-_]*\/overview/;
147130

148-
const openUrl = componentName
149-
? `${rawComponentUrl.replace(regexComponentOverviewFragment, `/${componentName}/overview`)}?${searchParameters.toString()}`
150-
: `${currentUrl[0]}?${searchParameters.toString()}`;
131+
if (componentName) {
132+
return `${baseUrl.replace(regexComponentOverviewFragment, `/${componentName}/overview`)}?${searchParameters.toString()}`;
133+
}
151134

152-
window.open(openUrl, '_blank');
135+
return `${baseUrl}?${searchParameters.toString()}`;
153136
};
154137

155138
if (pageName) {
@@ -196,9 +179,7 @@ const DefaultComponent = ({
196179
className="link-headline"
197180
content="external"
198181
target="_blank"
199-
onClick={(event) => {
200-
openVariantInNewWindow(event, variant.name);
201-
}}
182+
rel="noopener noreferrer"
202183
href={getHref(variant.name)}>
203184
{variant.name}
204185
</DBLink>

showcases/react-showcase/src/hooks/use-universal-search-parameters.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@ const useUniversalSearchParameters = (): [
2424
: useSearchParams();
2525

2626
const setSearchParameters = (parameters: Record<string, string>) => {
27-
if (typeof globalThis !== 'undefined') {
28-
const currentParameters = new URLSearchParams(
29-
globalThis.location.href.split('?')[1]
30-
);
27+
if (
28+
globalThis.window !== undefined &&
29+
globalThis.location !== undefined
30+
) {
31+
const searchPart = globalThis.location.search || '';
32+
const currentParameters = new URLSearchParams(searchPart);
3133
currentParameters.sort();
3234
const newParameters = new URLSearchParams(parameters);
3335
newParameters.sort();

0 commit comments

Comments
 (0)