forked from openshift-assisted/assisted-installer-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCpuArchitectureDropdown.tsx
105 lines (97 loc) · 3.22 KB
/
CpuArchitectureDropdown.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import * as React from 'react';
import { Dropdown, DropdownItem, FormGroup, MenuToggle } from '@patternfly/react-core';
import { useTranslation } from '../../../common/hooks/use-translation-wrapper';
import {
architectureData,
CpuArchitecture,
getFieldId,
StaticField,
SupportedCpuArchitecture,
} from '../../../common';
import { useField } from 'formik';
import { useFormikHelpers } from '../../../common/hooks/useFormikHelpers';
const cimCpuArchitectures = [
CpuArchitecture.x86,
CpuArchitecture.ARM,
CpuArchitecture.s390x,
] as SupportedCpuArchitecture[];
const CpuArchitectureDropdown = ({
isDisabled = false,
cpuArchitectures,
}: {
isDisabled?: boolean;
cpuArchitectures?: SupportedCpuArchitecture[];
}) => {
const { t } = useTranslation();
const [{ name, value }, , { setValue }] = useField<SupportedCpuArchitecture | ''>(
'cpuArchitecture',
);
const [cpuArchOpen, setCpuArchOpen] = React.useState(false);
const fieldId = getFieldId(name, 'input');
const { setValue: setUserManagedNetworking } = useFormikHelpers<boolean>('userManagedNetworking');
const onCpuArchSelect = (e?: React.MouseEvent<Element, MouseEvent>) => {
const val = e?.currentTarget.id as SupportedCpuArchitecture;
setValue(val);
setUserManagedNetworking(val === CpuArchitecture.s390x);
setCpuArchOpen(false);
};
const dropdownItems = React.useMemo(
() =>
cimCpuArchitectures.map((arch) => {
const isItemEnabled = !cpuArchitectures || cpuArchitectures.includes(arch);
const disabledReason = t(
'ai:This option is not available with the selected OpenShift version',
);
return (
<DropdownItem
key={arch}
id={arch}
isAriaDisabled={!isItemEnabled}
selected={arch === value}
description={architectureData[arch].description}
tooltipProps={{ content: disabledReason, position: 'top' }}
onClick={(e: React.MouseEvent) => e.preventDefault()}
>
{architectureData[arch].label}
</DropdownItem>
);
}),
[cpuArchitectures, t, value],
);
React.useEffect(() => {
if (!isDisabled && value !== '' && cpuArchitectures && !cpuArchitectures?.includes(value)) {
const defaultVal = cpuArchitectures?.[0] || CpuArchitecture.x86;
setValue(defaultVal);
}
}, [cpuArchitectures, isDisabled, setValue, value]);
return !isDisabled ? (
<FormGroup
isInline
fieldId={fieldId}
label={t('ai:CPU architecture')}
isRequired
name={'cpuArchiteture'}
>
<Dropdown
toggle={(toggleRef) => (
<MenuToggle
ref={toggleRef}
onClick={() => setCpuArchOpen(!cpuArchOpen)}
className="pf-u-w-100"
>
{value ? architectureData[value].label : t('ai:CPU architecture')}
</MenuToggle>
)}
isOpen={cpuArchOpen}
onSelect={onCpuArchSelect}
>
{dropdownItems}
</Dropdown>
</FormGroup>
) : (
<StaticField name={'cpuArchitecture'} label={t('ai:CPU architecture')} isRequired>
{architectureData[value as SupportedCpuArchitecture].label}
</StaticField>
);
};
export default CpuArchitectureDropdown;