@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.
Files changed (63) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +28 -1
  3. package/dist/Router.esm.js +16 -10
  4. package/dist/Router.esm.js.map +1 -1
  5. package/dist/alpha.d.ts +136 -0
  6. package/dist/alpha.esm.js +108 -0
  7. package/dist/alpha.esm.js.map +1 -0
  8. package/dist/components/BasePage.esm.js +8 -5
  9. package/dist/components/BasePage.esm.js.map +1 -1
  10. package/dist/components/InfoCardTitle.esm.js +2 -2
  11. package/dist/components/InfoCardTitle.esm.js.map +1 -1
  12. package/dist/components/PageLayout.esm.js +37 -30
  13. package/dist/components/PageLayout.esm.js.map +1 -1
  14. package/dist/components/icon/AnalyticsIcon.esm.js +3 -3
  15. package/dist/components/icon/AnalyticsIcon.esm.js.map +1 -1
  16. package/dist/components/icon/AnalyticsIconFilled.esm.js +2 -2
  17. package/dist/components/icon/AnalyticsIconFilled.esm.js.map +1 -1
  18. package/dist/components/icon/AnalyticsIconOutlined.esm.js +2 -2
  19. package/dist/components/icon/AnalyticsIconOutlined.esm.js.map +1 -1
  20. package/dist/components/icon/CostManagementIcon.esm.js +3 -3
  21. package/dist/components/icon/CostManagementIcon.esm.js.map +1 -1
  22. package/dist/components/icon/CostManagementIconFilled.esm.js +2 -2
  23. package/dist/components/icon/CostManagementIconFilled.esm.js.map +1 -1
  24. package/dist/components/icon/CostManagementIconOutlined.esm.js +2 -2
  25. package/dist/components/icon/CostManagementIconOutlined.esm.js.map +1 -1
  26. package/dist/index.d.ts +10 -10
  27. package/dist/pages/openshift/OpenShiftPage.esm.js +257 -207
  28. package/dist/pages/openshift/OpenShiftPage.esm.js.map +1 -1
  29. package/dist/pages/openshift/components/AutocompleteComponent.esm.js +43 -40
  30. package/dist/pages/openshift/components/AutocompleteComponent.esm.js.map +1 -1
  31. package/dist/pages/openshift/components/DownloadIconButton.esm.js +11 -11
  32. package/dist/pages/openshift/components/DownloadIconButton.esm.js.map +1 -1
  33. package/dist/pages/openshift/components/Filters.esm.js +178 -161
  34. package/dist/pages/openshift/components/Filters.esm.js.map +1 -1
  35. package/dist/pages/openshift/components/PageHeader.esm.js +11 -6
  36. package/dist/pages/openshift/components/PageHeader.esm.js.map +1 -1
  37. package/dist/pages/openshift/components/SelectComponent.esm.js +30 -27
  38. package/dist/pages/openshift/components/SelectComponent.esm.js.map +1 -1
  39. package/dist/pages/openshift/components/TableToolbar.esm.js +187 -163
  40. package/dist/pages/openshift/components/TableToolbar.esm.js.map +1 -1
  41. package/dist/pages/optimizations/OptimizationsPage.esm.js +60 -56
  42. package/dist/pages/optimizations/OptimizationsPage.esm.js.map +1 -1
  43. package/dist/pages/optimizations/components/ComboBox.esm.js +37 -33
  44. package/dist/pages/optimizations/components/ComboBox.esm.js.map +1 -1
  45. package/dist/pages/optimizations/components/Filters.esm.js +35 -28
  46. package/dist/pages/optimizations/components/Filters.esm.js.map +1 -1
  47. package/dist/pages/optimizations/components/TableToolbar.esm.js +3 -2
  48. package/dist/pages/optimizations/components/TableToolbar.esm.js.map +1 -1
  49. package/dist/pages/optimizations-breakdown/OptimizationsBreakdownPage.esm.js +51 -45
  50. package/dist/pages/optimizations-breakdown/OptimizationsBreakdownPage.esm.js.map +1 -1
  51. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/OptimizationEngineTab.esm.js +79 -64
  52. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/OptimizationEngineTab.esm.js.map +1 -1
  53. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/CodeInfoCard.esm.js +4 -3
  54. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/CodeInfoCard.esm.js.map +1 -1
  55. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/ContainerInfoCard.esm.js +28 -20
  56. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/ContainerInfoCard.esm.js.map +1 -1
  57. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/ChartInfoCard.esm.js +4 -3
  58. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/ChartInfoCard.esm.js.map +1 -1
  59. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/IntlBreakdownChart.esm.js +3 -3
  60. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/IntlBreakdownChart.esm.js.map +1 -1
  61. 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
  62. 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
  63. package/package.json +31 -14
