@openshift-assisted/ui-lib 2.42.1 → 2.42.2

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 +123 -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,31 @@ 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: () => (
215
+ <>
216
+ {DESCRIPTION_OSC} <ExternalLink href={OSC_LINK}>Learn more</ExternalLink>
217
+ </>
218
+ ),
219
+ supportLevel: getFeatureSupportLevel('OSC'),
220
+ },
194
221
  ],
195
222
  [categories[Category.AI]]: [
196
223
  {
@@ -201,13 +228,12 @@ export const getOperatorSpecs = (
201
228
  Requirements: () => (
202
229
  <ExternalLink href={OPENSHIFT_AI_REQUIREMENTS_LINK}>Learn more</ExternalLink>
203
230
  ),
204
- Description: () => (
231
+ Description: ({ searchTerm }) => (
205
232
  <>
206
- {DESCRIPTION_OPENSHIFT_AI}{' '}
233
+ <HighlightedText text={DESCRIPTION_OPENSHIFT_AI} searchTerm={searchTerm} />{' '}
207
234
  <ExternalLink href={OPENSHIFT_AI_LINK}>Learn more</ExternalLink>
208
235
  </>
209
236
  ),
210
- category: categories[Category.AI],
211
237
  supportLevel: getFeatureSupportLevel('OPENSHIFT_AI'),
212
238
  },
213
239
  {
@@ -216,8 +242,12 @@ export const getOperatorSpecs = (
216
242
  featureId: 'AMD_GPU',
217
243
  descriptionText: DESCRIPTION_AMD_GPU,
218
244
  Requirements: () => <>Requires at least one supported AMD GPU</>,
219
- Description: () => <>{DESCRIPTION_AMD_GPU}</>,
220
- category: categories[Category.AI],
245
+ Description: ({ searchTerm }) => (
246
+ <>
247
+ {' '}
248
+ <HighlightedText text={DESCRIPTION_AMD_GPU} searchTerm={searchTerm} />{' '}
249
+ </>
250
+ ),
221
251
  supportLevel: getFeatureSupportLevel('AMD_GPU'),
222
252
  },
223
253
  {
@@ -226,13 +256,12 @@ export const getOperatorSpecs = (
226
256
  featureId: 'NVIDIA_GPU',
227
257
  descriptionText: DESCRIPTION_NVIDIA_GPU,
228
258
  Requirements: () => <>Requires at least one supported NVIDIA GPU</>,
229
- Description: ({ openshiftVersion }) => (
259
+ Description: ({ openshiftVersion, searchTerm }) => (
230
260
  <>
231
- {DESCRIPTION_NVIDIA_GPU}
261
+ <HighlightedText text={DESCRIPTION_NVIDIA_GPU} searchTerm={searchTerm} />{' '}
232
262
  <ExternalLink href={getNvidiaGpuLink(openshiftVersion)}>Learn more</ExternalLink>
233
263
  </>
234
264
  ),
235
- category: categories[Category.AI],
236
265
  supportLevel: getFeatureSupportLevel('NVIDIA_GPU'),
237
266
  },
238
267
  ],
@@ -242,13 +271,12 @@ export const getOperatorSpecs = (
242
271
  title: 'NMState',
243
272
  featureId: 'NMSTATE',
244
273
  descriptionText: DESCRIPTION_NMSTATE,
245
- Description: ({ openshiftVersion }) => (
274
+ Description: ({ openshiftVersion, searchTerm }) => (
246
275
  <>
247
- {DESCRIPTION_NMSTATE}{' '}
276
+ <HighlightedText text={DESCRIPTION_NMSTATE} searchTerm={searchTerm} />{' '}
248
277
  <ExternalLink href={getNmstateLink(openshiftVersion)}>Learn more</ExternalLink>
249
278
  </>
250
279
  ),
251
- category: categories[Category.NETWORK],
252
280
  supportLevel: getFeatureSupportLevel('NMSTATE'),
253
281
  },
254
282
  {
@@ -256,109 +284,58 @@ export const getOperatorSpecs = (
256
284
  title: 'Service Mesh',
257
285
  featureId: 'SERVICEMESH',
258
286
  descriptionText: DESCRIPTION_SERVICEMESH,
259
- Description: ({ openshiftVersion }) => (
287
+ Description: ({ openshiftVersion, searchTerm }) => (
260
288
  <>
261
- {DESCRIPTION_SERVICEMESH}{' '}
289
+ <HighlightedText text={DESCRIPTION_SERVICEMESH} searchTerm={searchTerm} />{' '}
262
290
  <ExternalLink href={getServiceMeshLink(openshiftVersion)}>Learn more</ExternalLink>
263
291
  </>
264
292
  ),
265
293
  notStandalone: true,
266
- category: categories[Category.NETWORK],
267
294
  supportLevel: getFeatureSupportLevel('SERVICEMESH'),
268
295
  },
269
296
  ],
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]]: [
297
+ [categories[Category.SECURITY]]: [
318
298
  {
319
299
  operatorKey: OPERATOR_NAME_AUTHORINO,
320
300
  title: 'Authorino',
321
301
  featureId: 'AUTHORINO',
322
302
  descriptionText: DESCRIPTION_AUTHORINO,
323
- Description: () => (
303
+ Description: ({ searchTerm }) => (
324
304
  <>
325
- {DESCRIPTION_AUTHORINO}{' '}
305
+ <HighlightedText text={DESCRIPTION_AUTHORINO} searchTerm={searchTerm} />{' '}
326
306
  <ExternalLink href={AUTHORINO_OPERATOR_LINK}>Learn more</ExternalLink>
327
307
  </>
328
308
  ),
329
309
  notStandalone: true,
330
- category: categories[Category.OTHER],
331
310
  supportLevel: getFeatureSupportLevel('AUTHORINO'),
332
311
  },
333
312
  {
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 }) => (
313
+ operatorKey: OPERATOR_NAME_KMM,
314
+ title: 'Kernel Module Management',
315
+ featureId: 'KMM',
316
+ descriptionText: DESCRIPTION_KMM,
317
+ Description: ({ openshiftVersion, searchTerm }) => (
339
318
  <>
340
- {DESCRIPTION_NODE_FEATURE_DISCOVERY}{' '}
341
- <ExternalLink href={getNodeFeatureDiscoveryLink(openshiftVersion)}>
342
- Learn more
343
- </ExternalLink>
319
+ <HighlightedText text={DESCRIPTION_KMM} searchTerm={searchTerm} />{' '}
320
+ <ExternalLink href={getKmmDocsLink(openshiftVersion)}>Learn more</ExternalLink>
344
321
  </>
345
322
  ),
346
- category: categories[Category.OTHER],
347
- supportLevel: getFeatureSupportLevel('NODE_FEATURE_DISCOVERY'),
323
+ supportLevel: getFeatureSupportLevel('KMM'),
348
324
  },
325
+ ],
326
+ [categories[Category.CI_CD]]: [
349
327
  {
350
328
  operatorKey: OPERATOR_NAME_PIPELINES,
351
329
  title: 'Pipelines',
352
330
  featureId: 'PIPELINES',
353
331
  descriptionText: DESCRIPTION_PIPELINES,
354
- Description: () => (
332
+ Description: ({ searchTerm }) => (
355
333
  <>
356
- {DESCRIPTION_PIPELINES}{' '}
334
+ <HighlightedText text={DESCRIPTION_PIPELINES} searchTerm={searchTerm} />{' '}
357
335
  <ExternalLink href={PIPELINES_OPERATOR_LINK}>Learn more</ExternalLink>
358
336
  </>
359
337
  ),
360
338
  notStandalone: true,
361
- category: categories[Category.OTHER],
362
339
  supportLevel: getFeatureSupportLevel('PIPELINES'),
363
340
  },
364
341
  {
@@ -366,93 +343,75 @@ export const getOperatorSpecs = (
366
343
  title: 'Serverless',
367
344
  featureId: 'SERVERLESS',
368
345
  descriptionText: DESCRIPTION_SERVERLESS,
369
- Description: () => (
346
+ Description: ({ searchTerm }) => (
370
347
  <>
371
- {DESCRIPTION_SERVERLESS}{' '}
348
+ <HighlightedText text={DESCRIPTION_SERVERLESS} searchTerm={searchTerm} />{' '}
372
349
  <ExternalLink href={SERVERLESS_OPERATOR_LINK}>Learn more</ExternalLink>
373
350
  </>
374
351
  ),
375
352
  notStandalone: true,
376
- category: categories[Category.OTHER],
377
353
  supportLevel: getFeatureSupportLevel('SERVERLESS'),
378
354
  },
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
- },
355
+ ],
356
+ [categories[Category.PLATFORM]]: [
393
357
  {
394
358
  operatorKey: OPERATOR_NAME_MCE,
395
359
  title: 'Multicluster engine',
396
360
  featureId: 'MCE',
397
361
  descriptionText: DESCRIPTION_MCE,
398
- Description: ({ openshiftVersion }) => (
362
+ Description: ({ openshiftVersion, searchTerm }) => (
399
363
  <>
400
- {DESCRIPTION_MCE}{' '}
364
+ <HighlightedText text={DESCRIPTION_MCE} searchTerm={searchTerm} />{' '}
401
365
  <ExternalLink href={getMceDocsLink(openshiftVersion)}>Learn more</ExternalLink>
402
366
  </>
403
367
  ),
404
- category: categories[Category.OTHER],
405
368
  supportLevel: getFeatureSupportLevel('MCE'),
406
369
  },
407
370
  {
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>
371
+ operatorKey: OPERATOR_NAME_NODE_MAINTENANCE,
372
+ title: 'Node Maintenance',
373
+ featureId: 'NODE_MAINTENANCE',
374
+ descriptionText: DESCRIPTION_NODE_MAINTENANCE,
375
+ Description: ({ searchTerm }) => (
376
+ <>
377
+ <HighlightedText text={DESCRIPTION_NODE_MAINTENANCE} searchTerm={searchTerm} />{' '}
378
+ <ExternalLink href={NODE_MAINTENANCE_LINK}>Learn more</ExternalLink>
379
+ </>
416
380
  ),
417
- Description: () => (
381
+ notStandalone: true,
382
+ supportLevel: getFeatureSupportLevel('NODE_MAINTENANCE'),
383
+ },
384
+ ],
385
+ [categories[Category.SCHEDULING]]: [
386
+ {
387
+ operatorKey: OPERATOR_NAME_NODE_FEATURE_DISCOVERY,
388
+ title: 'Node Feature Discovery',
389
+ featureId: 'NODE_FEATURE_DISCOVERY',
390
+ descriptionText: DESCRIPTION_NODE_FEATURE_DISCOVERY,
391
+ Description: ({ openshiftVersion }) => (
418
392
  <>
419
- {DESCRIPTION_OSC} <ExternalLink href={OSC_LINK}>Learn more</ExternalLink>
393
+ {DESCRIPTION_NODE_FEATURE_DISCOVERY}{' '}
394
+ <ExternalLink href={getNodeFeatureDiscoveryLink(openshiftVersion)}>
395
+ Learn more
396
+ </ExternalLink>
420
397
  </>
421
398
  ),
422
- category: categories[Category.OTHER],
423
- supportLevel: getFeatureSupportLevel('OSC'),
399
+ supportLevel: getFeatureSupportLevel('NODE_FEATURE_DISCOVERY'),
424
400
  },
425
401
  {
426
402
  operatorKey: OPERATOR_NAME_KUBE_DESCHEDULER,
427
403
  title: 'Kube Descheduler',
428
404
  featureId: 'KUBE_DESCHEDULER',
429
405
  descriptionText: DESCRIPTION_KUBE_DESCHEDULER,
430
- Description: ({ openshiftVersion }) => (
406
+ Description: ({ openshiftVersion, searchTerm }) => (
431
407
  <>
432
- {DESCRIPTION_KUBE_DESCHEDULER}{' '}
408
+ <HighlightedText text={DESCRIPTION_KUBE_DESCHEDULER} searchTerm={searchTerm} />{' '}
433
409
  <ExternalLink href={getKubeDeschedulerLink(openshiftVersion)}>Learn more</ExternalLink>
434
410
  </>
435
411
  ),
436
412
  notStandalone: true,
437
- category: categories[Category.OTHER],
438
413
  supportLevel: getFeatureSupportLevel('KUBE_DESCHEDULER'),
439
414
  },
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
415
  ],
457
416
  };
458
417
  };
@@ -498,8 +457,10 @@ enum Category {
498
457
  VIRT,
499
458
  AI,
500
459
  NETWORK,
501
- REMEDIATION,
502
- OTHER,
460
+ CI_CD,
461
+ PLATFORM,
462
+ SECURITY,
463
+ SCHEDULING,
503
464
  }
504
465
 
505
466
  export const categories: { [key in Category]: string } = {
@@ -507,6 +468,8 @@ export const categories: { [key in Category]: string } = {
507
468
  [Category.VIRT]: 'Virtualization',
508
469
  [Category.AI]: 'AI',
509
470
  [Category.NETWORK]: 'Network',
510
- [Category.REMEDIATION]: 'Remediation',
511
- [Category.OTHER]: 'Other',
471
+ [Category.SECURITY]: 'Security & Access Control',
472
+ [Category.CI_CD]: 'CI/CD & Dev Productivity',
473
+ [Category.PLATFORM]: 'Platform Operations & Lifecycle',
474
+ [Category.SCHEDULING]: 'Scheduling',
512
475
  };