-
Notifications
You must be signed in to change notification settings - Fork 273
Expand file tree
/
Copy pathindex.tsx
More file actions
48 lines (40 loc) · 1.63 KB
/
index.tsx
File metadata and controls
48 lines (40 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { use } from 'react';
import useToggle from '#hooks/useToggle';
import { RequestContext } from '#app/contexts/RequestContext';
import SERVICES_WITH_NEW_NAV from '#app/components/Navigation/config';
import { ServiceContext } from '../../../contexts/ServiceContext';
import styles from './index.styles';
const ScriptLink = () => {
const { scriptLink, service } = use(ServiceContext);
const { pathname, variant: currentVariant } = use(RequestContext);
const { enabled: scriptLinkEnabled } = useToggle('scriptLink');
const { text, variant: alternateVariant } = scriptLink || {};
if (!pathname) return null;
if (!scriptLinkEnabled) return null;
if (!alternateVariant) return null;
const pathPartsWithoutExtension = pathname
.replace(/\.[^/.]+$/, '') // remove any extensions, we don't want to link to AMP pages directly
.split('?')?.[0] // remove any query parameters
.split('/'); // split path into parts
const currentVariantIndex = pathPartsWithoutExtension.indexOf(
currentVariant as string,
);
pathPartsWithoutExtension[currentVariantIndex] = alternateVariant;
const pathToVariant = pathPartsWithoutExtension.join('/');
const useNewNavigationStyles = SERVICES_WITH_NEW_NAV.includes(service);
const linkStyles = useNewNavigationStyles ? styles.newNavLink : styles.link;
const containerStyles = useNewNavigationStyles
? styles.newNavContainer
: styles.container;
return (
<a
css={linkStyles}
href={pathToVariant}
data-variant={alternateVariant}
className="focusIndicatorRemove"
>
<span css={containerStyles}>{text}</span>
</a>
);
};
export default ScriptLink;