@openshift-assisted/ui-lib 2.41.2 → 2.42.0

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 (183) hide show
  1. package/build/@types/cim/components/ClusterDeployment/ClusterDeploymentDetailsForm.d.ts.map +1 -1
  2. package/build/@types/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.d.ts.map +1 -1
  3. package/build/@types/cim/components/ClusterDeployment/LabelsSelector.d.ts.map +1 -1
  4. package/build/@types/cim/components/ClusterDeployment/ScaleUpForm.d.ts +1 -0
  5. package/build/@types/cim/components/ClusterDeployment/ScaleUpForm.d.ts.map +1 -1
  6. package/build/@types/cim/components/InfraEnv/AddHostDropdown.d.ts.map +1 -1
  7. package/build/@types/cim/components/InfraEnv/EnvironmentDetails.d.ts.map +1 -1
  8. package/build/@types/cim/components/InfraEnv/InfraEnvOpenShiftVersionDropdown.d.ts.map +1 -1
  9. package/build/@types/cim/components/common/CpuArchitectureDropdown.d.ts.map +1 -1
  10. package/build/@types/cim/components/helpers/versions.d.ts.map +1 -1
  11. package/build/@types/cim/components/modals/ScaleUpModal.d.ts +1 -0
  12. package/build/@types/cim/components/modals/ScaleUpModal.d.ts.map +1 -1
  13. package/build/@types/common/components/clusterConfiguration/ControlPlaneNodesDropdown.d.ts.map +1 -1
  14. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.d.ts.map +1 -1
  15. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionValues.d.ts +1 -0
  16. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionValues.d.ts.map +1 -1
  17. package/build/@types/common/components/clusterWizard/clusterDetailsValidation.d.ts.map +1 -1
  18. package/build/@types/common/components/clusterWizard/types.d.ts +1 -0
  19. package/build/@types/common/components/clusterWizard/types.d.ts.map +1 -1
  20. package/build/@types/common/components/hosts/DiskRole.d.ts.map +1 -1
  21. package/build/@types/common/components/hosts/TableToolbar.d.ts.map +1 -1
  22. package/build/@types/common/components/operators/operatorSpecs.d.ts.map +1 -1
  23. package/build/@types/common/components/ui/ClusterEventsToolbar.d.ts.map +1 -1
  24. package/build/@types/common/components/ui/OpenShiftVersionDropdown.d.ts +0 -1
  25. package/build/@types/common/components/ui/OpenShiftVersionDropdown.d.ts.map +1 -1
  26. package/build/@types/common/components/ui/SimpleDropdown.d.ts +2 -2
  27. package/build/@types/common/components/ui/SimpleDropdown.d.ts.map +1 -1
  28. package/build/@types/common/config/constants.d.ts.map +1 -1
  29. package/build/@types/common/config/docs_links.d.ts +1 -2
  30. package/build/@types/common/config/docs_links.d.ts.map +1 -1
  31. package/build/@types/common/index.d.ts +1 -0
  32. package/build/@types/common/index.d.ts.map +1 -1
  33. package/build/@types/common/types/ui-settings.d.ts +1 -0
  34. package/build/@types/common/types/ui-settings.d.ts.map +1 -1
  35. package/build/@types/common/utils.d.ts +8 -0
  36. package/build/@types/common/utils.d.ts.map +1 -1
  37. package/build/@types/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.d.ts.map +1 -1
  38. package/build/@types/ocm/components/clusterConfiguration/CpuArchitectureDropdown.d.ts.map +1 -1
  39. package/build/@types/ocm/components/clusterConfiguration/DiscoveryImageTypeDropdown.d.ts.map +1 -1
  40. package/build/@types/ocm/components/clusterConfiguration/OcmBaseDomainField.d.ts.map +1 -1
  41. package/build/@types/ocm/components/clusterConfiguration/OcmTNADisclaimer.d.ts +4 -0
  42. package/build/@types/ocm/components/clusterConfiguration/OcmTNADisclaimer.d.ts.map +1 -0
  43. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.d.ts.map +1 -1
  44. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.d.ts.map +1 -1
  45. package/build/@types/ocm/components/clusterConfiguration/operators/utils.d.ts.map +1 -1
  46. package/build/@types/ocm/components/clusterConfiguration/platformIntegration/ExternalPlatformDropdown.d.ts.map +1 -1
  47. package/build/@types/ocm/components/clusterConfiguration/staticIp/commonValidationSchemas.d.ts.map +1 -1
  48. package/build/@types/ocm/components/clusterWizard/ClusterDetails.d.ts.map +1 -1
  49. package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts.map +1 -1
  50. package/build/@types/ocm/components/clusterWizard/OperatorsSelect.d.ts.map +1 -1
  51. package/build/@types/ocm/components/hosts/use-hosts-table.d.ts.map +1 -1
  52. package/build/@types/ocm/services/DiskEncryptionService.d.ts +1 -1
  53. package/build/@types/ocm/services/DiskEncryptionService.d.ts.map +1 -1
  54. package/build/@types/ocm/store/slices/current-cluster/slice.d.ts +1 -1
  55. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentDetailsForm.js +2 -2
  56. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentDetailsForm.js.map +1 -1
  57. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.js +2 -1
  58. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.js.map +1 -1
  59. package/build/cjs/cim/components/ClusterDeployment/LabelsSelector.js +5 -5
  60. package/build/cjs/cim/components/ClusterDeployment/LabelsSelector.js.map +1 -1
  61. package/build/cjs/cim/components/ClusterDeployment/ScaleUpForm.js +2 -2
  62. package/build/cjs/cim/components/ClusterDeployment/ScaleUpForm.js.map +1 -1
  63. package/build/cjs/cim/components/InfraEnv/AddHostDropdown.js +29 -28
  64. package/build/cjs/cim/components/InfraEnv/AddHostDropdown.js.map +1 -1
  65. package/build/cjs/cim/components/InfraEnv/EnvironmentDetails.js +16 -14
  66. package/build/cjs/cim/components/InfraEnv/EnvironmentDetails.js.map +1 -1
  67. package/build/cjs/cim/components/InfraEnv/InfraEnvAgentTable.js +2 -2
  68. package/build/cjs/cim/components/InfraEnv/InfraEnvAgentTable.js.map +1 -1
  69. package/build/cjs/cim/components/InfraEnv/InfraEnvOpenShiftVersionDropdown.js +4 -8
  70. package/build/cjs/cim/components/InfraEnv/InfraEnvOpenShiftVersionDropdown.js.map +1 -1
  71. package/build/cjs/cim/components/common/CpuArchitectureDropdown.js +3 -3
  72. package/build/cjs/cim/components/common/CpuArchitectureDropdown.js.map +1 -1
  73. package/build/cjs/cim/components/helpers/versions.js +1 -1
  74. package/build/cjs/cim/components/helpers/versions.js.map +1 -1
  75. package/build/cjs/cim/components/modals/MassApproveAction.js +2 -2
  76. package/build/cjs/cim/components/modals/MassApproveAction.js.map +1 -1
  77. package/build/cjs/cim/components/modals/ScaleUpModal.js +3 -3
  78. package/build/cjs/cim/components/modals/ScaleUpModal.js.map +1 -1
  79. package/build/cjs/common/components/clusterConfiguration/ControlPlaneNodesDropdown.js +5 -6
  80. package/build/cjs/common/components/clusterConfiguration/ControlPlaneNodesDropdown.js.map +1 -1
  81. package/build/cjs/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.js +11 -6
  82. package/build/cjs/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.js.map +1 -1
  83. package/build/cjs/common/components/clusterWizard/clusterDetailsValidation.js +2 -1
  84. package/build/cjs/common/components/clusterWizard/clusterDetailsValidation.js.map +1 -1
  85. package/build/cjs/common/components/hosts/DiskRole.js +5 -5
  86. package/build/cjs/common/components/hosts/DiskRole.js.map +1 -1
  87. package/build/cjs/common/components/hosts/HostToolbarActions.js +3 -3
  88. package/build/cjs/common/components/hosts/HostToolbarActions.js.map +1 -1
  89. package/build/cjs/common/components/hosts/TableToolbar.js +15 -15
  90. package/build/cjs/common/components/hosts/TableToolbar.js.map +1 -1
  91. package/build/cjs/common/components/operators/operatorSpecs.js +6 -4
  92. package/build/cjs/common/components/operators/operatorSpecs.js.map +1 -1
  93. package/build/cjs/common/components/ui/ClusterEventsToolbar.js +1 -1
  94. package/build/cjs/common/components/ui/ClusterEventsToolbar.js.map +1 -1
  95. package/build/cjs/common/components/ui/OpenShiftVersionDropdown.js +13 -16
  96. package/build/cjs/common/components/ui/OpenShiftVersionDropdown.js.map +1 -1
  97. package/build/cjs/common/components/ui/SimpleDropdown.js +4 -5
  98. package/build/cjs/common/components/ui/SimpleDropdown.js.map +1 -1
  99. package/build/cjs/common/config/constants.js +10 -0
  100. package/build/cjs/common/config/constants.js.map +1 -1
  101. package/build/cjs/common/config/docs_links.js +41 -25
  102. package/build/cjs/common/config/docs_links.js.map +1 -1
  103. package/build/cjs/common/index.js +1 -0
  104. package/build/cjs/common/index.js.map +1 -1
  105. package/build/cjs/common/utils.js +27 -1
  106. package/build/cjs/common/utils.js.map +1 -1
  107. package/build/cjs/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.js +18 -9
  108. package/build/cjs/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.js.map +1 -1
  109. package/build/cjs/ocm/components/clusterConfiguration/CpuArchitectureDropdown.js +3 -5
  110. package/build/cjs/ocm/components/clusterConfiguration/CpuArchitectureDropdown.js.map +1 -1
  111. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageTypeDropdown.js +15 -17
  112. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageTypeDropdown.js.map +1 -1
  113. package/build/cjs/ocm/components/clusterConfiguration/OcmBaseDomainField.js +5 -7
  114. package/build/cjs/ocm/components/clusterConfiguration/OcmBaseDomainField.js.map +1 -1
  115. package/build/cjs/ocm/components/clusterConfiguration/OcmTNADisclaimer.js +14 -0
  116. package/build/cjs/ocm/components/clusterConfiguration/OcmTNADisclaimer.js.map +1 -0
  117. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.js +6 -8
  118. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.js.map +1 -1
  119. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.js +7 -10
  120. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.js.map +1 -1
  121. package/build/cjs/ocm/components/clusterConfiguration/operators/utils.js +2 -1
  122. package/build/cjs/ocm/components/clusterConfiguration/operators/utils.js.map +1 -1
  123. package/build/cjs/ocm/components/clusterConfiguration/platformIntegration/ExternalPlatformDropdown.js +11 -13
  124. package/build/cjs/ocm/components/clusterConfiguration/platformIntegration/ExternalPlatformDropdown.js.map +1 -1
  125. package/build/cjs/ocm/components/clusterConfiguration/staticIp/commonValidationSchemas.js +4 -0
  126. package/build/cjs/ocm/components/clusterConfiguration/staticIp/commonValidationSchemas.js.map +1 -1
  127. package/build/cjs/ocm/components/clusterWizard/ClusterDetails.js +7 -4
  128. package/build/cjs/ocm/components/clusterWizard/ClusterDetails.js.map +1 -1
  129. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js +6 -1
  130. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js.map +1 -1
  131. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js +2 -1
  132. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js.map +1 -1
  133. package/build/cjs/ocm/components/hosts/use-hosts-table.js +9 -2
  134. package/build/cjs/ocm/components/hosts/use-hosts-table.js.map +1 -1
  135. package/build/cjs/ocm/services/DiskEncryptionService.js +11 -3
  136. package/build/cjs/ocm/services/DiskEncryptionService.js.map +1 -1
  137. package/lib/cim/components/ClusterDeployment/ClusterDeploymentDetailsForm.tsx +4 -2
  138. package/lib/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.tsx +8 -6
  139. package/lib/cim/components/ClusterDeployment/LabelsSelector.tsx +27 -14
  140. package/lib/cim/components/ClusterDeployment/ScaleUpForm.tsx +3 -0
  141. package/lib/cim/components/InfraEnv/AddHostDropdown.tsx +60 -47
  142. package/lib/cim/components/InfraEnv/EnvironmentDetails.tsx +7 -10
  143. package/lib/cim/components/InfraEnv/InfraEnvAgentTable.tsx +1 -1
  144. package/lib/cim/components/InfraEnv/InfraEnvOpenShiftVersionDropdown.tsx +34 -22
  145. package/lib/cim/components/common/CpuArchitectureDropdown.tsx +6 -3
  146. package/lib/cim/components/helpers/versions.ts +2 -2
  147. package/lib/cim/components/modals/MassApproveAction.tsx +1 -1
  148. package/lib/cim/components/modals/ScaleUpModal.tsx +5 -2
  149. package/lib/common/components/clusterConfiguration/ControlPlaneNodesDropdown.tsx +30 -17
  150. package/lib/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.tsx +20 -5
  151. package/lib/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionValues.ts +1 -0
  152. package/lib/common/components/clusterWizard/clusterDetailsValidation.ts +3 -0
  153. package/lib/common/components/clusterWizard/types.ts +1 -0
  154. package/lib/common/components/hosts/DiskRole.tsx +23 -17
  155. package/lib/common/components/hosts/HostToolbarActions.tsx +1 -1
  156. package/lib/common/components/hosts/TableToolbar.tsx +54 -48
  157. package/lib/common/components/operators/operatorSpecs.tsx +7 -4
  158. package/lib/common/components/ui/ClusterEventsToolbar.tsx +1 -0
  159. package/lib/common/components/ui/OpenShiftVersionDropdown.tsx +38 -44
  160. package/lib/common/components/ui/SimpleDropdown.tsx +23 -22
  161. package/lib/common/config/constants.ts +11 -0
  162. package/lib/common/config/docs_links.ts +44 -30
  163. package/lib/common/index.ts +1 -0
  164. package/lib/common/types/ui-settings.ts +1 -0
  165. package/lib/common/utils.ts +30 -0
  166. package/lib/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.tsx +42 -11
  167. package/lib/ocm/components/clusterConfiguration/CpuArchitectureDropdown.tsx +26 -20
  168. package/lib/ocm/components/clusterConfiguration/DiscoveryImageTypeDropdown.tsx +47 -46
  169. package/lib/ocm/components/clusterConfiguration/OcmBaseDomainField.tsx +16 -13
  170. package/lib/ocm/components/clusterConfiguration/OcmTNADisclaimer.tsx +23 -0
  171. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.tsx +25 -26
  172. package/lib/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.tsx +26 -30
  173. package/lib/ocm/components/clusterConfiguration/operators/utils.tsx +2 -1
  174. package/lib/ocm/components/clusterConfiguration/platformIntegration/ExternalPlatformDropdown.tsx +34 -33
  175. package/lib/ocm/components/clusterConfiguration/staticIp/commonValidationSchemas.tsx +4 -0
  176. package/lib/ocm/components/clusterWizard/ClusterDetails.tsx +15 -5
  177. package/lib/ocm/components/clusterWizard/OperatorsBundle.tsx +5 -1
  178. package/lib/ocm/components/clusterWizard/OperatorsSelect.tsx +5 -1
  179. package/lib/ocm/components/hosts/use-hosts-table.tsx +9 -3
  180. package/lib/ocm/services/DiskEncryptionService.ts +7 -1
  181. package/package.json +3 -3
  182. package/build/cjs/common/components/ui/OpenShiftVersionDropdown.css +0 -9
  183. package/lib/common/components/ui/OpenShiftVersionDropdown.css +0 -9
