-
Notifications
You must be signed in to change notification settings - Fork 6.3k
/
IndexLayout.tsx
69 lines (57 loc) · 1.83 KB
/
IndexLayout.tsx
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import BaseLayout from './BaseLayout';
import Banner from '@/components/Home/Banner';
import HomeDownloadButton from '@/components/Home/HomeDownloadButton';
import { useDetectOS } from '@/hooks/useDetectOS';
import { useLayoutContext } from '@/hooks/useLayoutContext';
import { WithNodeRelease } from '@/providers/withNodeRelease';
import type { FC, PropsWithChildren } from 'react';
import type { UserOS } from '@/types/userOS';
const getDownloadHeadTextOS = (os: UserOS, bitness: number) => {
switch (os) {
case 'MAC':
return ' macOS';
case 'WIN':
return ` Windows (x${bitness})`;
case 'LINUX':
return ` Linux (x64)`;
case 'OTHER':
return '';
}
};
const IndexLayout: FC<PropsWithChildren> = ({ children }) => {
const {
frontMatter: { labels },
} = useLayoutContext();
const { os, bitness } = useDetectOS();
const downloadHeadTextPrefix =
os === 'OTHER' ? labels?.['download'] : labels?.['download-for'];
const downloadHeadText = `${downloadHeadTextPrefix}${getDownloadHeadTextOS(
os,
bitness
)}`;
return (
<BaseLayout>
<div className="container">
<div id="home-intro">
{children}
<Banner />
<h2>{downloadHeadText}</h2>
<WithNodeRelease status="Active LTS">
{({ release }) => <HomeDownloadButton {...release} />}
</WithNodeRelease>
<WithNodeRelease status="Current">
{({ release }) => <HomeDownloadButton {...release} />}
</WithNodeRelease>
<p>
{labels?.['version-schedule-prompt']}{' '}
<a href="https://github.com/nodejs/release#release-schedule">
{labels?.['version-schedule-prompt-link-text']}
</a>
.
</p>
</div>
</div>
</BaseLayout>
);
};
export default IndexLayout;