@openshift-assisted/ui-lib 2.38.0 → 2.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/build/@types/common/config/docs_links.d.ts +8 -0
  2. package/build/@types/common/config/docs_links.d.ts.map +1 -1
  3. package/build/@types/ocm/components/clusterConfiguration/operators/AuthorinoCheckbox.d.ts.map +1 -1
  4. package/build/@types/ocm/components/clusterConfiguration/operators/CnvCheckbox.d.ts.map +1 -1
  5. package/build/@types/ocm/components/clusterConfiguration/operators/LsoCheckbox.d.ts.map +1 -1
  6. package/build/@types/ocm/components/clusterConfiguration/operators/NmstateCheckbox.d.ts.map +1 -1
  7. package/build/@types/ocm/components/clusterConfiguration/operators/NodeFeatureDiscoveryCheckbox.d.ts.map +1 -1
  8. package/build/@types/ocm/components/clusterConfiguration/operators/NvidiaGpuCheckbox.d.ts.map +1 -1
  9. package/build/@types/ocm/components/clusterConfiguration/operators/OdfCheckbox.d.ts.map +1 -1
  10. package/build/@types/ocm/components/clusterConfiguration/operators/OpenShiftAIRequirements.d.ts.map +1 -1
  11. package/build/@types/ocm/components/clusterConfiguration/operators/OpenshiftAINvidiaRequirements.d.ts +4 -0
  12. package/build/@types/ocm/components/clusterConfiguration/operators/OpenshiftAINvidiaRequirements.d.ts.map +1 -0
  13. package/build/@types/ocm/components/clusterConfiguration/operators/PipelinesChekbox.d.ts.map +1 -1
  14. package/build/@types/ocm/components/clusterConfiguration/operators/ServerlessCheckbox.d.ts.map +1 -1
  15. package/build/@types/ocm/components/clusterConfiguration/operators/ServicemeshCheckbox.d.ts.map +1 -1
  16. package/build/@types/ocm/components/clusterConfiguration/operators/VirtualizationRequirements.d.ts +4 -0
  17. package/build/@types/ocm/components/clusterConfiguration/operators/VirtualizationRequirements.d.ts.map +1 -0
  18. package/build/@types/ocm/components/clusterWizard/OperatorsStep.d.ts.map +1 -1
  19. package/build/cjs/common/config/docs_links.js +9 -1
  20. package/build/cjs/common/config/docs_links.js.map +1 -1
  21. package/build/cjs/ocm/components/clusterConfiguration/operators/AuthorinoCheckbox.js +6 -1
  22. package/build/cjs/ocm/components/clusterConfiguration/operators/AuthorinoCheckbox.js.map +1 -1
  23. package/build/cjs/ocm/components/clusterConfiguration/operators/CnvCheckbox.js +6 -1
  24. package/build/cjs/ocm/components/clusterConfiguration/operators/CnvCheckbox.js.map +1 -1
  25. package/build/cjs/ocm/components/clusterConfiguration/operators/LsoCheckbox.js +6 -1
  26. package/build/cjs/ocm/components/clusterConfiguration/operators/LsoCheckbox.js.map +1 -1
  27. package/build/cjs/ocm/components/clusterConfiguration/operators/NmstateCheckbox.js +6 -1
  28. package/build/cjs/ocm/components/clusterConfiguration/operators/NmstateCheckbox.js.map +1 -1
  29. package/build/cjs/ocm/components/clusterConfiguration/operators/NodeFeatureDiscoveryCheckbox.js +6 -1
  30. package/build/cjs/ocm/components/clusterConfiguration/operators/NodeFeatureDiscoveryCheckbox.js.map +1 -1
  31. package/build/cjs/ocm/components/clusterConfiguration/operators/NvidiaGpuCheckbox.js +6 -1
  32. package/build/cjs/ocm/components/clusterConfiguration/operators/NvidiaGpuCheckbox.js.map +1 -1
  33. package/build/cjs/ocm/components/clusterConfiguration/operators/OdfCheckbox.js +6 -1
  34. package/build/cjs/ocm/components/clusterConfiguration/operators/OdfCheckbox.js.map +1 -1
  35. package/build/cjs/ocm/components/clusterConfiguration/operators/OpenShiftAIRequirements.js +1 -12
  36. package/build/cjs/ocm/components/clusterConfiguration/operators/OpenShiftAIRequirements.js.map +1 -1
  37. package/build/cjs/ocm/components/clusterConfiguration/operators/OpenshiftAINvidiaRequirements.js +30 -0
  38. package/build/cjs/ocm/components/clusterConfiguration/operators/OpenshiftAINvidiaRequirements.js.map +1 -0
  39. package/build/cjs/ocm/components/clusterConfiguration/operators/PipelinesChekbox.js +6 -1
  40. package/build/cjs/ocm/components/clusterConfiguration/operators/PipelinesChekbox.js.map +1 -1
  41. package/build/cjs/ocm/components/clusterConfiguration/operators/ServerlessCheckbox.js +6 -1
  42. package/build/cjs/ocm/components/clusterConfiguration/operators/ServerlessCheckbox.js.map +1 -1
  43. package/build/cjs/ocm/components/clusterConfiguration/operators/ServicemeshCheckbox.js +7 -2
  44. package/build/cjs/ocm/components/clusterConfiguration/operators/ServicemeshCheckbox.js.map +1 -1
  45. package/build/cjs/ocm/components/clusterConfiguration/operators/VirtualizationRequirements.js +19 -0
  46. package/build/cjs/ocm/components/clusterConfiguration/operators/VirtualizationRequirements.js.map +1 -0
  47. package/build/cjs/ocm/components/clusterWizard/OperatorsStep.js +59 -29
  48. package/build/cjs/ocm/components/clusterWizard/OperatorsStep.js.map +1 -1
  49. package/build/cjs/ocm/components/featureSupportLevels/featureStateUtils.js +1 -1
  50. package/build/cjs/ocm/components/featureSupportLevels/featureStateUtils.js.map +1 -1
  51. package/lib/common/config/docs_links.ts +23 -0
  52. package/lib/ocm/components/clusterConfiguration/operators/AuthorinoCheckbox.tsx +5 -1
  53. package/lib/ocm/components/clusterConfiguration/operators/CnvCheckbox.tsx +13 -2
  54. package/lib/ocm/components/clusterConfiguration/operators/LsoCheckbox.tsx +5 -1
  55. package/lib/ocm/components/clusterConfiguration/operators/NmstateCheckbox.tsx +10 -1
  56. package/lib/ocm/components/clusterConfiguration/operators/NodeFeatureDiscoveryCheckbox.tsx +5 -1
  57. package/lib/ocm/components/clusterConfiguration/operators/NvidiaGpuCheckbox.tsx +5 -1
  58. package/lib/ocm/components/clusterConfiguration/operators/OdfCheckbox.tsx +13 -2
  59. package/lib/ocm/components/clusterConfiguration/operators/OpenShiftAIRequirements.tsx +0 -14
  60. package/lib/ocm/components/clusterConfiguration/operators/OpenshiftAINvidiaRequirements.tsx +36 -0
  61. package/lib/ocm/components/clusterConfiguration/operators/PipelinesChekbox.tsx +5 -1
  62. package/lib/ocm/components/clusterConfiguration/operators/ServerlessCheckbox.tsx +5 -1
  63. package/lib/ocm/components/clusterConfiguration/operators/ServicemeshCheckbox.tsx +6 -2
  64. package/lib/ocm/components/clusterConfiguration/operators/VirtualizationRequirements.tsx +26 -0
  65. package/lib/ocm/components/clusterWizard/OperatorsStep.tsx +155 -110
  66. package/lib/ocm/components/featureSupportLevels/featureStateUtils.ts +1 -1
  67. package/package.json +3 -3
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
2
  import { FormGroup, HelperText, HelperTextItem, Tooltip } from '@patternfly/react-core';