@@ -1,14 +1,24 @@
1
- const DEFAULT_OPENSHIFT_DOCS_VERSION = 4.15;
1
+ import { isMajorMinorVersionEqualOrGreater } from '../utils';
2
2
 
3
- export const getShortOpenshiftVersion = (ocpVersion?: string) => {
3
+ const LATEST_OPENSHIFT_DOCS_VERSION = '4.18';
4
+ const MIN_OPENSHIFT_DOCS_VERSION = '4.14';
5
+
6
+ const getDocsOpenshiftVersion = (ocpVersion?: string): string => {
4
7
  if (!ocpVersion) {
5
- return DEFAULT_OPENSHIFT_DOCS_VERSION;
8
+ return LATEST_OPENSHIFT_DOCS_VERSION;
9
+ }
10
+ if (isMajorMinorVersionEqualOrGreater(MIN_OPENSHIFT_DOCS_VERSION, ocpVersion)) {
11
+ return MIN_OPENSHIFT_DOCS_VERSION;
6
12
  }
7
- const versionXY = Number(ocpVersion.split('.').slice(0, 2).join('.'));
8
- if (!Number.isFinite(versionXY)) {
9
- return DEFAULT_OPENSHIFT_DOCS_VERSION;
13
+ if (isMajorMinorVersionEqualOrGreater(ocpVersion, LATEST_OPENSHIFT_DOCS_VERSION)) {
14
+ return LATEST_OPENSHIFT_DOCS_VERSION;
15
+ }
16
+
17
+ const versionParts = ocpVersion.split('.').slice(0, 2).map(Number);
18
+ if (versionParts.length < 2) {
19
+ return LATEST_OPENSHIFT_DOCS_VERSION;
10
20
  }
11
- return versionXY < 4.14 ? 4.14 : versionXY;
21
+ return `${versionParts[0]}.${versionParts[1]}`;
12
22
  };
13
23
 
14
24
  export const getYearForAssistedInstallerDocumentationLink = () => {
@@ -31,19 +41,19 @@ export const CLUSTER_MANAGER_SITE_LINK = 'https://console.redhat.com/openshift/i
31
41
  export const PULL_SECRET_INFO_LINK = CLUSTER_MANAGER_SITE_LINK;
32
42
 
33
43
  export const getEncryptingDiskDuringInstallationDocsLink = (ocpVersion?: string) =>
34
- `https://docs.redhat.com/en/documentation/openshift_container_platform/${getShortOpenshiftVersion(
44
+ `https://docs.redhat.com/en/documentation/openshift_container_platform/${getDocsOpenshiftVersion(
35
45
  ocpVersion,
36
46
  )}/html/installation_configuration/installing-customizing#installation-special-config-encrypt-disk_installing-customizing`;
37
47
 
38
48
  //Networking page
39
- export const getOpenShiftNetworkingDocsLink = (ocpVersion?: string) =>
40
- `https://docs.redhat.com/en/documentation/openshift_container_platform/${getShortOpenshiftVersion(
49
+ export const getOpenShiftNetworkingDocsLink = (ocpVersion?: string) => {
50
+ const variant = isMajorMinorVersionEqualOrGreater(ocpVersion, '4.18')
51
+ ? 'user-provisioned-infrastructure'
52
+ : 'installing-bare-metal';
53
+ return `https://docs.redhat.com/en/documentation/openshift_container_platform/${getDocsOpenshiftVersion(
41
54
  ocpVersion,
42
- )}/html/installing_on_bare_metal/${
43
- getShortOpenshiftVersion(ocpVersion) > 4.17
44
- ? 'user-provisioned-infrastructure'
45
- : 'installing-bare-metal'
46
- }#installation-network-user-infra_installing-bare-metal`;
55
+ )}/html/installing_on_bare_metal/${variant}#installation-network-user-infra_installing-bare-metal`;
56
+ };
47
57
 
