import React, { useEffect } from 'react'; import { Button, Wizard, WizardFooterWrapper, WizardStep, useWizardContext, } from '@patternfly/react-core'; import { useNavigate } from 'react-router-dom'; import DetailsStep from './steps/Details'; import ImageOutputStep from './steps/ImageOutput'; import OscapStep from './steps/Oscap'; import PackagesStep from './steps/Packages'; import RegistrationStep from './steps/Registration'; import RepositoriesStep from './steps/Repositories'; import ReviewStep from './steps/Review'; import ReviewWizardFooter from './steps/Review/Footer'; import Aws from './steps/TargetEnvironment/Aws'; import Azure from './steps/TargetEnvironment/Azure'; import Gcp from './steps/TargetEnvironment/Gcp'; import { isAwsAccountIdValid, isAzureTenantGUIDValid, isAzureSubscriptionIdValid, isAzureResourceGroupValid, isBlueprintDescriptionValid, isBlueprintNameValid, isGcpEmailValid, } from './validators'; import { useAppDispatch, useAppSelector } from '../../store/hooks'; import './CreateImageWizard.scss'; import { initializeWizard, selectActivationKey, selectAwsAccountId, selectAwsShareMethod, selectAwsSource, selectAzureResourceGroup, selectAzureShareMethod, selectAzureSource, selectAzureSubscriptionId, selectAzureTenantId, selectBlueprintDescription, selectBlueprintName, selectGcpEmail, selectGcpShareMethod, selectImageTypes, selectRegistrationType, } from '../../store/wizardSlice'; import { resolveRelPath } from '../../Utilities/path'; import { ImageBuilderHeader } from '../sharedComponents/ImageBuilderHeader'; type CustomWizardFooterPropType = { disableNext: boolean; }; export const CustomWizardFooter = ({ disableNext: disableNext, }: CustomWizardFooterPropType) => { const { goToNextStep, goToPrevStep, close } = useWizardContext(); return ( ); }; const CreateImageWizard = () => { const navigate = useNavigate(); const dispatch = useAppDispatch(); // IMPORTANT: Ensure the wizard starts with a fresh initial state useEffect(() => { dispatch(initializeWizard()); // This useEffect hook should run *only* on mount and therefore has an empty // dependency array. eslint's exhaustive-deps rule does not support this use. // eslint-disable-next-line react-hooks/exhaustive-deps }, []); /* * * Selectors * * */ // Image Output const targetEnvironments = useAppSelector((state) => selectImageTypes(state)); // AWS const awsShareMethod = useAppSelector((state) => selectAwsShareMethod(state)); const awsAccountId = useAppSelector((state) => selectAwsAccountId(state)); const awsSourceId = useAppSelector((state) => selectAwsSource(state)); // GCP const gcpShareMethod = useAppSelector((state) => selectGcpShareMethod(state)); const gcpEmail = useAppSelector((state) => selectGcpEmail(state)); // AZURE const azureShareMethod = useAppSelector((state) => selectAzureShareMethod(state) ); const azureTenantId = useAppSelector((state) => selectAzureTenantId(state)); const azureSubscriptionId = useAppSelector((state) => selectAzureSubscriptionId(state) ); const azureResourceGroup = useAppSelector((state) => selectAzureResourceGroup(state) ); const azureSource = useAppSelector((state) => selectAzureSource(state)); const registrationType = useAppSelector((state) => selectRegistrationType(state) ); const blueprintName = useAppSelector((state) => selectBlueprintName(state)); const blueprintDescription = useAppSelector((state) => selectBlueprintDescription(state) ); const activationKey = useAppSelector((state) => selectActivationKey(state)); return ( <>
navigate(resolveRelPath(''))} isVisitRequired> } > target === 'aws' || target === 'gcp' || target === 'azure' ) } steps={[ } isHidden={!targetEnvironments.includes('aws')} > , } isHidden={!targetEnvironments.includes('gcp')} > , } isHidden={!targetEnvironments.includes('azure')} > , ]} /> } > } > } > , } > , ]} > } > } >
); }; export default CreateImageWizard;