3
- import { getFieldId, PopoverIcon } from '../../../../common';
3
+ import { getFieldId, PopoverIcon, SERVICE_MESH_OPERATOR_LINK } from '../../../../common';
4
4
  import { OcmCheckboxField } from '../../ui/OcmFormFields';
5
5
  import { SupportLevel } from '@openshift-assisted/types/./assisted-installer-service';
6
6
  import NewFeatureSupportLevelBadge from '../../../../common/components/newFeatureSupportLevels/NewFeatureSupportLevelBadge';
7
+ import ExternalLinkAltIcon from '@patternfly/react-icons/dist/js/icons/external-link-alt-icon';
7
8
 
8
- const SERVICEMESH_FIELD_NAME = 'useServiceMesh';
9
+ const SERVICEMESH_FIELD_NAME = 'useServicemesh';
9
10
 
10
11
  const ServiceMeshLabel = ({
11
12
  disabledReason,
@@ -34,6 +35,9 @@ const ServiceMeshHelperText = () => {
34
35
  <HelperText>
35
36
  <HelperTextItem variant="indeterminate">
36
37
  Platform that provides behavioral insight and operational control over a service mesh.{' '}
38
+ <a href={SERVICE_MESH_OPERATOR_LINK} target="_blank" rel="noopener noreferrer">
39
+ {'Learn more'} <ExternalLinkAltIcon />
40
+ </a>
37
41
  </HelperTextItem>
38
42
  </HelperText>
39
43
  );
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { List, ListItem } from '@patternfly/react-core';
3
+
4
+ const VirtualizationRequirements = () => {
5
+ return (
6
+ <>
7
+ <List>
8
+ <ListItem>
9
+ Enabled CPU virtualization support in BIOS (Intel-VT / AMD-V) on all nodes.
10
+ </ListItem>
11
+ <ListItem>
12
+ Each control plane node requires an additional 1024 MiB of memory and 3 CPUs.
13
+ </ListItem>
14
+ <ListItem>Each worker node requires an additional 1024 MiB of memory and 5 CPUs.</ListItem>
15
+ </List>
16
+ Bundle operators:
17
+ <List>
18
+ <ListItem>OpenShift Virtualization</ListItem>
19
+ <ListItem>Migration Toolkit for Virtualization</ListItem>
20
+ <ListItem>Nmstate</ListItem>
21
+ </List>
22
+ </>
23
+ );
24
+ };
25
+
26
+ export default VirtualizationRequirements;
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-console */
1
2
  import React, { useEffect, useState } from 'react';
2
3
  import { useSelector } from 'react-redux';
3
4
  import {
@@ -20,6 +21,8 @@ import {
20
21
  ClusterOperatorProps,
21
22
  ClusterWizardStepHeader,
22
23
  numberOfEnabledOperators,
24
+ OPERATOR_NAME_CNV,
25
+ OPERATOR_NAME_ODF,
23
26
  OperatorsValues,
24
27
  PopoverIcon,
25
28
  } from '../../../common';
@@ -45,6 +48,8 @@ import {
45
48
  getOdfIncompatibleWithLvmsReason,
46
49
  getOpenShiftAIIncompatibleWithLvmsReason,
47
50
  } from '../featureSupportLevels/featureStateUtils';
51
+ import OpenshiftAINvidiaRequirements from '../clusterConfiguration/operators/OpenshiftAINvidiaRequirements';
52
+ import VirtualizationRequirements from '../clusterConfiguration/operators/VirtualizationRequirements';
48
53
 
49
54
  const operatorsThatCanNotBeInstalledAlone = [
50
55
  'nvdia-gpu',
@@ -73,6 +78,8 @@ export const OperatorsStep = (props: ClusterOperatorProps) => {
73
78
  const { updateUISettings, uiSettings } = useClusterWizardContext();
74
79
  const { values, setFieldValue } = useFormikContext<OperatorsValues>();
75
80
  const featureSupportLevelData = useNewFeatureSupportLevel();
81
+ const [hasUnsupportedOperators, setHasUnsupportedOperators] = useState<boolean>(false);
82
+ const [hasIncompatibleOperators, setHasIncompatibleOperators] = useState<boolean>(false);
76
83
 
77
84
  useEffect(() => {
78
85
  const fetchBundles = async () => {
@@ -156,6 +163,9 @@ export const OperatorsStep = (props: ClusterOperatorProps) => {
156
163
  newBundleOperators.push(op);
157
164
  const fieldId = mapOperatorsToFieldIds[op]; // Obtener el ID del campo correspondiente
158
165
  setFieldValue(fieldId, checked);
166
+ if (op === OPERATOR_NAME_CNV || op === OPERATOR_NAME_ODF) {
167
+ setFieldValue('useLso', checked);
168
+ }
159
169
  }
160
170
  });
161
171
  } else {
@@ -165,6 +175,9 @@ export const OperatorsStep = (props: ClusterOperatorProps) => {
165
175
  operators.forEach((op) => {
166
176
  const fieldId = mapOperatorsToFieldIds[op]; // Obtener el ID del campo correspondiente
167
177
  setFieldValue(fieldId, checked);
178
+ if (op === OPERATOR_NAME_CNV || op === OPERATOR_NAME_ODF) {
179
+ setFieldValue('useLso', checked);
180
+ }
168
181
  });
169
182
  }
170
183
 
@@ -178,7 +191,7 @@ export const OperatorsStep = (props: ClusterOperatorProps) => {
178
191
  setBundleOperators(newBundleOperators);
179
192
  };
180
193
 
181
- const getBundleLabel = (title: string | undefined, operators: string[] | undefined) => {
194
+ const getBundleLabel = (title: string | undefined) => {
182
195
  return (
183
196
  <>
184
197
  <span>{title} </span>
@@ -186,15 +199,11 @@ export const OperatorsStep = (props: ClusterOperatorProps) => {
186
199
  component={'a'}
187
200
  bodyContent={
188
201
  <>
189
- <h3>{'Bundle operators'}</h3>
190
- {operators && operators.length > 0 ? (
191
- <ul>
192
- {operators.map((operator, index) => (
193
- <li key={index}>{operator}</li>
194
- ))}
195
- </ul>
202
+ <span style={{ fontSize: '1.1em' }}>{'Requirements and dependencies'}</span>
203
+ {title === 'Virtualization' ? (
204
+ <VirtualizationRequirements />
196
205
  ) : (
197
- <p>No operators available</p>
206
+ <OpenshiftAINvidiaRequirements />
198
207
  )}
199
208
  </>
200
209
  }
@@ -202,49 +211,79 @@ export const OperatorsStep = (props: ClusterOperatorProps) => {
202
211
  </>
203
212
  );
204
213
  };
205
- const bundleHasOperatorsNotSupported = (operators: string[] | undefined) => {
206
- return (
207
- operators?.some(
208
- (operator) =>
209
- !featureSupportLevelData.isFeatureSupported(mapOperatorIdToFeatureId[operator]),
210
- ) ?? false
211
- );
212
- };
213
214
 
214
- const getDisabledReasonForOperator = (operatorKey: string, values: OperatorsValues) => {
215
- let disabledReason = featureSupportLevelData.getFeatureDisabledReason(
216
- mapOperatorIdToFeatureId[operatorKey],
217
- );
218
- if (operatorKey === 'cnv') {
219
- if (!disabledReason) {
220
- const lvmSupport = featureSupportLevelData.getFeatureSupportLevel('LVM');
221
- disabledReason = getCnvIncompatibleWithLvmReason(values, lvmSupport);
222
- }
223
- if (!disabledReason) {
224
- disabledReason = getCnvDisabledWithMtvReason(values);
215
+ const bundleHasOperatorsNotSupported = React.useCallback(
216
+ (operators: string[] | undefined) => {
217
+ return (
218
+ operators?.some(
219
+ (operator) =>
220
+ !featureSupportLevelData.isFeatureSupported(mapOperatorIdToFeatureId[operator]),
221
+ ) ?? false
222
+ );
223
+ },
224
+ [featureSupportLevelData],
225
+ );
226
+
227
+ const getDisabledReasonForOperator = React.useCallback(
228
+ (operatorKey: string, values: OperatorsValues) => {
229
+ let disabledReason = featureSupportLevelData.getFeatureDisabledReason(
230
+ mapOperatorIdToFeatureId[operatorKey],
231
+ );
232
+ if (operatorKey === 'cnv') {
233
+ if (!disabledReason) {
234
+ const lvmSupport = featureSupportLevelData.getFeatureSupportLevel('LVM');
235
+ disabledReason = getCnvIncompatibleWithLvmReason(values, lvmSupport);
236
+ }
237
+ if (!disabledReason) {
238
+ disabledReason = getCnvDisabledWithMtvReason(values);
239
+ }
225
240
  }
226
- }
227
- if (operatorKey === 'lvm') {
228
- if (!disabledReason) {
229
- const lvmSupport = featureSupportLevelData.getFeatureSupportLevel('LVM');
230
- disabledReason = getLvmIncompatibleWithCnvReason(values, lvmSupport);
241
+ if (operatorKey === 'lvm') {
231
242
  if (!disabledReason) {
232
- disabledReason = getLvmsIncompatibleWithOdfReason(values);
243
+ const lvmSupport = featureSupportLevelData.getFeatureSupportLevel('LVM');
244
+ disabledReason = getLvmIncompatibleWithCnvReason(values, lvmSupport);
245
+ if (!disabledReason) {
246
+ disabledReason = getLvmsIncompatibleWithOdfReason(values);
247
+ }
233
248
  }
234
249
  }
235
- }
236
- if (operatorKey === 'odf') {
237
- if (!disabledReason) {
238
- disabledReason = getOdfIncompatibleWithLvmsReason(values);
250
+ if (operatorKey === 'odf') {
251
+ if (!disabledReason) {
252
+ disabledReason = getOdfIncompatibleWithLvmsReason(values);
253
+ }
239
254
  }
240
- }
241
- if (operatorKey === 'openshift-ai') {
242
- if (!disabledReason) {
243
- disabledReason = getOpenShiftAIIncompatibleWithLvmsReason(values);
255
+ if (operatorKey === 'openshift-ai') {
256
+ if (!disabledReason) {
257
+ disabledReason = getOpenShiftAIIncompatibleWithLvmsReason(values);
258
+ }
244
259
  }
245
- }
246
- return disabledReason;
247
- };
260
+ return disabledReason;
261
+ },
262
+ [featureSupportLevelData],
263
+ );
264
+
265
+ const bundleHasOperatorsNotCompatibles = React.useCallback(
266
+ (operators: string[] | undefined, values: OperatorsValues) => {
267
+ return (
268
+ operators?.some((operatorKey) => {
269
+ const disabledReason = getDisabledReasonForOperator(operatorKey, values);
270
+ console.log(disabledReason);
271
+ return disabledReason !== undefined;
272
+ }) ?? false
273
+ );
274
+ },
275
+ [getDisabledReasonForOperator],
276
+ );
277
+
278
+ useEffect(() => {
279
+ setHasUnsupportedOperators(
280
+ bundles.some((bundle) => bundleHasOperatorsNotSupported(bundle.operators)),
281
+ );
282
+
283
+ setHasIncompatibleOperators(
284
+ bundles.some((bundle) => bundleHasOperatorsNotCompatibles(bundle.operators, values)),
285
+ );
286
+ }, [values, bundles, bundleHasOperatorsNotSupported, bundleHasOperatorsNotCompatibles]);
248
287
 
249
288
  return (
250
289
  <Stack hasGutter data-testid={'operators-page'}>
@@ -274,75 +313,81 @@ export const OperatorsStep = (props: ClusterOperatorProps) => {
274
313
  </StackItem>
275
314
  {/* Mostrar bundles como tarjetas */}
276
315
  <Gallery hasGutter minWidths={{ default: '350px' }} maxWidths={{ default: '2fr' }}>
277
- {filteredBundles.map((bundle) => (
278
- <GalleryItem key={bundle.id}>
279
- <Tooltip
280
- content={
281
- bundleHasOperatorsNotSupported(bundle.operators)
282
- ? 'Some operators in this bundle are not supported with the current configuration.'
283
- : isSNO && bundle.id === 'openshift-ai-nvidia'
284
- ? 'This bundle is not available when deploying a Single Node OpenShift.'
285
- : ''
286
- }
287
- hidden={
288
- !bundleHasOperatorsNotSupported(bundle.operators) &&
289
- !(isSNO && bundle.id === 'openshift-ai-nvidia')
290
- }
291
- >
292
- <Card
293
- style={
294
- bundle.id && selectedBundles[bundle.id]
295
- ? { border: '1px solid #004080', height: '200px' }
296
- : { height: '200px' }
297
- }
298
- isDisabled={
299
- bundleHasOperatorsNotSupported(bundle.operators) ||
300
- (isSNO && bundle.id === 'openshift-ai-nvidia')
316
+ {filteredBundles.map((bundle) => {
317
+ const isSnoAndBlockedBundle = isSNO && bundle.id === 'openshift-ai-nvidia';
318
+
319
+ const tooltipContent = hasUnsupportedOperators
320
+ ? 'Some operators in this bundle are not supported with the current configuration.'
321
+ : hasIncompatibleOperators
322
+ ? 'Some operators in this bundle can not be installed with some single operators selected.'
323
+ : isSnoAndBlockedBundle
324
+ ? 'This bundle is not available when deploying a Single Node OpenShift.'
325
+ : '';
326
+
327
+ return (
328
+ <GalleryItem key={bundle.id}>
329
+ <Tooltip
330
+ content={tooltipContent}
331
+ hidden={
332
+ !hasUnsupportedOperators && !hasIncompatibleOperators && !isSnoAndBlockedBundle
301
333
  }
302
334
  >
303
- <CardTitle
304
- style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}
305
- >
306
- <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
307
- {getBundleLabel(bundle.title, bundle.operators)}
308
- </div>
309
- <Checkbox
310
- id={`bundle-${bundle.id || ''}`}
311
- isChecked={bundle.id ? selectedBundles[bundle.id] : false}
312
- onChange={(_event, checked) =>
313
- void handleBundleSelection(bundle.id || '', bundle.operators || [], checked)
314
- }
315
- isDisabled={
316
- bundleHasOperatorsNotSupported(bundle.operators) ||
317
- (isSNO && bundle.id === 'openshift-ai-nvidia')
318
- }
319
- />
320
- </CardTitle>
321
- <CardBody
322
- style={{
323
- display: 'flex',
324
- flexDirection: 'column',
325
- justifyContent: 'space-between',
326
- height: '100%',
327
- }}
335
+ <Card
336
+ style={
337
+ bundle.id && selectedBundles[bundle.id]
338
+ ? { border: '1px solid #004080', height: '200px' }
339
+ : { height: '200px' }
340
+ }
341
+ isDisabled={
342
+ hasUnsupportedOperators || hasIncompatibleOperators || isSnoAndBlockedBundle
343
+ }
328
344
  >
329
- <div>{bundle.description}</div>
330
-
331
- {/* Badge aligned to the bottom-left */}
345
+ <CardTitle
346
+ style={{
347
+ display: 'flex',
348
+ justifyContent: 'space-between',
349
+ alignItems: 'center',
350
+ }}
351
+ >
352
+ <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
353
+ {getBundleLabel(bundle.title)}
354
+ </div>
355
+ <Checkbox
356
+ id={`bundle-${bundle.id || ''}`}
357
+ isChecked={bundle.id ? selectedBundles[bundle.id] : false}
358
+ onChange={(_event, checked) =>
359
+ void handleBundleSelection(bundle.id || '', bundle.operators || [], checked)
360
+ }
361
+ isDisabled={
362
+ hasUnsupportedOperators || hasIncompatibleOperators || isSnoAndBlockedBundle
363
+ }
364
+ />
365
+ </CardTitle>
366
+ <CardBody
367
+ style={{
368
+ display: 'flex',
369
+ flexDirection: 'column',
370
+ justifyContent: 'space-between',
371
+ height: '100%',
372
+ }}
373
+ >
374
+ <div>{bundle.description}</div>
332
375
 
333
- <div style={{ marginTop: '10px', alignSelf: 'flex-end', height: '25px' }}>
334
- {bundle.id === 'openshift-ai-nvidia' && (
335
- <NewFeatureSupportLevelBadge
336
- featureId="OPENSHIFT_AI"
337
- supportLevel="dev-preview"
338
- />
339
- )}
340
- </div>
341
- </CardBody>
342
- </Card>
343
- </Tooltip>
344
- </GalleryItem>
345
- ))}
376
+ {/* Badge aligned to the bottom-left */}
377
+ <div style={{ marginTop: '10px', alignSelf: 'flex-end', height: '25px' }}>
378
+ {bundle.id === 'openshift-ai-nvidia' && (
379
+ <NewFeatureSupportLevelBadge
380
+ featureId="OPENSHIFT_AI"
381
+ supportLevel="dev-preview"
382
+ />
383
+ )}
384
+ </div>
385
+ </CardBody>
386
+ </Card>
387
+ </Tooltip>
388
+ </GalleryItem>
389
+ );
390
+ })}
346
391
  </Gallery>
347
392
  <ExpandableSection
348
393
  toggleText={`Single Operators (${supportedOperators.length} | ${
@@ -351,7 +351,7 @@ const getOpenShiftAIDisabledReason = (
351
351
  export const getCnvDisabledWithMtvReason = (operatorValues: OperatorsValues) => {
352
352
  const mustDisableCnv =
353
353
  operatorValues.useContainerNativeVirtualization &&
354
- operatorValues.useMigrationToolkitforVirtualization;
354
+ !operatorValues.useMigrationToolkitforVirtualization;
355
355
  return mustDisableCnv
356
356
  ? `Currently, you need to install ${CNV_OPERATOR_LABEL} operator at the same time as ${MTV_OPERATOR_LABEL} operator.`
357
357
  : undefined;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "dependencies": {
3
- "@openshift-assisted/locales": "2.38.0",
4
- "@openshift-assisted/types": "2.38.0",
3
+ "@openshift-assisted/locales": "2.38.1",
4
+ "@openshift-assisted/types": "2.38.1",
5
5
  "@openshift-console/dynamic-plugin-sdk": "0.0.3",
6
6
  "@patternfly/patternfly": "5.2.0",
7
7
  "@patternfly/react-code-editor": "5.2.0",
@@ -139,5 +139,5 @@
139
139
  ]
140
140
  }
141
141
  },
142
- "version": "2.38.0"
142
+ "version": "2.38.1"
143
143
  }