@@ -1,4 +1,5 @@
1
- import React, { useState, useRef, useMemo, useCallback } from 'react';
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useState, useRef, useMemo, useCallback } from 'react';
2
3
  import { ResponseErrorPanel, InfoCard, Table } from '@backstage/core-components';
3
4
  import Typography from '@material-ui/core/Typography';
4
5
  import { BasePage } from '../../components/BasePage.esm.js';
@@ -9,6 +10,7 @@ import { PageHeader } from './components/PageHeader.esm.js';
9
10
  import { TableToolbar } from './components/TableToolbar.esm.js';
10
11
  import { useApi } from '@backstage/core-plugin-api';
11
12
  import { costManagementSlimApiRef } from '../../apis.esm.js';
13
+ import { usePatternFlyTheme } from '../../hooks/usePatternFlyTheme.esm.js';
12
14
  import useAsync from 'react-use/lib/useAsync';
13
15
  import { CURRENCY_SYMBOLS } from '../../constants/currencies.esm.js';
14
16
  import { DownloadIconButton } from './components/DownloadIconButton.esm.js';
@@ -108,6 +110,7 @@ function buildCostManagementQueryParams(config, options = {}) {
108
110
  return queryParams;
109
111
  }
110
112
  function OpenShiftPage() {
113
+ usePatternFlyTheme();
111
114
  const api = useApi(costManagementSlimApiRef);
112
115
  const [groupBy, setGroupBy] = useState("project");
113
116
  const [overheadDistribution, setOverheadDistribution] = useState("distribute");
@@ -391,7 +394,7 @@ function OpenShiftPage() {
391
394
  };
392
395
  const cols = [
393
396
  {
394
- title: /* @__PURE__ */ React.createElement("div", { style: { marginLeft: 0, paddingLeft: 0 } }, /* @__PURE__ */ React.createElement(
397
+ title: /* @__PURE__ */ jsx("div", { style: { marginLeft: 0, paddingLeft: 0 }, children: /* @__PURE__ */ jsx(
395
398
  "input",
396
399
  {
397
400
  type: "checkbox",
@@ -411,7 +414,7 @@ function OpenShiftPage() {
411
414
  padding: 0
412
415
  }
413
416
  }
414
- )),
417
+ ) }),
415
418
  field: "checkbox",
416
419
  sorting: false,
417
420
  width: "40px",
@@ -423,7 +426,7 @@ function OpenShiftPage() {
423
426
  paddingLeft: "4px",
424
427
  paddingRight: "4px"
425
428
  },
426
- render: (data) => /* @__PURE__ */ React.createElement("div", { style: { paddingRight: "4px" } }, /* @__PURE__ */ React.createElement(
429
+ render: (data) => /* @__PURE__ */ jsx("div", { style: { paddingRight: "4px" }, children: /* @__PURE__ */ jsx(
427
430
  "input",
428
431
  {
429
432
  type: "checkbox",
@@ -437,47 +440,56 @@ function OpenShiftPage() {
437
440
  padding: 0
438
441
  }
439
442
  }
440
- ))
443
+ ) })
441
444
  },
442
445
  {
443
- title: /* @__PURE__ */ React.createElement(Typography, { variant: "body2", style: { fontWeight: "bold" } }, groupBy.charAt(0).toLocaleUpperCase("en-US") + groupBy.slice(1), " ", "name"),
446
+ title: /* @__PURE__ */ jsxs(Typography, { variant: "body2", style: { fontWeight: "bold" }, children: [
447
+ groupBy.charAt(0).toLocaleUpperCase("en-US") + groupBy.slice(1),
448
+ " ",
449
+ "name"
450
+ ] }),
444
451
  field: "projectName",
445
452
  cellStyle: { minWidth: 350 },
446
453
  headerStyle: { minWidth: 350 },
447
- render: (data) => /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(
448
- "div",
449
- {
450
- style: {
451
- display: "flex",
452
- alignItems: "center",
453
- justifyContent: "space-between",
454
- gap: "8px"
454
+ render: (data) => /* @__PURE__ */ jsxs("div", { children: [
455
+ /* @__PURE__ */ jsxs(
456
+ "div",
457
+ {
458
+ style: {
459
+ display: "flex",
460
+ alignItems: "center",
461
+ justifyContent: "space-between",
462
+ gap: "8px"
463
+ },
464
+ children: [
465
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: data.projectName }),
466
+ groupBy === "project" && data.includesOverhead && /* @__PURE__ */ jsx(
467
+ Typography,
468
+ {
469
+ variant: "caption",
470
+ style: {
471
+ padding: "2px 6px",
472
+ backgroundColor: "#F5F5F5",
473
+ border: "1px solid #D2D2D2",
474
+ borderRadius: "16px",
475
+ color: "black",
476
+ whiteSpace: "nowrap"
477
+ },
478
+ children: "Includes overhead"
479
+ }
480
+ )
481
+ ]
455
482
  }
456
- },
457
- /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, data.projectName),
458
- groupBy === "project" && data.includesOverhead && /* @__PURE__ */ React.createElement(
483
+ ),
484
+ groupBy === "cluster" && data.clusterId && /* @__PURE__ */ jsx(
459
485
  Typography,
460
486
  {
461
487
  variant: "caption",
462
- style: {
463
- padding: "2px 6px",
464
- backgroundColor: "#F5F5F5",
465
- border: "1px solid #D2D2D2",
466
- borderRadius: "16px",
467
- color: "black",
468
- whiteSpace: "nowrap"
469
- }
470
- },
471
- "Includes overhead"
488
+ style: { color: "#666", display: "block", marginTop: 10 },
489
+ children: data.clusterId
490
+ }
472
491
  )
473
- ), groupBy === "cluster" && data.clusterId && /* @__PURE__ */ React.createElement(
474
- Typography,
475
- {
476
- variant: "caption",
477
- style: { color: "#666", display: "block", marginTop: 10 }
478
- },
479
- data.clusterId
480
- ))
492
+ ] })
481
493
  }
