@openshift-migration-advisor/shared-components 0.28.0 → 0.29.0-24760762468f

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 (48) hide show
  1. package/dist/charts/MigrationDonutChart.d.ts.map +1 -1
  2. package/dist/charts/MigrationDonutChart.js +15 -4
  3. package/dist/report/ChartExportProvider.d.ts +1 -1
  4. package/dist/report/ChartExportProvider.d.ts.map +1 -1
  5. package/dist/report/ChartExportProvider.js +4 -1
  6. package/dist/report/FeatureStatusBadge.d.ts.map +1 -1
  7. package/dist/report/FeatureStatusBadge.js +2 -2
  8. package/dist/report/OsUpgradeRecommendationPopover.d.ts.map +1 -1
  9. package/dist/report/OsUpgradeRecommendationPopover.js +1 -7
  10. package/dist/report/ReportExportMenu.d.ts +1 -0
  11. package/dist/report/ReportExportMenu.d.ts.map +1 -1
  12. package/dist/report/ReportExportMenu.js +38 -4
  13. package/dist/report/StorageOverview.d.ts +27 -0
  14. package/dist/report/StorageOverview.d.ts.map +1 -0
  15. package/dist/report/StorageOverview.js +331 -0
  16. package/dist/report/VMMigrationStatus.d.ts +33 -0
  17. package/dist/report/VMMigrationStatus.d.ts.map +1 -0
  18. package/dist/report/VMMigrationStatus.js +129 -0
  19. package/dist/report/captureChartElement.d.ts +6 -1
  20. package/dist/report/captureChartElement.d.ts.map +1 -1
  21. package/dist/report/captureChartElement.js +13 -4
  22. package/dist/report/chartExport.js +1 -1
  23. package/dist/report/dashboardStyles.d.ts +6 -0
  24. package/dist/report/dashboardStyles.d.ts.map +1 -1
  25. package/dist/report/dashboardStyles.js +7 -4
  26. package/dist/report/index.d.ts +3 -1
  27. package/dist/report/index.d.ts.map +1 -1
  28. package/dist/report/index.js +2 -0
  29. package/dist/report/reportExportOptions.d.ts +13 -2
  30. package/dist/report/reportExportOptions.d.ts.map +1 -1
  31. package/dist/report/reportExportOptions.js +13 -5
  32. package/package.json +2 -2
  33. package/src/charts/MigrationDonutChart.tsx +27 -6
  34. package/src/charts/__tests__/MigrationDonutChart.test.tsx +53 -0
  35. package/src/report/ChartExportProvider.tsx +5 -1
  36. package/src/report/FeatureStatusBadge.tsx +10 -2
  37. package/src/report/OsUpgradeRecommendationPopover.tsx +0 -8
  38. package/src/report/ReportExportMenu.tsx +69 -13
  39. package/src/report/StorageOverview.tsx +646 -0
  40. package/src/report/VMMigrationStatus.tsx +358 -0
  41. package/src/report/__tests__/StorageOverview.test.tsx +267 -0
  42. package/src/report/__tests__/VMMigrationStatus.test.tsx +178 -0
  43. package/src/report/__tests__/captureChartElement.test.ts +47 -0
  44. package/src/report/captureChartElement.ts +18 -3
  45. package/src/report/chartExport.ts +1 -1
  46. package/src/report/dashboardStyles.ts +7 -4
  47. package/src/report/index.ts +12 -0
  48. package/src/report/reportExportOptions.ts +28 -5
@@ -1,4 +1,4 @@
1
- import { Label } from "@patternfly/react-core";
1
+ import { Icon, Label } from "@patternfly/react-core";
2
2
  import { CheckCircleIcon, TimesCircleIcon } from "@patternfly/react-icons";
3
3
  import type { FC } from "react";
4
4
  import type { FeatureStatus } from "./infrastructureSummaryModel.js";
@@ -21,7 +21,15 @@ export const FeatureStatusBadge: FC<FeatureStatusBadgeProps> = ({ status }) => {
21
21
  }
22
22
 
23
23
  return (
24
- <Label color="grey" isCompact icon={<TimesCircleIcon />}>
24
+ <Label
25
+ variant="outline"
26
+ isCompact
27
+ icon={
28
+ <Icon status="danger">
29
+ <TimesCircleIcon />
30
+ </Icon>
31
+ }
32
+ >
25
33
  Disabled
26
34
  </Label>
27
35
  );
@@ -4,13 +4,6 @@ import { InfoCircleIcon } from "@patternfly/react-icons";
4
4
  import type { FC } from "react";
5
5
  import { chartExportHideProps } from "./chartExport.js";
6
6
 
