@openshift-assisted/ui-lib 2.54.2 → 2.55.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/build/@types/cim/components/modals/CimConfiguration/CimStorageMissingAlert.d.ts.map +1 -1
  2. package/build/@types/cim/components/modals/CimConfiguration/constants.d.ts +1 -1
  3. package/build/@types/common/api/assisted-service/ClustersAPI.d.ts +2 -1
  4. package/build/@types/common/api/assisted-service/ClustersAPI.d.ts.map +1 -1
  5. package/build/@types/common/components/clusterConfiguration/utils.d.ts +9 -1
  6. package/build/@types/common/components/clusterConfiguration/utils.d.ts.map +1 -1
  7. package/build/@types/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.d.ts.map +1 -1
  8. package/build/@types/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.d.ts.map +1 -1
  9. package/build/@types/common/components/operators/operatorSpecs.d.ts.map +1 -1
  10. package/build/@types/common/components/ui/formik/PullSecretField.d.ts +1 -0
  11. package/build/@types/common/components/ui/formik/PullSecretField.d.ts.map +1 -1
  12. package/build/@types/common/config/docs_links.d.ts.map +1 -1
  13. package/build/@types/common/types/clusters.d.ts +1 -1
  14. package/build/@types/common/types/clusters.d.ts.map +1 -1
  15. package/build/@types/ocm/components/Routes.d.ts +1 -1
  16. package/build/@types/ocm/components/Routes.d.ts.map +1 -1
  17. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.d.ts +10 -2
  18. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.d.ts.map +1 -1
  19. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.d.ts.map +1 -1
  20. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.d.ts.map +1 -1
  21. package/build/@types/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.d.ts.map +1 -1
  22. package/build/@types/ocm/components/clusterConfiguration/review/utils.d.ts +1 -1
  23. package/build/@types/ocm/components/clusterConfiguration/review/utils.d.ts.map +1 -1
  24. package/build/@types/ocm/components/clusterDetail/AssistedInstallerDetailCard.d.ts +1 -1
  25. package/build/@types/ocm/components/clusterDetail/AssistedInstallerDetailCard.d.ts.map +1 -1
  26. package/build/@types/ocm/components/clusterWizard/ClusterWizardContext.d.ts +5 -0
  27. package/build/@types/ocm/components/clusterWizard/ClusterWizardContext.d.ts.map +1 -1
  28. package/build/@types/ocm/components/clusterWizard/ClusterWizardContextProvider.d.ts.map +1 -1
  29. package/build/@types/ocm/components/clusterWizard/NewClusterWizard.d.ts.map +1 -1
  30. package/build/@types/ocm/components/clusterWizard/constants.d.ts.map +1 -1
  31. package/build/@types/ocm/components/clusterWizard/disconnected/BasicStep.d.ts +1 -0
  32. package/build/@types/ocm/components/clusterWizard/disconnected/BasicStep.d.ts.map +1 -1
  33. package/build/@types/ocm/components/clusterWizard/disconnected/OptionalConfigurationsStep.d.ts +4 -0
  34. package/build/@types/ocm/components/clusterWizard/disconnected/OptionalConfigurationsStep.d.ts.map +1 -0
  35. package/build/@types/ocm/components/clusterWizard/disconnected/ReviewStep.d.ts.map +1 -1
  36. package/build/@types/ocm/components/clusterWizard/wizardTransition.d.ts +1 -1
  37. package/build/@types/ocm/components/clusterWizard/wizardTransition.d.ts.map +1 -1
  38. package/build/@types/ocm/components/ui/Buttons/BackButton.d.ts +1 -1
  39. package/build/@types/ocm/components/ui/Buttons/BackButton.d.ts.map +1 -1
  40. package/build/@types/ocm/services/ClustersService.d.ts +2 -1
  41. package/build/@types/ocm/services/ClustersService.d.ts.map +1 -1
  42. package/build/@types/ocm/store/hooks.d.ts +1 -1
  43. package/build/@types/ocm/store/slices/clusters/selectors.d.ts +5 -61
  44. package/build/@types/ocm/store/slices/clusters/selectors.d.ts.map +1 -1
  45. package/build/@types/ocm/store/slices/feature-flags/selectors.d.ts +2 -20
  46. package/build/@types/ocm/store/slices/feature-flags/selectors.d.ts.map +1 -1
  47. package/build/@types/ocm/store/slices/infra-envs/selectors.d.ts +4 -21
  48. package/build/@types/ocm/store/slices/infra-envs/selectors.d.ts.map +1 -1
  49. package/build/cjs/cim/components/Agent/NoAgentsAlert.js +2 -2
  50. package/build/cjs/cim/components/Agent/NoAgentsAlert.js.map +1 -1
  51. package/build/cjs/cim/components/Agent/tableColumns.js +3 -3
  52. package/build/cjs/cim/components/Agent/tableColumns.js.map +1 -1
  53. package/build/cjs/cim/components/Hypershift/DetailsPage/NodePoolsTable.js +2 -2
  54. package/build/cjs/cim/components/Hypershift/DetailsPage/NodePoolsTable.js.map +1 -1
  55. package/build/cjs/cim/components/InfraEnv/AddHostDropdown.js +2 -2
  56. package/build/cjs/cim/components/InfraEnv/AddHostDropdown.js.map +1 -1
  57. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigProgressAlert.js +3 -3
  58. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigProgressAlert.js.map +1 -1
  59. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationFormFields.js +1 -1
  60. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationFormFields.js.map +1 -1
  61. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationModal.js +2 -2
  62. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationModal.js.map +1 -1
  63. package/build/cjs/cim/components/modals/CimConfiguration/CimStorageMissingAlert.js +3 -3
  64. package/build/cjs/cim/components/modals/CimConfiguration/CimStorageMissingAlert.js.map +1 -1
  65. package/build/cjs/cim/components/modals/CimConfiguration/constants.js +1 -1
  66. package/build/cjs/cim/components/modals/MassDeleteAgentModal.js +2 -2
  67. package/build/cjs/cim/components/modals/MassDeleteAgentModal.js.map +1 -1
  68. package/build/cjs/common/api/assisted-service/ClustersAPI.js +3 -0
  69. package/build/cjs/common/api/assisted-service/ClustersAPI.js.map +1 -1
  70. package/build/cjs/common/components/clusterConfiguration/utils.js +13 -1
  71. package/build/cjs/common/components/clusterConfiguration/utils.js.map +1 -1
  72. package/build/cjs/common/components/clusterConfiguration/utils.test.js +36 -0
  73. package/build/cjs/common/components/clusterConfiguration/utils.test.js.map +1 -1
  74. package/build/cjs/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.js +29 -31
  75. package/build/cjs/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.js.map +1 -1
  76. package/build/cjs/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.js +19 -30
  77. package/build/cjs/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.js.map +1 -1
  78. package/build/cjs/common/components/operators/operatorSpecs.js +0 -3
  79. package/build/cjs/common/components/operators/operatorSpecs.js.map +1 -1
  80. package/build/cjs/common/components/ui/formik/PullSecretField.js +2 -2
  81. package/build/cjs/common/components/ui/formik/PullSecretField.js.map +1 -1
  82. package/build/cjs/common/config/docs_links.js +2 -2
  83. package/build/cjs/common/config/docs_links.js.map +1 -1
  84. package/build/cjs/common/validationSchemas/addressValidation.js +1 -1
  85. package/build/cjs/common/validationSchemas/addressValidation.js.map +1 -1
  86. package/build/cjs/ocm/components/Routes.js +8 -8
  87. package/build/cjs/ocm/components/Routes.js.map +1 -1
  88. package/build/cjs/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js.map +1 -1
  89. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.js.map +1 -1
  90. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.js +68 -17
  91. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.js.map +1 -1
  92. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js +1 -1
  93. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js.map +1 -1
  94. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js +50 -13
  95. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js.map +1 -1
  96. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.js +4 -2
  97. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.js.map +1 -1
  98. package/build/cjs/ocm/components/clusterConfiguration/review/utils.js +7 -1
  99. package/build/cjs/ocm/components/clusterConfiguration/review/utils.js.map +1 -1
  100. package/build/cjs/ocm/components/clusterConfiguration/review/utils.test.js +35 -0
  101. package/build/cjs/ocm/components/clusterConfiguration/review/utils.test.js.map +1 -1
  102. package/build/cjs/ocm/components/clusterDetail/AssistedInstallerDetailCard.js +4 -4
  103. package/build/cjs/ocm/components/clusterDetail/AssistedInstallerDetailCard.js.map +1 -1
  104. package/build/cjs/ocm/components/clusterDetail/ClusterDetail.js +4 -4
  105. package/build/cjs/ocm/components/clusterDetail/ClusterDetail.js.map +1 -1
  106. package/build/cjs/ocm/components/clusterWizard/ClusterDetails.js +4 -4
  107. package/build/cjs/ocm/components/clusterWizard/ClusterDetails.js.map +1 -1
  108. package/build/cjs/ocm/components/clusterWizard/ClusterDetailsForm.js +2 -2
  109. package/build/cjs/ocm/components/clusterWizard/ClusterDetailsForm.js.map +1 -1
  110. package/build/cjs/ocm/components/clusterWizard/ClusterWizardContext.js.map +1 -1
  111. package/build/cjs/ocm/components/clusterWizard/ClusterWizardContextProvider.js +11 -2
  112. package/build/cjs/ocm/components/clusterWizard/ClusterWizardContextProvider.js.map +1 -1
  113. package/build/cjs/ocm/components/clusterWizard/ClusterWizardFooter.js +2 -2
  114. package/build/cjs/ocm/components/clusterWizard/ClusterWizardFooter.js.map +1 -1
  115. package/build/cjs/ocm/components/clusterWizard/NewClusterWizard.js +3 -0
  116. package/build/cjs/ocm/components/clusterWizard/NewClusterWizard.js.map +1 -1
  117. package/build/cjs/ocm/components/clusterWizard/Operators.js +4 -4
  118. package/build/cjs/ocm/components/clusterWizard/Operators.js.map +1 -1
  119. package/build/cjs/ocm/components/clusterWizard/constants.js +1 -0
  120. package/build/cjs/ocm/components/clusterWizard/constants.js.map +1 -1
  121. package/build/cjs/ocm/components/clusterWizard/disconnected/BasicStep.js +16 -22
  122. package/build/cjs/ocm/components/clusterWizard/disconnected/BasicStep.js.map +1 -1
  123. package/build/cjs/ocm/components/clusterWizard/disconnected/OptionalConfigurationsStep.js +102 -0
  124. package/build/cjs/ocm/components/clusterWizard/disconnected/OptionalConfigurationsStep.js.map +1 -0
  125. package/build/cjs/ocm/components/clusterWizard/disconnected/ReviewStep.js +10 -8
  126. package/build/cjs/ocm/components/clusterWizard/disconnected/ReviewStep.js.map +1 -1
  127. package/build/cjs/ocm/components/clusterWizard/wizardTransition.js +3 -0
  128. package/build/cjs/ocm/components/clusterWizard/wizardTransition.js.map +1 -1
  129. package/build/cjs/ocm/components/clusters/ClusterBreadcrumbs.js +2 -2
  130. package/build/cjs/ocm/components/clusters/ClusterBreadcrumbs.js.map +1 -1
  131. package/build/cjs/ocm/components/clusters/ClusterPage.js +4 -4
  132. package/build/cjs/ocm/components/clusters/ClusterPage.js.map +1 -1
  133. package/build/cjs/ocm/components/clusters/Clusters.js +3 -3
  134. package/build/cjs/ocm/components/clusters/Clusters.js.map +1 -1
  135. package/build/cjs/ocm/components/clusters/ClustersListToolbar.js +3 -3
  136. package/build/cjs/ocm/components/clusters/ClustersListToolbar.js.map +1 -1
  137. package/build/cjs/ocm/components/ui/Buttons/BackButton.js +2 -2
  138. package/build/cjs/ocm/components/ui/Buttons/BackButton.js.map +1 -1
  139. package/build/cjs/ocm/services/ClustersService.js +3 -0
  140. package/build/cjs/ocm/services/ClustersService.js.map +1 -1
  141. package/build/cjs/ocm/store/slices/clusters/selectors.js +2 -2
  142. package/build/cjs/ocm/store/slices/clusters/selectors.js.map +1 -1
  143. package/build/cjs/ocm/store/slices/feature-flags/selectors.js.map +1 -1
  144. package/build/cjs/ocm/store/slices/infra-envs/selectors.js.map +1 -1
  145. package/lib/cim/components/Agent/NoAgentsAlert.tsx +1 -1
  146. package/lib/cim/components/Agent/tableColumns.tsx +1 -1
  147. package/lib/cim/components/Hypershift/DetailsPage/NodePoolsTable.tsx +1 -1
  148. package/lib/cim/components/InfraEnv/AddHostDropdown.tsx +1 -1
  149. package/lib/cim/components/modals/CimConfiguration/CimConfigProgressAlert.tsx +2 -2
  150. package/lib/cim/components/modals/CimConfiguration/CimConfigurationFormFields.tsx +1 -1
  151. package/lib/cim/components/modals/CimConfiguration/CimConfigurationModal.tsx +2 -2
  152. package/lib/cim/components/modals/CimConfiguration/CimStorageMissingAlert.tsx +5 -2
  153. package/lib/cim/components/modals/CimConfiguration/constants.ts +1 -1
  154. package/lib/cim/components/modals/MassDeleteAgentModal.tsx +1 -1
  155. package/lib/common/api/assisted-service/ClustersAPI.ts +8 -0
  156. package/lib/common/components/clusterConfiguration/utils.test.ts +43 -1
  157. package/lib/common/components/clusterConfiguration/utils.ts +13 -0
  158. package/lib/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.tsx +31 -57
  159. package/lib/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.tsx +33 -38
  160. package/lib/common/components/operators/operatorSpecs.tsx +0 -16
  161. package/lib/common/components/ui/formik/PullSecretField.tsx +5 -2
  162. package/lib/common/config/docs_links.ts +2 -2
  163. package/lib/common/types/clusters.ts +1 -1
  164. package/lib/common/validationSchemas/addressValidation.tsx +2 -2
  165. package/lib/ocm/components/Routes.tsx +2 -2
  166. package/lib/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.tsx +2 -2
  167. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.tsx +2 -2
  168. package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.tsx +86 -22
  169. package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.tsx +2 -2
  170. package/lib/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.ts +57 -20
  171. package/lib/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.tsx +4 -2
  172. package/lib/ocm/components/clusterConfiguration/review/utils.test.ts +41 -0
  173. package/lib/ocm/components/clusterConfiguration/review/utils.tsx +5 -2
  174. package/lib/ocm/components/clusterDetail/AssistedInstallerDetailCard.tsx +1 -1
  175. package/lib/ocm/components/clusterDetail/ClusterDetail.tsx +3 -3
  176. package/lib/ocm/components/clusterWizard/ClusterDetails.tsx +2 -2
  177. package/lib/ocm/components/clusterWizard/ClusterDetailsForm.tsx +1 -1
  178. package/lib/ocm/components/clusterWizard/ClusterWizardContext.tsx +5 -0
  179. package/lib/ocm/components/clusterWizard/ClusterWizardContextProvider.tsx +10 -1
  180. package/lib/ocm/components/clusterWizard/ClusterWizardFooter.tsx +1 -1
  181. package/lib/ocm/components/clusterWizard/NewClusterWizard.tsx +3 -0
  182. package/lib/ocm/components/clusterWizard/Operators.tsx +2 -2
  183. package/lib/ocm/components/clusterWizard/constants.ts +1 -0
  184. package/lib/ocm/components/clusterWizard/disconnected/BasicStep.tsx +31 -52
  185. package/lib/ocm/components/clusterWizard/disconnected/OptionalConfigurationsStep.tsx +173 -0
  186. package/lib/ocm/components/clusterWizard/disconnected/ReviewStep.tsx +11 -9
  187. package/lib/ocm/components/clusterWizard/wizardTransition.ts +4 -0
  188. package/lib/ocm/components/clusters/ClusterBreadcrumbs.tsx +1 -1
  189. package/lib/ocm/components/clusters/ClusterPage.tsx +1 -1
  190. package/lib/ocm/components/clusters/Clusters.tsx +2 -2
  191. package/lib/ocm/components/clusters/ClustersListToolbar.tsx +2 -2
  192. package/lib/ocm/components/ui/Buttons/BackButton.tsx +1 -1
  193. package/lib/ocm/services/ClustersService.ts +5 -0
  194. package/lib/ocm/store/slices/clusters/selectors.tsx +7 -5
  195. package/lib/ocm/store/slices/feature-flags/selectors.ts +5 -2
  196. package/lib/ocm/store/slices/infra-envs/selectors.ts +4 -2
  197. package/package.json +8 -8
