From 2a06c0eaa9076a68a901b00ef7d89d6b987bbadc Mon Sep 17 00:00:00 2001 From: Katerina Koukiou Date: Wed, 4 Oct 2023 14:27:37 +0200 Subject: [PATCH] webui: set form validity also at the initial load of the mount point mapping Resolves: rhbz#2242086 --- .../components/storage/MountPointMapping.jsx | 45 ++++++++++++------- ui/webui/test/check-storage | 6 ++- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/ui/webui/src/components/storage/MountPointMapping.jsx b/ui/webui/src/components/storage/MountPointMapping.jsx index c3d93effad0..5b7e0193481 100644 --- a/ui/webui/src/components/storage/MountPointMapping.jsx +++ b/ui/webui/src/components/storage/MountPointMapping.jsx @@ -86,6 +86,30 @@ const getInitialRequests = (requests, requiredMountPoints) => { return [...requiredRequests, ...extraRequests]; }; +/* Check validity of the requests array + * @param {Array} requests - partitioning requests + * @deviceData {Object} deviceData - device data + * @returns {boolean} + */ +const getRequestsValid = (requests, deviceData) => { + const checkValidRequest = r => { + return ( + r["mount-point"] && + r["device-spec"] && + !isReformatInvalid(deviceData, r, requests)[0] + ); + }; + + /* When requests change check for duplicate mount point or device assignments and update form validity */ + const isFormValid = ( + !hasDuplicateFields(requests, "mount-point") && + !hasDuplicateFields(requests, "device-spec") && + requests.every(checkValidRequest) + ); + + return isFormValid; +}; + const isReformatInvalid = (deviceData, request, requests) => { const device = request["device-spec"]; @@ -477,7 +501,9 @@ const RequestsTable = ({ const initialRequests = getInitialRequests(requests, requiredMountPoints); setUnappliedRequests(initialRequests); - }, [partitioningDataPath, requests, requiredMountPoints]); + + setIsFormValid(getRequestsValid(initialRequests, deviceData)); + }, [deviceData, setIsFormValid, partitioningDataPath, requests, requiredMountPoints]); const handleRequestChange = useCallback(({ mountPoint, deviceSpec, requestIndex, reformat, remove }) => { const newRequests = [...unappliedRequests]; @@ -499,22 +525,7 @@ const RequestsTable = ({ } } - const checkValidRequest = r => { - return ( - r["mount-point"] && - r["device-spec"] && - !isReformatInvalid(deviceData, r, newRequests)[0] - ); - }; - - /* When requests change check for duplicate mount point or device assignments and update form validity */ - const isFormValid = ( - !hasDuplicateFields(newRequests, "mount-point") && - !hasDuplicateFields(newRequests, "device-spec") && - newRequests.every(checkValidRequest) - ); - - setIsFormValid(isFormValid); + setIsFormValid(getRequestsValid(newRequests, deviceData)); /* Sync newRequests to the backend */ updatePartitioningRequests({ diff --git a/ui/webui/test/check-storage b/ui/webui/test/check-storage index efc82a3626a..90a098033c2 100755 --- a/ui/webui/test/check-storage +++ b/ui/webui/test/check-storage @@ -442,9 +442,13 @@ class TestStorageMountPoints(anacondalib.VirtInstallMachineCase, StorageHelpers) new_applied_partitioning = s.dbus_get_applied_partitioning() self.assertNotEqual(new_applied_partitioning, applied_partitioning) + # When going back and forward 'Next' button should not be disabled + # https://bugzilla.redhat.com/show_bug.cgi?id=2242086 + i.back(previous_page=i.steps.CUSTOM_MOUNT_POINT) + i.check_next_disabled(False) + # Swap partitions should not be selectable for the required mount point rows # https://bugzilla.redhat.com/show_bug.cgi?id=2239836 - i.back(previous_page=i.steps.CUSTOM_MOUNT_POINT) i.back() m.execute(f"mkswap {disk}5")