-
Notifications
You must be signed in to change notification settings - Fork 6.5k
Expand file tree
/
Copy pathindex.tsx
More file actions
87 lines (77 loc) · 2.41 KB
/
index.tsx
File metadata and controls
87 lines (77 loc) · 2.41 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { Modal, Title, Content } from '@node-core/ui-components/Common/Modal';
import { useTranslations } from 'next-intl';
import { useMemo, type FC } from 'react';
import UnknownSeveritySection from '#site/components/EOL/UnknownSeveritySection';
import VulnerabilitiesTable from '#site/components/EOL/VulnerabilitiesTable';
import { SEVERITY_ORDER } from '#site/next.constants.mjs';
import type { ModalProps } from '#site/types';
import type {
EOLModalData,
KnownVulnerability,
UnknownSeverityVulnerability,
} from '#site/types/vulnerabilities';
const EOLModal: FC<ModalProps<EOLModalData>> = ({
open,
closeModal,
data: { release, vulnerabilities },
}) => {
const t = useTranslations();
const modalHeading = release.codename
? t('components.eolModal.title', {
version: release.major,
codename: release.codename,
})
: t('components.eolModal.titleWithoutCodename', { version: release.major });
const [knownVulnerabilities, unknownVulnerabilities] = useMemo(
() =>
vulnerabilities.reduce(
(acc, vulnerability) => {
if (vulnerability.severity === 'unknown') {
acc[1].push(vulnerability as UnknownSeverityVulnerability);
} else {
acc[0].push(vulnerability as KnownVulnerability);
}
return acc;
},
[[], []] as [
Array<KnownVulnerability>,
Array<UnknownSeverityVulnerability>,
]
),
[vulnerabilities]
);
useMemo(
() =>
knownVulnerabilities.sort(
(a, b) =>
SEVERITY_ORDER.indexOf(a.severity) -
SEVERITY_ORDER.indexOf(b.severity)
),
[knownVulnerabilities]
);
return (
<Modal open={open} onOpenChange={closeModal}>
<Title>{modalHeading}</Title>
<Content>
{vulnerabilities.length > 0 && (
<p className="m-1">
{t('components.eolModal.vulnerabilitiesMessage', {
count: vulnerabilities.length,
})}
</p>
)}
<VulnerabilitiesTable vulnerabilities={knownVulnerabilities} />
<UnknownSeveritySection
vulnerabilities={unknownVulnerabilities}
open={knownVulnerabilities.length > 0}
/>
{!vulnerabilities.length && (
<p className="m-1">
{t('components.eolModal.noVulnerabilitiesMessage')}
</p>
)}
</Content>
</Modal>
);
};
export default EOLModal;