@@ -1,68 +1,47 @@
1
1
  import * as React from 'react';
2
- import {
3
- ClusterWizardStep,
4
- TechnologyPreview,
5
- ExternalLink,
6
- OCP_RELEASES_PAGE,
7
- StaticTextField,
8
- useTranslation,
9
- } from '../../../../common';
2
+ import { ClusterWizardStep, TechnologyPreview, StaticTextField } from '../../../../common';
10
3
  import { Flex, Grid, GridItem, Form, Content } from '@patternfly/react-core';
11
- import OcmOpenShiftVersion from '../../clusterConfiguration/OcmOpenShiftVersion';
12
4
  import { useClusterWizardContext } from '../ClusterWizardContext';
13
5
  import ClusterWizardFooter from '../ClusterWizardFooter';
14
6
  import ClusterWizardNavigation from '../ClusterWizardNavigation';
15
7
  import { WithErrorBoundary } from '../../../../common/components/ErrorHandling/WithErrorBoundary';
16
8
  import InstallDisconnectedSwitch from './InstallDisconnectedSwitch';
17
- import { Formik } from 'formik';
9
+
10
+ export const DISCONNECTED_OPENSHIFT_VERSION = '4.21';
18
11
 
19
12
  const BasicStep = () => {
20
- const { t } = useTranslation();
21
13
  const { moveNext } = useClusterWizardContext();
22
14
 
23
15
  return (
24
- <Formik
25
- initialValues={{}}
26
- onSubmit={() => {
27
- // nothing to do
28
- }}
16
+ <ClusterWizardStep
17
+ navigation={<ClusterWizardNavigation />}
18
+ footer={<ClusterWizardFooter onNext={moveNext} />}
29
19
  >
30
- <ClusterWizardStep
31
- navigation={<ClusterWizardNavigation />}
32
- footer={<ClusterWizardFooter onNext={moveNext} />}
33
- >
34
- <WithErrorBoundary title="Failed to load Basic step">
35
- <Grid hasGutter>
36
- <GridItem>
37
- <Content component="h2">Basic information</Content>
38
- </GridItem>
39
- <GridItem>
40
- <Flex alignItems={{ default: 'alignItemsCenter' }} gap={{ default: 'gapSm' }}>
41
- <TechnologyPreview />
42
- <InstallDisconnectedSwitch />
43
- <span>
44
- {t("ai:I'm installing on a disconnected/air-gapped/secured environment")}
45
- </span>
46
- </Flex>
47
- </GridItem>
48
- <GridItem>
49
- <Form id="wizard-cluster-basic-info__form">
50
- <OcmOpenShiftVersion openshiftVersion="4.20" withPreviewText withMultiText>
51
- <ExternalLink href={`${window.location.origin}/${OCP_RELEASES_PAGE}`}>
52
- <span data-ouia-id="openshift-releases-link">
53
- {t('ai:Learn more about OpenShift releases')}
54
- </span>
55
- </ExternalLink>
56
- </OcmOpenShiftVersion>
57
- <StaticTextField name="cpuArchitecture" label="CPU architecture" isRequired>
58
- x86_64
59
- </StaticTextField>
60
- </Form>
61
- </GridItem>
62
- </Grid>
63
- </WithErrorBoundary>
64
- </ClusterWizardStep>
65
- </Formik>
20
+ <WithErrorBoundary title="Failed to load Basic step">
21
+ <Grid hasGutter>
22
+ <GridItem>
23
+ <Content component="h2">Basic information</Content>
24
+ </GridItem>
25
+ <GridItem>
26
+ <Flex alignItems={{ default: 'alignItemsCenter' }} gap={{ default: 'gapSm' }}>
27
+ <TechnologyPreview />
28
+ <InstallDisconnectedSwitch />
29
+ <span>I'm installing on a disconnected/air-gapped/secured environment</span>
30
+ </Flex>
31
+ </GridItem>
32
+ <GridItem>
33
+ <Form id="wizard-cluster-basic-info__form">
34
+ <StaticTextField name="openshiftVersion" label="OpenShift version">
35
+ {DISCONNECTED_OPENSHIFT_VERSION}
36
+ </StaticTextField>
37
+ <StaticTextField name="cpuArchitecture" label="CPU architecture">
38
+ x86_64
39
+ </StaticTextField>
40
+ </Form>
41
+ </GridItem>
42
+ </Grid>
43
+ </WithErrorBoundary>
44
+ </ClusterWizardStep>
66
45
  );
67
46
  };
