import React, { useState } from 'react'; import { Button, ExpandableSection, Text, TextContent, TextList, TextListItem, TextListItemVariants, TextListVariants, TextVariants, useWizardContext, } from '@patternfly/react-core'; import { ArrowRightIcon } from '@patternfly/react-icons'; import { ContentList, FSCList, FirstBootList, DetailsList, ImageOutputList, OscapList, RegisterLaterList, RegisterNowList, TargetEnvAWSList, TargetEnvAzureList, TargetEnvGCPList, TargetEnvOciList, TargetEnvOtherList, } from './ReviewStepTextLists'; import isRhel from '../../../../../src/Utilities/isRhel'; import { targetOptions } from '../../../../constants'; import { useAppSelector } from '../../../../store/hooks'; import { selectBlueprintDescription, selectBlueprintName, selectComplianceType, selectCompliancePolicyID, selectComplianceProfileID, selectDistribution, selectImageTypes, selectRegistrationType, } from '../../../../store/wizardSlice'; import { useFlag } from '../../../../Utilities/useGetEnvironment'; const Review = ({ snapshottingEnabled }: { snapshottingEnabled: boolean }) => { const { goToStepById } = useWizardContext(); const blueprintName = useAppSelector(selectBlueprintName); const blueprintDescription = useAppSelector(selectBlueprintDescription); const distribution = useAppSelector(selectDistribution); const environments = useAppSelector(selectImageTypes); const complianceType = useAppSelector(selectComplianceType); const complianceProfile = useAppSelector(selectComplianceProfileID); const compliancePolicy = useAppSelector(selectCompliancePolicyID); const registrationType = useAppSelector(selectRegistrationType); const [isExpandedImageOutput, setIsExpandedImageOutput] = useState(true); const [isExpandedTargetEnvs, setIsExpandedTargetEnvs] = useState(true); const [isExpandedFSC, setIsExpandedFSC] = useState(true); const [isExpandedContent, setIsExpandedContent] = useState(true); const [isExpandedRegistration, setIsExpandedRegistration] = useState(true); const [isExpandedImageDetail, setIsExpandedImageDetail] = useState(true); const [isExpandedOscapDetail, setIsExpandedOscapDetail] = useState(true); const [isExpandedComplianceDetail, setIsExpandedComplianceDetail] = useState(true); const [isExpandableFirstBoot, setIsExpandedFirstBoot] = useState(true); const onToggleImageOutput = (isExpandedImageOutput: boolean) => setIsExpandedImageOutput(isExpandedImageOutput); const onToggleTargetEnvs = (isExpandedTargetEnvs: boolean) => setIsExpandedTargetEnvs(isExpandedTargetEnvs); const onToggleFSC = (isExpandedFSC: boolean) => setIsExpandedFSC(isExpandedFSC); const onToggleContent = (isExpandedContent: boolean) => setIsExpandedContent(isExpandedContent); const onToggleRegistration = (isExpandedRegistration: boolean) => setIsExpandedRegistration(isExpandedRegistration); const onToggleImageDetail = (isExpandedImageDetail: boolean) => setIsExpandedImageDetail(isExpandedImageDetail); const onToggleOscapDetails = (isExpandedOscapDetail: boolean) => setIsExpandedOscapDetail(isExpandedOscapDetail); const onToggleComplianceDetails = (isExpandedComplianceDetail: boolean) => setIsExpandedComplianceDetail(isExpandedComplianceDetail); const onToggleFirstBoot = (isExpandableFirstBoot: boolean) => setIsExpandedFirstBoot(isExpandableFirstBoot); type RevisitStepButtonProps = { ariaLabel: string; testId: string; stepId: string; }; const RevisitStepButton = ({ ariaLabel, testId, stepId, }: RevisitStepButtonProps) => { return ( ); }; const revisitStep = (stepId: string) => { goToStepById(stepId); }; const composeExpandable = (label: string, testId: string, stepId: string) => { return ( ); }; const isFirstBootEnabled = useFlag('image-builder.firstboot.enabled'); return ( <> onToggleImageOutput(isExpandedImageOutput) } isExpanded={isExpandedImageOutput} isIndented data-testid="image-output-expandable" > onToggleTargetEnvs(isExpandedTargetEnvs) } isExpanded={isExpandedTargetEnvs} isIndented data-testid="target-environments-expandable" > {environments.includes('aws') && } {environments.includes('gcp') && } {environments.includes('azure') && } {environments.includes('oci') && } {environments.includes('vsphere') && ( {targetOptions.vsphere} (.vmdk) )} {environments.includes('vsphere-ova') && ( {targetOptions['vsphere-ova']} (.ova) )} {environments.includes('guest-image') && ( {targetOptions['guest-image']} (.qcow2) )} {environments.includes('image-installer') && ( {targetOptions['image-installer']} (.iso) )} {environments.includes('wsl') && ( WSL - {targetOptions.wsl} (.tar.gz) )} {isRhel(distribution) && ( onToggleRegistration(isExpandedRegistration) } isExpanded={isExpandedRegistration} isIndented data-testid="registration-expandable" > {registrationType === 'register-later' && } {registrationType.startsWith('register-now') && } )} {complianceProfile && complianceType === 'openscap' && ( onToggleOscapDetails(isExpandedOscapDetail) } isExpanded={isExpandedOscapDetail} isIndented data-testid="oscap-detail-expandable" > )} {compliancePolicy && complianceType === 'compliance' && ( onToggleComplianceDetails(isExpandedComplianceDetail) } isExpanded={isExpandedComplianceDetail} isIndented data-testid="compliance-detail-expandable" > )} onToggleFSC(isExpandedFSC)} isExpanded={isExpandedFSC} isIndented data-testid="file-system-configuration-expandable" > onToggleContent(isExpandedContent) } isExpanded={isExpandedContent} isIndented data-testid="content-expandable" > {/* Intentional prop drilling for simplicity - To be removed */} {isFirstBootEnabled && ( onToggleFirstBoot(isExpandableFirstBoot) } isExpanded={isExpandableFirstBoot} isIndented data-testid="firstboot-expandable" > )} {(blueprintName || blueprintDescription) && ( onToggleImageDetail(isExpandedImageDetail) } isExpanded={isExpandedImageDetail} isIndented data-testid="image-details-expandable" > )} ); }; export default Review;