@openshift-assisted/ui-lib 2.42.1 → 2.42.3

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 (34) hide show
  1. package/build/@types/common/components/operators/operatorSpecs.d.ts +10 -3
  2. package/build/@types/common/components/operators/operatorSpecs.d.ts.map +1 -1
  3. package/build/@types/common/components/operators/test.d.ts +50 -0
  4. package/build/@types/common/components/operators/test.d.ts.map +1 -0
  5. package/build/@types/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.d.ts.map +1 -1
  6. package/build/@types/ocm/components/clusterConfiguration/operators/OperatorCheckbox.d.ts +2 -1
  7. package/build/@types/ocm/components/clusterConfiguration/operators/OperatorCheckbox.d.ts.map +1 -1
  8. package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts +2 -1
  9. package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts.map +1 -1
  10. package/build/@types/ocm/components/clusterWizard/OperatorsSelect.d.ts +2 -1
  11. package/build/@types/ocm/components/clusterWizard/OperatorsSelect.d.ts.map +1 -1
  12. package/build/@types/ocm/components/clusterWizard/OperatorsStep.d.ts.map +1 -1
  13. package/build/cjs/common/components/operators/operatorSpecs.js +111 -139
  14. package/build/cjs/common/components/operators/operatorSpecs.js.map +1 -1
  15. package/build/cjs/common/components/operators/test.js +323 -0
  16. package/build/cjs/common/components/operators/test.js.map +1 -0
  17. package/build/cjs/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.js +13 -4
  18. package/build/cjs/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.js.map +1 -1
  19. package/build/cjs/ocm/components/clusterConfiguration/operators/OperatorCheckbox.js +3 -3
  20. package/build/cjs/ocm/components/clusterConfiguration/operators/OperatorCheckbox.js.map +1 -1
  21. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js +8 -8
  22. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js.map +1 -1
  23. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js +33 -14
  24. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js.map +1 -1
  25. package/build/cjs/ocm/components/clusterWizard/OperatorsStep.js +13 -3
  26. package/build/cjs/ocm/components/clusterWizard/OperatorsStep.js.map +1 -1
  27. package/lib/common/components/operators/operatorSpecs.tsx +124 -160
  28. package/lib/common/components/operators/test.tsx +469 -0
  29. package/lib/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.tsx +21 -9
  30. package/lib/ocm/components/clusterConfiguration/operators/OperatorCheckbox.tsx +5 -2
  31. package/lib/ocm/components/clusterWizard/OperatorsBundle.tsx +15 -7
  32. package/lib/ocm/components/clusterWizard/OperatorsSelect.tsx +58 -37
  33. package/lib/ocm/components/clusterWizard/OperatorsStep.tsx +30 -3
  34. package/package.json +3 -3
@@ -19,9 +19,6 @@ import {
19
19
  OPERATOR_NAME_PIPELINES,
20
20
  OPERATOR_NAME_SERVERLESS,
21
21
  OPERATOR_NAME_SERVICEMESH,
22
- OPERATOR_NAME_NODE_HEALTHCHECK,
23
- OPERATOR_NAME_SELF_NODE_REMEDIATION,
24
- OPERATOR_NAME_FENCE_AGENTS_REMEDIATION,
25
22
  OPERATOR_NAME_NODE_MAINTENANCE,
26
23
  OPERATOR_NAME_KUBE_DESCHEDULER,
27
24
  } from '../../config/constants';