68
47
 
@@ -0,0 +1,173 @@
1
+ import * as React from 'react';
2
+ import { Formik, useFormikContext } from 'formik';
3
+ import * as Yup from 'yup';
4
+ import { AlertVariant } from '@patternfly/react-core';
5
+ import { Form, Grid, GridItem, Content } from '@patternfly/react-core';
6
+ import {
7
+ ClusterWizardStep,
8
+ PullSecret,
9
+ UploadSSH,
10
+ handleApiError,
11
+ getApiErrorMessage,
12
+ isInOcm,
13
+ pullSecretValidationSchema,
14
+ sshPublicKeyValidationSchema,
15
+ useAlerts,
16
+ useTranslation,
17
+ } from '../../../../common';
18
+ import { WithErrorBoundary } from '../../../../common/components/ErrorHandling/WithErrorBoundary';
19
+ import { useClusterWizardContext } from '../ClusterWizardContext';
20
+ import ClusterWizardFooter from '../ClusterWizardFooter';
21
+ import ClusterWizardNavigation from '../ClusterWizardNavigation';
22
+ import { InfraEnvsAPI, ClustersAPI } from '../../../services/apis';
23
+ import { ImageType } from '@openshift-assisted/types/assisted-installer-service';
24
+ import usePullSecret from '../../../hooks/usePullSecret';
25
+ import { DISCONNECTED_OPENSHIFT_VERSION } from './BasicStep';
26
+
27
+ const DISCONNECTED_IMAGE_TYPE: ImageType = 'disconnected-iso';
28
+ const DISCONNECTED_CLUSTER_NAME = 'disconnected-cluster';
29
+
30
+ type OptionalConfigurationsValues = {
31
+ sshPublicKey: string;
32
+ pullSecret: string;
33
+ };
34
+
35
+ type OptionalConfigurationsFormProps = {
36
+ defaultPullSecret?: string;
37
+ isSubmitting: boolean;
38
+ };
39
+
40
+ const OptionalConfigurationsForm: React.FC<OptionalConfigurationsFormProps> = ({
41
+ defaultPullSecret,
42
+ isSubmitting,
43
+ }) => {
44
+ const { moveBack } = useClusterWizardContext();
45
+ const { isValid, submitForm } = useFormikContext<OptionalConfigurationsValues>();
46
+
47
+ return (
48
+ <ClusterWizardStep
49
+ navigation={<ClusterWizardNavigation />}
50
+ footer={
51
+ <ClusterWizardFooter
52
+ onNext={() => void submitForm()}
53
+ onBack={moveBack}
54
+ isSubmitting={isSubmitting}
55
+ isNextDisabled={!isValid}
56
+ />
57
+ }
58
+ >
59
+ <WithErrorBoundary title="Failed to load Optional configurations step">
60
+ <Grid hasGutter>
61
+ <GridItem>
62
+ <Content component="h2">Optional configurations</Content>
63
+ </GridItem>
64
+ <GridItem>
65
+ <Form id="wizard-cluster-optional-config__form">
66
+ <UploadSSH />
67
+ {!isInOcm && <PullSecret isOcm={false} defaultPullSecret={defaultPullSecret} />}
68
+ </Form>
69
+ </GridItem>
70
+ </Grid>
71
+ </WithErrorBoundary>
72
+ </ClusterWizardStep>
73
+ );
74
+ };
75
+
76
+ const OptionalConfigurationsStep = () => {
77
+ const { t } = useTranslation();
78
+ const {
79
+ moveNext,
80
+ disconnectedCluster,
81
+ setDisconnectedCluster,
82
+ disconnectedInfraEnv,
83
+ setDisconnectedInfraEnv,
84
+ } = useClusterWizardContext();
85
+ const { addAlert, clearAlerts } = useAlerts();
86
+ const [isSubmitting, setIsSubmitting] = React.useState(false);
87
+ const defaultPullSecret = usePullSecret();
88
+
89
+ const validationSchema = React.useMemo(
90
+ () =>
91
+ Yup.object({
92
+ sshPublicKey: sshPublicKeyValidationSchema(t),
93
+ pullSecret: isInOcm ? Yup.string() : pullSecretValidationSchema(t),
94
+ }),
95
+ [t],
96
+ );
97
+
98
+ const initialValues: OptionalConfigurationsValues = {
99
+ sshPublicKey: disconnectedInfraEnv?.sshAuthorizedKey ?? '',
100
+ pullSecret: defaultPullSecret ?? '',
101
+ };
102
+
103
+ const handleNext = React.useCallback(
104
+ async (values: OptionalConfigurationsValues) => {
105
+ clearAlerts();
106
+ setIsSubmitting(true);
107
+ try {
108
+ const pullSecretToUse = isInOcm ? defaultPullSecret ?? '' : values.pullSecret;
109
+
110
+ if (disconnectedCluster?.id && disconnectedInfraEnv?.id) {
111
+ const { data: updatedInfraEnv } = await InfraEnvsAPI.update(disconnectedInfraEnv.id, {
112
+ sshAuthorizedKey: values.sshPublicKey,
113
+ });
114
+ setDisconnectedInfraEnv(updatedInfraEnv);
115
+ } else {
116
+ const { data: cluster } = await ClustersAPI.registerDisconnected({
117
+ name: DISCONNECTED_CLUSTER_NAME,
118
+ openshiftVersion: DISCONNECTED_OPENSHIFT_VERSION,
119
+ });
120
+ setDisconnectedCluster(cluster);
121
+
122
+ const { data: createdInfraEnv } = await InfraEnvsAPI.register({
123
+ name: 'disconnected-infra-env',
124
+ pullSecret: pullSecretToUse,
125
+ clusterId: cluster.id,
126
+ imageType: DISCONNECTED_IMAGE_TYPE,
127
+ openshiftVersion: DISCONNECTED_OPENSHIFT_VERSION,
128
+ sshAuthorizedKey: values.sshPublicKey || undefined,
129
+ });
130
+ setDisconnectedInfraEnv(createdInfraEnv);
131
+ }
132
+
133
+ moveNext();
134
+ } catch (error) {
135
+ handleApiError(error, () => {
136
+ addAlert({
137
+ title: 'Failed to save optional configurations',
138
+ message: getApiErrorMessage(error),
139
+ variant: AlertVariant.danger,
140
+ });
141
+ });
142
+ } finally {
143
+ setIsSubmitting(false);
144
+ }
145
+ },
146
+ [
147
+ clearAlerts,
148
+ defaultPullSecret,
149
+ disconnectedCluster,
150
+ disconnectedInfraEnv,
151
+ setDisconnectedCluster,
152
+ setDisconnectedInfraEnv,
153
+ addAlert,
154
+ moveNext,
155
+ ],
156
+ );
157
+
158
+ return (
159
+ <Formik<OptionalConfigurationsValues>
160
+ initialValues={initialValues}
161
+ enableReinitialize
162
+ validationSchema={validationSchema}
163
+ onSubmit={(values) => void handleNext(values)}
164
+ >
165
+ <OptionalConfigurationsForm
166
+ defaultPullSecret={defaultPullSecret}
167
+ isSubmitting={isSubmitting}
168
+ />
169
+ </Formik>
170
+ );
171
+ };
172
+
173
+ export default OptionalConfigurationsStep;
@@ -26,15 +26,13 @@ import {
26
26
  } from '@patternfly/react-core';