48
58
  export const SSH_GENERATION_DOC_LINK = 'https://www.redhat.com/sysadmin/configure-ssh-keygen';
49
59
 
@@ -52,7 +62,7 @@ export const getOcpConsoleNodesPage = (ocpConsoleUrl: string) =>
52
62
  `${ocpConsoleUrl}/k8s/cluster/nodes`;
53
63
 
54
64
  export const getApproveNodesInClLink = (ocpVersion?: string) =>
55
- `https://docs.redhat.com/en/documentation/openshift_container_platform/${getShortOpenshiftVersion(
65
+ `https://docs.redhat.com/en/documentation/openshift_container_platform/${getDocsOpenshiftVersion(
56
66
  ocpVersion,
57
67
  )}/html/installing_on_any_platform/installing-platform-agnostic#installation-approve-csrs_installing-platform-agnostic`;
58
68
 
@@ -90,18 +100,20 @@ export const OSC_REQUIREMENTS_LINK =
90
100
 
91
101
  export const CNV_LINK = 'https://cloud.redhat.com/learn/topics/virtualization/';
92
102
 
93
- export const KMM_LINK =
94
- 'https://docs.redhat.com/en/documentation/openshift_container_platform/4.12/html/specialized_hardware_and_driver_enablement/kernel-module-management-operator';
103
+ export const getKmmDocsLink = (ocpVersion?: string) =>
104
+ `https://docs.redhat.com/en/documentation/openshift_container_platform/${getDocsOpenshiftVersion(
105
+ ocpVersion,
106
+ )}/html/specialized_hardware_and_driver_enablement/kernel-module-management-operator`;
95
107
 