482
494
  ];
483
495
  if (showMonthOverMonthChange) {
@@ -485,68 +497,99 @@ function OpenShiftPage() {
485
497
  title: "Month over month change",
486
498
  field: "monthOverMonthChange",
487
499
  sorting: false,
488
- render: (data) => /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(
489
- "div",
490
- {
491
- style: {
492
- color: getChangeColor(data.monthOverMonthChange)
500
+ render: (data) => /* @__PURE__ */ jsxs("div", { children: [
501
+ /* @__PURE__ */ jsxs(
502
+ "div",
503
+ {
504
+ style: {
505
+ color: getChangeColor(data.monthOverMonthChange)
506
+ },
507
+ children: [
508
+ Math.abs(data.monthOverMonthChange).toFixed(2),
509
+ "%",
510
+ data.monthOverMonthChange > 0 ? " \u25B2" : " \u25BC"
511
+ ]
493
512
  }
494
- },
495
- Math.abs(data.monthOverMonthChange).toFixed(2),
496
- "%",
497
- data.monthOverMonthChange > 0 ? " \u25B2" : " \u25BC"
498
- ), /* @__PURE__ */ React.createElement("div", { style: { fontSize: "0.75rem", color: "#666" } }, formatCurrency(
499
- data.monthOverMonthValue,
500
- displayData?.currencyCode || ""
501
- ), " ", "for ", getDateRangeText(timeRange)))
513
+ ),
514
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: "0.75rem", color: "#666" }, children: [
515
+ formatCurrency(
516
+ data.monthOverMonthValue,
517
+ displayData?.currencyCode || ""
518
+ ),
519
+ " ",
520
+ "for ",
521
+ getDateRangeText(timeRange)
522
+ ] })
523
+ ] })
502
524
  });