27
27
  import { Formik } from 'formik';
28
28
  import { saveAs } from 'file-saver';
29
- import { useNavigate } from 'react-router-dom-v5-compat';
29
+ import { useNavigate } from 'react-router';
30
30
 
31
31
  import { getOperatorSpecs } from '../../../../common/components/operators/operatorSpecs';
32
-
33
- const downloadUrl =
34
- 'https://mirror.openshift.com/pub/cgw/assisted-installer-disconnected/latest/agent-ove.x86_64.iso';
32
+ import { DISCONNECTED_OPENSHIFT_VERSION } from './BasicStep';
35
33
 
36
34
  const ReviewStep = () => {
37
- const { moveBack } = useClusterWizardContext();
35
+ const { moveBack, disconnectedInfraEnv } = useClusterWizardContext();
38
36
  const opSpecs = getOperatorSpecs(() => undefined);
39
37
  const navigate = useNavigate();
40
38
 
@@ -50,8 +48,8 @@ const ReviewStep = () => {
50
48
  footer={
51
49
  <ClusterWizardFooter
52
50
  onNext={() => {
53
- downloadUrl && saveAs(downloadUrl);
54
- navigate('/cluster-list');
51
+ saveAs(disconnectedInfraEnv?.downloadUrl ?? '');
52
+ void navigate('/cluster-list');
55
53
  }}
56
54
  onBack={moveBack}
57
55
  nextButtonText="Download ISO"
@@ -98,11 +96,15 @@ const ReviewStep = () => {
98
96
  <DescriptionList isHorizontal>
99
97
  <DescriptionListGroup>
100
98
  <DescriptionListTerm>OpenShift version</DescriptionListTerm>
101
- <DescriptionListDescription>4.20</DescriptionListDescription>
99
+ <DescriptionListDescription>
100
+ {disconnectedInfraEnv?.openshiftVersion ?? DISCONNECTED_OPENSHIFT_VERSION}
101
+ </DescriptionListDescription>
102
102
  </DescriptionListGroup>
103
103
  <DescriptionListGroup>
104
104
  <DescriptionListTerm>CPU architecture</DescriptionListTerm>
105
- <DescriptionListDescription>x86_64</DescriptionListDescription>
105
+ <DescriptionListDescription>
106
+ {disconnectedInfraEnv?.cpuArchitecture ?? 'x86_64'}
107
+ </DescriptionListDescription>
106
108
  </DescriptionListGroup>
107
109
  <DescriptionListGroup>
108
110
  <DescriptionListTerm>ISO size</DescriptionListTerm>
@@ -34,6 +34,7 @@ export type ClusterWizardStepsType =
34
34
  | 'custom-manifests'
35
35
  | 'credentials-download'
36
36
  | 'disconnected-basic'
37
+ | 'disconnected-optional-configurations'
37
38
  | 'disconnected-review';
38
39
 
39
40
  const wizardStepsOrder: ClusterWizardStepsType[] = [
@@ -52,6 +53,7 @@ const wizardStepsOrder: ClusterWizardStepsType[] = [
52
53
 
53
54
  export const disconnectedSteps: ClusterWizardStepsType[] = [
54
55
  'disconnected-basic',
56
+ 'disconnected-optional-configurations',
55
57
  'disconnected-review',
56
58
  ];
57
59
 
@@ -323,6 +325,7 @@ const credentialsValidationMap = buildEmptyValidationsMap();
323
325
 
324
326
  const disconnectedReviewValidationsMap = buildEmptyValidationsMap();
325
327
  const disconnectedBasicValidationsMap = buildEmptyValidationsMap();
328
+ const disconnectedOptionalConfigurationsValidationsMap = buildEmptyValidationsMap();
326
329
 
327
330
  export const wizardStepsValidationsMap: WizardStepsValidationMap<ClusterWizardStepsType> = {
328
331
  'cluster-details': clusterDetailsStepValidationsMap,
@@ -338,6 +341,7 @@ export const wizardStepsValidationsMap: WizardStepsValidationMap<ClusterWizardSt
338
341
  review: reviewStepValidationsMap,
339
342
  'disconnected-review': disconnectedReviewValidationsMap,
340
343
  'disconnected-basic': disconnectedBasicValidationsMap,
344
+ 'disconnected-optional-configurations': disconnectedOptionalConfigurationsValidationsMap,
341
345
  };
342
346
 
343
347
  export const allClusterWizardSoftValidationIds =
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Breadcrumb, BreadcrumbItem, PageSection } from '@patternfly/react-core';
3
- import { Link } from 'react-router-dom-v5-compat';
3
+ import { Link } from 'react-router';
4
4
  import { isInOcm } from '../../../common/api';
5
5
 
6
6
  const ClusterBreadcrumbs = ({ clusterName }: { clusterName?: string }) => {
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { useParams, Navigate } from 'react-router-dom-v5-compat';
2
+ import { useParams, Navigate } from 'react-router';
3
3
  import { useDispatch } from 'react-redux';
4
4
  import { PageSection, Content } from '@patternfly/react-core';
5
5
  import {
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { useNavigate } from 'react-router-dom-v5-compat';
2
+ import { useNavigate } from 'react-router';
3
3
  import { Button, ButtonVariant, Content, PageSection } from '@patternfly/react-core';
4
4
  import { AddCircleOIcon } from '@patternfly/react-icons/dist/js/icons/add-circle-o-icon';
5
5
  import {
@@ -85,7 +85,7 @@ const Clusters = () => {
85
85
  primaryAction={
86
86
  <Button
87
87
  variant={ButtonVariant.primary}
88
- onClick={() => navigate(`~new`)}
88
+ onClick={() => void navigate(`~new`)}
89
89
  id="empty-state-new-cluster-button"
90
90
  data-ouia-id="button-create-new-cluster"
91
91
  >
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { useNavigate } from 'react-router-dom-v5-compat';
2
+ import { useNavigate } from 'react-router';
3
3
  import {
4
4
  Toolbar,
5
5
  ToolbarItem,
@@ -172,7 +172,7 @@ const ClustersListToolbar: React.FC<ClustersListToolbarProps> = ({
172
172
  </CustomToolbarFilter>
173
173
  <ToolbarButton
174
174
  variant={ButtonVariant.primary}
175
- onClick={() => navigate(`~new`)}
175
+ onClick={() => void navigate(`~new`)}
176
176
  id="button-create-new-cluster"
177
177
  data-ouia-id="button-create-new-cluster"
178
178
  >
@@ -1,4 +1,4 @@
1
- import { Link, LinkProps } from 'react-router-dom-v5-compat';
1
+ import { Link, LinkProps } from 'react-router';
2
2
  import type { ButtonProps } from '@patternfly/react-core';
3
3
  import { Button } from '@patternfly/react-core';
4
4
  import React from 'react';
@@ -5,6 +5,7 @@ import type {
5
5
  } from '../components/clusterConfiguration/manifestsConfiguration/data/dataTypes';
6
6
  import type {
7
7
  Cluster,
8
+ DisconnectedClusterCreateParams,
8
9
  Host,
9
10
  InfraEnvCreateParams,
10
11
  UpdateManifestParams,
@@ -122,6 +123,10 @@ const ClustersService = {
122
123
  return cluster;
123
124
  },
124
125
 
126
+ registerDisconnected(params: DisconnectedClusterCreateParams) {
127
+ return ClustersAPI.registerDisconnected(params);
128
+ },
129
+
125
130
  transformFormViewManifest(manifest: CustomManifestValues) {
126
131
  return {
127
132
  folder: manifest.folder,
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
2
  import { createSelector } from '@reduxjs/toolkit';
3
+ import type { Selector } from 'reselect';
3
4
  import type { IRow, IRowData } from '@patternfly/react-table';
4
- import { Link } from 'react-router-dom-v5-compat';
5
+ import { Link } from 'react-router';
5
6
  import type { TFunction } from 'i18next';
6
7
  import {
7
8
  DASH,
@@ -22,7 +23,7 @@ const selectClusters = (state: RootStateDay1) =>
22
23
  state.clusters.data.filter((c) => c.kind !== 'DisconnectedCluster');
23
24
  const clustersUIState = (state: RootStateDay1) => state.clusters.uiState;
24
25
 
25
- export const selectClustersUIState = createSelector(
26
+ export const selectClustersUIState: (state: RootStateDay1) => ResourceUIState = createSelector(
26
27
  [selectClusters, clustersUIState],
27
28
  (clusters, uiState): ResourceUIState => {
28
29
  const { LOADED, EMPTY } = ResourceUIState;
@@ -95,13 +96,14 @@ const clusterToClusterTableRow = (cluster: Cluster, t: TFunction): IRow => {
95
96
  export const getClusterTableStatusCell = (rowData: IRowData) =>
96
97
  rowData?.cells?.[3] as HumanizedSortable;
97
98
 
98
- export const selectClusterTableRows = (t: TFunction) => {
99
+ export const selectClusterTableRows = (t: TFunction): Selector<RootStateDay1, ClusterTableRows> => {
99
100
  return createSelector(
100
101
  selectClusters,
101
102
  (clusters): ClusterTableRows => clusters.map((c) => clusterToClusterTableRow(c, t)),
102
103
  );
103
104
  };
104
105
 
105
- export const selectClusterNames = createSelector(selectClusters, (clusters) =>
106
- clusters.map((c) => c.name),
106
+ export const selectClusterNames: Selector<RootStateDay1, (string | undefined)[]> = createSelector(
107
+ selectClusters,
108
+ (clusters) => clusters.map((c) => c.name),
107
109
  );
@@ -1,12 +1,15 @@
1
1
  import type { FeatureListType } from '../../../../common/features/featureGate';
2
2
  import type { RootStateDay1 } from '../../store-day1';
3
3
  import { createSelector } from '@reduxjs/toolkit';
4
+ import type { Selector } from 'reselect';
4
5
 
5
6
  export const selectFeatureFlagsSlice = (state: RootStateDay1) => state.featureFlags;
6
7
 
7
- export const isFeatureEnabled = (featureId: keyof FeatureListType) =>
8
+ export const isFeatureEnabled = (
9
+ featureId: keyof FeatureListType,
10
+ ): Selector<RootStateDay1, boolean> =>
8
11
  createSelector(
9
12
  selectFeatureFlagsSlice,
10
- (featureFlags: ReturnType<typeof selectFeatureFlagsSlice>) =>
13
+ (featureFlags: ReturnType<typeof selectFeatureFlagsSlice>): boolean =>
11
14
  featureFlags.data[featureId] ?? false,
12
15
  );
@@ -1,10 +1,12 @@
1
1
  import { createSelector } from '@reduxjs/toolkit';
2
+ import type { Selector } from 'reselect';
2
3
  import type { RootStateDay1 } from '../../store-day1';
3
4
  import type { CpuArchitecture } from '../../../../common';
5
+ import type { InfraEnv } from '@openshift-assisted/types/assisted-installer-service';
4
6
 
5
7
  export const selectInfraEnvsSlice = (state: RootStateDay1) => state.infraEnvs;
6
8
  export const selectInfraEnvByCpuArchitecture = createSelector(
7
9
  [selectInfraEnvsSlice, (_: RootStateDay1, cpuArchitecture: CpuArchitecture) => cpuArchitecture],
8
- (infraEnvs, cpuArchitecture) =>
10
+ (infraEnvs, cpuArchitecture): InfraEnv | undefined =>
9
11
  infraEnvs.find((infraEnv) => infraEnv.cpuArchitecture === cpuArchitecture),
10
- );
12
+ ) as Selector<RootStateDay1, InfraEnv | undefined, [CpuArchitecture]>;
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "dependencies": {
3
- "@openshift-assisted/locales": "2.54.2",
4
- "@openshift-assisted/types": "2.54.2",
5
- "@openshift-console/dynamic-plugin-sdk": "^4.19.1",
3
+ "@openshift-assisted/locales": "2.55.1",
4
+ "@openshift-assisted/types": "2.55.1",
5
+ "@openshift-console/dynamic-plugin-sdk": "^4.22.0",
6
6
  "@patternfly/patternfly": "6.4.0",
7
7
  "@patternfly/react-code-editor": "6.4.1",
8
8
  "@patternfly/react-core": "6.4.1",
@@ -13,7 +13,7 @@
13
13
  "@react-hook/resize-observer": "^2.0.2",
14
14
  "axios-case-converter": "^0.11.1",
15
15
  "camel-case": "^4.1.2",
16
- "cidr-tools": "^4.3.0",
16
+ "cidr-tools": "^12.1.1",
17
17
  "classnames": "^2.3.1",
18
18
  "file-saver": "^2.0.2",
19
19
  "filesize.js": "^2.0.0",
@@ -41,7 +41,7 @@
41
41
  "@types/humanize-plus": "^1.8.2",
42
42
  "@types/js-yaml": "^4.0.9",
43
43
  "@types/lodash-es": "^4.17.12",
44
- "@types/node": "^24.12.4",
44
+ "@types/node": "^24.13.3",
45
45
  "@types/react": "18.2.37",
46
46
  "@types/react-autosuggest": "^10.1.5",
47
47
  "@types/react-dom": "18.2.15",
@@ -91,7 +91,7 @@
91
91
  "peerDependencies": {
92
92
  "@reduxjs/toolkit": "^1.9.7",
93
93
  "@sentry/browser": "^5.9 || ^6",
94
- "axios": "^1.15.2",
94
+ "axios": "^1.18.1",
95
95
  "i18next": "^20.4 || ^21",
96
96
  "monaco-editor": "^0.44.0 || ^0.55.0",
97
97
  "react": "^18",
@@ -99,7 +99,7 @@
99
99
  "react-i18next": ">11.7.3",
100
100
  "react-monaco-editor": "^0.55.0 || ^0.59.0",
101
101
  "react-redux": "^8.0.5",
102
- "react-router-dom-v5-compat": "^6.30.3",
102
+ "react-router": "^7.17.0",
103
103
  "redux": "^4.2.1",
104
104
  "uuid": "^8.1",
105
105
  "yup": "^1.4.0"
@@ -136,5 +136,5 @@
136
136
  ]
137
137
  }
138
138
  },
139
- "version": "2.54.2"
139
+ "version": "2.55.1"
140
140
  }