@red-hat-developer-hub/plugin-cost-management 2.2.2 → 2.4.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.
- package/CHANGELOG.md +23 -0
- package/README.md +28 -1
- package/dist/Router.esm.js +16 -10
- package/dist/Router.esm.js.map +1 -1
- package/dist/alpha.d.ts +136 -0
- package/dist/alpha.esm.js +108 -0
- package/dist/alpha.esm.js.map +1 -0
- package/dist/components/BasePage.esm.js +8 -5
- package/dist/components/BasePage.esm.js.map +1 -1
- package/dist/components/InfoCardTitle.esm.js +2 -2
- package/dist/components/InfoCardTitle.esm.js.map +1 -1
- package/dist/components/PageLayout.esm.js +37 -30
- package/dist/components/PageLayout.esm.js.map +1 -1
- package/dist/components/icon/AnalyticsIcon.esm.js +3 -3
- package/dist/components/icon/AnalyticsIcon.esm.js.map +1 -1
- package/dist/components/icon/AnalyticsIconFilled.esm.js +2 -2
- package/dist/components/icon/AnalyticsIconFilled.esm.js.map +1 -1
- package/dist/components/icon/AnalyticsIconOutlined.esm.js +2 -2
- package/dist/components/icon/AnalyticsIconOutlined.esm.js.map +1 -1
- package/dist/components/icon/CostManagementIcon.esm.js +3 -3
- package/dist/components/icon/CostManagementIcon.esm.js.map +1 -1
- package/dist/components/icon/CostManagementIconFilled.esm.js +2 -2
- package/dist/components/icon/CostManagementIconFilled.esm.js.map +1 -1
- package/dist/components/icon/CostManagementIconOutlined.esm.js +2 -2
- package/dist/components/icon/CostManagementIconOutlined.esm.js.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/pages/openshift/OpenShiftPage.esm.js +257 -207
- package/dist/pages/openshift/OpenShiftPage.esm.js.map +1 -1
- package/dist/pages/openshift/components/AutocompleteComponent.esm.js +43 -40
- package/dist/pages/openshift/components/AutocompleteComponent.esm.js.map +1 -1
- package/dist/pages/openshift/components/DownloadIconButton.esm.js +11 -11
- package/dist/pages/openshift/components/DownloadIconButton.esm.js.map +1 -1
- package/dist/pages/openshift/components/Filters.esm.js +178 -161
- package/dist/pages/openshift/components/Filters.esm.js.map +1 -1
- package/dist/pages/openshift/components/PageHeader.esm.js +11 -6
- package/dist/pages/openshift/components/PageHeader.esm.js.map +1 -1
- package/dist/pages/openshift/components/SelectComponent.esm.js +30 -27
- package/dist/pages/openshift/components/SelectComponent.esm.js.map +1 -1
- package/dist/pages/openshift/components/TableToolbar.esm.js +187 -163
- package/dist/pages/openshift/components/TableToolbar.esm.js.map +1 -1
- package/dist/pages/optimizations/OptimizationsPage.esm.js +60 -56
- package/dist/pages/optimizations/OptimizationsPage.esm.js.map +1 -1
- package/dist/pages/optimizations/components/ComboBox.esm.js +37 -33
- package/dist/pages/optimizations/components/ComboBox.esm.js.map +1 -1
- package/dist/pages/optimizations/components/Filters.esm.js +35 -28
- package/dist/pages/optimizations/components/Filters.esm.js.map +1 -1
- package/dist/pages/optimizations/components/TableToolbar.esm.js +3 -2
- package/dist/pages/optimizations/components/TableToolbar.esm.js.map +1 -1
- package/dist/pages/optimizations-breakdown/OptimizationsBreakdownPage.esm.js +51 -45
- package/dist/pages/optimizations-breakdown/OptimizationsBreakdownPage.esm.js.map +1 -1
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/OptimizationEngineTab.esm.js +79 -64
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/OptimizationEngineTab.esm.js.map +1 -1
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/CodeInfoCard.esm.js +4 -3
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/CodeInfoCard.esm.js.map +1 -1
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/ContainerInfoCard.esm.js +28 -20
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/ContainerInfoCard.esm.js.map +1 -1
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/ChartInfoCard.esm.js +4 -3
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/ChartInfoCard.esm.js.map +1 -1
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/IntlBreakdownChart.esm.js +3 -3
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/IntlBreakdownChart.esm.js.map +1 -1
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/intl-breakdown-chart/components/optimizations-breakdown-chart/components/optimizations-breakdown-chart/OptimizationsBreakdownChart.esm.js +29 -26
- package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/intl-breakdown-chart/components/optimizations-breakdown-chart/components/optimizations-breakdown-chart/OptimizationsBreakdownChart.esm.js.map +1 -1
- package/package.json +31 -14
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { makeStyles } from '@material-ui/core/styles';
|
|
3
3
|
import Box from '@material-ui/core/Box';
|
|
4
4
|
import Typography from '@material-ui/core/Typography';
|
|
@@ -33,35 +33,38 @@ function SelectComponent(props) {
|
|
|
33
33
|
multiple = false,
|
|
34
34
|
placeholder
|
|
35
35
|
} = props;
|
|
36
|
-
return /* @__PURE__ */
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
variant: "outlined",
|
|
41
|
-
hiddenLabel: true,
|
|
42
|
-
style: { backgroundColor }
|
|
43
|
-
},
|
|
44
|
-
/* @__PURE__ */ React.createElement(
|
|
45
|
-
Select,
|
|
36
|
+
return /* @__PURE__ */ jsxs(Box, { className: classes.root, pb: 1, pt: 1, children: [
|
|
37
|
+
/* @__PURE__ */ jsx(Typography, { className: classes.label, variant: "button", component: "label", children: label }),
|
|
38
|
+
/* @__PURE__ */ jsx(
|
|
39
|
+
FormControl,
|
|
46
40
|
{
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
41
|
+
className: classes.formControl,
|
|
42
|
+
variant: "outlined",
|
|
43
|
+
hiddenLabel: true,
|
|
44
|
+
style: { backgroundColor },
|
|
45
|
+
children: /* @__PURE__ */ jsx(
|
|
46
|
+
Select,
|
|
47
|
+
{
|
|
48
|
+
displayEmpty: true,
|
|
49
|
+
value: value || "",
|
|
50
|
+
onChange,
|
|
51
|
+
multiple,
|
|
52
|
+
IconComponent: ExpandMoreIcon,
|
|
53
|
+
renderValue: (selected) => {
|
|
54
|
+
if (!selected || Array.isArray(selected) && selected.length === 0) {
|
|
55
|
+
return /* @__PURE__ */ jsx(Typography, { style: { color: "#999" }, children: placeholder || "Select an option" });
|
|
56
|
+
}
|
|
57
|
+
if (Array.isArray(selected)) {
|
|
58
|
+
return selected.join(", ");
|
|
59
|
+
}
|
|
60
|
+
return selected;
|
|
61
|
+
},
|
|
62
|
+
children: options.map((option) => /* @__PURE__ */ jsx(MenuItem, { value: option, children: option }, option))
|
|
55
63
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
return selected;
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
options.map((option) => /* @__PURE__ */ React.createElement(MenuItem, { key: option, value: option }, option))
|
|
64
|
+
)
|
|
65
|
+
}
|
|
63
66
|
)
|
|
64
|
-
)
|
|
67
|
+
] });
|
|
65
68
|
}
|
|
66
69
|
|
|
67
70
|
export { SelectComponent };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectComponent.esm.js","sources":["../../../../src/pages/openshift/components/SelectComponent.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Box from '@material-ui/core/Box';\nimport Typography from '@material-ui/core/Typography';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { useThemeBackgroundColor } from '../../../hooks/useThemeBackgroundColor';\n\nconst useSelectStyles = makeStyles(\n {\n root: { paddingTop: 0, paddingBottom: 0 },\n label: { textTransform: 'none', fontWeight: 'bold' },\n formControl: {\n width: '100%',\n marginTop: 5,\n backgroundColor: 'transparent',\n },\n },\n {\n name: 'Select',\n },\n);\n\ntype SelectProps = {\n label: string;\n options: string[];\n value?: string;\n onChange?: (event: React.ChangeEvent<{ value: unknown }>) => void;\n multiple?: boolean;\n freeSolo?: boolean;\n selectOnFocus?: boolean;\n clearOnBlur?: boolean;\n handleHomeEndKeys?: boolean;\n filterSelectedOptions?: boolean;\n placeholder?: string;\n};\n\n/** @public */\nexport function SelectComponent(props: SelectProps) {\n const classes = useSelectStyles();\n const { backgroundColor } = useThemeBackgroundColor();\n const {\n label,\n options,\n value,\n onChange,\n multiple = false,\n placeholder,\n } = props;\n\n return (\n <Box className={classes.root} pb={1} pt={1}>\n <Typography className={classes.label} variant=\"button\" component=\"label\">\n {label}\n </Typography>\n <FormControl\n className={classes.formControl}\n variant=\"outlined\"\n hiddenLabel\n style={{ backgroundColor }}\n >\n <Select\n displayEmpty\n value={value || ''}\n onChange={onChange}\n multiple={multiple}\n IconComponent={ExpandMoreIcon}\n renderValue={(selected): React.ReactNode => {\n if (\n !selected ||\n (Array.isArray(selected) && selected.length === 0)\n ) {\n return (\n <Typography style={{ color: '#999' }}>\n {placeholder || 'Select an option'}\n </Typography>\n );\n }\n if (Array.isArray(selected)) {\n return selected.join(', ');\n }\n return selected as React.ReactNode;\n }}\n >\n {options.map(option => (\n <MenuItem key={option} value={option}>\n {option}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AA0BA,MAAM,eAAA,GAAkB,UAAA;AAAA,EACtB;AAAA,IACE,IAAA,EAAM,EAAE,UAAA,EAAY,CAAA,EAAG,eAAe,CAAA,EAAE;AAAA,IACxC,KAAA,EAAO,EAAE,aAAA,EAAe,MAAA,EAAQ,YAAY,MAAA,EAAO;AAAA,IACnD,WAAA,EAAa;AAAA,MACX,KAAA,EAAO,MAAA;AAAA,MACP,SAAA,EAAW,CAAA;AAAA,MACX,eAAA,EAAiB;AAAA;AACnB,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM;AAAA;AAEV,CAAA;AAiBO,SAAS,gBAAgB,KAAA,EAAoB;AAClD,EAAA,MAAM,UAAU,eAAA,EAAgB;AAChC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,uBAAA,EAAwB;AACpD,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,
|
|
1
|
+
{"version":3,"file":"SelectComponent.esm.js","sources":["../../../../src/pages/openshift/components/SelectComponent.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { default as React } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Box from '@material-ui/core/Box';\nimport Typography from '@material-ui/core/Typography';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { useThemeBackgroundColor } from '../../../hooks/useThemeBackgroundColor';\n\nconst useSelectStyles = makeStyles(\n {\n root: { paddingTop: 0, paddingBottom: 0 },\n label: { textTransform: 'none', fontWeight: 'bold' },\n formControl: {\n width: '100%',\n marginTop: 5,\n backgroundColor: 'transparent',\n },\n },\n {\n name: 'Select',\n },\n);\n\ntype SelectProps = {\n label: string;\n options: string[];\n value?: string;\n onChange?: (event: React.ChangeEvent<{ value: unknown }>) => void;\n multiple?: boolean;\n freeSolo?: boolean;\n selectOnFocus?: boolean;\n clearOnBlur?: boolean;\n handleHomeEndKeys?: boolean;\n filterSelectedOptions?: boolean;\n placeholder?: string;\n};\n\n/** @public */\nexport function SelectComponent(props: SelectProps) {\n const classes = useSelectStyles();\n const { backgroundColor } = useThemeBackgroundColor();\n const {\n label,\n options,\n value,\n onChange,\n multiple = false,\n placeholder,\n } = props;\n\n return (\n <Box className={classes.root} pb={1} pt={1}>\n <Typography className={classes.label} variant=\"button\" component=\"label\">\n {label}\n </Typography>\n <FormControl\n className={classes.formControl}\n variant=\"outlined\"\n hiddenLabel\n style={{ backgroundColor }}\n >\n <Select\n displayEmpty\n value={value || ''}\n onChange={onChange}\n multiple={multiple}\n IconComponent={ExpandMoreIcon}\n renderValue={(selected): React.ReactNode => {\n if (\n !selected ||\n (Array.isArray(selected) && selected.length === 0)\n ) {\n return (\n <Typography style={{ color: '#999' }}>\n {placeholder || 'Select an option'}\n </Typography>\n );\n }\n if (Array.isArray(selected)) {\n return selected.join(', ');\n }\n return selected as React.ReactNode;\n }}\n >\n {options.map(option => (\n <MenuItem key={option} value={option}>\n {option}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AA0BA,MAAM,eAAA,GAAkB,UAAA;AAAA,EACtB;AAAA,IACE,IAAA,EAAM,EAAE,UAAA,EAAY,CAAA,EAAG,eAAe,CAAA,EAAE;AAAA,IACxC,KAAA,EAAO,EAAE,aAAA,EAAe,MAAA,EAAQ,YAAY,MAAA,EAAO;AAAA,IACnD,WAAA,EAAa;AAAA,MACX,KAAA,EAAO,MAAA;AAAA,MACP,SAAA,EAAW,CAAA;AAAA,MACX,eAAA,EAAiB;AAAA;AACnB,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM;AAAA;AAEV,CAAA;AAiBO,SAAS,gBAAgB,KAAA,EAAoB;AAClD,EAAA,MAAM,UAAU,eAAA,EAAgB;AAChC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,uBAAA,EAAwB;AACpD,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,uBACE,IAAA,CAAC,OAAI,SAAA,EAAW,OAAA,CAAQ,MAAM,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EACvC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,WAAW,OAAA,CAAQ,KAAA,EAAO,SAAQ,QAAA,EAAS,SAAA,EAAU,SAC9D,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,WAAW,OAAA,CAAQ,WAAA;AAAA,QACnB,OAAA,EAAQ,UAAA;AAAA,QACR,WAAA,EAAW,IAAA;AAAA,QACX,KAAA,EAAO,EAAE,eAAA,EAAgB;AAAA,QAEzB,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAY,IAAA;AAAA,YACZ,OAAO,KAAA,IAAS,EAAA;AAAA,YAChB,QAAA;AAAA,YACA,QAAA;AAAA,YACA,aAAA,EAAe,cAAA;AAAA,YACf,WAAA,EAAa,CAAC,QAAA,KAA8B;AAC1C,cAAA,IACE,CAAC,YACA,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,EAChD;AACA,gBAAA,uBACE,GAAA,CAAC,cAAW,KAAA,EAAO,EAAE,OAAO,MAAA,EAAO,EAChC,yBAAe,kBAAA,EAClB,CAAA;AAAA,cAEJ;AACA,cAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,gBAAA,OAAO,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,cAC3B;AACA,cAAA,OAAO,QAAA;AAAA,YACT,CAAA;AAAA,YAEC,QAAA,EAAA,OAAA,CAAQ,IAAI,CAAA,MAAA,qBACX,GAAA,CAAC,YAAsB,KAAA,EAAO,MAAA,EAC3B,QAAA,EAAA,MAAA,EAAA,EADY,MAEf,CACD;AAAA;AAAA;AACH;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
2
3
|
import { Switch, IconButton, Menu, Box, MenuItem, FormControlLabel, Checkbox } from '@material-ui/core';
|
|
3
4
|
import Typography from '@material-ui/core/Typography';
|
|
4
5
|
import { makeStyles } from '@material-ui/core/styles';
|
|
@@ -65,183 +66,206 @@ function TableToolbar(props) {
|
|
|
65
66
|
};
|
|
66
67
|
return titleMap[groupByValue] || "Projects";
|
|
67
68
|
};
|
|
68
|
-
return /* @__PURE__ */
|
|
69
|
+
return /* @__PURE__ */ jsxs(
|
|
69
70
|
"div",
|
|
70
71
|
{
|
|
71
72
|
style: {
|
|
72
73
|
display: "flex",
|
|
73
74
|
alignItems: "center",
|
|
74
75
|
justifyContent: "space-between"
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
/* @__PURE__ */ React.createElement(
|
|
78
|
-
"div",
|
|
79
|
-
{
|
|
80
|
-
style: {
|
|
81
|
-
display: "flex",
|
|
82
|
-
alignItems: "center",
|
|
83
|
-
gap: "16px",
|
|
84
|
-
marginBottom: 48
|
|
85
|
-
}
|
|
86
76
|
},
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
{
|
|
91
|
-
style: {
|
|
92
|
-
display: "flex",
|
|
93
|
-
alignItems: "center",
|
|
94
|
-
gap: "8px"
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
/* @__PURE__ */ React.createElement(
|
|
98
|
-
Switch,
|
|
77
|
+
children: [
|
|
78
|
+
/* @__PURE__ */ jsxs(
|
|
79
|
+
"div",
|
|
99
80
|
{
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
81
|
+
style: {
|
|
82
|
+
display: "flex",
|
|
83
|
+
alignItems: "center",
|
|
84
|
+
gap: "16px",
|
|
85
|
+
marginBottom: 48
|
|
86
|
+
},
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "h2", style: { fontWeight: "bold" }, children: [
|
|
89
|
+
getTableTitle(groupBy),
|
|
90
|
+
" (",
|
|
91
|
+
projectsCount,
|
|
92
|
+
")"
|
|
93
|
+
] }),
|
|
94
|
+
groupBy === "project" && /* @__PURE__ */ jsxs(
|
|
95
|
+
"div",
|
|
96
|
+
{
|
|
97
|
+
style: {
|
|
98
|
+
display: "flex",
|
|
99
|
+
alignItems: "center",
|
|
100
|
+
gap: "8px"
|
|
101
|
+
},
|
|
102
|
+
children: [
|
|
103
|
+
/* @__PURE__ */ jsx(
|
|
104
|
+
Switch,
|
|
105
|
+
{
|
|
106
|
+
checked: showPlatformSum,
|
|
107
|
+
onChange: (e) => setShowPlatformSum(e.target.checked),
|
|
108
|
+
className: classes.switchOff
|
|
109
|
+
}
|
|
110
|
+
),
|
|
111
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", style: { color: "#6A6E73" }, children: "Sum platform costs" })
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
/* @__PURE__ */ jsx(
|
|
116
|
+
DownloadIconButton,
|
|
117
|
+
{
|
|
118
|
+
label: "CSV",
|
|
119
|
+
variant: "gray",
|
|
120
|
+
onClick: onDownloadCsv,
|
|
121
|
+
disabled: isDownloading
|
|
122
|
+
}
|
|
123
|
+
),
|
|
124
|
+
/* @__PURE__ */ jsx(
|
|
125
|
+
DownloadIconButton,
|
|
126
|
+
{
|
|
127
|
+
label: "JSON",
|
|
128
|
+
variant: "gray",
|
|
129
|
+
onClick: onDownloadJson,
|
|
130
|
+
disabled: isDownloading
|
|
131
|
+
}
|
|
132
|
+
)
|
|
133
|
+
]
|
|
103
134
|
}
|
|
104
135
|
),
|
|
105
|
-
/* @__PURE__ */
|
|
106
|
-
|
|
107
|
-
/* @__PURE__ */ React.createElement(
|
|
108
|
-
DownloadIconButton,
|
|
109
|
-
{
|
|
110
|
-
label: "CSV",
|
|
111
|
-
variant: "gray",
|
|
112
|
-
onClick: onDownloadCsv,
|
|
113
|
-
disabled: isDownloading
|
|
114
|
-
}
|
|
115
|
-
),
|
|
116
|
-
/* @__PURE__ */ React.createElement(
|
|
117
|
-
DownloadIconButton,
|
|
118
|
-
{
|
|
119
|
-
label: "JSON",
|
|
120
|
-
variant: "gray",
|
|
121
|
-
onClick: onDownloadJson,
|
|
122
|
-
disabled: isDownloading
|
|
123
|
-
}
|
|
124
|
-
)
|
|
125
|
-
),
|
|
126
|
-
/* @__PURE__ */ React.createElement(
|
|
127
|
-
IconButton,
|
|
128
|
-
{
|
|
129
|
-
"aria-label": "menu",
|
|
130
|
-
style: { color: "#6A6E73", padding: "8px" },
|
|
131
|
-
onClick: handleMenuOpen
|
|
132
|
-
},
|
|
133
|
-
/* @__PURE__ */ React.createElement(ViewWeekIcon, null)
|
|
134
|
-
),
|
|
135
|
-
/* @__PURE__ */ React.createElement(
|
|
136
|
-
Menu,
|
|
137
|
-
{
|
|
138
|
-
anchorEl,
|
|
139
|
-
open: Boolean(anchorEl),
|
|
140
|
-
onClose: handleMenuClose,
|
|
141
|
-
anchorOrigin: {
|
|
142
|
-
vertical: "bottom",
|
|
143
|
-
horizontal: "right"
|
|
144
|
-
},
|
|
145
|
-
transformOrigin: {
|
|
146
|
-
vertical: "top",
|
|
147
|
-
horizontal: "right"
|
|
148
|
-
},
|
|
149
|
-
PaperProps: {
|
|
150
|
-
style: {
|
|
151
|
-
minWidth: "300px",
|
|
152
|
-
padding: "8px 0"
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
},
|
|
156
|
-
/* @__PURE__ */ React.createElement(Box, { px: 2, py: 1 }, /* @__PURE__ */ React.createElement(Typography, { variant: "subtitle2", style: { fontWeight: "bold" } }, "Add or remove columns")),
|
|
157
|
-
/* @__PURE__ */ React.createElement(
|
|
158
|
-
MenuItem,
|
|
159
|
-
{
|
|
160
|
-
className: classes.menuItem,
|
|
161
|
-
onClick: (e) => {
|
|
162
|
-
e.stopPropagation();
|
|
163
|
-
setShowMonthOverMonthChange(!showMonthOverMonthChange);
|
|
164
|
-
}
|
|
165
|
-
},
|
|
166
|
-
/* @__PURE__ */ React.createElement(
|
|
167
|
-
FormControlLabel,
|
|
168
|
-
{
|
|
169
|
-
className: classes.menuItemLabel,
|
|
170
|
-
control: /* @__PURE__ */ React.createElement(
|
|
171
|
-
Checkbox,
|
|
172
|
-
{
|
|
173
|
-
checked: showMonthOverMonthChange,
|
|
174
|
-
onChange: (e) => {
|
|
175
|
-
e.stopPropagation();
|
|
176
|
-
setShowMonthOverMonthChange(e.target.checked);
|
|
177
|
-
},
|
|
178
|
-
onClick: (e) => e.stopPropagation()
|
|
179
|
-
}
|
|
180
|
-
),
|
|
181
|
-
label: "Month over month change",
|
|
182
|
-
onClick: (e) => e.stopPropagation()
|
|
183
|
-
}
|
|
184
|
-
)
|
|
185
|
-
),
|
|
186
|
-
/* @__PURE__ */ React.createElement(
|
|
187
|
-
MenuItem,
|
|
188
|
-
{
|
|
189
|
-
className: classes.menuItem,
|
|
190
|
-
onClick: (e) => {
|
|
191
|
-
e.stopPropagation();
|
|
192
|
-
setShowInfrastructureCost(!showInfrastructureCost);
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
/* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(
|
|
196
|
-
FormControlLabel,
|
|
136
|
+
/* @__PURE__ */ jsx(
|
|
137
|
+
IconButton,
|
|
197
138
|
{
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
checked: showInfrastructureCost,
|
|
203
|
-
onChange: (e) => {
|
|
204
|
-
e.stopPropagation();
|
|
205
|
-
setShowInfrastructureCost(e.target.checked);
|
|
206
|
-
},
|
|
207
|
-
onClick: (e) => e.stopPropagation()
|
|
208
|
-
}
|
|
209
|
-
),
|
|
210
|
-
label: "Infrastructure cost",
|
|
211
|
-
onClick: (e) => e.stopPropagation()
|
|
139
|
+
"aria-label": "menu",
|
|
140
|
+
style: { color: "#6A6E73", padding: "8px" },
|
|
141
|
+
onClick: handleMenuOpen,
|
|
142
|
+
children: /* @__PURE__ */ jsx(ViewWeekIcon, {})
|
|
212
143
|
}
|
|
213
|
-
),
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
MenuItem,
|
|
217
|
-
{
|
|
218
|
-
className: classes.menuItem,
|
|
219
|
-
onClick: (e) => {
|
|
220
|
-
e.stopPropagation();
|
|
221
|
-
setShowSupplementaryCost(!showSupplementaryCost);
|
|
222
|
-
}
|
|
223
|
-
},
|
|
224
|
-
/* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(
|
|
225
|
-
FormControlLabel,
|
|
144
|
+
),
|
|
145
|
+
/* @__PURE__ */ jsxs(
|
|
146
|
+
Menu,
|
|
226
147
|
{
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
148
|
+
anchorEl,
|
|
149
|
+
open: Boolean(anchorEl),
|
|
150
|
+
onClose: handleMenuClose,
|
|
151
|
+
anchorOrigin: {
|
|
152
|
+
vertical: "bottom",
|
|
153
|
+
horizontal: "right"
|
|
154
|
+
},
|
|
155
|
+
transformOrigin: {
|
|
156
|
+
vertical: "top",
|
|
157
|
+
horizontal: "right"
|
|
158
|
+
},
|
|
159
|
+
PaperProps: {
|
|
160
|
+
style: {
|
|
161
|
+
minWidth: "300px",
|
|
162
|
+
padding: "8px 0"
|
|
237
163
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
164
|
+
},
|
|
165
|
+
children: [
|
|
166
|
+
/* @__PURE__ */ jsx(Box, { px: 2, py: 1, children: /* @__PURE__ */ jsx(Typography, { variant: "subtitle2", style: { fontWeight: "bold" }, children: "Add or remove columns" }) }),
|
|
167
|
+
/* @__PURE__ */ jsx(
|
|
168
|
+
MenuItem,
|
|
169
|
+
{
|
|
170
|
+
className: classes.menuItem,
|
|
171
|
+
onClick: (e) => {
|
|
172
|
+
e.stopPropagation();
|
|
173
|
+
setShowMonthOverMonthChange(!showMonthOverMonthChange);
|
|
174
|
+
},
|
|
175
|
+
children: /* @__PURE__ */ jsx(
|
|
176
|
+
FormControlLabel,
|
|
177
|
+
{
|
|
178
|
+
className: classes.menuItemLabel,
|
|
179
|
+
control: /* @__PURE__ */ jsx(
|
|
180
|
+
Checkbox,
|
|
181
|
+
{
|
|
182
|
+
checked: showMonthOverMonthChange,
|
|
183
|
+
onChange: (e) => {
|
|
184
|
+
e.stopPropagation();
|
|
185
|
+
setShowMonthOverMonthChange(e.target.checked);
|
|
186
|
+
},
|
|
187
|
+
onClick: (e) => e.stopPropagation()
|
|
188
|
+
}
|
|
189
|
+
),
|
|
190
|
+
label: "Month over month change",
|
|
191
|
+
onClick: (e) => e.stopPropagation()
|
|
192
|
+
}
|
|
193
|
+
)
|
|
194
|
+
}
|
|
195
|
+
),
|
|
196
|
+
/* @__PURE__ */ jsx(
|
|
197
|
+
MenuItem,
|
|
198
|
+
{
|
|
199
|
+
className: classes.menuItem,
|
|
200
|
+
onClick: (e) => {
|
|
201
|
+
e.stopPropagation();
|
|
202
|
+
setShowInfrastructureCost(!showInfrastructureCost);
|
|
203
|
+
},
|
|
204
|
+
children: /* @__PURE__ */ jsxs(Box, { children: [
|
|
205
|
+
/* @__PURE__ */ jsx(
|
|
206
|
+
FormControlLabel,
|
|
207
|
+
{
|
|
208
|
+
className: classes.menuItemLabel,
|
|
209
|
+
control: /* @__PURE__ */ jsx(
|
|
210
|
+
Checkbox,
|
|
211
|
+
{
|
|
212
|
+
checked: showInfrastructureCost,
|
|
213
|
+
onChange: (e) => {
|
|
214
|
+
e.stopPropagation();
|
|
215
|
+
setShowInfrastructureCost(e.target.checked);
|
|
216
|
+
},
|
|
217
|
+
onClick: (e) => e.stopPropagation()
|
|
218
|
+
}
|
|
219
|
+
),
|
|
220
|
+
label: "Infrastructure cost",
|
|
221
|
+
onClick: (e) => e.stopPropagation()
|
|
222
|
+
}
|
|
223
|
+
),
|
|
224
|
+
/* @__PURE__ */ jsx(Typography, { className: classes.menuItemDescription, children: "The cost based on raw usage data from the underlying infrastructure." })
|
|
225
|
+
] })
|
|
226
|
+
}
|
|
227
|
+
),
|
|
228
|
+
/* @__PURE__ */ jsx(
|
|
229
|
+
MenuItem,
|
|
230
|
+
{
|
|
231
|
+
className: classes.menuItem,
|
|
232
|
+
onClick: (e) => {
|
|
233
|
+
e.stopPropagation();
|
|
234
|
+
setShowSupplementaryCost(!showSupplementaryCost);
|
|
235
|
+
},
|
|
236
|
+
children: /* @__PURE__ */ jsxs(Box, { children: [
|
|
237
|
+
/* @__PURE__ */ jsx(
|
|
238
|
+
FormControlLabel,
|
|
239
|
+
{
|
|
240
|
+
className: classes.menuItemLabel,
|
|
241
|
+
control: /* @__PURE__ */ jsx(
|
|
242
|
+
Checkbox,
|
|
243
|
+
{
|
|
244
|
+
checked: showSupplementaryCost,
|
|
245
|
+
onChange: (e) => {
|
|
246
|
+
e.stopPropagation();
|
|
247
|
+
setShowSupplementaryCost(e.target.checked);
|
|
248
|
+
},
|
|
249
|
+
onClick: (e) => e.stopPropagation()
|
|
250
|
+
}
|
|
251
|
+
),
|
|
252
|
+
label: "Supplementary cost",
|
|
253
|
+
onClick: (e) => e.stopPropagation()
|
|
254
|
+
}
|
|
255
|
+
),
|
|
256
|
+
/* @__PURE__ */ jsxs(Typography, { className: classes.menuItemDescription, children: [
|
|
257
|
+
"All costs not directly attributed to the infrastructure.",
|
|
258
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
259
|
+
"These costs are determined by applying a price list within a cost model to OpenShift cluster metrics."
|
|
260
|
+
] })
|
|
261
|
+
] })
|
|
262
|
+
}
|
|
263
|
+
)
|
|
264
|
+
]
|
|
241
265
|
}
|
|
242
|
-
)
|
|
243
|
-
|
|
244
|
-
|
|
266
|
+
)
|
|
267
|
+
]
|
|
268
|
+
}
|
|
245
269
|
);
|
|
246
270
|
}
|
|
247
271
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableToolbar.esm.js","sources":["../../../../src/pages/openshift/components/TableToolbar.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useState } from 'react';\nimport {\n Switch,\n IconButton,\n Menu,\n MenuItem,\n Checkbox,\n FormControlLabel,\n Box,\n} from '@material-ui/core';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ViewWeekIcon from '@material-ui/icons/ViewWeek';\nimport { DownloadIconButton } from './DownloadIconButton';\n\nconst useStyles = makeStyles({\n switchOff: {\n '& .MuiSwitch-thumb': {\n backgroundColor: '#6A6E73',\n },\n '& .MuiSwitch-track': {\n backgroundColor: '#6A6E73',\n },\n },\n menuItem: {\n padding: '12px 16px',\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n menuItemLabel: {\n marginLeft: 0,\n marginRight: 0,\n width: '100%',\n },\n menuItemDescription: {\n fontSize: '0.75rem',\n color: '#6A6E73',\n marginTop: '4px',\n marginLeft: '32px',\n },\n});\n\ntype TableToolbarProps = {\n showPlatformSum: boolean;\n setShowPlatformSum: (showPlatformSum: boolean) => void;\n projectsCount: number;\n groupBy: string;\n showMonthOverMonthChange: boolean;\n setShowMonthOverMonthChange: (show: boolean) => void;\n showInfrastructureCost: boolean;\n setShowInfrastructureCost: (show: boolean) => void;\n showSupplementaryCost: boolean;\n setShowSupplementaryCost: (show: boolean) => void;\n onDownloadCsv?: () => void;\n onDownloadJson?: () => void;\n isDownloading?: boolean;\n};\n\n/** @public */\nexport function TableToolbar(props: TableToolbarProps) {\n const {\n showPlatformSum,\n setShowPlatformSum,\n projectsCount,\n groupBy,\n showMonthOverMonthChange,\n setShowMonthOverMonthChange,\n showInfrastructureCost,\n setShowInfrastructureCost,\n showSupplementaryCost,\n setShowSupplementaryCost,\n onDownloadCsv,\n onDownloadJson,\n isDownloading,\n } = props;\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n\n const handleMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n const getTableTitle = (groupByValue: string): string => {\n const titleMap: Record<string, string> = {\n project: 'Projects',\n cluster: 'Clusters',\n node: 'Nodes',\n tag: 'Tags',\n };\n return titleMap[groupByValue] || 'Projects';\n };\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n marginBottom: 48,\n }}\n >\n <Typography variant=\"h2\" style={{ fontWeight: 'bold' }}>\n {getTableTitle(groupBy)} ({projectsCount})\n </Typography>\n\n {groupBy === 'project' && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <Switch\n checked={showPlatformSum}\n onChange={e => setShowPlatformSum(e.target.checked)}\n className={classes.switchOff}\n />\n <Typography variant=\"body2\" style={{ color: '#6A6E73' }}>\n Sum platform costs\n </Typography>\n </div>\n )}\n\n <DownloadIconButton\n label=\"CSV\"\n variant=\"gray\"\n onClick={onDownloadCsv}\n disabled={isDownloading}\n />\n <DownloadIconButton\n label=\"JSON\"\n variant=\"gray\"\n onClick={onDownloadJson}\n disabled={isDownloading}\n />\n </div>\n <IconButton\n aria-label=\"menu\"\n style={{ color: '#6A6E73', padding: '8px' }}\n onClick={handleMenuOpen}\n >\n <ViewWeekIcon />\n </IconButton>\n <Menu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={handleMenuClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n PaperProps={{\n style: {\n minWidth: '300px',\n padding: '8px 0',\n },\n }}\n >\n <Box px={2} py={1}>\n <Typography variant=\"subtitle2\" style={{ fontWeight: 'bold' }}>\n Add or remove columns\n </Typography>\n </Box>\n <MenuItem\n className={classes.menuItem}\n onClick={e => {\n e.stopPropagation();\n setShowMonthOverMonthChange(!showMonthOverMonthChange);\n }}\n >\n <FormControlLabel\n className={classes.menuItemLabel}\n control={\n <Checkbox\n checked={showMonthOverMonthChange}\n onChange={e => {\n e.stopPropagation();\n setShowMonthOverMonthChange(e.target.checked);\n }}\n onClick={e => e.stopPropagation()}\n />\n }\n label=\"Month over month change\"\n onClick={e => e.stopPropagation()}\n />\n </MenuItem>\n <MenuItem\n className={classes.menuItem}\n onClick={e => {\n e.stopPropagation();\n setShowInfrastructureCost(!showInfrastructureCost);\n }}\n >\n <Box>\n <FormControlLabel\n className={classes.menuItemLabel}\n control={\n <Checkbox\n checked={showInfrastructureCost}\n onChange={e => {\n e.stopPropagation();\n setShowInfrastructureCost(e.target.checked);\n }}\n onClick={e => e.stopPropagation()}\n />\n }\n label=\"Infrastructure cost\"\n onClick={e => e.stopPropagation()}\n />\n <Typography className={classes.menuItemDescription}>\n The cost based on raw usage data from the underlying\n infrastructure.\n </Typography>\n </Box>\n </MenuItem>\n <MenuItem\n className={classes.menuItem}\n onClick={e => {\n e.stopPropagation();\n setShowSupplementaryCost(!showSupplementaryCost);\n }}\n >\n <Box>\n <FormControlLabel\n className={classes.menuItemLabel}\n control={\n <Checkbox\n checked={showSupplementaryCost}\n onChange={e => {\n e.stopPropagation();\n setShowSupplementaryCost(e.target.checked);\n }}\n onClick={e => e.stopPropagation()}\n />\n }\n label=\"Supplementary cost\"\n onClick={e => e.stopPropagation()}\n />\n <Typography className={classes.menuItemDescription}>\n All costs not directly attributed to the infrastructure.\n <br />\n These costs are determined by applying a price list within a cost\n model to OpenShift cluster metrics.\n </Typography>\n </Box>\n </MenuItem>\n </Menu>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableToolbar.esm.js","sources":["../../../../src/pages/openshift/components/TableToolbar.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { default as React, useState } from 'react';\nimport {\n Switch,\n IconButton,\n Menu,\n MenuItem,\n Checkbox,\n FormControlLabel,\n Box,\n} from '@material-ui/core';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ViewWeekIcon from '@material-ui/icons/ViewWeek';\nimport { DownloadIconButton } from './DownloadIconButton';\n\nconst useStyles = makeStyles({\n switchOff: {\n '& .MuiSwitch-thumb': {\n backgroundColor: '#6A6E73',\n },\n '& .MuiSwitch-track': {\n backgroundColor: '#6A6E73',\n },\n },\n menuItem: {\n padding: '12px 16px',\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n menuItemLabel: {\n marginLeft: 0,\n marginRight: 0,\n width: '100%',\n },\n menuItemDescription: {\n fontSize: '0.75rem',\n color: '#6A6E73',\n marginTop: '4px',\n marginLeft: '32px',\n },\n});\n\ntype TableToolbarProps = {\n showPlatformSum: boolean;\n setShowPlatformSum: (showPlatformSum: boolean) => void;\n projectsCount: number;\n groupBy: string;\n showMonthOverMonthChange: boolean;\n setShowMonthOverMonthChange: (show: boolean) => void;\n showInfrastructureCost: boolean;\n setShowInfrastructureCost: (show: boolean) => void;\n showSupplementaryCost: boolean;\n setShowSupplementaryCost: (show: boolean) => void;\n onDownloadCsv?: () => void;\n onDownloadJson?: () => void;\n isDownloading?: boolean;\n};\n\n/** @public */\nexport function TableToolbar(props: TableToolbarProps) {\n const {\n showPlatformSum,\n setShowPlatformSum,\n projectsCount,\n groupBy,\n showMonthOverMonthChange,\n setShowMonthOverMonthChange,\n showInfrastructureCost,\n setShowInfrastructureCost,\n showSupplementaryCost,\n setShowSupplementaryCost,\n onDownloadCsv,\n onDownloadJson,\n isDownloading,\n } = props;\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n\n const handleMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n const getTableTitle = (groupByValue: string): string => {\n const titleMap: Record<string, string> = {\n project: 'Projects',\n cluster: 'Clusters',\n node: 'Nodes',\n tag: 'Tags',\n };\n return titleMap[groupByValue] || 'Projects';\n };\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n marginBottom: 48,\n }}\n >\n <Typography variant=\"h2\" style={{ fontWeight: 'bold' }}>\n {getTableTitle(groupBy)} ({projectsCount})\n </Typography>\n\n {groupBy === 'project' && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <Switch\n checked={showPlatformSum}\n onChange={e => setShowPlatformSum(e.target.checked)}\n className={classes.switchOff}\n />\n <Typography variant=\"body2\" style={{ color: '#6A6E73' }}>\n Sum platform costs\n </Typography>\n </div>\n )}\n\n <DownloadIconButton\n label=\"CSV\"\n variant=\"gray\"\n onClick={onDownloadCsv}\n disabled={isDownloading}\n />\n <DownloadIconButton\n label=\"JSON\"\n variant=\"gray\"\n onClick={onDownloadJson}\n disabled={isDownloading}\n />\n </div>\n <IconButton\n aria-label=\"menu\"\n style={{ color: '#6A6E73', padding: '8px' }}\n onClick={handleMenuOpen}\n >\n <ViewWeekIcon />\n </IconButton>\n <Menu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={handleMenuClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n PaperProps={{\n style: {\n minWidth: '300px',\n padding: '8px 0',\n },\n }}\n >\n <Box px={2} py={1}>\n <Typography variant=\"subtitle2\" style={{ fontWeight: 'bold' }}>\n Add or remove columns\n </Typography>\n </Box>\n <MenuItem\n className={classes.menuItem}\n onClick={e => {\n e.stopPropagation();\n setShowMonthOverMonthChange(!showMonthOverMonthChange);\n }}\n >\n <FormControlLabel\n className={classes.menuItemLabel}\n control={\n <Checkbox\n checked={showMonthOverMonthChange}\n onChange={e => {\n e.stopPropagation();\n setShowMonthOverMonthChange(e.target.checked);\n }}\n onClick={e => e.stopPropagation()}\n />\n }\n label=\"Month over month change\"\n onClick={e => e.stopPropagation()}\n />\n </MenuItem>\n <MenuItem\n className={classes.menuItem}\n onClick={e => {\n e.stopPropagation();\n setShowInfrastructureCost(!showInfrastructureCost);\n }}\n >\n <Box>\n <FormControlLabel\n className={classes.menuItemLabel}\n control={\n <Checkbox\n checked={showInfrastructureCost}\n onChange={e => {\n e.stopPropagation();\n setShowInfrastructureCost(e.target.checked);\n }}\n onClick={e => e.stopPropagation()}\n />\n }\n label=\"Infrastructure cost\"\n onClick={e => e.stopPropagation()}\n />\n <Typography className={classes.menuItemDescription}>\n The cost based on raw usage data from the underlying\n infrastructure.\n </Typography>\n </Box>\n </MenuItem>\n <MenuItem\n className={classes.menuItem}\n onClick={e => {\n e.stopPropagation();\n setShowSupplementaryCost(!showSupplementaryCost);\n }}\n >\n <Box>\n <FormControlLabel\n className={classes.menuItemLabel}\n control={\n <Checkbox\n checked={showSupplementaryCost}\n onChange={e => {\n e.stopPropagation();\n setShowSupplementaryCost(e.target.checked);\n }}\n onClick={e => e.stopPropagation()}\n />\n }\n label=\"Supplementary cost\"\n onClick={e => e.stopPropagation()}\n />\n <Typography className={classes.menuItemDescription}>\n All costs not directly attributed to the infrastructure.\n <br />\n These costs are determined by applying a price list within a cost\n model to OpenShift cluster metrics.\n </Typography>\n </Box>\n </MenuItem>\n </Menu>\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AA+BA,MAAM,YAAY,UAAA,CAAW;AAAA,EAC3B,SAAA,EAAW;AAAA,IACT,oBAAA,EAAsB;AAAA,MACpB,eAAA,EAAiB;AAAA,KACnB;AAAA,IACA,oBAAA,EAAsB;AAAA,MACpB,eAAA,EAAiB;AAAA;AACnB,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,WAAA;AAAA,IACT,SAAA,EAAW;AAAA,MACT,eAAA,EAAiB;AAAA;AACnB,GACF;AAAA,EACA,aAAA,EAAe;AAAA,IACb,UAAA,EAAY,CAAA;AAAA,IACZ,WAAA,EAAa,CAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,QAAA,EAAU,SAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,SAAA,EAAW,KAAA;AAAA,IACX,UAAA,EAAY;AAAA;AAEhB,CAAC,CAAA;AAmBM,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,MAAM;AAAA,IACJ,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,wBAAA;AAAA,IACA,2BAAA;AAAA,IACA,sBAAA;AAAA,IACA,yBAAA;AAAA,IACA,qBAAA;AAAA,IACA,wBAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AACJ,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAA6B,IAAI,CAAA;AAEjE,EAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,KAAyC;AAC/D,IAAA,WAAA,CAAY,MAAM,aAAa,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,YAAA,KAAiC;AACtD,IAAA,MAAM,QAAA,GAAmC;AAAA,MACvC,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,UAAA;AAAA,MACT,IAAA,EAAM,OAAA;AAAA,MACN,GAAA,EAAK;AAAA,KACP;AACA,IAAA,OAAO,QAAA,CAAS,YAAY,CAAA,IAAK,UAAA;AAAA,EACnC,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB;AAAA,OAClB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,MAAA;AAAA,cACT,UAAA,EAAY,QAAA;AAAA,cACZ,GAAA,EAAK,MAAA;AAAA,cACL,YAAA,EAAc;AAAA,aAChB;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,cAAW,OAAA,EAAQ,IAAA,EAAK,OAAO,EAAE,UAAA,EAAY,QAAO,EAClD,QAAA,EAAA;AAAA,gBAAA,aAAA,CAAc,OAAO,CAAA;AAAA,gBAAE,IAAA;AAAA,gBAAG,aAAA;AAAA,gBAAc;AAAA,eAAA,EAC3C,CAAA;AAAA,cAEC,YAAY,SAAA,oBACX,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO;AAAA,oBACL,OAAA,EAAS,MAAA;AAAA,oBACT,UAAA,EAAY,QAAA;AAAA,oBACZ,GAAA,EAAK;AAAA,mBACP;AAAA,kBAEA,QAAA,EAAA;AAAA,oCAAA,GAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAS,eAAA;AAAA,wBACT,QAAA,EAAU,CAAA,CAAA,KAAK,kBAAA,CAAmB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,wBAClD,WAAW,OAAA,CAAQ;AAAA;AAAA,qBACrB;AAAA,oCACA,GAAA,CAAC,cAAW,OAAA,EAAQ,OAAA,EAAQ,OAAO,EAAE,KAAA,EAAO,SAAA,EAAU,EAAG,QAAA,EAAA,oBAAA,EAEzD;AAAA;AAAA;AAAA,eACF;AAAA,8BAGF,GAAA;AAAA,gBAAC,kBAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAM,KAAA;AAAA,kBACN,OAAA,EAAQ,MAAA;AAAA,kBACR,OAAA,EAAS,aAAA;AAAA,kBACT,QAAA,EAAU;AAAA;AAAA,eACZ;AAAA,8BACA,GAAA;AAAA,gBAAC,kBAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAM,MAAA;AAAA,kBACN,OAAA,EAAQ,MAAA;AAAA,kBACR,OAAA,EAAS,cAAA;AAAA,kBACT,QAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA,SACF;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAW,MAAA;AAAA,YACX,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAW,SAAS,KAAA,EAAM;AAAA,YAC1C,OAAA,EAAS,cAAA;AAAA,YAET,8BAAC,YAAA,EAAA,EAAa;AAAA;AAAA,SAChB;AAAA,wBACA,IAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,QAAA;AAAA,YACA,IAAA,EAAM,QAAQ,QAAQ,CAAA;AAAA,YACtB,OAAA,EAAS,eAAA;AAAA,YACT,YAAA,EAAc;AAAA,cACZ,QAAA,EAAU,QAAA;AAAA,cACV,UAAA,EAAY;AAAA,aACd;AAAA,YACA,eAAA,EAAiB;AAAA,cACf,QAAA,EAAU,KAAA;AAAA,cACV,UAAA,EAAY;AAAA,aACd;AAAA,YACA,UAAA,EAAY;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,OAAA;AAAA,gBACV,OAAA,EAAS;AAAA;AACX,aACF;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,GACd,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,WAAA,EAAY,OAAO,EAAE,UAAA,EAAY,MAAA,EAAO,EAAG,mCAE/D,CAAA,EACF,CAAA;AAAA,8BACA,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,WAAW,OAAA,CAAQ,QAAA;AAAA,kBACnB,SAAS,CAAA,CAAA,KAAK;AACZ,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,oBAAA,2BAAA,CAA4B,CAAC,wBAAwB,CAAA;AAAA,kBACvD,CAAA;AAAA,kBAEA,QAAA,kBAAA,GAAA;AAAA,oBAAC,gBAAA;AAAA,oBAAA;AAAA,sBACC,WAAW,OAAA,CAAQ,aAAA;AAAA,sBACnB,OAAA,kBACE,GAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,OAAA,EAAS,wBAAA;AAAA,0BACT,UAAU,CAAA,CAAA,KAAK;AACb,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,2BAAA,CAA4B,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,0BAC9C,CAAA;AAAA,0BACA,OAAA,EAAS,CAAA,CAAA,KAAK,CAAA,CAAE,eAAA;AAAgB;AAAA,uBAClC;AAAA,sBAEF,KAAA,EAAM,yBAAA;AAAA,sBACN,OAAA,EAAS,CAAA,CAAA,KAAK,CAAA,CAAE,eAAA;AAAgB;AAAA;AAClC;AAAA,eACF;AAAA,8BACA,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,WAAW,OAAA,CAAQ,QAAA;AAAA,kBACnB,SAAS,CAAA,CAAA,KAAK;AACZ,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,oBAAA,yBAAA,CAA0B,CAAC,sBAAsB,CAAA;AAAA,kBACnD,CAAA;AAAA,kBAEA,+BAAC,GAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAA,GAAA;AAAA,sBAAC,gBAAA;AAAA,sBAAA;AAAA,wBACC,WAAW,OAAA,CAAQ,aAAA;AAAA,wBACnB,OAAA,kBACE,GAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BACC,OAAA,EAAS,sBAAA;AAAA,4BACT,UAAU,CAAA,CAAA,KAAK;AACb,8BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,8BAAA,yBAAA,CAA0B,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,4BAC5C,CAAA;AAAA,4BACA,OAAA,EAAS,CAAA,CAAA,KAAK,CAAA,CAAE,eAAA;AAAgB;AAAA,yBAClC;AAAA,wBAEF,KAAA,EAAM,qBAAA;AAAA,wBACN,OAAA,EAAS,CAAA,CAAA,KAAK,CAAA,CAAE,eAAA;AAAgB;AAAA,qBAClC;AAAA,oCACA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,qBAAqB,QAAA,EAAA,sEAAA,EAGpD;AAAA,mBAAA,EACF;AAAA;AAAA,eACF;AAAA,8BACA,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,WAAW,OAAA,CAAQ,QAAA;AAAA,kBACnB,SAAS,CAAA,CAAA,KAAK;AACZ,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,oBAAA,wBAAA,CAAyB,CAAC,qBAAqB,CAAA;AAAA,kBACjD,CAAA;AAAA,kBAEA,+BAAC,GAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAA,GAAA;AAAA,sBAAC,gBAAA;AAAA,sBAAA;AAAA,wBACC,WAAW,OAAA,CAAQ,aAAA;AAAA,wBACnB,OAAA,kBACE,GAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BACC,OAAA,EAAS,qBAAA;AAAA,4BACT,UAAU,CAAA,CAAA,KAAK;AACb,8BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,8BAAA,wBAAA,CAAyB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,4BAC3C,CAAA;AAAA,4BACA,OAAA,EAAS,CAAA,CAAA,KAAK,CAAA,CAAE,eAAA;AAAgB;AAAA,yBAClC;AAAA,wBAEF,KAAA,EAAM,oBAAA;AAAA,wBACN,OAAA,EAAS,CAAA,CAAA,KAAK,CAAA,CAAE,eAAA;AAAgB;AAAA,qBAClC;AAAA,oCACA,IAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,mBAAA,EAAqB,QAAA,EAAA;AAAA,sBAAA,0DAAA;AAAA,0CAEjD,IAAA,EAAA,EAAG,CAAA;AAAA,sBAAE;AAAA,qBAAA,EAGR;AAAA,mBAAA,EACF;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;;;;"}
|