@openshift-assisted/ui-lib 5.0.0-cim → 5.0.1-cim

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 (382) hide show
  1. package/build/@types/cim/components/ClusterDeployment/ClusterDeploymentWizard.d.ts +1 -1
  2. package/build/@types/cim/components/ClusterDeployment/ClusterDeploymentWizard.d.ts.map +1 -1
  3. package/build/@types/cim/components/ClusterDeployment/clusterDetails/ACMClusterDeploymentDetailsStep.d.ts.map +1 -1
  4. package/build/@types/cim/components/ClusterDeployment/clusterDetails/ClusterDeploymentDetailsStep.d.ts +0 -17
  5. package/build/@types/cim/components/ClusterDeployment/clusterDetails/ClusterDeploymentDetailsStep.d.ts.map +1 -1
  6. package/build/@types/cim/components/ClusterDeployment/clusterDetails/ClusterDetailsFormFields.d.ts.map +1 -1
  7. package/build/@types/cim/components/ClusterDeployment/clusterDetails/useDetailsFormik.d.ts +19 -0
  8. package/build/@types/cim/components/ClusterDeployment/clusterDetails/useDetailsFormik.d.ts.map +1 -0
  9. package/build/@types/cim/components/ClusterDeployment/review/ClusterDeploymentReviewStep.d.ts.map +1 -1
  10. package/build/@types/cim/components/ClusterDeployment/types.d.ts +0 -1
  11. package/build/@types/cim/components/ClusterDeployment/types.d.ts.map +1 -1
  12. package/build/@types/cim/components/ClusterDeployment/wizardTransition.d.ts +1 -1
  13. package/build/@types/cim/components/ClusterDeployment/wizardTransition.d.ts.map +1 -1
  14. package/build/@types/cim/components/common/CpuArchitectureDropdown.d.ts.map +1 -1
  15. package/build/@types/cim/components/helpers/clusterDeployment.d.ts.map +1 -1
  16. package/build/@types/cim/components/modals/CimConfiguration/CimStorageMissingAlert.d.ts.map +1 -1
  17. package/build/@types/cim/components/modals/CimConfiguration/constants.d.ts +1 -1
  18. package/build/@types/cim/hooks/index.d.ts +1 -0
  19. package/build/@types/cim/hooks/index.d.ts.map +1 -1
  20. package/build/@types/cim/hooks/useAgents.d.ts +4 -0
  21. package/build/@types/cim/hooks/useAgents.d.ts.map +1 -0
  22. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.d.ts +2 -1
  23. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.d.ts.map +1 -1
  24. package/build/@types/common/components/clusterConfiguration/ExternalPlatformsDropdown.d.ts.map +1 -1
  25. package/build/@types/common/components/clusterConfiguration/utils.d.ts +9 -1
  26. package/build/@types/common/components/clusterConfiguration/utils.d.ts.map +1 -1
  27. package/build/@types/common/components/clusterDetail/ClusterCredentials.d.ts.map +1 -1
  28. package/build/@types/common/components/clusterDetail/ConsoleModal.d.ts +0 -5
  29. package/build/@types/common/components/clusterDetail/ConsoleModal.d.ts.map +1 -1
  30. package/build/@types/common/components/clusterWizard/ReviewValidations.d.ts.map +1 -1
  31. package/build/@types/common/components/clusterWizard/clusterDetailsValidation.d.ts.map +1 -1
  32. package/build/@types/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.d.ts.map +1 -1
  33. package/build/@types/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.d.ts.map +1 -1
  34. package/build/@types/common/components/clusterWizard/validationsInfoUtils.d.ts +0 -1
  35. package/build/@types/common/components/clusterWizard/validationsInfoUtils.d.ts.map +1 -1
  36. package/build/@types/common/components/hosts/utils.d.ts.map +1 -1
  37. package/build/@types/common/config/constants.d.ts.map +1 -1
  38. package/build/@types/common/selectors/clusterSelectors.d.ts +1 -1
  39. package/build/@types/common/selectors/clusterSelectors.d.ts.map +1 -1
  40. package/build/@types/common/types/clusters.d.ts +2 -2
  41. package/build/@types/common/types/clusters.d.ts.map +1 -1
  42. package/build/@types/ocm/components/Routes.d.ts +1 -1
  43. package/build/@types/ocm/components/Routes.d.ts.map +1 -1
  44. package/build/@types/ocm/components/clusterConfiguration/DiscoveryImageForm.d.ts.map +1 -1
  45. package/build/@types/ocm/components/clusterConfiguration/DiscoveryImageModal.d.ts +0 -1
  46. package/build/@types/ocm/components/clusterConfiguration/DiscoveryImageModal.d.ts.map +1 -1
  47. package/build/@types/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.d.ts.map +1 -1
  48. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/CustomManifestsPage.d.ts.map +1 -1
  49. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.d.ts.map +1 -1
  50. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/utils.d.ts +4 -0
  51. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/utils.d.ts.map +1 -1
  52. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.d.ts.map +1 -1
  53. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.d.ts.map +1 -1
  54. package/build/@types/ocm/components/clusterConfiguration/operators/OperatorCheckbox.d.ts +3 -1
  55. package/build/@types/ocm/components/clusterConfiguration/operators/OperatorCheckbox.d.ts.map +1 -1
  56. package/build/@types/ocm/components/clusterConfiguration/operators/bundleSpecs.d.ts.map +1 -1
  57. package/build/@types/ocm/components/clusterConfiguration/operators/utils.d.ts +3 -6
  58. package/build/@types/ocm/components/clusterConfiguration/operators/utils.d.ts.map +1 -1
  59. package/build/@types/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.d.ts.map +1 -1
  60. package/build/@types/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.d.ts.map +1 -1
  61. package/build/@types/ocm/components/clusterConfiguration/review/ReviewSummary.d.ts.map +1 -1
  62. package/build/@types/ocm/components/clusterConfiguration/review/TableSummaryExpandable.d.ts +1 -0
  63. package/build/@types/ocm/components/clusterConfiguration/review/TableSummaryExpandable.d.ts.map +1 -1
  64. package/build/@types/ocm/components/clusterConfiguration/review/utils.d.ts +1 -1
  65. package/build/@types/ocm/components/clusterConfiguration/review/utils.d.ts.map +1 -1
  66. package/build/@types/ocm/components/clusterConfiguration/staticIp/components/StaticIpForm.d.ts.map +1 -1
  67. package/build/@types/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.d.ts.map +1 -1
  68. package/build/@types/ocm/components/clusterConfiguration/staticIp/data/formDataToInfraEnvField.d.ts.map +1 -1
  69. package/build/@types/ocm/components/clusterConfiguration/staticIp/data/nmstateTypes.d.ts +1 -0
  70. package/build/@types/ocm/components/clusterConfiguration/staticIp/data/nmstateTypes.d.ts.map +1 -1
  71. package/build/@types/ocm/components/clusterConfiguration/staticIp/data/nmstateYaml.d.ts +1 -1
  72. package/build/@types/ocm/components/clusterConfiguration/staticIp/data/nmstateYaml.d.ts.map +1 -1
  73. package/build/@types/ocm/components/clusterDetail/AssistedInstallerDetailCard.d.ts +1 -1
  74. package/build/@types/ocm/components/clusterDetail/AssistedInstallerDetailCard.d.ts.map +1 -1
  75. package/build/@types/ocm/components/clusterDetail/ClusterDetailsButtonGroup.d.ts.map +1 -1
  76. package/build/@types/ocm/components/clusterWizard/ClusterDetails.d.ts.map +1 -1
  77. package/build/@types/ocm/components/clusterWizard/ClusterWizardContextProvider.d.ts.map +1 -1
  78. package/build/@types/ocm/components/clusterWizard/NewClusterWizard.d.ts.map +1 -1
  79. package/build/@types/ocm/components/clusterWizard/Operators.d.ts.map +1 -1
  80. package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts +3 -3
  81. package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts.map +1 -1
  82. package/build/@types/ocm/components/clusterWizard/OperatorsSelect.d.ts.map +1 -1
  83. package/build/@types/ocm/components/clusterWizard/OptionalOperatorsDropdown.d.ts +13 -0
  84. package/build/@types/ocm/components/clusterWizard/OptionalOperatorsDropdown.d.ts.map +1 -0
  85. package/build/@types/ocm/components/clusterWizard/wizardTransition.d.ts +3 -4
  86. package/build/@types/ocm/components/clusterWizard/wizardTransition.d.ts.map +1 -1
  87. package/build/@types/ocm/components/clusters/ClustersListToolbar.d.ts +1 -2
  88. package/build/@types/ocm/components/clusters/ClustersListToolbar.d.ts.map +1 -1
  89. package/build/@types/ocm/components/clusters/ClustersTable.d.ts.map +1 -1
  90. package/build/@types/ocm/components/ui/Buttons/BackButton.d.ts +1 -1
  91. package/build/@types/ocm/components/ui/Buttons/BackButton.d.ts.map +1 -1
  92. package/build/@types/ocm/hooks/useLateBinding.d.ts.map +1 -1
  93. package/build/@types/ocm/services/InfraEnvsService.d.ts.map +1 -1
  94. package/build/@types/ocm/store/hooks.d.ts +1 -1
  95. package/build/@types/ocm/store/slices/clusters/selectors.d.ts +5 -61
  96. package/build/@types/ocm/store/slices/clusters/selectors.d.ts.map +1 -1
  97. package/build/@types/ocm/store/slices/current-cluster/slice.d.ts +2 -0
  98. package/build/@types/ocm/store/slices/current-cluster/slice.d.ts.map +1 -1
  99. package/build/@types/ocm/store/slices/feature-flags/selectors.d.ts +2 -20
  100. package/build/@types/ocm/store/slices/feature-flags/selectors.d.ts.map +1 -1
  101. package/build/@types/ocm/store/slices/infra-envs/selectors.d.ts +4 -21
  102. package/build/@types/ocm/store/slices/infra-envs/selectors.d.ts.map +1 -1
  103. package/build/cjs/cim/components/Agent/NoAgentsAlert.js +2 -2
  104. package/build/cjs/cim/components/Agent/NoAgentsAlert.js.map +1 -1
  105. package/build/cjs/cim/components/Agent/tableColumns.js +3 -3
  106. package/build/cjs/cim/components/Agent/tableColumns.js.map +1 -1
  107. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentWizard.js +9 -1
  108. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentWizard.js.map +1 -1
  109. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ACMClusterDeploymentDetailsStep.js +4 -2
  110. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ACMClusterDeploymentDetailsStep.js.map +1 -1
  111. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ClusterDeploymentDetailsStep.js +5 -31
  112. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ClusterDeploymentDetailsStep.js.map +1 -1
  113. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ClusterDetailsFormFields.js +1 -11
  114. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ClusterDetailsFormFields.js.map +1 -1
  115. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/useDetailsFormik.js +41 -0
  116. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/useDetailsFormik.js.map +1 -0
  117. package/build/cjs/cim/components/ClusterDeployment/review/ClusterDeploymentReviewStep.js +4 -4
  118. package/build/cjs/cim/components/ClusterDeployment/review/ClusterDeploymentReviewStep.js.map +1 -1
  119. package/build/cjs/cim/components/ClusterDeployment/wizardTransition.js +5 -1
  120. package/build/cjs/cim/components/ClusterDeployment/wizardTransition.js.map +1 -1
  121. package/build/cjs/cim/components/Hypershift/DetailsPage/NodePoolsTable.js +2 -2
  122. package/build/cjs/cim/components/Hypershift/DetailsPage/NodePoolsTable.js.map +1 -1
  123. package/build/cjs/cim/components/InfraEnv/AddHostDropdown.js +2 -2
  124. package/build/cjs/cim/components/InfraEnv/AddHostDropdown.js.map +1 -1
  125. package/build/cjs/cim/components/common/CpuArchitectureDropdown.js +1 -1
  126. package/build/cjs/cim/components/common/CpuArchitectureDropdown.js.map +1 -1
  127. package/build/cjs/cim/components/helpers/clusterDeployment.js +14 -10
  128. package/build/cjs/cim/components/helpers/clusterDeployment.js.map +1 -1
  129. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigProgressAlert.js +3 -3
  130. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigProgressAlert.js.map +1 -1
  131. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationFormFields.js +1 -1
  132. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationFormFields.js.map +1 -1
  133. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationModal.js +2 -2
  134. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationModal.js.map +1 -1
  135. package/build/cjs/cim/components/modals/CimConfiguration/CimStorageMissingAlert.js +3 -3
  136. package/build/cjs/cim/components/modals/CimConfiguration/CimStorageMissingAlert.js.map +1 -1
  137. package/build/cjs/cim/components/modals/CimConfiguration/constants.js +1 -1
  138. package/build/cjs/cim/components/modals/MassDeleteAgentModal.js +2 -2
  139. package/build/cjs/cim/components/modals/MassDeleteAgentModal.js.map +1 -1
  140. package/build/cjs/cim/hooks/index.js +1 -0
  141. package/build/cjs/cim/hooks/index.js.map +1 -1
  142. package/build/cjs/cim/hooks/useAgents.js +13 -0
  143. package/build/cjs/cim/hooks/useAgents.js.map +1 -0
  144. package/build/cjs/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.js +9 -3
  145. package/build/cjs/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.js.map +1 -1
  146. package/build/cjs/common/components/clusterConfiguration/ExternalPlatformsDropdown.js +1 -1
  147. package/build/cjs/common/components/clusterConfiguration/ExternalPlatformsDropdown.js.map +1 -1
  148. package/build/cjs/common/components/clusterConfiguration/utils.js +13 -1
  149. package/build/cjs/common/components/clusterConfiguration/utils.js.map +1 -1
  150. package/build/cjs/common/components/clusterConfiguration/utils.test.js +36 -0
  151. package/build/cjs/common/components/clusterConfiguration/utils.test.js.map +1 -1
  152. package/build/cjs/common/components/clusterDetail/ClusterCredentials.js +10 -9
  153. package/build/cjs/common/components/clusterDetail/ClusterCredentials.js.map +1 -1
  154. package/build/cjs/common/components/clusterDetail/ConsoleModal.js +1 -10
  155. package/build/cjs/common/components/clusterDetail/ConsoleModal.js.map +1 -1
  156. package/build/cjs/common/components/clusterWizard/ReviewValidations.js +16 -0
  157. package/build/cjs/common/components/clusterWizard/ReviewValidations.js.map +1 -1
  158. package/build/cjs/common/components/clusterWizard/clusterDetailsValidation.js +34 -19
  159. package/build/cjs/common/components/clusterWizard/clusterDetailsValidation.js.map +1 -1
  160. package/build/cjs/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.js +29 -31
  161. package/build/cjs/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.js.map +1 -1
  162. package/build/cjs/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.js +3 -3
  163. package/build/cjs/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.js +19 -30
  164. package/build/cjs/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.js.map +1 -1
  165. package/build/cjs/common/components/clusterWizard/validationsInfoUtils.js +1 -17
  166. package/build/cjs/common/components/clusterWizard/validationsInfoUtils.js.map +1 -1
  167. package/build/cjs/common/components/hosts/utils.js +6 -1
  168. package/build/cjs/common/components/hosts/utils.js.map +1 -1
  169. package/build/cjs/common/config/constants.js +4 -0
  170. package/build/cjs/common/config/constants.js.map +1 -1
  171. package/build/cjs/common/selectors/clusterSelectors.js +7 -8
  172. package/build/cjs/common/selectors/clusterSelectors.js.map +1 -1
  173. package/build/cjs/common/types/clusters.js.map +1 -1
  174. package/build/cjs/common/validationSchemas/addressValidation.js +1 -1
  175. package/build/cjs/common/validationSchemas/addressValidation.js.map +1 -1
  176. package/build/cjs/ocm/components/Routes.js +8 -8
  177. package/build/cjs/ocm/components/Routes.js.map +1 -1
  178. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageForm.js +5 -2
  179. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageForm.js.map +1 -1
  180. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageModal.js +2 -2
  181. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageModal.js.map +1 -1
  182. package/build/cjs/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.js +6 -2
  183. package/build/cjs/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.js.map +1 -1
  184. package/build/cjs/ocm/components/clusterConfiguration/OcmClusterProgressItems.js +1 -1
  185. package/build/cjs/ocm/components/clusterConfiguration/OcmClusterProgressItems.js.map +1 -1
  186. package/build/cjs/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js +1 -1
  187. package/build/cjs/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js.map +1 -1
  188. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/CustomManifestsPage.js +3 -1
  189. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/CustomManifestsPage.js.map +1 -1
  190. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.js +3 -1
  191. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.js.map +1 -1
  192. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/utils.js +11 -8
  193. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/utils.js.map +1 -1
  194. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.js +68 -17
  195. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.js.map +1 -1
  196. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js +1 -1
  197. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js.map +1 -1
  198. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js +50 -13
  199. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js.map +1 -1
  200. package/build/cjs/ocm/components/clusterConfiguration/operators/OperatorCheckbox.js +39 -21
  201. package/build/cjs/ocm/components/clusterConfiguration/operators/OperatorCheckbox.js.map +1 -1
  202. package/build/cjs/ocm/components/clusterConfiguration/operators/bundleSpecs.js +1 -2
  203. package/build/cjs/ocm/components/clusterConfiguration/operators/bundleSpecs.js.map +1 -1
  204. package/build/cjs/ocm/components/clusterConfiguration/operators/utils.js +7 -25
  205. package/build/cjs/ocm/components/clusterConfiguration/operators/utils.js.map +1 -1
  206. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.js +4 -2
  207. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.js.map +1 -1
  208. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.js +75 -20
  209. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.js.map +1 -1
  210. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewSummary.js +2 -2
  211. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewSummary.js.map +1 -1
  212. package/build/cjs/ocm/components/clusterConfiguration/review/TableSummaryExpandable.css +3 -0
  213. package/build/cjs/ocm/components/clusterConfiguration/review/TableSummaryExpandable.js +2 -3
  214. package/build/cjs/ocm/components/clusterConfiguration/review/TableSummaryExpandable.js.map +1 -1
  215. package/build/cjs/ocm/components/clusterConfiguration/review/utils.js +8 -2
  216. package/build/cjs/ocm/components/clusterConfiguration/review/utils.js.map +1 -1
  217. package/build/cjs/ocm/components/clusterConfiguration/review/utils.test.js +35 -0
  218. package/build/cjs/ocm/components/clusterConfiguration/review/utils.test.js.map +1 -1
  219. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/StaticIpForm.js +10 -1
  220. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/StaticIpForm.js.map +1 -1
  221. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.js +5 -5
  222. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.js.map +1 -1
  223. package/build/cjs/ocm/components/clusterConfiguration/staticIp/data/formDataToInfraEnvField.js +2 -2
  224. package/build/cjs/ocm/components/clusterConfiguration/staticIp/data/formDataToInfraEnvField.js.map +1 -1
  225. package/build/cjs/ocm/components/clusterConfiguration/staticIp/data/nmstateTypes.js.map +1 -1
  226. package/build/cjs/ocm/components/clusterConfiguration/staticIp/data/nmstateYaml.js +3 -7
  227. package/build/cjs/ocm/components/clusterConfiguration/staticIp/data/nmstateYaml.js.map +1 -1
  228. package/build/cjs/ocm/components/clusterDetail/AssistedInstallerDetailCard.js +4 -4
  229. package/build/cjs/ocm/components/clusterDetail/AssistedInstallerDetailCard.js.map +1 -1
  230. package/build/cjs/ocm/components/clusterDetail/ClusterDetail.js +4 -4
  231. package/build/cjs/ocm/components/clusterDetail/ClusterDetail.js.map +1 -1
  232. package/build/cjs/ocm/components/clusterDetail/ClusterDetailsButtonGroup.js +8 -2
  233. package/build/cjs/ocm/components/clusterDetail/ClusterDetailsButtonGroup.js.map +1 -1
  234. package/build/cjs/ocm/components/clusterWizard/ClusterDetails.js +6 -13
  235. package/build/cjs/ocm/components/clusterWizard/ClusterDetails.js.map +1 -1
  236. package/build/cjs/ocm/components/clusterWizard/ClusterDetailsForm.js +2 -2
  237. package/build/cjs/ocm/components/clusterWizard/ClusterDetailsForm.js.map +1 -1
  238. package/build/cjs/ocm/components/clusterWizard/ClusterWizardContextProvider.js +6 -6
  239. package/build/cjs/ocm/components/clusterWizard/ClusterWizardContextProvider.js.map +1 -1
  240. package/build/cjs/ocm/components/clusterWizard/ClusterWizardFooter.js +2 -2
  241. package/build/cjs/ocm/components/clusterWizard/ClusterWizardFooter.js.map +1 -1
  242. package/build/cjs/ocm/components/clusterWizard/NewClusterWizard.js +6 -3
  243. package/build/cjs/ocm/components/clusterWizard/NewClusterWizard.js.map +1 -1
  244. package/build/cjs/ocm/components/clusterWizard/Operators.js +40 -12
  245. package/build/cjs/ocm/components/clusterWizard/Operators.js.map +1 -1
  246. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js +34 -15
  247. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js.map +1 -1
  248. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js +18 -4
  249. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js.map +1 -1
  250. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.test.js +11 -5
  251. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.test.js.map +1 -1
  252. package/build/cjs/ocm/components/clusterWizard/OperatorsStep.js +1 -1
  253. package/build/cjs/ocm/components/clusterWizard/OperatorsStep.js.map +1 -1
  254. package/build/cjs/ocm/components/clusterWizard/OptionalOperatorsDropdown.js +34 -0
  255. package/build/cjs/ocm/components/clusterWizard/OptionalOperatorsDropdown.js.map +1 -0
  256. package/build/cjs/ocm/components/clusterWizard/disconnected/ReviewStep.js +3 -3
  257. package/build/cjs/ocm/components/clusterWizard/disconnected/ReviewStep.js.map +1 -1
  258. package/build/cjs/ocm/components/clusterWizard/wizardTransition.js +69 -29
  259. package/build/cjs/ocm/components/clusterWizard/wizardTransition.js.map +1 -1
  260. package/build/cjs/ocm/components/clusters/ClusterBreadcrumbs.js +2 -2
  261. package/build/cjs/ocm/components/clusters/ClusterBreadcrumbs.js.map +1 -1
  262. package/build/cjs/ocm/components/clusters/ClusterPage.js +4 -4
  263. package/build/cjs/ocm/components/clusters/ClusterPage.js.map +1 -1
  264. package/build/cjs/ocm/components/clusters/Clusters.js +3 -3
  265. package/build/cjs/ocm/components/clusters/Clusters.js.map +1 -1
  266. package/build/cjs/ocm/components/clusters/ClustersListToolbar.js +5 -5
  267. package/build/cjs/ocm/components/clusters/ClustersListToolbar.js.map +1 -1
  268. package/build/cjs/ocm/components/clusters/ClustersTable.js +4 -3
  269. package/build/cjs/ocm/components/clusters/ClustersTable.js.map +1 -1
  270. package/build/cjs/ocm/components/featureSupportLevels/featureStateUtils.js +1 -1
  271. package/build/cjs/ocm/components/ui/Buttons/BackButton.js +2 -2
  272. package/build/cjs/ocm/components/ui/Buttons/BackButton.js.map +1 -1
  273. package/build/cjs/ocm/hooks/useInfraEnvId.js +2 -2
  274. package/build/cjs/ocm/hooks/useInfraEnvId.js.map +1 -1
  275. package/build/cjs/ocm/hooks/useLateBinding.js +41 -26
  276. package/build/cjs/ocm/hooks/useLateBinding.js.map +1 -1
  277. package/build/cjs/ocm/hooks/usePullSecret.js +2 -2
  278. package/build/cjs/ocm/services/InfraEnvsService.js +4 -1
  279. package/build/cjs/ocm/services/InfraEnvsService.js.map +1 -1
  280. package/build/cjs/ocm/store/slices/clusters/selectors.js +2 -2
  281. package/build/cjs/ocm/store/slices/clusters/selectors.js.map +1 -1
  282. package/build/cjs/ocm/store/slices/feature-flags/selectors.js.map +1 -1
  283. package/build/cjs/ocm/store/slices/infra-envs/selectors.js.map +1 -1
  284. package/lib/cim/components/Agent/NoAgentsAlert.tsx +1 -1
  285. package/lib/cim/components/Agent/tableColumns.tsx +1 -1
  286. package/lib/cim/components/ClusterDeployment/ClusterDeploymentWizard.tsx +10 -2
  287. package/lib/cim/components/ClusterDeployment/clusterDetails/ACMClusterDeploymentDetailsStep.tsx +3 -1
  288. package/lib/cim/components/ClusterDeployment/clusterDetails/ClusterDeploymentDetailsStep.tsx +5 -86
  289. package/lib/cim/components/ClusterDeployment/clusterDetails/ClusterDetailsFormFields.tsx +1 -12
  290. package/lib/cim/components/ClusterDeployment/clusterDetails/useDetailsFormik.tsx +97 -0
  291. package/lib/cim/components/ClusterDeployment/review/ClusterDeploymentReviewStep.tsx +18 -14
  292. package/lib/cim/components/ClusterDeployment/types.ts +0 -1
  293. package/lib/cim/components/ClusterDeployment/wizardTransition.ts +5 -1
  294. package/lib/cim/components/Hypershift/DetailsPage/NodePoolsTable.tsx +1 -1
  295. package/lib/cim/components/InfraEnv/AddHostDropdown.tsx +1 -1
  296. package/lib/cim/components/common/CpuArchitectureDropdown.tsx +2 -1
  297. package/lib/cim/components/helpers/clusterDeployment.ts +9 -4
  298. package/lib/cim/components/modals/CimConfiguration/CimConfigProgressAlert.tsx +2 -2
  299. package/lib/cim/components/modals/CimConfiguration/CimConfigurationFormFields.tsx +1 -1
  300. package/lib/cim/components/modals/CimConfiguration/CimConfigurationModal.tsx +2 -2
  301. package/lib/cim/components/modals/CimConfiguration/CimStorageMissingAlert.tsx +5 -2
  302. package/lib/cim/components/modals/CimConfiguration/constants.ts +1 -1
  303. package/lib/cim/components/modals/MassDeleteAgentModal.tsx +1 -1
  304. package/lib/cim/hooks/index.tsx +1 -0
  305. package/lib/cim/hooks/useAgents.tsx +15 -0
  306. package/lib/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.tsx +18 -8
  307. package/lib/common/components/clusterConfiguration/ExternalPlatformsDropdown.tsx +3 -1
  308. package/lib/common/components/clusterConfiguration/utils.test.ts +43 -1
  309. package/lib/common/components/clusterConfiguration/utils.ts +13 -0
  310. package/lib/common/components/clusterDetail/ClusterCredentials.tsx +49 -53
  311. package/lib/common/components/clusterDetail/ConsoleModal.tsx +0 -35
  312. package/lib/common/components/clusterWizard/ReviewValidations.tsx +24 -0
  313. package/lib/common/components/clusterWizard/clusterDetailsValidation.ts +38 -12
  314. package/lib/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.tsx +31 -57
  315. package/lib/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.tsx +3 -3
  316. package/lib/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.tsx +33 -38
  317. package/lib/common/components/clusterWizard/validationsInfoUtils.ts +0 -20
  318. package/lib/common/components/hosts/utils.ts +8 -1
  319. package/lib/common/config/constants.ts +4 -0
  320. package/lib/common/selectors/clusterSelectors.ts +9 -9
  321. package/lib/common/types/clusters.ts +3 -1
  322. package/lib/common/validationSchemas/addressValidation.tsx +2 -2
  323. package/lib/ocm/components/Routes.tsx +2 -2
  324. package/lib/ocm/components/clusterConfiguration/DiscoveryImageForm.tsx +11 -2
  325. package/lib/ocm/components/clusterConfiguration/DiscoveryImageModal.tsx +13 -3
  326. package/lib/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.tsx +9 -1
  327. package/lib/ocm/components/clusterConfiguration/OcmClusterProgressItems.tsx +2 -2
  328. package/lib/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.tsx +1 -1
  329. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/CustomManifestsPage.tsx +8 -1
  330. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.tsx +3 -1
  331. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/utils.tsx +12 -6
  332. package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.tsx +86 -22
  333. package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.tsx +2 -2
  334. package/lib/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.ts +57 -20
  335. package/lib/ocm/components/clusterConfiguration/operators/OperatorCheckbox.tsx +48 -34
  336. package/lib/ocm/components/clusterConfiguration/operators/bundleSpecs.tsx +2 -3
  337. package/lib/ocm/components/clusterConfiguration/operators/utils.tsx +6 -37
  338. package/lib/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.tsx +4 -2
  339. package/lib/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.tsx +114 -24
  340. package/lib/ocm/components/clusterConfiguration/review/ReviewSummary.tsx +1 -4
  341. package/lib/ocm/components/clusterConfiguration/review/TableSummaryExpandable.css +3 -0
  342. package/lib/ocm/components/clusterConfiguration/review/TableSummaryExpandable.tsx +1 -1
  343. package/lib/ocm/components/clusterConfiguration/review/utils.test.ts +41 -0
  344. package/lib/ocm/components/clusterConfiguration/review/utils.tsx +6 -3
  345. package/lib/ocm/components/clusterConfiguration/staticIp/components/StaticIpForm.tsx +10 -1
  346. package/lib/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.tsx +9 -6
  347. package/lib/ocm/components/clusterConfiguration/staticIp/data/formDataToInfraEnvField.ts +2 -0
  348. package/lib/ocm/components/clusterConfiguration/staticIp/data/nmstateTypes.ts +1 -0
  349. package/lib/ocm/components/clusterConfiguration/staticIp/data/nmstateYaml.ts +2 -0
  350. package/lib/ocm/components/clusterDetail/AssistedInstallerDetailCard.tsx +1 -1
  351. package/lib/ocm/components/clusterDetail/ClusterDetail.tsx +3 -3
  352. package/lib/ocm/components/clusterDetail/ClusterDetailsButtonGroup.tsx +27 -2
  353. package/lib/ocm/components/clusterWizard/ClusterDetails.tsx +4 -16
  354. package/lib/ocm/components/clusterWizard/ClusterDetailsForm.tsx +1 -1
  355. package/lib/ocm/components/clusterWizard/ClusterWizardContextProvider.tsx +6 -14
  356. package/lib/ocm/components/clusterWizard/ClusterWizardFooter.tsx +1 -1
  357. package/lib/ocm/components/clusterWizard/NewClusterWizard.tsx +7 -3
  358. package/lib/ocm/components/clusterWizard/Operators.tsx +47 -12
  359. package/lib/ocm/components/clusterWizard/OperatorsBundle.tsx +72 -26
  360. package/lib/ocm/components/clusterWizard/OperatorsSelect.test.ts +11 -5
  361. package/lib/ocm/components/clusterWizard/OperatorsSelect.tsx +21 -4
  362. package/lib/ocm/components/clusterWizard/OperatorsStep.tsx +1 -1
  363. package/lib/ocm/components/clusterWizard/OptionalOperatorsDropdown.tsx +106 -0
  364. package/lib/ocm/components/clusterWizard/disconnected/ReviewStep.tsx +2 -2
  365. package/lib/ocm/components/clusterWizard/wizardTransition.ts +92 -37
  366. package/lib/ocm/components/clusters/ClusterBreadcrumbs.tsx +1 -1
  367. package/lib/ocm/components/clusters/ClusterPage.tsx +1 -1
  368. package/lib/ocm/components/clusters/Clusters.tsx +2 -2
  369. package/lib/ocm/components/clusters/ClustersListToolbar.tsx +5 -7
  370. package/lib/ocm/components/clusters/ClustersTable.tsx +60 -50
  371. package/lib/ocm/components/featureSupportLevels/featureStateUtils.ts +1 -1
  372. package/lib/ocm/components/ui/Buttons/BackButton.tsx +1 -1
  373. package/lib/ocm/hooks/useInfraEnvId.ts +2 -2
  374. package/lib/ocm/hooks/useLateBinding.ts +45 -24
  375. package/lib/ocm/hooks/usePullSecret.ts +2 -2
  376. package/lib/ocm/services/InfraEnvsService.ts +4 -1
  377. package/lib/ocm/store/slices/clusters/selectors.tsx +7 -5
  378. package/lib/ocm/store/slices/feature-flags/selectors.ts +5 -2
  379. package/lib/ocm/store/slices/infra-envs/selectors.ts +4 -2
  380. package/package.json +17 -17
  381. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageModal.css +0 -3
  382. package/lib/ocm/components/clusterConfiguration/DiscoveryImageModal.css +0 -3