7
- const upgradeRecommendationPopoverCloseButton = css`
8
- .pf-v6-c-popover__close .pf-v6-c-button.pf-m-plain,
9
- .pf-v6-c-popover__close .pf-v6-c-button.pf-m-plain:hover {
10
- color: var(--pf-t--global--text--color--regular);
11
- }
12
- `;
13
-
14
7
  const infoButtonStyle = css`
15
8
  padding: 0;
16
9
  vertical-align: middle;
@@ -24,7 +17,6 @@ export const OsUpgradeRecommendationPopover: FC<
24
17
  OsUpgradeRecommendationPopoverProps
25
18
  > = ({ upgradeRecommendation }) => (
26
19
  <Popover
27
- className={upgradeRecommendationPopoverCloseButton}
28
20
  position="bottom"
29
21
  headerContent="Upgrade to get support"
30
22
  bodyContent={<div>{upgradeRecommendation}</div>}
@@ -1,5 +1,7 @@
1
1
  import {
2
+ Divider,
2
3
  Dropdown,
4
+ DropdownGroup,
3
5
  DropdownItem,
4
6
  DropdownList,
5
7
  MenuToggle,
@@ -7,13 +9,41 @@ import {
7
9
  Spinner,
8
10
  } from "@patternfly/react-core";
9
11
  import { DownloadIcon } from "@patternfly/react-icons";
10
- import { type FC, type Ref, useState } from "react";
12
+ import { type FC, type ReactNode, type Ref, useMemo, useState } from "react";
11
13
  import {
12
14
  type ReportExportOption,
15
+ type ReportExportSection,
13
16
  type StandardReportExportHandlers,
14
17
  standardReportExportOptions,
15
18
  } from "./reportExportOptions.js";
16
19
 
20
+ function sectionGroupKey(section?: ReportExportSection): string | undefined {
21
+ return section?.id;
22
+ }
23
+
24
+ function groupExportOptions(options: ReportExportOption[]): {
25
+ section?: ReportExportSection;
26
+ options: ReportExportOption[];
27
+ }[] {
28
+ const groups: {
29
+ section?: ReportExportSection;
30
+ options: ReportExportOption[];
31
+ }[] = [];
32
+
33
+ for (const option of options) {
34
+ const sectionKey = sectionGroupKey(option.section);
35
+ const last = groups.length > 0 ? groups[groups.length - 1] : undefined;
36
+ const lastKey = last ? sectionGroupKey(last.section) : undefined;
37
+ if (last && lastKey === sectionKey) {
38
+ last.options.push(option);
39
+ } else {
40
+ groups.push({ section: option.section, options: [option] });
41
+ }
42
+ }
43
+
44
+ return groups;
45
+ }
46
+
17
47
  export interface ReportExportMenuProps {
18
48
  options: ReportExportOption[];
19
49
  isLoading?: boolean;
@@ -31,10 +61,44 @@ export const ReportExportMenu: FC<ReportExportMenuProps> = ({
31
61
  }) => {
32
62
  const [isDropdownOpen, setIsDropdownOpen] = useState(false);
33
63
 
64
+ const optionGroups = useMemo(() => groupExportOptions(options), [options]);
65
+
34
66
  if (options.length === 0) {
35
67
  return null;
36
68
  }
37
69
 
70
+ const menuItems: ReactNode[] = [];
71
+ optionGroups.forEach((group, index) => {
72
+ if (index > 0) {
73
+ const dividerKey =
74
+ group.section?.id ?? group.options[0]?.key ?? "ungrouped";
75
+ menuItems.push(
76
+ <Divider key={`divider-before-${dividerKey}`} component="li" />,
77
+ );
78
+ }
79
+
80
+ const items = group.options.map((option) => (
81
+ <DropdownItem
82
+ key={option.key}
83
+ isDisabled={option.isDisabled}
84
+ description={option.description}
85
+ onClick={option.onSelect}
86
+ >
87
+ {option.label}
88
+ </DropdownItem>
89
+ ));
90
+
91
+ if (group.section) {
92
+ menuItems.push(
93
+ <DropdownGroup key={group.section.id} label={group.section.label}>
94
+ {items}
95
+ </DropdownGroup>,
96
+ );
97
+ } else {
98
+ menuItems.push(...items);
99
+ }
100
+ });
101
+
38
102
  return (
39
103
  <Dropdown
40
104
  isOpen={isDropdownOpen}
@@ -70,18 +134,7 @@ export const ReportExportMenu: FC<ReportExportMenuProps> = ({
70
134
  </MenuToggle>
71
135
  )}
72
136
  >
73
- <DropdownList>
74
- {options.map((option) => (
75
- <DropdownItem
76
- key={option.key}
77
- isDisabled={option.isDisabled}
78
- description={option.description}
79
- onClick={option.onSelect}
80
- >
81
- {option.label}
82
- </DropdownItem>
83
- ))}
84
- </DropdownList>
137
+ <DropdownList>{menuItems}</DropdownList>
85
138
  </Dropdown>
86
139
  );
87
140
  };
@@ -94,6 +147,7 @@ export interface ExportReportButtonProps extends StandardReportExportHandlers {
94
147
  loadingLabel?: string | null;
95
148
  isDisabled?: boolean;
96
149
  toggleLabel?: string;
150
+ assessmentSectionLabel?: string;
97
151
  }
98
152
 
99
153
  export const ExportReportButton: FC<ExportReportButtonProps> = ({
@@ -101,6 +155,7 @@ export const ExportReportButton: FC<ExportReportButtonProps> = ({
101
155
  onExportPng,
102
156
  onExportHtml,
103
157
  extraOptions = [],
158
+ assessmentSectionLabel,
104
159
  ...menuProps
105
160
  }) => (
106
161
  <ReportExportMenu
@@ -109,6 +164,7 @@ export const ExportReportButton: FC<ExportReportButtonProps> = ({
109
164
  onExportPdf,
110
165
  onExportPng,
111
166
  onExportHtml,
167
+ assessmentSectionLabel,
112
168
  }),
113
169
  ...extraOptions,
114
170
  ]}