503
525
  }
504
526
  cols.push({
505
527
  title: "Cost",
506
528
  field: "cost",
507
- render: (data) => /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", null, formatCurrency(data.cost, displayData?.currencyCode || "")), /* @__PURE__ */ React.createElement("div", { style: { fontSize: "0.75rem", color: "#666" } }, data.costPercentage.toFixed(2), "% of cost"))
529
+ render: (data) => /* @__PURE__ */ jsxs("div", { children: [
530
+ /* @__PURE__ */ jsx("div", { children: formatCurrency(data.cost, displayData?.currencyCode || "") }),
531
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: "0.75rem", color: "#666" }, children: [
532
+ data.costPercentage.toFixed(2),
533
+ "% of cost"
534
+ ] })
535
+ ] })
508
536
  });
509
537
  if (showInfrastructureCost) {
510
538
  cols.push({
511
539
  title: "Infrastructure cost",
512
540
  field: "infrastructureCost",
513
- render: (data) => /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", null, formatCurrency(
514
- data.infrastructureCost,
515
- displayData?.currencyCode || ""
516
- )), /* @__PURE__ */ React.createElement("div", { style: { fontSize: "0.75rem", color: "#666" } }, data.infrastructureCostPercentage.toFixed(2), "% of cost"))
541
+ render: (data) => /* @__PURE__ */ jsxs("div", { children: [
542
+ /* @__PURE__ */ jsx("div", { children: formatCurrency(
543
+ data.infrastructureCost,
544
+ displayData?.currencyCode || ""
545
+ ) }),
546
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: "0.75rem", color: "#666" }, children: [
547
+ data.infrastructureCostPercentage.toFixed(2),
548
+ "% of cost"
549
+ ] })
550
+ ] })
517
551
  });
518
552
  }
519
553
  if (showSupplementaryCost) {
520
554
  cols.push({
521
555
  title: "Supplementary cost",
522
556
  field: "supplementaryCost",
523
- render: (data) => /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", null, formatCurrency(
524
- data.supplementaryCost,
525
- displayData?.currencyCode || ""
526
- )), /* @__PURE__ */ React.createElement("div", { style: { fontSize: "0.75rem", color: "#666" } }, data.supplementaryCostPercentage.toFixed(2), "% of cost"))
557
+ render: (data) => /* @__PURE__ */ jsxs("div", { children: [
558
+ /* @__PURE__ */ jsx("div", { children: formatCurrency(
559
+ data.supplementaryCost,
560
+ displayData?.currencyCode || ""
561
+ ) }),
562
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: "0.75rem", color: "#666" }, children: [
563
+ data.supplementaryCostPercentage.toFixed(2),
564
+ "% of cost"
565
+ ] })
566
+ ] })
527
567
  });
528
568
  }