@@ -1,5 +1,10 @@
1
1
  import {
2
- findValidationStep,
2
+ Cluster,
3
+ ClusterValidationId,
4
+ Host,
5
+ HostValidationId,
6
+ } from '@openshift-assisted/types/assisted-installer-service';
7
+ import {
3
8
  getAllClusterWizardSoftValidationIds,
4
9
  getWizardStepClusterStatus,
5
10
  WizardStepsValidationMap,
@@ -12,11 +17,9 @@ import {
12
17
  Validation as HostValidation,
13
18
  } from '../../../common/types/hosts';
14
19
  import { getKeys, stringToJSON } from '../../../common/utils';
15
- import {
16
- Cluster,
17
- Host,
18
- HostValidationId,
19
- } from '@openshift-assisted/types/assisted-installer-service';
20
+ import { Validation, ValidationsInfo } from '../../../common';
21
+
22
+ type ValidationId = ClusterValidationId | HostValidationId;
20
23
 
21
24
  export type ClusterWizardStepsType =
22
25
  | 'cluster-details'
@@ -55,16 +58,6 @@ export const disconnectedSteps: ClusterWizardStepsType[] = [
55
58
  export const ClusterWizardFlowStateNew = 'new';
56
59
  export type ClusterWizardFlowStateType = Cluster['status'] | typeof ClusterWizardFlowStateNew;
57
60
 
58
- export const getLastStepForWizard = (
59
- customManifestsStepNeedsToBeFilled: boolean,
60
- ): ClusterWizardStepsType => {
61
- if (customManifestsStepNeedsToBeFilled) {
62
- return 'custom-manifests';
63
- } else {
64
- return 'review';
65
- }
66
- };
67
-
68
61
  export const isStepAfter = (stepA: ClusterWizardStepsType, stepB: ClusterWizardStepsType) => {
69
62
  const indexA = wizardStepsOrder.findIndex((step) => step === stepA);
70
63
  const indexB = wizardStepsOrder.findIndex((step) => step === stepB);
@@ -79,8 +72,7 @@ export const getClusterWizardFirstStep = (
79
72
  locationState: ClusterWizardFlowStateType | undefined,
80
73
  staticIpInfo: StaticIpInfo | undefined,
81
74
  state?: ClusterWizardFlowStateType,
82
- hosts?: Host[] | undefined,
83
- customManifestsStepNeedsToBeFilled?: boolean,
75
+ cluster?: Cluster,
84
76
  ): ClusterWizardStepsType => {
85
77
  // Just for the first time when the cluster is created
86
78
  if (locationState === ClusterWizardFlowStateNew && !staticIpInfo) {
@@ -96,40 +88,42 @@ export const getClusterWizardFirstStep = (
96
88
 
97
89
  switch (state) {
98
90
  case 'ready':
99
- return getLastStepForWizard(customManifestsStepNeedsToBeFilled || false);
91
+ return 'review';
100
92
  case 'pending-for-input':
101
93
  case 'adding-hosts':
102
94
  case 'insufficient':
103
- if (customManifestsStepNeedsToBeFilled) {
104
- return 'custom-manifests';
105
- }
106
- return getStepForFailingHostValidations(hosts);
95
+ return getStepForFailingValidations(cluster);
107
96
  default:
108
97
  return 'cluster-details';
109
98
  }
110
99
  };
111
100
 
112
- const getStepForFailingHostValidations = (hosts: Host[] | undefined) => {
113
- const failingValidations: HostValidationId[] = getHostFailingValidationIds(hosts);
114
- const minimumStep = 'host-discovery';
101
+ const MINIMUM_STEP = 'host-discovery';
102
+ const getStepForFailingValidations = (cluster?: Cluster) => {
103
+ // test host validations first, then cluster validations
104
+ const failingValidations: Set<ValidationId> = new Set<ValidationId>([
105
+ ...getHostFailingValidationIds(cluster?.hosts),
106
+ ...getClusterFailingValidationIds(cluster),
107
+ ]);
108
+
115
109
  let step;
116
110
  for (const failingValidationId of failingValidations) {
117
- step = findValidationStep<string>(failingValidationId, wizardStepsValidationsMap, minimumStep);
111
+ step = findValidationStep(failingValidationId, wizardStepsValidationsMap);
118
112
  if (step !== undefined) {
119
113
  break;
120
114
  }
121
115
  }
122
- return (step || minimumStep) as ClusterWizardStepsType;
116
+ return step || MINIMUM_STEP;
123
117
  };
124
118
 
125
- const getHostFailingValidationIds = (hosts: Host[] | undefined) => {
126
- const failingValidations: HostValidationId[] = [];
119
+ const getHostFailingValidationIds = (hosts?: Host[]): Set<ValidationId> => {
120
+ const failingValidations = new Set<HostValidationId>();
127
121
  hosts?.forEach((host) => {
128
122
  const validationsInfo = stringToJSON<HostValidationsInfo>(host.validationsInfo) || {};
129
123
  getKeys(validationsInfo).forEach((group) => {
130
124
  const f: (validation: HostValidation) => void = (validation) => {
131
125
  if (validation.status === 'failure') {
132
- failingValidations.push(validation.id);
126
+ failingValidations.add(validation.id);
133
127
  }
134
128
  };
135
129
  const validationGroup = validationsInfo[group] as HostValidation[];
@@ -139,6 +133,47 @@ const getHostFailingValidationIds = (hosts: Host[] | undefined) => {
139
133
  return failingValidations;
140
134
  };
141
135
 
136
+ const getClusterFailingValidationIds = (cluster?: Cluster): Set<ValidationId> => {
137
+ const failingValidations = new Set<ValidationId>();
138
+ const validationsInfo = stringToJSON<ValidationsInfo>(cluster?.validationsInfo) || {};
139
+
140
+ getKeys(validationsInfo).forEach((group) => {
141
+ const f: (validation: Validation) => void = (validation) => {
142
+ if (validation.status === 'failure') {
143
+ failingValidations.add(validation.id);
144
+ }
145
+ };
146
+ const validationGroup = validationsInfo[group] as Validation[];
147
+ validationGroup.forEach(f);
148
+ });
149
+ return failingValidations;
150
+ };
151
+
152
+ const findValidationStep = (
153
+ validationId: ValidationId,
154
+ wizardStepsValidationsMap: WizardStepsValidationMap<ClusterWizardStepsType>,
155
+ ): ClusterWizardStepsType | undefined => {
156
+ let isBeforeMinimumStep = true;
157
+
158
+ return wizardStepsOrder.find((wizardStepId) => {
159
+ if (wizardStepId === MINIMUM_STEP) {
160
+ isBeforeMinimumStep = false;
161
+ }
162
+ if (isBeforeMinimumStep) {
163
+ return false;
164
+ }
165
+
166
+ // find first matching validation-map name, ignoring steps before minimumStep
167
+ const { host: hostValidationMap, cluster: clusterValidationMap } =
168
+ wizardStepsValidationsMap[wizardStepId];
169
+
170
+ return (
171
+ hostValidationMap.validationIds.includes(validationId as HostValidationId) ||
172
+ clusterValidationMap.validationIds.includes(validationId as ClusterValidationId)
173
+ );
174
+ });
175
+ };
176
+
142
177
  type TransitionProps = { cluster: Cluster };
143
178
 
144
179
  const buildEmptyValidationsMap = (): WizardStepValidationMap => ({
@@ -190,6 +225,7 @@ const hostDiscoveryStepValidationsMap: WizardStepValidationMap = {
190
225
  groups: ['hardware'],
191
226
  validationIds: [
192
227
  'connected',
228
+ 'hostname-valid',
193
229
  'media-connected',
194
230
  'lso-requirements-satisfied',
195
231
  'odf-requirements-satisfied',
@@ -206,6 +242,7 @@ const hostDiscoveryStepValidationsMap: WizardStepValidationMap = {
206
242
  'no-skip-missing-disk',
207
243
  'compatible-agent',
208
244
  'openshift-ai-gpu-requirements-satisfied',
245
+ 'inventory-not-partially-truncated',
209
246
  ],
210
247
  };
211
248
 
@@ -224,18 +261,24 @@ const storageStepValidationsMap: WizardStepValidationMap = {
224
261
  'no-skip-missing-disk',
225
262
  ],
226
263
  },
227
- softValidationIds: [],
264
+ softValidationIds: ['inventory-not-partially-truncated'],
228
265
  };
229
266
 
230
267
  const networkingStepValidationsMap: WizardStepValidationMap = {
231
268
  cluster: {
232
269
  groups: ['network'],
233
- validationIds: [],
270
+ validationIds: [
271
+ 'api-vips-defined',
272
+ 'machine-cidr-defined',
273
+ 'cluster-cidr-defined',
274
+ 'service-cidr-defined',
275
+ 'all-hosts-are-ready-to-install',
276
+ ],
234
277
  },
235
278
  host: {
236
279
  allowedStatuses: ['known', 'disabled'],
237
280
  groups: ['network'],
238
- validationIds: [],
281
+ validationIds: ['apps-domain-name-resolved-correctly'],
239
282
  },
240
283
  // TODO(jtomasek): container-images-available validation is currently not running on the backend, it stays in pending.
241
284
  // marking it as soft validation is the easy way to prevent it from blocking the progress.
@@ -250,6 +293,19 @@ const networkingStepValidationsMap: WizardStepValidationMap = {
250
293
  ],
251
294
  };
252
295
 
296
+ const customManifestsValidationsMap: WizardStepValidationMap = {
297
+ cluster: {
298
+ groups: ['network'],
299
+ validationIds: ['platform-requirements-satisfied', 'custom-manifests-requirements-satisfied'],
300
+ },
301
+ host: {
302
+ allowedStatuses: ['known', 'disabled'],
303
+ groups: ['network'],
304
+ validationIds: [],
305
+ },
306
+ softValidationIds: ['ntp-synced', 'container-images-available', 'mtu-valid'],
307
+ };
308
+
253
309
  const reviewStepValidationsMap: WizardStepValidationMap = {
254
310
  cluster: {
255
311
  groups: [],
@@ -265,7 +321,6 @@ const reviewStepValidationsMap: WizardStepValidationMap = {
265
321
 
266
322
  const credentialsValidationMap = buildEmptyValidationsMap();
267
323
 
268
- const customManifestsValidationsMap = buildEmptyValidationsMap();
269
324
  const disconnectedReviewValidationsMap = buildEmptyValidationsMap();
270
325
  const disconnectedBasicValidationsMap = buildEmptyValidationsMap();
271
326
 
@@ -274,13 +329,13 @@ export const wizardStepsValidationsMap: WizardStepsValidationMap<ClusterWizardSt
274
329
  'static-ip-yaml-view': staticIpValidationsMap,
275
330
  'static-ip-network-wide-configurations': staticIpValidationsMap,
276
331
  'static-ip-host-configurations': staticIpValidationsMap,
277
- 'custom-manifests': customManifestsValidationsMap,
278
332
  operators: operatorsStepValidationsMap,
279
333
  'host-discovery': hostDiscoveryStepValidationsMap,
280
334
  storage: storageStepValidationsMap,
281
335
  networking: networkingStepValidationsMap,
282
- review: reviewStepValidationsMap,
336
+ 'custom-manifests': customManifestsValidationsMap,
283
337
  'credentials-download': credentialsValidationMap,
338
+ review: reviewStepValidationsMap,
284
339
  'disconnected-review': disconnectedReviewValidationsMap,
285
340
  'disconnected-basic': disconnectedBasicValidationsMap,
286
341
  };
@@ -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,
@@ -8,7 +8,6 @@ import {
8
8
  TextInput,
9
9
  ToolbarProps,
10
10
  ToolbarFilterProps,
11
- TextInputProps,
12
11
  ButtonVariant,
13
12
  Spinner,
14
13
  ToolbarGroup,
@@ -39,7 +38,7 @@ export type ClusterFiltersType = {
39
38
 
40
39
  type ClustersListToolbarProps = {
41
40
  searchString: string;
42
- setSearchString: TextInputProps['onChange'];
41
+ setSearchString: (value: string) => void;
43
42
  filters: ClusterFiltersType;
44
43
  setFilters: (filters: ClusterFiltersType) => void;
45
44
  };
@@ -63,10 +62,9 @@ const ClustersListToolbar: React.FC<ClustersListToolbarProps> = ({
63
62
  setFilters({
64
63
  status: [],
65
64
  });
65
+ setSearchString('');
66
66
  };
67
67
 
68
- const onSearchNameChanged: TextInputProps['onChange'] = setSearchString;
69
-
70
68
  const onSelect = (type: string, isChecked: boolean, value: Cluster['status']) => {
71
69
  setFilters({
72
70
  ...filters,
@@ -126,7 +124,7 @@ const ClustersListToolbar: React.FC<ClustersListToolbarProps> = ({
126
124
  id="search-string"
127
125
  type="search"
128
126
  aria-label="string to be searched in cluster names or ids"
129
- onChange={onSearchNameChanged}
127
+ onChange={(_event, value) => setSearchString(value)}
130
128
  value={searchString}
131
129
  placeholder="Filter by Name, ID or Base domain"
132
130
  title="Filter by Name, ID or Base domain"
@@ -174,7 +172,7 @@ const ClustersListToolbar: React.FC<ClustersListToolbarProps> = ({
174
172
  </CustomToolbarFilter>
175
173
  <ToolbarButton
176
174
  variant={ButtonVariant.primary}
177
- onClick={() => navigate(`~new`)}
175
+ onClick={() => void navigate(`~new`)}
178
176
  id="button-create-new-cluster"
179
177
  data-ouia-id="button-create-new-cluster"
180
178
  >
@@ -25,6 +25,7 @@ import {
25
25
  ClusterTableRows,
26
26
  HumanizedSortable,
27
27
  rowSorter,
28
+ EmptyState,
28
29
  } from '../../../common';
29
30
  import { useTranslation } from '../../../common/hooks/use-translation-wrapper';
30
31
  import DeleteClusterModal from './DeleteClusterModal';
@@ -151,64 +152,73 @@ const ClustersTable = ({ rows, deleteCluster }: ClustersTableProps) => {
151
152
  closeModal();
152
153
  };
153
154
 
155
+ const hasActiveFilters = searchString.length > 0 || filters.status.length > 0;
156
+
154
157
  return (
155
158
  <>
156
159
  <ClustersListToolbar
157
160
  searchString={searchString}
158
- setSearchString={(_event, value) => setSearchString(value)}
161
+ setSearchString={setSearchString}
159
162
  filters={filters}
160
163
  setFilters={setFilters}
161
164
  />
162
- <Table aria-label="Clusters table" data-testid={'clusters-table'}>
163
- <Thead>
164
- <Tr>
165
- {columns.map((col, i) => (
166
- <Th
167
- key={`col-${i}`}
168
- width={col.cellWidth as BaseCellProps['width']}
169
- sort={getSortParams(i)}
170
- >
171
- <TableText>{col.title}</TableText>
172
- </Th>
173
- ))}
174
- <Th key="col-action" />
175
- </Tr>
176
- </Thead>
177
- <Tbody>
178
- {sortedRows.map((row, i) => (
179
- <Tr {...getRowProps(row.props as ClusterRowDataProps)} key={`row-${i}`}>
180
- {row.cells?.map((cell, j) => {
181
- const humanized = cell as HumanizedSortable;
182
- return (
183
- <Td dataLabel={columns[j].title} key={`cell-${i}-${j}`} {...humanized.props}>
184
- <TableText wrapModifier="breakWord">{humanized?.title}</TableText>
185
- </Td>
186
- );
187
- })}
188
- <Td isActionCell>
189
- <ActionsColumn
190
- items={[
191
- {
192
- title: 'Delete',
193
- id: `button-delete-${(row.props as ClusterRowDataProps).name}`,
194
- isDisabled:
195
- getClusterTableStatusCell(row).sortableValue ===
196
- clusterStatusLabels(t).installing,
197
- onClick: () => {
198
- setDeleteClusterID({
199
- id: (row.props as ClusterRowDataProps).id,
200
- name: (row.props as ClusterRowDataProps).name,
201
- });
202
- setDeleteModalOpen(true);
203
- },
204
- },
205
- ]}
206
- />
207
- </Td>
165
+ {sortedRows.length === 0 && hasActiveFilters ? (
166
+ <EmptyState
167
+ title="No matching clusters"
168
+ content="No clusters match the current filter criteria. Try adjusting your filters."
169
+ />
170
+ ) : (
171
+ <Table aria-label="Clusters table" data-testid={'clusters-table'}>
172
+ <Thead>
173
+ <Tr>
174
+ {columns.map((col, i) => (
175
+ <Th
176
+ key={`col-${i}`}
177
+ width={col.cellWidth as BaseCellProps['width']}
178
+ sort={getSortParams(i)}
179
+ >
180
+ <TableText>{col.title}</TableText>
181
+ </Th>
182
+ ))}
183
+ <Th key="col-action" />
208
184
  </Tr>
209
- ))}
210
- </Tbody>
211
- </Table>
185
+ </Thead>
186
+ <Tbody>
187
+ {sortedRows.map((row, i) => (
188
+ <Tr {...getRowProps(row.props as ClusterRowDataProps)} key={`row-${i}`}>
189
+ {row.cells?.map((cell, j) => {
190
+ const humanized = cell as HumanizedSortable;
191
+ return (
192
+ <Td dataLabel={columns[j].title} key={`cell-${i}-${j}`} {...humanized.props}>
193
+ <TableText wrapModifier="breakWord">{humanized?.title}</TableText>
194
+ </Td>
195
+ );
196
+ })}
197
+ <Td isActionCell>
198
+ <ActionsColumn
199
+ items={[
200
+ {
201
+ title: 'Delete',
202
+ id: `button-delete-${(row.props as ClusterRowDataProps).name}`,
203
+ isDisabled:
204
+ getClusterTableStatusCell(row).sortableValue ===
205
+ clusterStatusLabels(t).installing,
206
+ onClick: () => {
207
+ setDeleteClusterID({
208
+ id: (row.props as ClusterRowDataProps).id,
209
+ name: (row.props as ClusterRowDataProps).name,
210
+ });
211
+ setDeleteModalOpen(true);
212
+ },
213
+ },
214
+ ]}
215
+ />
216
+ </Td>
217
+ </Tr>
218
+ ))}
219
+ </Tbody>
220
+ </Table>
221
+ )}
212
222
  <DeleteClusterModal
213
223
  name={deleteClusterID?.name || ''}
214
224
  onClose={closeModal}
@@ -229,7 +229,7 @@ export const getNewFeatureDisabledReason = (
229
229
  }
230
230
  case 'USER_MANAGED_NETWORKING': {
231
231
  if (!isSupported) {
232
- return `User-Managed networking is not supported when using ${
232
+ return `User-managed networking is not supported when using ${
233
233
  platformType ? ExternalPlatformLabels[platformType] : ''
234
234
  }`;
235
235
  }
@@ -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';
@@ -55,12 +55,12 @@ export default function useInfraEnvId(
55
55
  ]);
56
56
 
57
57
  React.useEffect(() => {
58
- if (!clusterId) {
58
+ if (!clusterId && !isSingleClusterFeatureEnabled) {
59
59
  setError('Missing clusterId to load infrastructure environment');
60
60
  } else if (!infraEnvId) {
61
61
  void findInfraEnvId();
62
62
  }
63
- }, [clusterId, findInfraEnvId, infraEnvId]);
63
+ }, [clusterId, findInfraEnvId, infraEnvId, isSingleClusterFeatureEnabled]);
64
64
 
65
65
  return { infraEnvId, error };
66
66
  }
@@ -1,4 +1,4 @@
1
- import { useCallback, useEffect, useState } from 'react';
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
2
  import { Cluster } from '@openshift-assisted/types/assisted-installer-service';
3
3
  import { CpuArchitecture, useAlerts } from '../../common';
4
4
  import useInfraEnvHosts from './useInfraEnvHosts';
@@ -6,10 +6,15 @@ import HostsService from '../services/HostsService';
6
6
  import { getErrorMessage } from '../../common/utils';
7
7
  import { useFeature } from './use-feature';
8
8
 
9
+ const MAX_BIND_RETRY_ATTEMPTS = 3;
10
+
9
11
  const useLateBinding = (cluster: Cluster): boolean => {
10
12
  const [isBinding, setIsBinding] = useState(false);
11
13
  const { addAlert, removeAlert, alerts } = useAlerts();
12
14
  const isSingleClusterFeatureEnabled = useFeature('ASSISTED_INSTALLER_SINGLE_CLUSTER_FEATURE');
15
+ const bindFailureCounts = useRef<Map<string, number>>(new Map());
16
+ const alertsRef = useRef(alerts);
17
+ alertsRef.current = alerts;
13
18
 
14
19
  const {
15
20
  hosts: infraEnvHosts,
@@ -25,38 +30,54 @@ const useLateBinding = (cluster: Cluster): boolean => {
25
30
  cluster.openshiftVersion,
26
31
  );
27
32
 
28
- const bindHosts = useCallback(async () => {
29
- if (infraEnvHosts && !infraEnvError && !infraEnvLoading && isSingleClusterFeatureEnabled) {
30
- for (const host of infraEnvHosts) {
31
- if (host.clusterId !== cluster.id) {
32
- setIsBinding(true);
33
- try {
34
- const alertKey = alerts.find((alert) => alert.key === host.id)?.key;
35
- if (alertKey) {
36
- removeAlert(alertKey);
37
- }
38
- await HostsService.bind(host, cluster.id);
39
- } catch (error) {
40
- addAlert({
41
- title: `Failed to bind host ${host.requestedHostname || ''}`,
42
- message: getErrorMessage(error),
43
- key: host.id,
44
- });
45
- } finally {
46
- setIsBinding(false);
47
- }
33
+ const bindSingleHost = useCallback(
34
+ async (host: NonNullable<typeof infraEnvHosts>[number]) => {
35
+ setIsBinding(true);
36
+ try {
37
+ await HostsService.bind(host, cluster.id);
38
+ // Binding succeeded: reset the failure counter and clear any alert that
39
+ // was shown after previous exhausted retries.
40
+ bindFailureCounts.current.delete(host.id);
41
+ const alertKey = alertsRef.current.find((alert) => alert.key === host.id)?.key;
42
+ if (alertKey) {
43
+ removeAlert(alertKey);
48
44
  }
45
+ } catch (error) {
46
+ const failureCount = (bindFailureCounts.current.get(host.id) ?? 0) + 1;
47
+ bindFailureCounts.current.set(host.id, failureCount);
48
+
49
+ // Suppress transient errors (e.g. 5xx during self-healing) and only
50
+ // surface the alert once silent retries have been exhausted.
51
+ if (failureCount >= MAX_BIND_RETRY_ATTEMPTS) {
52
+ addAlert({
53
+ title: `Failed to bind host ${host.requestedHostname || ''}`,
54
+ message: getErrorMessage(error),
55
+ key: host.id,
56
+ });
57
+ }
58
+ } finally {
59
+ setIsBinding(false);
60
+ }
61
+ },
62
+ [cluster.id, addAlert, removeAlert],
63
+ );
64
+
65
+ const bindHosts = useCallback(async () => {
66
+ if (!infraEnvHosts || infraEnvError || infraEnvLoading || !isSingleClusterFeatureEnabled) {
67
+ return;
68
+ }
69
+ for (const host of infraEnvHosts) {
70
+ if (host.clusterId !== cluster.id) {
71
+ await bindSingleHost(host);
49
72
  }
50
73
  }
51
- // eslint-disable-next-line react-hooks/exhaustive-deps
52
74
  }, [
53
75
  infraEnvHosts,
54
76
  infraEnvError,
55
77
  infraEnvLoading,
56
78
  isSingleClusterFeatureEnabled,
57
79
  cluster.id,
58
- addAlert,
59
- removeAlert,
80
+ bindSingleHost,
60
81
  ]);
61
82
 
62
83
  useEffect(() => {
@@ -4,8 +4,8 @@ import { useAlerts } from '../../common';
4
4
  import { AccessTokenAPI } from '../../common/api/accounts-management-service/access-token-api';
5
5
 
6
6
  /**
7
- * Standalone / disconnected UI: bridge serves GET /pull-secret from a mounted manifest
8
- * (see assisted-disconnected-ui proxy).
7
+ * Standalone / disconnected UI: proxy serves GET /api/pull-secret with pull-secret JSON
8
+ * `{ "auths": … }` extracted from the mounted Secret manifest (see assisted-disconnected-ui proxy).
9
9
  */
10
10
  async function fetchPullSecretFromBridge(): Promise<string | undefined> {
11
11
  const res = await fetch('/api/pull-secret', { credentials: 'same-origin' });
@@ -21,7 +21,10 @@ const InfraEnvsService = {
21
21
  const { data: infraEnvs } = await InfraEnvsAPI.list(
22
22
  !isSingleClusterFeatureEnabled ? clusterId : '',
23
23
  );
24
- if (infraEnvs.length > 0) {
24
+ if (isSingleClusterFeatureEnabled) {
25
+ return infraEnvs[0].id;
26
+ }
27
+ if (infraEnvs.length > 0 && clusterId) {
25
28
  InfraEnvCache.updateInfraEnvs(clusterId, infraEnvs);
26
29
  infraEnvId = InfraEnvCache.getInfraEnvId(clusterId, cpuArchitecture);
27
30
  }
@@ -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
  );