import React, { useState } from 'react'; import { Button, Content, ContentVariants, ExpandableSection, Split, SplitItem, Stack, StackItem, useWizardContext, } from '@patternfly/react-core'; import { ArrowRightIcon } from '@patternfly/react-icons'; import './ReviewStep.scss'; import { ContentList, DetailsList, FirewallList, FirstBootList, FSCList, HostnameList, ImageOutputList, KernelList, LocaleList, OscapList, RegisterLaterList, RegisterNowList, RegisterSatelliteList, ServicesList, TargetEnvAWSList, TargetEnvAzureList, TargetEnvGCPList, TargetEnvOciList, TargetEnvOtherList, TimezoneList, UsersList, } from './ReviewStepTextLists'; import isRhel from '../../../../../src/Utilities/isRhel'; import { targetOptions } from '../../../../constants'; import { useAppSelector } from '../../../../store/hooks'; import { selectBlueprintDescription, selectBlueprintName, selectCompliancePolicyID, selectComplianceProfileID, selectComplianceType, selectDistribution, selectFirewall, selectHostname, selectImageTypes, selectKernel, selectKeyboard, selectLanguages, selectNtpServers, selectRegistrationType, selectServices, selectTimezone, selectUsers, } from '../../../../store/wizardSlice'; import { useHasSpecificTargetOnly } from '../../utilities/hasSpecificTargetOnly'; const Review = () => { 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 hostname = useAppSelector(selectHostname); const languages = useAppSelector(selectLanguages); const keyboard = useAppSelector(selectKeyboard); const timezone = useAppSelector(selectTimezone); const ntpServers = useAppSelector(selectNtpServers); const firewall = useAppSelector(selectFirewall); const services = useAppSelector(selectServices); const users = useAppSelector(selectUsers); const kernel = useAppSelector(selectKernel); 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 [isExpandedTimezone, setIsExpandedTimezone] = useState(true); const [isExpandedLocale, setIsExpandedLocale] = useState(true); const [isExpandedHostname, setIsExpandedHostname] = useState(true); const [isExpandedKernel, setIsExpandedKernel] = useState(true); const [isExpandedFirewall, setIsExpandedFirewall] = useState(true); const [isExpandedServices, setIsExpandedServices] = useState(true); const [isExpandableFirstBoot, setIsExpandedFirstBoot] = useState(true); const [isExpandedUsers, setIsExpandedUsers] = 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 onToggleTimezone = (isExpandedTimezone: boolean) => setIsExpandedTimezone(isExpandedTimezone); const onToggleLocale = (isExpandedLocale: boolean) => setIsExpandedLocale(isExpandedLocale); const onToggleHostname = (isExpandedHostname: boolean) => setIsExpandedHostname(isExpandedHostname); const onToggleKernel = (isExpandedKernel: boolean) => setIsExpandedKernel(isExpandedKernel); const onToggleFirewall = (isExpandedFirewall: boolean) => setIsExpandedFirewall(isExpandedFirewall); const onToggleServices = (isExpandedServices: boolean) => setIsExpandedServices(isExpandedServices); const onToggleFirstBoot = (isExpandableFirstBoot: boolean) => setIsExpandedFirstBoot(isExpandableFirstBoot); const onToggleUsers = (isExpandedUsers: boolean) => setIsExpandedUsers(isExpandedUsers); const hasWslTargetOnly = useHasSpecificTargetOnly('wsl'); 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 ( ); }; 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} (.wsl) )} {isRhel(distribution) && ( onToggleRegistration(isExpandedRegistration) } isExpanded={isExpandedRegistration} isIndented data-testid='registration-expandable' > {registrationType === 'register-later' && } {registrationType === 'register-satellite' && ( )} {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' > )} {!hasWslTargetOnly && ( onToggleFSC(isExpandedFSC)} isExpanded={isExpandedFSC} isIndented data-testid='file-system-configuration-expandable' > )} onToggleContent(isExpandedContent) } isExpanded={isExpandedContent} isIndented data-testid='content-expandable' > {users.length > 0 && ( onToggleUsers(isExpandedUsers)} isExpanded={isExpandedUsers} isIndented data-testid='users-expandable' > )} {(timezone || (ntpServers && ntpServers.length > 0)) && ( onToggleTimezone(isExpandedTimezone) } isExpanded={isExpandedTimezone} isIndented data-testid='timezone-expandable' > )} {((languages && languages.length > 0) || (keyboard && keyboard.length > 0)) && ( onToggleLocale(isExpandedLocale) } isExpanded={isExpandedLocale} isIndented data-testid='locale-expandable' > )} {hostname && ( onToggleHostname(isExpandedHostname) } isExpanded={isExpandedHostname} isIndented data-testid='hostname-expandable' > )} {(kernel.name || kernel.append.length > 0) && ( onToggleKernel(isExpandedKernel) } isExpanded={isExpandedKernel} isIndented data-testid='kernel-expandable' > )} {(firewall.ports.length > 0 || firewall.services.disabled.length > 0 || firewall.services.enabled.length > 0) && ( onToggleFirewall(isExpandedFirewall) } isExpanded={isExpandedFirewall} isIndented data-testid='firewall-expandable' > )} {(services.enabled.length > 0 || services.disabled.length > 0 || services.masked.length > 0) && ( onToggleServices(isExpandedServices) } isExpanded={isExpandedServices} isIndented data-testid='services-expandable' > )} {!process.env.IS_ON_PREMISE && ( onToggleFirstBoot(isExpandableFirstBoot) } isExpanded={isExpandableFirstBoot} isIndented data-testid='firstboot-expandable' > )} {(blueprintName || blueprintDescription) && ( onToggleImageDetail(isExpandedImageDetail) } isExpanded={isExpandedImageDetail} isIndented data-testid='image-details-expandable' > )} ); }; export default Review;