529
569
  cols.push({
530
570
  title: "Actions",
531
571
  field: "actions",
532
572
  sorting: false,
533
- render: (data) => /* @__PURE__ */ React.createElement("div", { style: { display: "flex", gap: "8px" } }, /* @__PURE__ */ React.createElement(
534
- DownloadIconButton,
535
- {
536
- label: "CSV",
537
- variant: isDarkMode ? "white" : "black",
538
- onClick: () => handleRowDownload(data.projectName, "csv"),
539
- disabled: isDownloading
540
- }
541
- ), /* @__PURE__ */ React.createElement(
542
- DownloadIconButton,
543
- {
544
- label: "JSON",
545
- variant: isDarkMode ? "white" : "black",
546
- onClick: () => handleRowDownload(data.projectName, "json"),
547
- disabled: isDownloading
548
- }
549
- ))
573
+ render: (data) => /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: "8px" }, children: [
574
+ /* @__PURE__ */ jsx(
575
+ DownloadIconButton,
576
+ {
577
+ label: "CSV",
578
+ variant: isDarkMode ? "white" : "black",
579
+ onClick: () => handleRowDownload(data.projectName, "csv"),
580
+ disabled: isDownloading
581
+ }
582
+ ),
583
+ /* @__PURE__ */ jsx(
584
+ DownloadIconButton,
585
+ {
586
+ label: "JSON",
587
+ variant: isDarkMode ? "white" : "black",
588
+ onClick: () => handleRowDownload(data.projectName, "json"),
589
+ disabled: isDownloading
590
+ }
591
+ )
592
+ ] })
550
593
  });
551
594
  return cols;
