From 0d2280aed5e4e4f9bf32b996d56036df631b5632 Mon Sep 17 00:00:00 2001 From: Ondrej Ezr Date: Wed, 31 Jul 2024 18:00:49 +0200 Subject: [PATCH] Wizard: Validate snapshot date with useValidation --- .../CreateImageWizard/CreateImageWizard.tsx | 17 ++++++-------- .../steps/Snapshot/Snapshot.tsx | 19 ++++++++-------- .../utilities/useValidation.tsx | 22 ++++++++++++++++++- .../CreateImageWizard/validators.ts | 7 ++++++ 4 files changed, 44 insertions(+), 21 deletions(-) diff --git a/src/Components/CreateImageWizard/CreateImageWizard.tsx b/src/Components/CreateImageWizard/CreateImageWizard.tsx index fc0bca841..bc6aeeae2 100644 --- a/src/Components/CreateImageWizard/CreateImageWizard.tsx +++ b/src/Components/CreateImageWizard/CreateImageWizard.tsx @@ -29,6 +29,7 @@ import Azure from './steps/TargetEnvironment/Azure'; import Gcp from './steps/TargetEnvironment/Gcp'; import { useFilesystemValidation, + useSnapshotValidation, useFirstBootValidation, useDetailsValidation, } from './utilities/useValidation'; @@ -60,8 +61,6 @@ import { selectGcpShareMethod, selectImageTypes, addImageType, - selectSnapshotDate, - selectUseLatest, selectRegistrationType, selectActivationKey, } from '../../store/wizardSlice'; @@ -181,9 +180,7 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => { const registrationType = useAppSelector(selectRegistrationType); const activationKey = useAppSelector(selectActivationKey); // Snapshots - const snapshotDate = useAppSelector(selectSnapshotDate); - const useLatest = useAppSelector(selectUseLatest); - const snapshotStepRequiresChoice = !useLatest && !snapshotDate; + const snapshotValidation = useSnapshotValidation(); // Filesystem const [filesystemPristine, setFilesystemPristine] = useState(true); const fileSystemValidation = useFilesystemValidation(); @@ -372,10 +369,12 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => { name="Repository snapshot" id="wizard-repository-snapshot" key="wizard-repository-snapshot" + navItem={customStatusNavItem} + status={snapshotValidation.disabledNext ? 'error' : 'default'} isHidden={!snapshottingEnabled} footer={ } > @@ -385,7 +384,7 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => { name="Custom repositories" id="wizard-custom-repositories" key="wizard-custom-repositories" - isDisabled={snapshotStepRequiresChoice} + isDisabled={snapshotValidation.disabledNext} footer={} > @@ -394,7 +393,7 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => { name="Additional packages" id="wizard-additional-packages" key="wizard-additional-packages" - isDisabled={snapshotStepRequiresChoice} + isDisabled={snapshotValidation.disabledNext} footer={} > @@ -419,7 +418,6 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => { { } > {/* Intentional prop drilling for simplicity - To be removed */} diff --git a/src/Components/CreateImageWizard/steps/Snapshot/Snapshot.tsx b/src/Components/CreateImageWizard/steps/Snapshot/Snapshot.tsx index 2800cdb8f..8afefee5b 100644 --- a/src/Components/CreateImageWizard/steps/Snapshot/Snapshot.tsx +++ b/src/Components/CreateImageWizard/steps/Snapshot/Snapshot.tsx @@ -22,15 +22,7 @@ import { dateToMMDDYYYY, parseMMDDYYYYtoDate, } from '../../../../Utilities/time'; - -const dateValidators = [ - (date: Date) => { - if (date.getTime() > Date.now()) { - return 'Cannot set a date in the future'; - } - return ''; - }, -]; +import { isSnapshotDateValid } from '../../validators'; export default function Snapshot() { const dispatch = useAppDispatch(); @@ -89,7 +81,14 @@ export default function Snapshot() { placeholder="MM/DD/YYYY" dateParse={parseMMDDYYYYtoDate} dateFormat={dateToMMDDYYYY} - validators={dateValidators} + validators={[ + (date: Date) => { + if (!isSnapshotDateValid(date)) { + return 'Cannot set a date in the future'; + } + return ''; + }, + ]} onChange={(_, val) => dispatch(changeSnapshotDate(val))} />