debian-image-builder-frontend/src/Components/CreateImageWizard/steps/ImageOutput/ArchSelect.tsx
regexowl 52398547f8 Wizard: Move ouiaId from Select component to MenuToggle
This moves the `ouiaId` since it didn't get correctly assigned while in `Select`. It's readable under the `MenuToggle`.
2025-03-31 14:22:31 -05:00

87 lines
2 KiB
TypeScript

import React, { ReactElement, useState } from 'react';
import {
FormGroup,
MenuToggle,
MenuToggleElement,
Select,
SelectList,
SelectOption,
} from '@patternfly/react-core';
import { ARCHES } from '../../../../constants';
import { useAppDispatch, useAppSelector } from '../../../../store/hooks';
import { ImageRequest } from '../../../../store/imageBuilderApi';
import {
changeArchitecture,
selectArchitecture,
} from '../../../../store/wizardSlice';
const ArchSelect = () => {
const arch = useAppSelector(selectArchitecture);
const dispatch = useAppDispatch();
const [isOpen, setIsOpen] = useState(false);
const setArch = (
_event: React.MouseEvent,
selection: ImageRequest['architecture']
) => {
dispatch(changeArchitecture(selection));
setIsOpen(false);
};
const setSelectOptions = () => {
const options: ReactElement[] = [];
const arches = ARCHES.filter((a) => {
// we don't want to support cross-arch
// builds for on-prem for now
if (process.env.IS_ON_PREMISE) {
return a === arch;
}
return true;
});
arches.forEach((arch) => {
options.push(
<SelectOption key={arch} value={arch}>
{arch}
</SelectOption>
);
});
return options;
};
const onToggleClick = () => {
setIsOpen(!isOpen);
};
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
<MenuToggle
ouiaId="arch_select"
ref={toggleRef}
onClick={onToggleClick}
isExpanded={isOpen}
isFullWidth
data-testid="arch_select"
>
{arch}
</MenuToggle>
);
return (
<FormGroup isRequired={true} label="Architecture">
<Select
isOpen={isOpen}
selected={arch}
onSelect={setArch}
onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
toggle={toggle}
shouldFocusToggleOnSelect
>
<SelectList>{setSelectOptions()}</SelectList>
</Select>
</FormGroup>
);
};
export default ArchSelect;