Skip to content

Commit 23c5eb1

Browse files
jgyselovopenshift-cherrypick-robot
authored and
openshift-cherrypick-robot
committed
CIM CPU architectures rework
1 parent 1ffd487 commit 23c5eb1

File tree

3 files changed

+55
-44
lines changed

3 files changed

+55
-44
lines changed

libs/ui-lib/lib/cim/components/ClusterDeployment/ClusterDeploymentDetailsForm.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
ClusterDetailsFormFieldsProps,
1818
} from './ClusterDetailsFormFields';
1919
import { useFormikContext } from 'formik';
20-
import { ClusterDetailsValues, CpuArchitecture } from '../../../common';
20+
import { ClusterDetailsValues, CpuArchitecture, SupportedCpuArchitecture } from '../../../common';
2121
import { ClusterDeploymentWizardContext } from './ClusterDeploymentWizardContext';
2222
import { ValidationSection } from './components/ValidationSection';
2323
import { toNumber } from 'lodash-es';
@@ -117,7 +117,7 @@ const ClusterDeploymentDetailsForm: React.FC<ClusterDeploymentDetailsFormProps>
117117

118118
const highlyAvailableSupported = toNumber(version?.version?.split('.')?.[1]) >= 18;
119119
return [
120-
isMulti ? cpuArchitectures : version?.cpuArchitectures,
120+
(isMulti ? cpuArchitectures : version?.cpuArchitectures) as SupportedCpuArchitecture[],
121121
highlyAvailableSupported && !isMulti,
122122
];
123123
}, [allVersions, values.openshiftVersion]);