@@ -29,7 +26,6 @@ import { ExternalLink } from '../ui';
29
26
  import {
30
27
  AUTHORINO_OPERATOR_LINK,
31
28
  CNV_LINK,
32
- FENCE_AGENTS_REMEDIATION_LINK,
33
29
  getKmmDocsLink,
34
30
  getKubeDeschedulerLink,
35
31
  getLsoLink,
@@ -40,7 +36,6 @@ import {
40
36
  getNvidiaGpuLink,
41
37
  getServiceMeshLink,
42
38
  MTV_LINK,
43
- NODE_HEALTHCHECK_LINK,
44
39
  NODE_MAINTENANCE_LINK,
45
40
  ODF_LINK,
46
41
  ODF_REQUIREMENTS_LINK,
@@ -49,7 +44,6 @@ import {
49
44
  OSC_LINK,
50
45
  OSC_REQUIREMENTS_LINK,
51
46
  PIPELINES_OPERATOR_LINK,
52
- SELF_NODE_REMEDIATION_LINK,
53
47
  SERVERLESS_OPERATOR_LINK,
54
48
  } from '../../config';
55
49
  import { getMajorMinorVersion } from '../../utils';
@@ -60,20 +54,17 @@ import {
60
54
  DESCRIPTION_LSO,
61
55
  DESCRIPTION_MTV,
62
56
  DESCRIPTION_CNV,
63
- DESCRIPTION_FENCE_AGENTS_REMEDIATION,
64
57
  DESCRIPTION_KMM,
65
58
  DESCRIPTION_KUBE_DESCHEDULER,
66
59
  DESCRIPTION_MCE,
67
60
  DESCRIPTION_NMSTATE,
68
61
  DESCRIPTION_NODE_FEATURE_DISCOVERY,
69
- DESCRIPTION_NODE_HEALTHCHECK,
70
62
  DESCRIPTION_NODE_MAINTENANCE,
71
63
  DESCRIPTION_NVIDIA_GPU,
72
64
  DESCRIPTION_ODF,
73
65
  DESCRIPTION_OPENSHIFT_AI,
74
66
  DESCRIPTION_OSC,
75
67
  DESCRIPTION_PIPELINES,
76
- DESCRIPTION_SELF_NODE_REMEDIATION,
77
68
  DESCRIPTION_SERVERLESS,
78
69
  DESCRIPTION_SERVICEMESH,
79
70
  DESCRIPTION_LVM,
@@ -92,15 +83,36 @@ export const isOCPVersionEqualsOrMore = (
92
83
  );
93
84
  };
94
85
 
86
+ export const highlightMatch = (text: string, searchTerm?: string): React.ReactNode => {
87
+ if (!searchTerm) return text;
88
+ try {
89
+ const escapeSearchTerm = searchTerm.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
90
+ const regex = new RegExp(`(${escapeSearchTerm})`, 'gi');
91
+
92
+ const parts = text.split(regex);
93
+
94
+ return parts.map((part, i) =>
95
+ part.toLowerCase() === searchTerm.toLowerCase() ? <mark key={i}>{part}</mark> : part,
96
+ );
97
+ } catch (err) {
98
+ // eslint-disable-next-line no-console
99
+ console.log('failed to highlight search text', err);
100
+ return text;
101
+ }
102
+ };
103
+
104
+ export const HighlightedText = ({ text, searchTerm }: { text: string; searchTerm?: string }) => (
105
+ <>{highlightMatch(text, searchTerm)}</>
106
+ );
107
+
95
108
  export type OperatorSpec = {
96
109
  operatorKey: string;
97
110
  title: string;
98
111
  featureId: FeatureId;
99
112
  descriptionText?: string;
100
- Description?: React.ComponentType<{ openshiftVersion?: string }>;
113
+ Description?: React.ComponentType<{ openshiftVersion?: string; searchTerm?: string }>;
101
114
  notStandalone?: boolean;
102
115
  Requirements?: React.ComponentType<{ cluster: Cluster }>;
103
- category: string;
104
116
  supportLevel?: SupportLevel | undefined;
105
117
  };
106
118
 
@@ -115,14 +127,13 @@ export const getOperatorSpecs = (
115
127
  title: 'Local Storage Operator',
116
128
  featureId: 'LSO',
117
129
  descriptionText: DESCRIPTION_LSO,
118
- Description: ({ openshiftVersion }) => (
130
+ Description: ({ openshiftVersion, searchTerm }) => (
119
131
  <>
120
- {DESCRIPTION_LSO}{' '}
132
+ <HighlightedText text={DESCRIPTION_LSO} searchTerm={searchTerm} />{' '}
121
133
  <ExternalLink href={getLsoLink(openshiftVersion)}>Learn more</ExternalLink>
122
134
  </>
123
135
  ),
124
136
  notStandalone: true,
125
- category: categories[Category.STORAGE],
126
137
  supportLevel: getFeatureSupportLevel('LSO'),
127
138
  },
128
139
  {
@@ -130,16 +141,15 @@ export const getOperatorSpecs = (
130
141
  title: useLVMS ? 'Logical Volume Manager Storage' : 'Logical Volume Manager',
131
142
  featureId: 'LVM',
132
143
  descriptionText: DESCRIPTION_LVM,
133
- Description: ({ openshiftVersion }) =>
144
+ Description: ({ openshiftVersion, searchTerm }) =>
134
145
  useLVMS ? (
135
146
  <>
136
- {DESCRIPTION_LVM}{' '}
147
+ <HighlightedText text={DESCRIPTION_LVM} searchTerm={searchTerm} />{' '}
137
148
  <ExternalLink href={getLvmsDocsLink(openshiftVersion)}>Learn more</ExternalLink>
138
149
  </>
139
150
  ) : (
140
151
  <>{DESCRIPTION_LVM}</>
141
152
  ),
142
- category: categories[Category.STORAGE],
143
153
  supportLevel: getFeatureSupportLevel('LVM'),
144
154
  },
145
155
  {
@@ -152,12 +162,12 @@ export const getOperatorSpecs = (
152
162
  Learn more about the requirements for OpenShift Data Foundation
153
163
  </ExternalLink>
154
164
  ),
155
- Description: () => (
165
+ Description: ({ searchTerm }) => (
156
166
  <>
157
- {DESCRIPTION_ODF} <ExternalLink href={ODF_LINK}>Learn more</ExternalLink>
167
+ <HighlightedText text={DESCRIPTION_ODF} searchTerm={searchTerm} />{' '}
168
+ <ExternalLink href={ODF_LINK}>Learn more</ExternalLink>
158
169
  </>
159
170
  ),
160
- category: categories[Category.STORAGE],
161
171
  supportLevel: getFeatureSupportLevel('ODF'),
162
172
  },
163
173
  ],
@@ -170,12 +180,12 @@ export const getOperatorSpecs = (
170
180
  Requirements: () => (
171
181
  <>Enabled CPU virtualization support in BIOS (Intel-VT / AMD-V) on all nodes</>
172
182
  ),
173
- Description: () => (
183
+ Description: ({ searchTerm }) => (
174
184
  <>
175
- {DESCRIPTION_CNV} <ExternalLink href={CNV_LINK}>Learn more</ExternalLink>
185
+ <HighlightedText text={DESCRIPTION_CNV} searchTerm={searchTerm} />{' '}
186
+ <ExternalLink href={CNV_LINK}>Learn more</ExternalLink>
176
187
  </>
177
188
  ),
178
- category: categories[Category.VIRT],
179
189
  supportLevel: getFeatureSupportLevel('CNV'),
180
190
  },
181
191
  {
@@ -183,14 +193,32 @@ export const getOperatorSpecs = (
183
193
  title: 'Migration Toolkit for Virtualization',
184
194
  featureId: 'MTV',
185
195
  descriptionText: DESCRIPTION_MTV,
186
- Description: () => (
196
+ Description: ({ searchTerm }) => (
187
197
  <>
188
- {DESCRIPTION_MTV} <ExternalLink href={MTV_LINK}>Learn more</ExternalLink>
198
+ <HighlightedText text={DESCRIPTION_MTV} searchTerm={searchTerm} />{' '}
199
+ <ExternalLink href={MTV_LINK}>Learn more</ExternalLink>
189
200
  </>
190
201
  ),
191
- category: categories[Category.VIRT],
192
202
  supportLevel: getFeatureSupportLevel('MTV'),
193
203
  },
204
+ {
205
+ operatorKey: OPERATOR_NAME_OSC,
206
+ title: 'OpenShift sandboxed containers',
207
+ featureId: 'OSC',
208
+ descriptionText: DESCRIPTION_OSC,
209
+ Requirements: () => (
210
+ <ExternalLink href={OSC_REQUIREMENTS_LINK}>
211
+ Learn more about the requirements for OpenShift sandboxed containers
212
+ </ExternalLink>
213
+ ),
214
+ Description: ({ searchTerm }) => (
215
+ <>
216
+ <HighlightedText text={DESCRIPTION_OSC} searchTerm={searchTerm} />{' '}
217
+ <ExternalLink href={OSC_LINK}>Learn more</ExternalLink>
218
+ </>
219
+ ),
220
+ supportLevel: getFeatureSupportLevel('OSC'),
221
+ },
194
222
  ],
195
223
  [categories[Category.AI]]: [
196
224
  {
@@ -201,13 +229,12 @@ export const getOperatorSpecs = (
201
229
  Requirements: () => (
202
230
  <ExternalLink href={OPENSHIFT_AI_REQUIREMENTS_LINK}>Learn more</ExternalLink>
203
231
  ),
204
- Description: () => (
232
+ Description: ({ searchTerm }) => (
205
233
  <>
206
- {DESCRIPTION_OPENSHIFT_AI}{' '}
234
+ <HighlightedText text={DESCRIPTION_OPENSHIFT_AI} searchTerm={searchTerm} />{' '}
207
235
  <ExternalLink href={OPENSHIFT_AI_LINK}>Learn more</ExternalLink>
208
236
  </>
209
237
  ),
210
- category: categories[Category.AI],
211
238
  supportLevel: getFeatureSupportLevel('OPENSHIFT_AI'),
212
239
  },
213
240
  {
@@ -216,8 +243,12 @@ export const getOperatorSpecs = (
216
243
  featureId: 'AMD_GPU',
217
244
  descriptionText: DESCRIPTION_AMD_GPU,
218
245
  Requirements: () => <>Requires at least one supported AMD GPU</>,
219
- Description: () => <>{DESCRIPTION_AMD_GPU}</>,
220
- category: categories[Category.AI],
246
+ Description: ({ searchTerm }) => (
247
+ <>
248
+ {' '}
249
+ <HighlightedText text={DESCRIPTION_AMD_GPU} searchTerm={searchTerm} />{' '}
250
+ </>
251
+ ),
221
252
  supportLevel: getFeatureSupportLevel('AMD_GPU'),
222
253
  },
223
254
  {
@@ -226,13 +257,12 @@ export const getOperatorSpecs = (
226
257
  featureId: 'NVIDIA_GPU',
227
258
  descriptionText: DESCRIPTION_NVIDIA_GPU,
228
259
  Requirements: () => <>Requires at least one supported NVIDIA GPU</>,
229
- Description: ({ openshiftVersion }) => (
260
+ Description: ({ openshiftVersion, searchTerm }) => (
230
261
  <>
231
- {DESCRIPTION_NVIDIA_GPU}
262
+ <HighlightedText text={DESCRIPTION_NVIDIA_GPU} searchTerm={searchTerm} />{' '}
232
263
  <ExternalLink href={getNvidiaGpuLink(openshiftVersion)}>Learn more</ExternalLink>
233
264
  </>
234
265
  ),
235
- category: categories[Category.AI],
236
266
  supportLevel: getFeatureSupportLevel('NVIDIA_GPU'),
237
267
  },
238
268
  ],
@@ -242,13 +272,12 @@ export const getOperatorSpecs = (
242
272
  title: 'NMState',
243
273
  featureId: 'NMSTATE',
244
274
  descriptionText: DESCRIPTION_NMSTATE,
245
- Description: ({ openshiftVersion }) => (
275
+ Description: ({ openshiftVersion, searchTerm }) => (
246
276
  <>
247
- {DESCRIPTION_NMSTATE}{' '}
277
+ <HighlightedText text={DESCRIPTION_NMSTATE} searchTerm={searchTerm} />{' '}
248
278
  <ExternalLink href={getNmstateLink(openshiftVersion)}>Learn more</ExternalLink>
249
279
  </>
250
280
  ),
251
- category: categories[Category.NETWORK],
252
281
  supportLevel: getFeatureSupportLevel('NMSTATE'),
253
282
  },
254
283
  {
@@ -256,109 +285,58 @@ export const getOperatorSpecs = (
256
285
  title: 'Service Mesh',
257
286
  featureId: 'SERVICEMESH',
258
287
  descriptionText: DESCRIPTION_SERVICEMESH,
259
- Description: ({ openshiftVersion }) => (
288
+ Description: ({ openshiftVersion, searchTerm }) => (
260
289
  <>
261
- {DESCRIPTION_SERVICEMESH}{' '}
290
+ <HighlightedText text={DESCRIPTION_SERVICEMESH} searchTerm={searchTerm} />{' '}
262
291
  <ExternalLink href={getServiceMeshLink(openshiftVersion)}>Learn more</ExternalLink>
263
292
  </>
264
293
  ),
265
294
  notStandalone: true,
266
- category: categories[Category.NETWORK],
267
295
  supportLevel: getFeatureSupportLevel('SERVICEMESH'),
268
296
  },
269
297
  ],
270
- [categories[Category.REMEDIATION]]: [
271
- {
272
- operatorKey: OPERATOR_NAME_FENCE_AGENTS_REMEDIATION,
273
- title: 'Fence Agents Remediation',
274
- featureId: 'FENCE_AGENTS_REMEDIATION',
275
- descriptionText: DESCRIPTION_FENCE_AGENTS_REMEDIATION,
276
- Description: () => (
277
- <>
278
- {DESCRIPTION_FENCE_AGENTS_REMEDIATION}{' '}
279
- <ExternalLink href={FENCE_AGENTS_REMEDIATION_LINK}>Learn more</ExternalLink>
280
- </>
281
- ),
282
- notStandalone: true,
283
- category: categories[Category.REMEDIATION],
284
- supportLevel: getFeatureSupportLevel('FENCE_AGENTS_REMEDIATION'),
285
- },
286
- {
287
- operatorKey: OPERATOR_NAME_NODE_HEALTHCHECK,
288
- title: 'Node Healthcheck',
289
- featureId: 'NODE_HEALTHCHECK',
290
- descriptionText: DESCRIPTION_NODE_HEALTHCHECK,
291
- Description: () => (
292
- <>
293
- {DESCRIPTION_NODE_HEALTHCHECK}{' '}
294
- <ExternalLink href={NODE_HEALTHCHECK_LINK}>Learn more</ExternalLink>
295
- </>
296
- ),
297
- notStandalone: true,
298
- category: categories[Category.REMEDIATION],
299
- supportLevel: getFeatureSupportLevel('NODE_HEALTHCHECK'),
300
- },
301
- {
302
- operatorKey: OPERATOR_NAME_SELF_NODE_REMEDIATION,
303
- title: 'Self Node Remediation',
304
- featureId: 'SELF_NODE_REMEDIATION',
305
- descriptionText: DESCRIPTION_SELF_NODE_REMEDIATION,
306
- Description: () => (
307
- <>
308
- {DESCRIPTION_SELF_NODE_REMEDIATION}{' '}
309
- <ExternalLink href={SELF_NODE_REMEDIATION_LINK}>Learn more</ExternalLink>
310
- </>
311
- ),
312
- notStandalone: true,
313
- category: categories[Category.REMEDIATION],
314
- supportLevel: getFeatureSupportLevel('SELF_NODE_REMEDIATION'),
315
- },
316
- ],
317
- [categories[Category.OTHER]]: [
298
+ [categories[Category.SECURITY]]: [
318
299
  {
319
300
  operatorKey: OPERATOR_NAME_AUTHORINO,
320
301
  title: 'Authorino',
321
302
  featureId: 'AUTHORINO',
322
303
  descriptionText: DESCRIPTION_AUTHORINO,
323
- Description: () => (
304
+ Description: ({ searchTerm }) => (
324
305
  <>
325
- {DESCRIPTION_AUTHORINO}{' '}
306
+ <HighlightedText text={DESCRIPTION_AUTHORINO} searchTerm={searchTerm} />{' '}
326
307
  <ExternalLink href={AUTHORINO_OPERATOR_LINK}>Learn more</ExternalLink>
327
308
  </>
328
309
  ),
329
310
  notStandalone: true,
330
- category: categories[Category.OTHER],
331
311
  supportLevel: getFeatureSupportLevel('AUTHORINO'),
332
312
  },
333
313
  {
334
- operatorKey: OPERATOR_NAME_NODE_FEATURE_DISCOVERY,
335
- title: 'Node Feature Discovery',
336
- featureId: 'NODE_FEATURE_DISCOVERY',
337
- descriptionText: DESCRIPTION_NODE_FEATURE_DISCOVERY,
338
- Description: ({ openshiftVersion }) => (
314
+ operatorKey: OPERATOR_NAME_KMM,
315
+ title: 'Kernel Module Management',
316
+ featureId: 'KMM',
317
+ descriptionText: DESCRIPTION_KMM,
318
+ Description: ({ openshiftVersion, searchTerm }) => (
339
319
  <>
340
- {DESCRIPTION_NODE_FEATURE_DISCOVERY}{' '}
341
- <ExternalLink href={getNodeFeatureDiscoveryLink(openshiftVersion)}>
342
- Learn more
343
- </ExternalLink>
320
+ <HighlightedText text={DESCRIPTION_KMM} searchTerm={searchTerm} />{' '}
321
+ <ExternalLink href={getKmmDocsLink(openshiftVersion)}>Learn more</ExternalLink>
344
322
  </>
345
323
  ),
346
- category: categories[Category.OTHER],
347
- supportLevel: getFeatureSupportLevel('NODE_FEATURE_DISCOVERY'),
324
+ supportLevel: getFeatureSupportLevel('KMM'),
348
325
  },
326
+ ],
327
+ [categories[Category.CI_CD]]: [
349
328
  {
350
329
  operatorKey: OPERATOR_NAME_PIPELINES,
351
330
  title: 'Pipelines',
352
331
  featureId: 'PIPELINES',
353
332
  descriptionText: DESCRIPTION_PIPELINES,
354
- Description: () => (
333
+ Description: ({ searchTerm }) => (
355
334
  <>
356
- {DESCRIPTION_PIPELINES}{' '}
335
+ <HighlightedText text={DESCRIPTION_PIPELINES} searchTerm={searchTerm} />{' '}
357
336
  <ExternalLink href={PIPELINES_OPERATOR_LINK}>Learn more</ExternalLink>
358
337
  </>
359
338
  ),
360
339
  notStandalone: true,
361
- category: categories[Category.OTHER],
362
340
  supportLevel: getFeatureSupportLevel('PIPELINES'),
363
341
  },
364
342
  {
@@ -366,93 +344,75 @@ export const getOperatorSpecs = (
366
344
  title: 'Serverless',
367
345
  featureId: 'SERVERLESS',
368
346
  descriptionText: DESCRIPTION_SERVERLESS,
369
- Description: () => (
347
+ Description: ({ searchTerm }) => (
370
348
  <>
371
- {DESCRIPTION_SERVERLESS}{' '}
349
+ <HighlightedText text={DESCRIPTION_SERVERLESS} searchTerm={searchTerm} />{' '}
372
350
  <ExternalLink href={SERVERLESS_OPERATOR_LINK}>Learn more</ExternalLink>
373
351
  </>
374
352
  ),
375
353
  notStandalone: true,
376
- category: categories[Category.OTHER],
377
354
  supportLevel: getFeatureSupportLevel('SERVERLESS'),
378
355
  },
379
- {
380
- operatorKey: OPERATOR_NAME_KMM,
381
- title: 'Kernel Module Management',
382
- featureId: 'KMM',
383
- descriptionText: DESCRIPTION_KMM,
384
- Description: ({ openshiftVersion }) => (
385
- <>
386
- {DESCRIPTION_KMM}{' '}
387
- <ExternalLink href={getKmmDocsLink(openshiftVersion)}>Learn more</ExternalLink>
388
- </>
389
- ),
390
- category: categories[Category.OTHER],
391
- supportLevel: getFeatureSupportLevel('KMM'),
392
- },
356
+ ],
357
+ [categories[Category.PLATFORM]]: [
393
358
  {
394
359
  operatorKey: OPERATOR_NAME_MCE,
395
360
  title: 'Multicluster engine',
396
361
  featureId: 'MCE',
397
362
  descriptionText: DESCRIPTION_MCE,
398
- Description: ({ openshiftVersion }) => (
363
+ Description: ({ openshiftVersion, searchTerm }) => (
399
364
  <>
400
- {DESCRIPTION_MCE}{' '}
365
+ <HighlightedText text={DESCRIPTION_MCE} searchTerm={searchTerm} />{' '}
401
366
  <ExternalLink href={getMceDocsLink(openshiftVersion)}>Learn more</ExternalLink>
402
367
  </>
403
368
  ),
404
- category: categories[Category.OTHER],
405
369
  supportLevel: getFeatureSupportLevel('MCE'),
406
370
  },
407
371
  {
408
- operatorKey: OPERATOR_NAME_OSC,
409
- title: 'OpenShift sandboxed containers',
410
- featureId: 'OSC',
411
- descriptionText: DESCRIPTION_OSC,
412
- Requirements: () => (
413
- <ExternalLink href={OSC_REQUIREMENTS_LINK}>
414
- Learn more about the requirements for OpenShift sandboxed containers
415
- </ExternalLink>
372
+ operatorKey: OPERATOR_NAME_NODE_MAINTENANCE,
373
+ title: 'Node Maintenance',
374
+ featureId: 'NODE_MAINTENANCE',
375
+ descriptionText: DESCRIPTION_NODE_MAINTENANCE,
376
+ Description: ({ searchTerm }) => (
377
+ <>
378
+ <HighlightedText text={DESCRIPTION_NODE_MAINTENANCE} searchTerm={searchTerm} />{' '}
379
+ <ExternalLink href={NODE_MAINTENANCE_LINK}>Learn more</ExternalLink>
380
+ </>
416
381
  ),
417
- Description: () => (
382
+ notStandalone: true,
383
+ supportLevel: getFeatureSupportLevel('NODE_MAINTENANCE'),
384
+ },
385
+ ],
386
+ [categories[Category.SCHEDULING]]: [
387
+ {
388
+ operatorKey: OPERATOR_NAME_NODE_FEATURE_DISCOVERY,
389
+ title: 'Node Feature Discovery',
390
+ featureId: 'NODE_FEATURE_DISCOVERY',
391
+ descriptionText: DESCRIPTION_NODE_FEATURE_DISCOVERY,
392
+ Description: ({ openshiftVersion, searchTerm }) => (
418
393
  <>
419
- {DESCRIPTION_OSC} <ExternalLink href={OSC_LINK}>Learn more</ExternalLink>
394
+ <HighlightedText text={DESCRIPTION_NODE_FEATURE_DISCOVERY} searchTerm={searchTerm} />{' '}
395
+ <ExternalLink href={getNodeFeatureDiscoveryLink(openshiftVersion)}>
396
+ Learn more
397
+ </ExternalLink>
420
398
  </>
421
399
  ),
422
- category: categories[Category.OTHER],
423
- supportLevel: getFeatureSupportLevel('OSC'),
400
+ supportLevel: getFeatureSupportLevel('NODE_FEATURE_DISCOVERY'),
424
401
  },
425
402
  {
426
403
  operatorKey: OPERATOR_NAME_KUBE_DESCHEDULER,
427
404
  title: 'Kube Descheduler',
428
405
  featureId: 'KUBE_DESCHEDULER',
429
406
  descriptionText: DESCRIPTION_KUBE_DESCHEDULER,
430
- Description: ({ openshiftVersion }) => (
407
+ Description: ({ openshiftVersion, searchTerm }) => (
431
408
  <>
432
- {DESCRIPTION_KUBE_DESCHEDULER}{' '}
409
+ <HighlightedText text={DESCRIPTION_KUBE_DESCHEDULER} searchTerm={searchTerm} />{' '}
433
410
  <ExternalLink href={getKubeDeschedulerLink(openshiftVersion)}>Learn more</ExternalLink>
434
411
  </>
435
412
  ),
436
413
  notStandalone: true,
437
- category: categories[Category.OTHER],
438
414
  supportLevel: getFeatureSupportLevel('KUBE_DESCHEDULER'),
439
415
  },
440
-
441
- {
442
- operatorKey: OPERATOR_NAME_NODE_MAINTENANCE,
443
- title: 'Node Maintenance',
444
- featureId: 'NODE_MAINTENANCE',
445
- descriptionText: DESCRIPTION_NODE_MAINTENANCE,
446
- Description: () => (
447
- <>
448
- {DESCRIPTION_NODE_MAINTENANCE}{' '}
449
- <ExternalLink href={NODE_MAINTENANCE_LINK}>Learn more</ExternalLink>
450
- </>
451
- ),
452
- notStandalone: true,
453
- category: categories[Category.OTHER],
454
- supportLevel: getFeatureSupportLevel('NODE_MAINTENANCE'),
455
- },
456
416
  ],
457
417
  };
458
418
  };
@@ -498,8 +458,10 @@ enum Category {
498
458
  VIRT,
499
459
  AI,
500
460
  NETWORK,
501
- REMEDIATION,
502
- OTHER,
461
+ CI_CD,
462
+ PLATFORM,
463
+ SECURITY,
464
+ SCHEDULING,
503
465
  }
504
466
 
505
467
  export const categories: { [key in Category]: string } = {
@@ -507,6 +469,8 @@ export const categories: { [key in Category]: string } = {
507
469
  [Category.VIRT]: 'Virtualization',
508
470
  [Category.AI]: 'AI',
509
471
  [Category.NETWORK]: 'Network',
510
- [Category.REMEDIATION]: 'Remediation',
511
- [Category.OTHER]: 'Other',
472
+ [Category.SECURITY]: 'Security & Access Control',
473
+ [Category.CI_CD]: 'CI/CD & Dev Productivity',
474
+ [Category.PLATFORM]: 'Platform Operations & Lifecycle',
475
+ [Category.SCHEDULING]: 'Scheduling',
512
476
  };