96
108
  export const ODF_LINK = 'https://www.redhat.com/en/resources/openshift-data-foundation-datasheet';
97
109
 
98
110
  export const getMceDocsLink = (ocpVersion?: string) =>
99
- `https://docs.redhat.com/en/documentation/openshift_container_platform/${getShortOpenshiftVersion(
111
+ `https://docs.redhat.com/en/documentation/openshift_container_platform/${getDocsOpenshiftVersion(
100
112
  ocpVersion,
101
113
  )}/html/architecture/about-the-multicluster-engine-for-kubernetes-operator`;
102
114
 
103
115
  export const getLvmsDocsLink = (ocpVersion?: string) =>
104
- `https://docs.redhat.com/en/documentation/openshift_container_platform/${getShortOpenshiftVersion(
116
+ `https://docs.redhat.com/en/documentation/openshift_container_platform/${getDocsOpenshiftVersion(
105
117
  ocpVersion,
106
118
  )}/html/storage/configuring-persistent-storage#overview-of-lvm-storage-functionality_ways-to-provision-local-storage`;
107
119
 
@@ -118,7 +130,7 @@ export const NODE_MAINTENANCE_LINK =
118
130
  'https://docs.redhat.com/en/documentation/workload_availability_for_red_hat_openshift/latest/html/remediation_fencing_and_maintenance/node-maintenance-operator';
119
131
 
120
132
  export const getKubeDeschedulerLink = (ocpVersion?: string) =>
121
- `https://docs.redhat.com/en/documentation/openshift_container_platform/${getShortOpenshiftVersion(
133
+ `https://docs.redhat.com/en/documentation/openshift_container_platform/${getDocsOpenshiftVersion(
122
134
  ocpVersion,
123
135
  )}/html/nodes/controlling-pod-placement-onto-nodes-scheduling#descheduler`;
124
136
 
@@ -146,37 +158,39 @@ export const OPENSHIFT_AI_LINK =
146
158
  export const OSC_LINK = 'https://docs.redhat.com/en/documentation/openshift_sandboxed_containers';
147
159
 
148
160
  export const getMtuLink = (ocpVersion?: string) =>
