import React, { useEffect, useState } from 'react'; import useFieldApi from '@data-driven-forms/react-form-renderer/use-field-api'; import useFormApi from '@data-driven-forms/react-form-renderer/use-form-api'; import { Checkbox, FormGroup, Popover, Radio, Text, TextContent, TextVariants, Tile, } from '@patternfly/react-core'; import { HelpIcon } from '@patternfly/react-icons'; import PropTypes from 'prop-types'; import { provisioningApi } from '../../../store/provisioningApi'; const TargetEnvironment = ({ label, isRequired, ...props }) => { const { getState, change } = useFormApi(); const { input } = useFieldApi({ label, isRequired, ...props }); const [environment, setEnvironment] = useState({ aws: false, azure: false, gcp: false, 'vsphere-ova': false, vsphere: false, 'guest-image': false, 'image-installer': false, }); const prefetchSources = provisioningApi.usePrefetch('getSourceList'); useEffect(() => { if (getState()?.values?.[input.name]) { setEnvironment(getState().values[input.name]); } }, []); const handleSetEnvironment = (env, checked) => setEnvironment((prevEnv) => { const newEnv = { ...prevEnv, [env]: checked, }; change(input.name, newEnv); return newEnv; }); const handleKeyDown = (e, env, checked) => { if (e.key === ' ') { handleSetEnvironment(env, checked); } }; return ( Public cloud} data-testid="target-public" >
} onClick={() => handleSetEnvironment('aws', !environment.aws)} onKeyDown={(e) => handleKeyDown(e, 'aws', !environment.aws)} onMouseEnter={() => prefetchSources({ provider: 'aws' })} isSelected={environment.aws} isStacked isDisplayLarge /> } onClick={() => handleSetEnvironment('gcp', !environment.gcp)} isSelected={environment.gcp} onKeyDown={(e) => handleKeyDown(e, 'gcp', !environment.gcp)} onMouseEnter={() => prefetchSources({ provider: 'gcp' })} isStacked isDisplayLarge /> } onClick={() => handleSetEnvironment('azure', !environment.azure)} onKeyDown={(e) => handleKeyDown(e, 'azure', !environment.azure)} onMouseEnter={() => prefetchSources({ provider: 'azure' })} isSelected={environment.azure} isStacked isDisplayLarge />
Private cloud} className="pf-u-mt-sm" data-testid="target-private" > { handleSetEnvironment('vsphere-ova', checked); handleSetEnvironment('vsphere', false); }} aria-label="VMWare checkbox" id="checkbox-vmware" name="VMWare" data-testid="checkbox-vmware" /> Open virtualization format (.ova) An OVA file is a virtual appliance used by virtualization platforms such as VMWare vSphere. It is a package that contains files used to describe a virtual machine, which includes a VMDK image, OVF descriptor file and a manifest file. } > } onChange={(checked) => { handleSetEnvironment('vsphere-ova', checked); handleSetEnvironment('vsphere', !checked); }} isChecked={environment['vsphere-ova']} isDisabled={!(environment.vsphere || environment['vsphere-ova'])} /> Virtual disk (.vmdk) A VMDK file is a virtual disk that stores the contents of a virtual machine. This disk has to be imported into vSphere using govc import.vmdk, use the OVA version when using the vSphere UI. } > } onChange={(checked) => { handleSetEnvironment('vsphere-ova', !checked); handleSetEnvironment('vsphere', checked); }} isChecked={environment.vsphere} isDisabled={!(environment.vsphere || environment['vsphere-ova'])} /> Other} data-testid="target-other" > handleSetEnvironment('guest-image', checked)} aria-label="Virtualization guest image checkbox" id="checkbox-guest-image" name="Virtualization guest image" data-testid="checkbox-guest-image" /> handleSetEnvironment('image-installer', checked) } aria-label="Bare metal installer checkbox" id="checkbox-image-installer" name="Bare metal installer" data-testid="checkbox-image-installer" />
); }; TargetEnvironment.propTypes = { label: PropTypes.node, isRequired: PropTypes.bool, }; TargetEnvironment.defaultProps = { label: '', isRequired: false, }; export default TargetEnvironment;