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;