149
- `https://docs.redhat.com/en/documentation/openshift_container_platform/${getShortOpenshiftVersion(
161
+ `https://docs.redhat.com/en/documentation/openshift_container_platform/${getDocsOpenshiftVersion(
150
162
  ocpVersion,
151
163
  )}/html/networking/changing-cluster-network-mtu#nw-cluster-mtu-change-about_changing-cluster-network-mtu`;
152
164
 
153
165
  export const AUTHORINO_OPERATOR_LINK = 'https://github.com/Kuadrant/authorino-operator';
154
166
 
155
167
  export const getLsoLink = (ocpVersion?: string) =>
156
- `https://docs.openshift.com/container-platform/${getShortOpenshiftVersion(
168
+ `https://docs.openshift.com/container-platform/${getDocsOpenshiftVersion(
157
169
  ocpVersion,
158
170
  )}/storage/persistent_storage/persistent_storage_local/ways-to-provision-local-storage.html`;
159
171
 
160
172
  export const getNmstateLink = (ocpVersion?: string) =>
161
- `https://docs.openshift.com/container-platform/${getShortOpenshiftVersion(
173
+ `https://docs.openshift.com/container-platform/${getDocsOpenshiftVersion(
162
174
  ocpVersion,
163
175
  )}/networking/networking_operators/k8s-nmstate-about-the-k8s-nmstate-operator.html`;
164
176
 
165
177
  export const getNodeFeatureDiscoveryLink = (ocpVersion?: string) =>
166
- `https://docs.openshift.com/container-platform/${getShortOpenshiftVersion(
178
+ `https://docs.openshift.com/container-platform/${getDocsOpenshiftVersion(
167
179
  ocpVersion,
168
180
  )}/hardware_enablement/psap-node-feature-discovery-operator.html`;
169
181
 
170
- export const getNvidiaGpuLink = (ocpVersion?: string) =>
171
- `https://docs.openshift.com/container-platform/${getShortOpenshiftVersion(
172
- ocpVersion,
173
- )}/virt/virtual_machines/advanced_vm_management/virt-configuring-virtual-gpus.html`;
182
+ export const getNvidiaGpuLink = (ocpVersion?: string) => {
183
+ const version = getDocsOpenshiftVersion(ocpVersion);
184
+ return isMajorMinorVersionEqualOrGreater(ocpVersion, '4.18')
185
+ ? `https://docs.redhat.com/en/documentation/openshift_container_platform/${version}/html/virtualization/managing-vms#virt-configuring-virtual-gpus`
186
+ : `https://docs.openshift.com/container-platform/${version}/virt/virtual_machines/advanced_vm_management/virt-configuring-virtual-gpus.html`;
187
+ };
174
188
 
175
189
  export const PIPELINES_OPERATOR_LINK =
176
190
  'https://docs.openshift.com/pipelines/1.17/install_config/installing-pipelines.html';
177
191
 
178
192
  export const getServiceMeshLink = (ocpVersion?: string) =>
179
- `https://docs.openshift.com/container-platform/${getShortOpenshiftVersion(
193
+ `https://docs.openshift.com/container-platform/${getDocsOpenshiftVersion(
180
194
  ocpVersion,