552
595
  }, [
@@ -581,145 +624,152 @@ function OpenShiftPage() {
581
624
  [columns]
582
625
  );
583
626
  if (error) {
584
- return /* @__PURE__ */ React.createElement(ResponseErrorPanel, { error });
627
+ return /* @__PURE__ */ jsx(ResponseErrorPanel, { error });
585
628
  }
586
- return /* @__PURE__ */ React.createElement(BasePage, { pageTitle: "", withContentPadding: true }, /* @__PURE__ */ React.createElement(
587
- PageHeader,
588
- {
589
- totalCost: displayData.totalCost,
590
- month: displayData.month,
591
- endDate: displayData.endDate,
592
- currencyCode: displayData.currencyCode,
593
- customStyle: { marginTop: "-24px" }
594
- }
595
- ), /* @__PURE__ */ React.createElement(
596
- Divider,
597
- {
598
- style: {
599
- marginBottom: 24,
600
- marginLeft: "-24px",
601
- marginRight: "-24px",
602
- width: "calc(100% + 48px)"
629
+ return /* @__PURE__ */ jsxs(BasePage, { pageTitle: "", withContentPadding: true, children: [
630
+ /* @__PURE__ */ jsx(
631
+ PageHeader,
632
+ {
633
+ totalCost: displayData.totalCost,
634
+ month: displayData.month,
635
+ endDate: displayData.endDate,
636
+ currencyCode: displayData.currencyCode,
637
+ customStyle: { marginTop: "-24px" }
603
638
  }
604
- }
605
- ), /* @__PURE__ */ React.createElement(PageLayout, null, /* @__PURE__ */ React.createElement(PageLayout.Filters, null, /* @__PURE__ */ React.createElement(
606
- Filters,
607
- {
608
- groupBy,
609
- overheadDistribution,
610
- timeRange,
611
- currency,
612
- filterBy,
613
- filterOperation,
614
- filterValue,
615
- tags,
616
- onGroupByChange: (value) => {
617
- setGroupBy(value);
618
- setCurrentPage(0);
619
- if (value !== "tag") {
620
- setSelectedTag("");
621
- }
622
- if (value !== "project") {
623
- setShowPlatformSum(false);
624
- }
625
- setFilterBy(value);
626
- setFilterValue("");
627
- setSelectedTagKey("");
628
- setSelectedTagValue("");
629
- },
630
- selectedTag,
631
- onSelectedTagChange: (value) => {
632
- setSelectedTag(value);
633
- setCurrentPage(0);
634
- },
635
- onOverheadDistributionChange: (value) => {
636
- setOverheadDistribution(value);
637
- setCurrentPage(0);
638
- },
639
- onTimeRangeChange: (value) => {
640
- setTimeRange(value);
641
- setCurrentPage(0);
642
- },
643
- onCurrencyChange: (value) => {
644
- setCurrency(value);
645
- setCurrentPage(0);
646
- },
647
- onFilterByChange: (value) => {
648
- setFilterBy(value);
649
- setCurrentPage(0);
650
- if (value !== "tag") {
651
- setSelectedTagKey("");
652
- setSelectedTagValue("");
639
+ ),
640
+ /* @__PURE__ */ jsx(
641
+ Divider,
642
+ {
643
+ style: {
644
+ marginBottom: 24,
645
+ marginLeft: "-24px",
646
+ marginRight: "-24px",
647
+ width: "calc(100% + 48px)"
653
648
  }
654
- },
655
- onFilterOperationChange: (value) => {
656
- setFilterOperation(value);
657
- setCurrentPage(0);
658
- },
659
- onFilterValueChange: (value) => {
660
- setFilterValue(value);
661
- setCurrentPage(0);
662
- },
663
- selectedTagKey,
664
- selectedTagValue,
665
- onSelectedTagKeyChange: (value) => {
666
- setSelectedTagKey(value);
667
- setSelectedTagValue("");
668
- setCurrentPage(0);
669
- },
670
- onSelectedTagValueChange: (value) => {
671
- setSelectedTagValue(value);
672
- setCurrentPage(0);
673
649
  }
674
- }
675
- )), /* @__PURE__ */ React.createElement(PageLayout.Table, null, /* @__PURE__ */ React.createElement("div", { style: { flex: 1 } }, /* @__PURE__ */ React.createElement(InfoCard, null, /* @__PURE__ */ React.createElement(
676
- Table,
677
- {
678
- data: displayData?.projects || [],
679
- isLoading: loading,
680
- components: {
681
- Toolbar: () => /* @__PURE__ */ React.createElement(
682
- TableToolbar,
683
- {
684
- showPlatformSum,
685
- setShowPlatformSum,
686
- projectsCount: displayData?.projects?.length || 0,
687
- groupBy,
688
- showMonthOverMonthChange,
689
- setShowMonthOverMonthChange,
690
- showInfrastructureCost,
691
- setShowInfrastructureCost,
692
- showSupplementaryCost,
693
- setShowSupplementaryCost,
694
- onDownloadCsv: () => handleHeaderDownload("csv"),
695
- onDownloadJson: () => handleHeaderDownload("json"),
696
- isDownloading
650
+ ),
651
+ /* @__PURE__ */ jsxs(PageLayout, { children: [
652
+ /* @__PURE__ */ jsx(PageLayout.Filters, { children: /* @__PURE__ */ jsx(
653
+ Filters,
654
+ {
655
+ groupBy,
656
+ overheadDistribution,
657
+ timeRange,
658
+ currency,
659
+ filterBy,
660
+ filterOperation,
661
+ filterValue,
662
+ tags,
663
+ onGroupByChange: (value) => {
664
+ setGroupBy(value);
665
+ setCurrentPage(0);
666
+ if (value !== "tag") {
667
+ setSelectedTag("");
668
+ }
669
+ if (value !== "project") {
670
+ setShowPlatformSum(false);
671
+ }
672
+ setFilterBy(value);
673
+ setFilterValue("");
674
+ setSelectedTagKey("");
675
+ setSelectedTagValue("");
676
+ },
677
+ selectedTag,
678
+ onSelectedTagChange: (value) => {
679
+ setSelectedTag(value);
680
+ setCurrentPage(0);
681
+ },
682
+ onOverheadDistributionChange: (value) => {
683
+ setOverheadDistribution(value);
684
+ setCurrentPage(0);
685
+ },
686
+ onTimeRangeChange: (value) => {
687
+ setTimeRange(value);
688
+ setCurrentPage(0);
689
+ },
690
+ onCurrencyChange: (value) => {
691
+ setCurrency(value);
692
+ setCurrentPage(0);
693
+ },
694
+ onFilterByChange: (value) => {
695
+ setFilterBy(value);
696
+ setCurrentPage(0);
697
+ if (value !== "tag") {
698
+ setSelectedTagKey("");
699
+ setSelectedTagValue("");
700
+ }
701
+ },
702
+ onFilterOperationChange: (value) => {
703
+ setFilterOperation(value);
704
+ setCurrentPage(0);
705
+ },
706
+ onFilterValueChange: (value) => {
707
+ setFilterValue(value);
708
+ setCurrentPage(0);
709
+ },
710
+ selectedTagKey,
711
+ selectedTagValue,
712
+ onSelectedTagKeyChange: (value) => {
713
+ setSelectedTagKey(value);
714
+ setSelectedTagValue("");
715
+ setCurrentPage(0);
716
+ },
717
+ onSelectedTagValueChange: (value) => {
718
+ setSelectedTagValue(value);
719
+ setCurrentPage(0);
697
720
  }
698
- )
699
- },
700
- columns,
701
- options: {
702
- paging: true,
703
- pageSize,
704
- pageSizeOptions: [5, 10, 25, 50],
705
- search: false,
706
- sorting: true,
707
- padding: "dense",
708
- thirdSortClick: false
709
- },
710
- totalCount,
711
- page: currentPage,
712
- onPageChange: handlePageChange,
713
- onRowsPerPageChange: handleRowsPerPageChange,
714
- onOrderChange: handleOrderChange,
715
- style: { outline: "none" },
716
- localization: {
717
- pagination: {
718
- labelRowsPerPage: "rows"
719
721
  }
720
- }
721
- }
722
- ))))));
722
+ ) }),
723
+ /* @__PURE__ */ jsx(PageLayout.Table, { children: /* @__PURE__ */ jsx("div", { style: { flex: 1 }, children: /* @__PURE__ */ jsx(InfoCard, { children: /* @__PURE__ */ jsx(
724
+ Table,
725
+ {
726
+ data: displayData?.projects || [],
727
+ isLoading: loading,
728
+ components: {
729
+ Toolbar: () => /* @__PURE__ */ jsx(
730
+ TableToolbar,
731
+ {
732
+ showPlatformSum,
733
+ setShowPlatformSum,
734
+ projectsCount: displayData?.projects?.length || 0,
735
+ groupBy,
736
+ showMonthOverMonthChange,
737
+ setShowMonthOverMonthChange,
738
+ showInfrastructureCost,
739
+ setShowInfrastructureCost,
740
+ showSupplementaryCost,
741
+ setShowSupplementaryCost,
742
+ onDownloadCsv: () => handleHeaderDownload("csv"),
743
+ onDownloadJson: () => handleHeaderDownload("json"),
744
+ isDownloading
745
+ }
746
+ )
747
+ },
748
+ columns,
749
+ options: {
750
+ paging: true,
751
+ pageSize,
752
+ pageSizeOptions: [5, 10, 25, 50],
753
+ search: false,
754
+ sorting: true,
755
+ padding: "dense",
756
+ thirdSortClick: false
757
+ },
758
+ totalCount,
759
+ page: currentPage,
760
+ onPageChange: handlePageChange,
761
+ onRowsPerPageChange: handleRowsPerPageChange,
762
+ onOrderChange: handleOrderChange,
763
+ style: { outline: "none" },
764
+ localization: {
765
+ pagination: {
766
+ labelRowsPerPage: "rows"
767
+ }
768
+ }
769
+ }
770
+ ) }) }) })
771
+ ] })
772
+ ] });
723
773
  }
724
774
  OpenShiftPage.displayName = "OpenShiftPage";
725
775