libs/ui-lib/lib/cim/components/ClusterDeployment/ClusterDetailsFormFields.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { useFormikContext } from 'formik';
55
import { OpenShiftVersionDropdown, OpenShiftVersionModal } from '../../../common';
66
import { StaticTextField } from '../../../common/components/ui/StaticTextField';
77
import { PullSecret } from '../../../common/components/clusters';
8-
import { OpenshiftVersionOptionType } from '../../../common/types';
8+
import { OpenshiftVersionOptionType, SupportedCpuArchitecture } from '../../../common/types';
99
import {
1010
InputField,
1111
RichInputField,
@@ -23,7 +23,7 @@ export type ClusterDetailsFormFieldsProps = {
2323
versions: OpenshiftVersionOptionType[];
2424
allVersions: OpenshiftVersionOptionType[];
2525
isNutanix?: boolean;
26-
cpuArchitectures?: string[];
26+
cpuArchitectures?: SupportedCpuArchitecture[];
2727
allowHighlyAvailable?: boolean;
2828
};
2929

libs/ui-lib/lib/cim/components/common/CpuArchitectureDropdown.tsx

+51-40
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import * as React from 'react';
2-
import { FormGroup } from '@patternfly/react-core';
3-
import { Dropdown, DropdownItem, DropdownToggle } from '@patternfly/react-core/deprecated';
2+
import { Dropdown, DropdownItem, FormGroup, MenuToggle } from '@patternfly/react-core';
43
import { useTranslation } from '../../../common/hooks/use-translation-wrapper';
54
import {
65
architectureData,
@@ -12,30 +11,18 @@ import {
1211
import { useField } from 'formik';
1312
import { useFormikHelpers } from '../../../common/hooks/useFormikHelpers';
1413

15-
const allDropdownItems = {
16-
[CpuArchitecture.x86]: (
17-
<DropdownItem key={'x86_64'} id="x86_64" description={architectureData['x86_64'].description}>
18-
{architectureData['x86_64'].label}
19-
</DropdownItem>
20-
),
21-
[CpuArchitecture.ARM]: (
22-
<DropdownItem key={'arm64'} id="arm64" description={architectureData['arm64'].description}>
23-
{architectureData['arm64'].label}
24-
</DropdownItem>
25-
),
26-
[CpuArchitecture.s390x]: (
27-
<DropdownItem key={'s390x'} id="s390x" description={architectureData['s390x'].description}>
28-
{architectureData['s390x'].label}
29-
</DropdownItem>
30-
),
31-
};
14+
const cimCpuArchitectures = [
15+
CpuArchitecture.x86,
16+
CpuArchitecture.ARM,
17+
CpuArchitecture.s390x,
18+
] as SupportedCpuArchitecture[];
3219

3320
const CpuArchitectureDropdown = ({
3421
isDisabled = false,
3522
cpuArchitectures,
3623
}: {
3724
isDisabled?: boolean;
38-
cpuArchitectures?: string[];
25+
cpuArchitectures?: SupportedCpuArchitecture[];
3926
}) => {
4027
const { t } = useTranslation();
4128
const [{ name, value }, , { setValue }] = useField<SupportedCpuArchitecture | ''>(
@@ -45,44 +32,68 @@ const CpuArchitectureDropdown = ({
4532
const fieldId = getFieldId(name, 'input');
4633
const { setValue: setUserManagedNetworking } = useFormikHelpers<boolean>('userManagedNetworking');
4734

48-
const onCpuArchSelect = (e?: React.SyntheticEvent<HTMLDivElement>) => {
35+
const onCpuArchSelect = (e?: React.MouseEvent<Element, MouseEvent>) => {
4936
const val = e?.currentTarget.id as SupportedCpuArchitecture;
5037
setValue(val);
5138
setUserManagedNetworking(val === CpuArchitecture.s390x);
5239

5340
setCpuArchOpen(false);
5441
};
5542

56-
const dropdownItems = React.useMemo(() => {
57-
if (!cpuArchitectures) {
58-
return Object.values(allDropdownItems);
59-
} else {
60-
return Object.entries(allDropdownItems)
61-
.filter(([key, _]) => cpuArchitectures.includes(key))
62-
.map(([_, val]) => val);
63-
}
64-
}, [cpuArchitectures]);
43+
const dropdownItems = React.useMemo(
44+
() =>
45+
cimCpuArchitectures.map((arch) => {
46+
const isItemEnabled = !cpuArchitectures || cpuArchitectures.includes(arch);
47+
const disabledReason = t(
48+
'ai:This option is not available with the selected OpenShift version',
49+
);
50+
return (
51+
<DropdownItem
52+
key={arch}
53+
id={arch}
54+
isAriaDisabled={!isItemEnabled}
55+
selected={arch === value}
56+
description={architectureData[arch].description}
57+
tooltipProps={{ content: disabledReason, position: 'top' }}
58+
onClick={(e: React.MouseEvent) => e.preventDefault()}
59+
>
60+
{architectureData[arch].label}
61+
</DropdownItem>
62+
);
63+
}),
64+
[cpuArchitectures, t, value],
65+
);
6566

6667
React.useEffect(() => {
6768
if (!isDisabled && value !== '' && cpuArchitectures && !cpuArchitectures?.includes(value)) {
68-
setValue('');
69+
const defaultVal = cpuArchitectures?.[0] || CpuArchitecture.x86;
70+
setValue(defaultVal);
6971
}
7072
}, [cpuArchitectures, isDisabled, setValue, value]);
7173

7274
return !isDisabled ? (
73-
<FormGroup isInline fieldId={fieldId} label={t('ai:CPU architecture')} isRequired>
75+
<FormGroup
76+
isInline
77+
fieldId={fieldId}
78+
label={t('ai:CPU architecture')}
79+
isRequired
80+
name={'cpuArchiteture'}
81+
>
7482
<Dropdown
75-
toggle={
76-
<DropdownToggle onToggle={() => setCpuArchOpen(!cpuArchOpen)} className="pf-u-w-100">
83+
toggle={(toggleRef) => (
84+
<MenuToggle
85+
ref={toggleRef}
86+
onClick={() => setCpuArchOpen(!cpuArchOpen)}
87+
className="pf-u-w-100"
88+
>
7789
{value ? architectureData[value].label : t('ai:CPU architecture')}
78-
</DropdownToggle>
79-
}
80-
name="cpuArchitecture"
90+
</MenuToggle>
91+
)}
8192
isOpen={cpuArchOpen}
8293
onSelect={onCpuArchSelect}
83-
dropdownItems={dropdownItems}
84-
className="pf-u-w-100"
85-
/>
94+
>
95+
{dropdownItems}
96+
</Dropdown>
8697
</FormGroup>
8798
) : (
8899
<StaticField name={'cpuArchitecture'} label={t('ai:CPU architecture')} isRequired>

0 commit comments

Comments
 (0)