181
195
  )}/service_mesh/v1x/preparing-ossm-installation.html`;
182
196
 
@@ -6,4 +6,5 @@ export * from './features';
6
6
  export * from './reducers';
7
7
  export * from './selectors';
8
8
  export * from './hooks';
9
+ export * from './utils';
9
10
  export { ResourceUIState } from './types/resource-ui-state';
@@ -3,4 +3,5 @@ export type UISettingsValues = {
3
3
  customManifestsAdded?: boolean;
4
4
  customManifestsUpdated?: boolean;
5
5
  bundlesSelected?: string[];
6
+ isAssistedMigration?: boolean;
6
7
  };
@@ -111,3 +111,33 @@ export const getMajorMinorVersion = (version = '') => {
111
111
  const match = /[0-9].[0-9][0-9]?/g.exec(version);
112
112
  return match?.[0] || '';
113
113
  };
114
+
115
+ // Converts an Openshift version to a comparable integer
116
+ const getComparableVersionInt = (version: string): number => {
117
+ const majorMinorParts = version.split('.').slice(0, 2).map(Number);
118
+ if (majorMinorParts.length < 2 || majorMinorParts.some(isNaN)) {
119
+ // If the version doesn't have the required format, returning 0 makes it be considered
120
+ // older than any other version
121
+ return 0;
122
+ }
123
+
124
+ const major = majorMinorParts[0];
125
+ const minor = majorMinorParts[1];
126
+
127
+ // Assumes minor versions will not go past 999
128
+ return major * 1000 + minor;
129
+ };
130
+
131
+ /**
132
+ * Handles version comparison for major and minor parts only.
133
+ *
134
+ * @param checkVersion the version we want to know about
135
+ * @param toVersion the version we want to test against
136
+ * @returns true if "checkVersion" is equal or greater than "toVersion" (major and minor only)
137
+ */
138
+ export const isMajorMinorVersionEqualOrGreater = (checkVersion = '', toVersion: string) => {
139
+ const checkVersionNum = getComparableVersionInt(checkVersion);
140
+ const toVersionNum = getComparableVersionInt(toVersion);
141
+
142
+ return checkVersionNum >= toVersionNum;
143
+ };
@@ -1,14 +1,22 @@
1
1
  import React from 'react';
2
- import { FormGroup, Tooltip } from '@patternfly/react-core';
3
- import { Dropdown, DropdownItem, DropdownToggle } from '@patternfly/react-core/deprecated';
2
+ import {
3
+ FormGroup,
4
+ Tooltip,
5
+ Dropdown,
6
+ DropdownItem,
7
+ MenuToggle,
8
+ MenuToggleElement,
9
+ DropdownList,
10
+ } from '@patternfly/react-core';
4
11
  import { useField } from 'formik';
5
12
  import { getFieldId, PopoverIcon } from '../../../common';
6
13
  import {
7
14
  NewFeatureSupportLevelMap,
8
15
  useNewFeatureSupportLevel,
9
16
  } from '../../../common/components/newFeatureSupportLevels';
10
- import OcmSNODisclaimer from './OcmSNODisclaimer';
17
+ import OcmTNADisclaimer from './OcmTNADisclaimer';
11
18
  import toNumber from 'lodash-es/toNumber';
19
+ import OcmSNODisclaimer from './OcmSNODisclaimer';
12
20
 
13
21
  const INPUT_NAME = 'controlPlaneCount';
14
22
  const fieldId = getFieldId(INPUT_NAME, 'input');
@@ -43,10 +51,14 @@ interface ControlPlaneNodesDropdownProps {
43
51
  const isDropdownItemEnabled = (
44
52
  controlPlaneNodeCount: number,
45
53
  isNonStandardControlPlaneEnabled: boolean,
54
+ isTnaEnabled: boolean,
46
55
  ): boolean => {
47
56
  if (controlPlaneNodeCount === 4 || controlPlaneNodeCount === 5) {
48
57
  return isNonStandardControlPlaneEnabled;
49
58
  }
59
+ if (controlPlaneNodeCount === 2) {
60
+ return isTnaEnabled;
61
+ }
50
62
  return true;
51
63
  };
52
64
 
@@ -80,25 +92,35 @@ const ControlPlaneNodesDropdown: React.FC<ControlPlaneNodesDropdownProps> = ({
80
92
 
81
93
  const options: ControlPlaneNodesOption[] = [
82
94
  { value: 1, label: '1 (Single Node OpenShift)' },
95
+ { value: 2, label: '2 (Two-Nodes Arbiter)' },
83
96
  { value: 3, label: '3 (highly available cluster)' },
84
97
  { value: 4, label: '4 (highly available cluster+)' },
85
98
  { value: 5, label: '5 (highly available cluster++)' },
86
99
  ];
87
100
 
101
+ const isTnaEnabled = newFeatureSupportLevelContext.isFeatureSupported(
102
+ 'TNA',
103
+ featureSupportLevelData ?? undefined,
104
+ );
105
+
88
106
  React.useEffect(() => {
89
107
  if (!field.value) {
90
108
  setValue(DEFAULT_VALUE);
91
109
  }
92
110
  }, [field.value, setValue]);
93
111
 
94
- const onSelect = (event?: React.SyntheticEvent<HTMLDivElement>): void => {
112
+ const onSelect = (event?: React.MouseEvent<Element, MouseEvent>): void => {
95
113
  const selectedValue = event?.currentTarget.id as string;
96
114
  setValue(toNumber(selectedValue));
97
115
  setOpen(false);
98
116
  };
99
117
 
100
118
  const dropdownItems = options.map(({ value, label }) => {
101
- const isItemEnabled = isDropdownItemEnabled(value, isNonStandardControlPlaneEnabled);
119
+ const isItemEnabled = isDropdownItemEnabled(
120
+ value,
121
+ isNonStandardControlPlaneEnabled,
122
+ isTnaEnabled,
123
+ );
102
124
  return (
103
125
  <DropdownItem key={value} id={value.toString()} isAriaDisabled={!isItemEnabled}>
104
126
  <Tooltip hidden={isItemEnabled} content={disabledReason} position="top">
@@ -108,10 +130,16 @@ const ControlPlaneNodesDropdown: React.FC<ControlPlaneNodesDropdownProps> = ({
108
130
  );
109
131
  });
110
132
 
111
- const toggle = (
112
- <DropdownToggle onToggle={(_, val) => setOpen(val)}>
133
+ const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
134
+ <MenuToggle
135
+ id={fieldId}
136
+ ref={toggleRef}
137
+ onClick={() => setOpen(!isOpen)}
138
+ isExpanded={isOpen}
139
+ className="pf-v5-u-w-100"
140
+ >
113
141
  {options.find((opt) => opt.value === field.value)?.label || 'Select'}
114
- </DropdownToggle>
142
+ </MenuToggle>
115
143
  );
116
144
 
117
145
  return (
@@ -122,12 +150,14 @@ const ControlPlaneNodesDropdown: React.FC<ControlPlaneNodesDropdownProps> = ({
122
150
  fieldId={fieldId}
123
151
  >
124
152
  <Dropdown
125
- id={fieldId}
153
+ id={`${fieldId}-dropdown`}
126
154
  isOpen={isOpen}
127
155
  toggle={toggle}
128
- dropdownItems={dropdownItems}
156
+ onOpenChange={() => setOpen(!isOpen)}
129
157
  onSelect={onSelect}
130
- />
158
+ >
159
+ <DropdownList>{dropdownItems}</DropdownList>
160
+ </Dropdown>
131
161
  </FormGroup>
132
162
  {field.value === 1 && (
133
163
  <OcmSNODisclaimer
@@ -136,6 +166,7 @@ const ControlPlaneNodesDropdown: React.FC<ControlPlaneNodesDropdownProps> = ({
136
166
  snoExpansionSupported={snoExpansion}
137
167
  />
138
168
  )}
169
+ {field.value === 2 && <OcmTNADisclaimer />}
139
170
  </>
140
171
  );
141
172
  };
@@ -1,7 +1,14 @@
1
1
  import React from 'react';
2
- import { FormGroup, Split, SplitItem, Tooltip } from '@patternfly/react-core';
3
- import { Dropdown, DropdownItem, DropdownToggle } from '@patternfly/react-core/deprecated';
4
- import { CaretDownIcon } from '@patternfly/react-icons/dist/js/icons/caret-down-icon';
2
+ import {
3
+ FormGroup,
4
+ Split,
5
+ SplitItem,
6
+ Tooltip,
7
+ Dropdown,
8
+ DropdownItem,
9
+ MenuToggle,
10
+ MenuToggleElement,
11
+ } from '@patternfly/react-core';
5
12
  import { useField } from 'formik';
6
13
  import {
7
14
  architectureData,
@@ -119,7 +126,7 @@ const CpuArchitectureDropdown = ({
119
126
  ]);
120
127
 
121
128
  const onSelect = React.useCallback(
122
- (event?: React.SyntheticEvent<HTMLDivElement>) => {
129
+ (event?: React.MouseEvent<Element, MouseEvent>): void => {
123
130
  const selectedCpuArch = event?.currentTarget.id as SupportedCpuArchitecture;
124
131
  setValue(selectedCpuArch);
125
132
  setOpen(false);
@@ -146,31 +153,30 @@ const CpuArchitectureDropdown = ({
146
153
  // eslint-disable-next-line react-hooks/exhaustive-deps
147
154
  }, [cpuArchitectures, openshiftVersion, selectedCpuArchitecture]);
148
155
 
149
- const toggle = React.useMemo(
150
- () => (
151
- <DropdownToggle
152
- onToggle={(_event, val: boolean) => setOpen(val)}
153
- toggleIndicator={CaretDownIcon}
154
- isText
155
- className="pf-v5-u-w-100"
156
- >
157
- {currentCpuArch}
158
- </DropdownToggle>
159
- ),
160
- [setOpen, currentCpuArch],
156
+ const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
157
+ <MenuToggle
158
+ id={fieldId}
159
+ ref={toggleRef}
160
+ onClick={() => setOpen(!isOpen)}
161
+ isExpanded={isOpen}
162
+ className="pf-v5-u-w-100"
163
+ >
164
+ {currentCpuArch}
165
+ </MenuToggle>
161
166
  );
162
167
 
163
168
  return (
164
169
  <FormGroup id={`form-control__${fieldId}`} fieldId={fieldId} label={'CPU architecture'}>
165
170
  <Dropdown
166
171
  {...field}
167
- id={fieldId}
168
- dropdownItems={enabledItems}
172
+ id={`${fieldId}-dropdown`}
169
173
  toggle={toggle}
170
174
  isOpen={isOpen}
171
- className="pf-v5-u-w-100"
172
175
  onSelect={onSelect}
173
- />
176
+ onOpenChange={() => setOpen(!isOpen)}
177
+ >
178
+ {enabledItems}
179
+ </Dropdown>
174
180
  </FormGroup>
175
181
  );
176
182
  };
@@ -1,12 +1,13 @@
1
1
  import React from 'react';
2
- import { FormGroup } from '@patternfly/react-core';
2
+ import { FormGroup, Tooltip } from '@patternfly/react-core';
3
3
  import {
4
4
  DropdownItem,
5
- DropdownToggle,
5
+ Divider,
6
6
  Dropdown,
7
- DropdownSeparator,
8
- } from '@patternfly/react-core/deprecated';
9
- import { CaretDownIcon } from '@patternfly/react-icons/dist/js/icons/caret-down-icon';
7
+ MenuToggle,
8
+ MenuToggleElement,
9
+ DropdownList,
10
+ } from '@patternfly/react-core';
10
11
  import { useField } from 'formik';
11
12
  import {
12
13
  CpuArchitecture,
@@ -47,74 +48,74 @@ export const DiscoveryImageTypeDropdown = ({
47
48
  key="full-iso"
48
49
  id="full-iso"
49
50
  description={'Use when configuring custom networking for easier debugging'}
51
+ value={discoveryImageTypes['full-iso']}
50
52
  >
51
53
  {discoveryImageTypes['full-iso']}
52
54
  </DropdownItem>,
53
- <DropdownSeparator key="separator1" />,
54
- <DropdownItem
55
- key="minimal-iso"
56
- id="minimal-iso"
57
- description={'Use when provisioning with default networking options'}
58
- tooltip={
55
+ <Divider component="li" key="separator1" />,
56
+ <Tooltip
57
+ key="minimal-iso-tooltip"
58
+ content={
59
59
  isMinimalISODisabled ? (
60
60
  <p>{'This provisioning type is not supported when using s390x architecture'}</p>
61
61
  ) : undefined
62
62
  }
63
- isAriaDisabled={!!isMinimalISODisabled}
64
63
  >
65
- {discoveryImageTypes['minimal-iso']}
66
- </DropdownItem>,
67
- <DropdownSeparator key="separator2" />,
64
+ <DropdownItem
65
+ key="minimal-iso"
66
+ id="minimal-iso"
67
+ description={'Use when provisioning with default networking options'}
68
+ isAriaDisabled={!!isMinimalISODisabled}
69
+ value={discoveryImageTypes['minimal-iso']}
70
+ >
71
+ {discoveryImageTypes['minimal-iso']}
72
+ </DropdownItem>
73
+ </Tooltip>,
74
+ <Divider component="li" key="separator2" />,
68
75
  <DropdownItem
69
76
  key="discovery-image-ipxe"
70
77
  id="discovery-image-ipxe"
71
78
  description={'Use when your platform does not support booting from ISO'}
79
+ value={discoveryImageTypes['discovery-image-ipxe']}
72
80
  >
73
81
  {discoveryImageTypes['discovery-image-ipxe']}
74
82
  </DropdownItem>,
75
83
  ];
76
84
 
77
- const onSelect = React.useCallback(
78
- (event?: React.SyntheticEvent<HTMLDivElement>) => {
79
- const imageTypeSelection = event?.currentTarget.id as DiscoveryImageType;
80
- const currentValue = imageTypeSelection
81
- ? discoveryImageTypes[imageTypeSelection]
82
- : defaultValue;
83
- setCurrent(currentValue ? currentValue : '');
84
- setValue(imageTypeSelection);
85
- setOpen(false);
86
- onChange(imageTypeSelection === 'discovery-image-ipxe');
87
- },
88
- [setCurrent, setOpen, defaultValue, setValue, onChange],
89
- );
85
+ const onSelect = (event?: React.MouseEvent<Element, MouseEvent>, value?: string | number) => {
86
+ const imageTypeSelection = value as string;
87
+ setCurrent(imageTypeSelection ? imageTypeSelection : '');
88
+ setValue(event?.currentTarget.id as DiscoveryImageType);
89
+ setOpen(false);
90
+ onChange(imageTypeSelection === 'discovery-image-ipxe');
91
+ };
90
92
 
91
- const toggle = React.useMemo(
92
- () => (
93
- <DropdownToggle
94
- onToggle={(_event, val) => setOpen(val)}
95
- toggleIndicator={CaretDownIcon}
96
- isText
97
- className="pf-v5-u-w-100"
98
- isDisabled={isDisabled}
99
- >
100
- {current || value}
101
- </DropdownToggle>
102
- ),
103
- [setOpen, current, value, isDisabled],
93
+ const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
94
+ <MenuToggle
95
+ id={fieldId}
96
+ className="pf-v5-u-w-100"
97
+ ref={toggleRef}
98
+ isFullWidth
99
+ onClick={() => setOpen(!isOpen)}
100
+ isExpanded={isOpen}
101
+ isDisabled={isDisabled}
102
+ >
103
+ {current || value}
104
+ </MenuToggle>
104
105
  );
105
106
 
106
107
  return (
107
108
  <FormGroup fieldId={fieldId} label={'Provisioning type'}>
108
109
  <Dropdown
109
110
  {...field}
110
- name={name}
111
- id={fieldId}
112
- dropdownItems={dropdownItems}
111
+ id={`${fieldId}-dropdown`}
113
112
  toggle={toggle}
114
113
  isOpen={isOpen}
115
- className="pf-v5-u-w-100"
116
114
  onSelect={onSelect}
117
- />
115
+ onOpenChange={() => setOpen(!isOpen)}
116
+ >
117
+ <DropdownList>{dropdownItems}</DropdownList>
118
+ </Dropdown>
118
119
  </FormGroup>
119
120
  );
120
121
  };
@@ -5,11 +5,13 @@ import {
5
5
  HelperText,
6
6
  HelperTextItem,
7
7
  Tooltip,
8
+ Dropdown,
9
+ DropdownItem,
10
+ MenuToggle,
11
+ MenuToggleElement,
8
12
  } from '@patternfly/react-core';
9
- import { Dropdown, DropdownItem, DropdownToggle } from '@patternfly/react-core/deprecated';
10
13
  import { useField, useFormikContext } from 'formik';
11
14
  import { ClusterDetailsValues, getFieldId } from '../../../common';
12
- import { CaretDownIcon } from '@patternfly/react-icons/dist/js/icons/caret-down-icon';
13
15
  import { OcmCheckboxField, OcmInputField } from '../ui/OcmFormFields';
14
16
  import { ManagedDomain } from '@openshift-assisted/types/assisted-installer-service';
15
17
  import { clusterExistsReason } from '../featureSupportLevels/featureStateUtils';
@@ -62,25 +64,25 @@ export const OcmBaseDomainField = ({
62
64
  ));
63
65
  }, [managedDomains]);
64
66
 
65
- const dropdownToggle = React.useMemo(() => {
67
+ const dropdownToggle = (toggleRef: React.Ref<MenuToggleElement>) => {
66
68
  const selectedDomain = managedDomains.find((d) => d.domain === value);
67
69
  return (
68
- <DropdownToggle
69
- onToggle={(_event, val) => setOpen(val)}
70
- toggleIndicator={CaretDownIcon}
71
- isText
70
+ <MenuToggle
71
+ ref={toggleRef}
72
+ onClick={() => setOpen(!isOpen)}
73
+ isExpanded={isOpen}
72
74
  className="pf-v5-u-w-100"
73
75
  >
74
76
  {selectedDomain ? getManagedDomainLabel(selectedDomain) : 'Base domain'}
75
- </DropdownToggle>
77
+ </MenuToggle>
76
78
  );
77
- }, [managedDomains, value]);
79
+ };
78
80
 
79
81
  const toggleRedHatDnsService = (checked: boolean) =>
80
82
  setValue((checked && managedDomains.map((d) => d.domain)[0]) || '');
81
83
 
82
84
  const onSelect = React.useCallback(
83
- (event?: React.SyntheticEvent<HTMLDivElement>) => {
85
+ (event?: React.MouseEvent<Element, MouseEvent>): void => {
84
86
  const selectedDomain = event?.currentTarget.id || '';
85
87
  setValue(selectedDomain);
86
88
  setOpen(false);
@@ -111,11 +113,12 @@ export const OcmBaseDomainField = ({
111
113
  {useRedHatDnsService ? (
112
114
  <Dropdown
113
115
  toggle={dropdownToggle}
114
- dropdownItems={dropdownItems}
115
116
  isOpen={isOpen}
116
117
  onSelect={onSelect}
117
- className="pf-v5-u-w-100"
118
- />
118
+ onOpenChange={() => setOpen(!isOpen)}
119
+ >
120
+ {dropdownItems}
121
+ </Dropdown>
119
122
  ) : (
120
123
  <OcmInputField
121
124
  name={INPUT_NAME}
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { Alert, AlertVariant, List, ListItem } from '@patternfly/react-core';
3
+ import { useTranslation } from '../../../common/hooks/use-translation-wrapper';
4
+
5
+ const OcmTNADisclaimer = () => {
6
+ const { t } = useTranslation();
7
+
8
+ return (
9
+ <Alert
10
+ variant={AlertVariant.info}
11
+ title={t('ai:Requirements for Two Node control plane OpenShift')}
12
+ isInline
13
+ >
14
+ <List>
15
+ <ListItem>
16
+ {t('ai:Two nodes control plane OpenShift must include an additional arbiter node.')}
17
+ </ListItem>
18
+ </List>
19
+ </Alert>
20
+ );
21
+ };
22
+
23
+ export default OcmTNADisclaimer;