@backstage-community/plugin-apiiro 0.1.0 → 1.0.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 (88) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +91 -12
  3. package/config.d.ts +14 -0
  4. package/dist/App.esm.js +96 -4
  5. package/dist/App.esm.js.map +1 -1
  6. package/dist/api/index.esm.js +6 -0
  7. package/dist/api/index.esm.js.map +1 -1
  8. package/dist/assets/SettingIcon.esm.js +1 -0
  9. package/dist/assets/SettingIcon.esm.js.map +1 -1
  10. package/dist/components/ApiiroSidebar.esm.js.map +1 -1
  11. package/dist/components/CalendarDatePicker.esm.js.map +1 -1
  12. package/dist/components/DataGrid/DataGrid.esm.js +1 -0
  13. package/dist/components/DataGrid/DataGrid.esm.js.map +1 -1
  14. package/dist/components/MetricsGroup/TabMetricsGroup.esm.js +28 -4
  15. package/dist/components/MetricsGroup/TabMetricsGroup.esm.js.map +1 -1
  16. package/dist/components/MetricsGroup/WidgetMetricsGroup.esm.js +30 -7
  17. package/dist/components/MetricsGroup/WidgetMetricsGroup.esm.js.map +1 -1
  18. package/dist/components/RiskLevel.esm.js +1 -0
  19. package/dist/components/RiskLevel.esm.js.map +1 -1
  20. package/dist/components/charts/GaugeChart.esm.js +8 -6
  21. package/dist/components/charts/GaugeChart.esm.js.map +1 -1
  22. package/dist/components/common/StatusContainer.esm.js +123 -0
  23. package/dist/components/common/StatusContainer.esm.js.map +1 -0
  24. package/dist/components/filters/DiscoveredOnFilter.esm.js +1 -1
  25. package/dist/components/filters/DiscoveredOnFilter.esm.js.map +1 -1
  26. package/dist/components/tiles/MttrVsSLATile.esm.js +31 -14
  27. package/dist/components/tiles/MttrVsSLATile.esm.js.map +1 -1
  28. package/dist/components/tiles/RiskOverTimeTile.esm.js +15 -12
  29. package/dist/components/tiles/RiskOverTimeTile.esm.js.map +1 -1
  30. package/dist/components/tiles/SLAAdherenceTile.esm.js +15 -12
  31. package/dist/components/tiles/SLAAdherenceTile.esm.js.map +1 -1
  32. package/dist/components/tiles/StatusTile.esm.js +98 -66
  33. package/dist/components/tiles/StatusTile.esm.js.map +1 -1
  34. package/dist/components/tiles/TopLanguagesTile.esm.js +1 -0
  35. package/dist/components/tiles/TopLanguagesTile.esm.js.map +1 -1
  36. package/dist/components/tiles/TopRiskTile.esm.js +19 -16
  37. package/dist/components/tiles/TopRiskTile.esm.js.map +1 -1
  38. package/dist/index.d.ts +31 -6
  39. package/dist/index.esm.js +2 -1
  40. package/dist/index.esm.js.map +1 -1
  41. package/dist/pages/Applications/Applications.esm.js +104 -0
  42. package/dist/pages/Applications/Applications.esm.js.map +1 -0
  43. package/dist/pages/Applications/tableConfig.esm.js +147 -0
  44. package/dist/pages/Applications/tableConfig.esm.js.map +1 -0
  45. package/dist/pages/Repositories/Repositories.esm.js +26 -26
  46. package/dist/pages/Repositories/Repositories.esm.js.map +1 -1
  47. package/dist/pages/Repositories/tableConfig.esm.js +3 -2
  48. package/dist/pages/Repositories/tableConfig.esm.js.map +1 -1
  49. package/dist/pages/Risks/Risks.esm.js +9 -3
  50. package/dist/pages/Risks/Risks.esm.js.map +1 -1
  51. package/dist/pages/Risks/tableConfig.esm.js +25 -11
  52. package/dist/pages/Risks/tableConfig.esm.js.map +1 -1
  53. package/dist/pages/tab/ComponentTab.esm.js +72 -0
  54. package/dist/pages/tab/ComponentTab.esm.js.map +1 -0
  55. package/dist/pages/tab/SystemTab.esm.js +159 -0
  56. package/dist/pages/tab/SystemTab.esm.js.map +1 -0
  57. package/dist/pages/tab/TabProvider.esm.js +9 -3
  58. package/dist/pages/tab/TabProvider.esm.js.map +1 -1
  59. package/dist/pages/widget/ComponentWidget.esm.js +67 -0
  60. package/dist/pages/widget/ComponentWidget.esm.js.map +1 -0
  61. package/dist/pages/widget/SystemWidget.esm.js +81 -0
  62. package/dist/pages/widget/SystemWidget.esm.js.map +1 -0
  63. package/dist/pages/widget/WidgetProvider.esm.js +9 -3
  64. package/dist/pages/widget/WidgetProvider.esm.js.map +1 -1
  65. package/dist/plugin.esm.js.map +1 -1
  66. package/dist/queries/application.queries.esm.js +64 -0
  67. package/dist/queries/application.queries.esm.js.map +1 -0
  68. package/dist/queries/mttr-statistics.queries.esm.js +19 -12
  69. package/dist/queries/mttr-statistics.queries.esm.js.map +1 -1
  70. package/dist/queries/repository.queries.esm.js +19 -8
  71. package/dist/queries/repository.queries.esm.js.map +1 -1
  72. package/dist/queries/risk-score-over-time.queries.esm.js +19 -12
  73. package/dist/queries/risk-score-over-time.queries.esm.js.map +1 -1
  74. package/dist/queries/risks.queries.esm.js +19 -7
  75. package/dist/queries/risks.queries.esm.js.map +1 -1
  76. package/dist/queries/sla-breach.queries.esm.js +22 -11
  77. package/dist/queries/sla-breach.queries.esm.js.map +1 -1
  78. package/dist/queries/top-risks.queries.esm.js +19 -7
  79. package/dist/queries/top-risks.queries.esm.js.map +1 -1
  80. package/dist/theme/themeUtils.esm.js +5 -2
  81. package/dist/theme/themeUtils.esm.js.map +1 -1
  82. package/dist/utils/utils.esm.js +3 -2
  83. package/dist/utils/utils.esm.js.map +1 -1
  84. package/package.json +12 -12
  85. package/dist/pages/tab/Tab.esm.js +0 -147
  86. package/dist/pages/tab/Tab.esm.js.map +0 -1
  87. package/dist/pages/widget/Widget.esm.js +0 -161
  88. package/dist/pages/widget/Widget.esm.js.map +0 -1
@@ -0,0 +1,104 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useMemo } from 'react';
3
+ import { useApi, fetchApiRef } from '@backstage/core-plugin-api';
4
+ import { apiiroApiRef } from '../../api/index.esm.js';
5
+ import { DataGrid } from '../../components/DataGrid/DataGrid.esm.js';
6
+ import '@mui/material/Box';
7
+ import '@mui/material/Typography';
8
+ import '@mui/material/Select';
9
+ import '@mui/material/MenuItem';
10
+ import '@mui/material/Pagination';
11
+ import '@mui/material/styles';
12
+ import '@mui/x-data-grid';
13
+ import '@mui/material/ListItemIcon';
14
+ import '@mui/material/ListItemText';
15
+ import '@mui/icons-material';
16
+ import '@mui/material/TextField';
17
+ import '@mui/material/InputAdornment';
18
+ import '@mui/icons-material/Search';
19
+ import '@mui/icons-material/Clear';
20
+ import '@mui/material/IconButton';
21
+ import '@tanstack/react-query';
22
+ import { useApplicationsData } from '../../queries/application.queries.esm.js';
23
+ import { applicationColumnVisibility, applicationColumns } from './tableConfig.esm.js';
24
+ import '../../components/common/ChartBox.esm.js';
25
+ import 'react-dom';
26
+ import { StatusContainer } from '../../components/common/StatusContainer.esm.js';
27
+ import { Content } from '@backstage/core-components';
28
+
29
+ const INITIAL_SORTING = [
30
+ {
31
+ field: "riskScore",
32
+ sort: "desc"
33
+ }
34
+ ];
35
+ const PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
36
+ const DATA_GRID_FEATURES = {
37
+ quickSearch: true,
38
+ columnPinning: true,
39
+ columnReordering: true,
40
+ customPagination: true,
41
+ columnMenu: true,
42
+ persistLayout: true
43
+ };
44
+ const Applications = () => {
45
+ const connectBackendApi = useApi(apiiroApiRef);
46
+ const { fetch } = useApi(fetchApiRef);
47
+ const enableApplicationsView = connectBackendApi.getEnableApplicationsView();
48
+ const { applicationsData, applicationsDataLoading, applicationsDataError } = useApplicationsData({
49
+ connectApi: connectBackendApi,
50
+ fetchApi: fetch,
51
+ enabled: enableApplicationsView
52
+ });
53
+ const rows = useMemo(
54
+ () => applicationsData?.applications || [],
55
+ [applicationsData?.applications]
56
+ );
57
+ if (!enableApplicationsView) {
58
+ return /* @__PURE__ */ jsx(
59
+ StatusContainer,
60
+ {
61
+ isLoading: false,
62
+ isEmpty: true,
63
+ wrapper: Content,
64
+ notFoundMessage: "Please enable the applications view in the Apiiro plugin configuration.",
65
+ showLogo: false,
66
+ children: null
67
+ }
68
+ );
69
+ }
70
+ return /* @__PURE__ */ jsx(
71
+ StatusContainer,
72
+ {
73
+ isLoading: applicationsDataLoading,
74
+ error: applicationsDataError,
75
+ isEmpty: !rows,
76
+ notFoundMessage: "No Apiiro applications found.",
77
+ showLogo: false,
78
+ children: /* @__PURE__ */ jsx(
79
+ DataGrid,
80
+ {
81
+ getRowId: (row) => `${row.key}-${row.entityUrl}`,
82
+ loading: applicationsDataLoading,
83
+ tableKey: "applications",
84
+ columns: applicationColumns,
85
+ rows,
86
+ dataLabel: "applications",
87
+ searchBarPlaceHolder: "Search application name...",
88
+ features: DATA_GRID_FEATURES,
89
+ initialState: {
90
+ sorting: {
91
+ sortModel: INITIAL_SORTING
92
+ }
93
+ },
94
+ initialPageSize: PAGE_SIZE_OPTIONS[0],
95
+ pageSizeOptions: PAGE_SIZE_OPTIONS,
96
+ columnVisibility: applicationColumnVisibility
97
+ }
98
+ )
99
+ }
100
+ );
101
+ };
102
+
103
+ export { Applications };
104
+ //# sourceMappingURL=Applications.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Applications.esm.js","sources":["../../../src/pages/Applications/Applications.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\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 */\nimport { useMemo } from 'react';\nimport { fetchApiRef, useApi } from '@backstage/core-plugin-api';\nimport { apiiroApiRef } from '../../api';\nimport { DataGrid } from '../../components/DataGrid';\nimport { ApplicationType, useApplicationsData } from '../../queries';\nimport { applicationColumns, applicationColumnVisibility } from './tableConfig';\nimport { StatusContainer } from '../../components/common';\nimport { Content } from '@backstage/core-components';\n\nconst INITIAL_SORTING = [\n {\n field: 'riskScore',\n sort: 'desc' as const,\n },\n];\n\nconst PAGE_SIZE_OPTIONS = [10, 20, 50, 100];\n\nconst DATA_GRID_FEATURES = {\n quickSearch: true,\n columnPinning: true,\n columnReordering: true,\n customPagination: true,\n columnMenu: true,\n persistLayout: true,\n} as const;\n\nexport const Applications = () => {\n const connectBackendApi = useApi(apiiroApiRef);\n const { fetch } = useApi(fetchApiRef);\n const enableApplicationsView = connectBackendApi.getEnableApplicationsView();\n\n const { applicationsData, applicationsDataLoading, applicationsDataError } =\n useApplicationsData({\n connectApi: connectBackendApi,\n fetchApi: fetch,\n enabled: enableApplicationsView,\n });\n\n const rows = useMemo(\n () => applicationsData?.applications || [],\n [applicationsData?.applications],\n );\n\n if (!enableApplicationsView) {\n return (\n <StatusContainer\n isLoading={false}\n isEmpty\n wrapper={Content}\n notFoundMessage=\"Please enable the applications view in the Apiiro plugin configuration.\"\n showLogo={false}\n >\n {null}\n </StatusContainer>\n );\n }\n\n return (\n <StatusContainer\n isLoading={applicationsDataLoading}\n error={applicationsDataError}\n isEmpty={!rows}\n notFoundMessage=\"No Apiiro applications found.\"\n showLogo={false}\n >\n <DataGrid<ApplicationType>\n getRowId={row => `${row.key}-${row.entityUrl}`}\n loading={applicationsDataLoading}\n tableKey=\"applications\"\n columns={applicationColumns}\n rows={rows}\n dataLabel=\"applications\"\n searchBarPlaceHolder=\"Search application name...\"\n features={DATA_GRID_FEATURES}\n initialState={{\n sorting: {\n sortModel: INITIAL_SORTING,\n },\n }}\n initialPageSize={PAGE_SIZE_OPTIONS[0]}\n pageSizeOptions={PAGE_SIZE_OPTIONS}\n columnVisibility={applicationColumnVisibility}\n />\n </StatusContainer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,eAAA,GAAkB;AAAA,EACtB;AAAA,IACE,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,EAAM;AAAA;AAEV,CAAA;AAEA,MAAM,iBAAA,GAAoB,CAAC,EAAA,EAAI,EAAA,EAAI,IAAI,GAAG,CAAA;AAE1C,MAAM,kBAAA,GAAqB;AAAA,EACzB,WAAA,EAAa,IAAA;AAAA,EACb,aAAA,EAAe,IAAA;AAAA,EACf,gBAAA,EAAkB,IAAA;AAAA,EAClB,gBAAA,EAAkB,IAAA;AAAA,EAClB,UAAA,EAAY,IAAA;AAAA,EACZ,aAAA,EAAe;AACjB,CAAA;AAEO,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM,iBAAA,GAAoB,OAAO,YAAY,CAAA;AAC7C,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAA,CAAO,WAAW,CAAA;AACpC,EAAA,MAAM,sBAAA,GAAyB,kBAAkB,yBAAA,EAA0B;AAE3E,EAAA,MAAM,EAAE,gBAAA,EAAkB,uBAAA,EAAyB,qBAAA,KACjD,mBAAA,CAAoB;AAAA,IAClB,UAAA,EAAY,iBAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACV,CAAA;AAEH,EAAA,MAAM,IAAA,GAAO,OAAA;AAAA,IACX,MAAM,gBAAA,EAAkB,YAAA,IAAgB,EAAC;AAAA,IACzC,CAAC,kBAAkB,YAAY;AAAA,GACjC;AAEA,EAAA,IAAI,CAAC,sBAAA,EAAwB;AAC3B,IAAA,uBACE,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,KAAA;AAAA,QACX,OAAA,EAAO,IAAA;AAAA,QACP,OAAA,EAAS,OAAA;AAAA,QACT,eAAA,EAAgB,yEAAA;AAAA,QAChB,QAAA,EAAU,KAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,uBAAA;AAAA,MACX,KAAA,EAAO,qBAAA;AAAA,MACP,SAAS,CAAC,IAAA;AAAA,MACV,eAAA,EAAgB,+BAAA;AAAA,MAChB,QAAA,EAAU,KAAA;AAAA,MAEV,QAAA,kBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,UAAU,CAAA,GAAA,KAAO,CAAA,EAAG,IAAI,GAAG,CAAA,CAAA,EAAI,IAAI,SAAS,CAAA,CAAA;AAAA,UAC5C,OAAA,EAAS,uBAAA;AAAA,UACT,QAAA,EAAS,cAAA;AAAA,UACT,OAAA,EAAS,kBAAA;AAAA,UACT,IAAA;AAAA,UACA,SAAA,EAAU,cAAA;AAAA,UACV,oBAAA,EAAqB,4BAAA;AAAA,UACrB,QAAA,EAAU,kBAAA;AAAA,UACV,YAAA,EAAc;AAAA,YACZ,OAAA,EAAS;AAAA,cACP,SAAA,EAAW;AAAA;AACb,WACF;AAAA,UACA,eAAA,EAAiB,kBAAkB,CAAC,CAAA;AAAA,UACpC,eAAA,EAAiB,iBAAA;AAAA,UACjB,gBAAA,EAAkB;AAAA;AAAA;AACpB;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,147 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Link } from 'react-router-dom';
3
+ import '@backstage/core-components';
4
+ import '@mui/material/SvgIcon';
5
+ import 'react';
6
+ import '@mui/x-data-grid';
7
+ import '@mui/material/Box';
8
+ import '@mui/material/styles';
9
+ import '@mui/material/MenuItem';
10
+ import '@mui/material/ListItemIcon';
11
+ import '@mui/material/ListItemText';
12
+ import '@mui/icons-material';
13
+ import '@mui/material/Typography';
14
+ import '@mui/material/Select';
15
+ import '@mui/material/Pagination';
16
+ import '@mui/material/TextField';
17
+ import '@mui/material/InputAdornment';
18
+ import '@mui/icons-material/Search';
19
+ import '@mui/icons-material/Clear';
20
+ import '@mui/material/IconButton';
21
+ import '../../components/common/ChartBox.esm.js';
22
+ import 'react-dom';
23
+ import '../../components/common/StatusContainer.esm.js';
24
+ import '../../components/common/logoSpinner.esm.js';
25
+ import { Chip } from '../../components/Chip.esm.js';
26
+ import { SimpleTooltip } from '../../components/SimpleTooltip.esm.js';
27
+ import { RiskLevel } from '../../components/RiskLevel.esm.js';
28
+ import '@mui/material/Avatar';
29
+ import '@mui/material/Chip';
30
+ import '@mui/material/Link';
31
+ import 'react-icons/vsc';
32
+ import 'react-icons/si';
33
+ import '@backstage-community/plugin-apiiro-common';
34
+ import '../../components/filters/FilterDropdown.esm.js';
35
+ import '../../components/filters/RiskInsightFilter.esm.js';
36
+ import '../../components/CalendarDatePicker.esm.js';
37
+ import '@mui/material/ButtonBase';
38
+ import '@mui/material/Popper';
39
+ import '@mui/material/ClickAwayListener';
40
+ import '@mui/material/Tooltip';
41
+ import '@mui/material/Skeleton';
42
+ import '@mui/icons-material/KeyboardArrowDown';
43
+ import '@mui/icons-material/Close';
44
+
45
+ const businessImpactColorMapping = {
46
+ High: "error",
47
+ Medium: "warning",
48
+ Low: "warning"
49
+ };
50
+ const applicationColumns = [
51
+ {
52
+ field: "name",
53
+ headerName: "Application Name",
54
+ flex: 1.5,
55
+ hideable: false,
56
+ minWidth: 230,
57
+ renderCell: (params) => {
58
+ const redirectURL = `${params.row.entityUrl}/apiiro`;
59
+ return /* @__PURE__ */ jsx(SimpleTooltip, { title: params.value || "", children: /* @__PURE__ */ jsx(
60
+ "div",
61
+ {
62
+ style: {
63
+ display: "flex",
64
+ alignItems: "center",
65
+ gap: "5px",
66
+ width: "100%",
67
+ minWidth: 0
68
+ },
69
+ children: /* @__PURE__ */ jsx(
70
+ Link,
71
+ {
72
+ to: redirectURL,
73
+ style: {
74
+ overflow: "hidden",
75
+ textOverflow: "ellipsis",
76
+ whiteSpace: "nowrap",
77
+ minWidth: 0,
78
+ flex: 1
79
+ },
80
+ children: params.value
81
+ }
82
+ )
83
+ }
84
+ ) });
85
+ }
86
+ },
87
+ {
88
+ field: "description",
89
+ headerName: "Description",
90
+ flex: 2,
91
+ minWidth: 250,
92
+ renderCell: (params) => /* @__PURE__ */ jsx(SimpleTooltip, { title: params.value ?? "", children: params.value ?? "" })
93
+ },
94
+ {
95
+ field: "businessImpact",
96
+ headerName: "Business Impact",
97
+ flex: 1.2,
98
+ minWidth: 150,
99
+ headerAlign: "center",
100
+ renderCell: (params) => /* @__PURE__ */ jsx(SimpleTooltip, { title: params.value ?? "", centered: true, children: /* @__PURE__ */ jsx(
101
+ Chip,
102
+ {
103
+ label: params.value,
104
+ colorMapping: businessImpactColorMapping,
105
+ size: "small",
106
+ variant: "outlined",
107
+ chipSx: { marginBottom: "0" }
108
+ }
109
+ ) })
110
+ },
111
+ {
112
+ field: "riskLevel",
113
+ headerName: "Risk Level",
114
+ flex: 1,
115
+ minWidth: 150,
116
+ headerAlign: "center",
117
+ renderCell: (params) => /* @__PURE__ */ jsx(SimpleTooltip, { title: params.value ?? "", centered: true, children: /* @__PURE__ */ jsx(RiskLevel, { level: params.value, iconSize: "large" }) })
118
+ },
119
+ {
120
+ field: "riskScore",
121
+ headerName: "Risk Score",
122
+ flex: 1,
123
+ minWidth: 120,
124
+ headerAlign: "center",
125
+ renderCell: (params) => /* @__PURE__ */ jsx(SimpleTooltip, { title: params.value ?? "", centered: true, children: params.value ?? "" })
126
+ },
127
+ {
128
+ field: "isActive",
129
+ headerName: "Status",
130
+ flex: 1,
131
+ minWidth: 120,
132
+ headerAlign: "center",
133
+ valueGetter: (_, row) => row.isActive ? "Active" : "Inactive",
134
+ renderCell: (params) => /* @__PURE__ */ jsx(SimpleTooltip, { title: params.formattedValue || "", centered: true, children: params.formattedValue })
135
+ }
136
+ ];
137
+ const applicationColumnVisibility = {
138
+ name: true,
139
+ description: true,
140
+ businessImpact: true,
141
+ riskLevel: true,
142
+ riskScore: true,
143
+ isActive: true
144
+ };
145
+
146
+ export { applicationColumnVisibility, applicationColumns, businessImpactColorMapping };
147
+ //# sourceMappingURL=tableConfig.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableConfig.esm.js","sources":["../../../src/pages/Applications/tableConfig.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\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 */\nimport { GridColDef } from '@mui/x-data-grid';\nimport { Link } from 'react-router-dom';\nimport { Chip, RiskLevel, SimpleTooltip } from '../../components';\n\n// Color mapping for business impact\nexport const businessImpactColorMapping = {\n High: 'error',\n Medium: 'warning',\n Low: 'warning',\n} as const;\n\n// Application columns configuration\nexport const applicationColumns: GridColDef[] = [\n {\n field: 'name',\n headerName: 'Application Name',\n flex: 1.5,\n hideable: false,\n minWidth: 230,\n renderCell: (params: any) => {\n const redirectURL = `${params.row.entityUrl}/apiiro`;\n return (\n <SimpleTooltip title={params.value || ''}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '5px',\n width: '100%',\n minWidth: 0,\n }}\n >\n <Link\n to={redirectURL}\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n flex: 1,\n }}\n >\n {params.value}\n </Link>\n </div>\n </SimpleTooltip>\n );\n },\n },\n {\n field: 'description',\n headerName: 'Description',\n flex: 2,\n minWidth: 250,\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''}>\n {params.value ?? ''}\n </SimpleTooltip>\n ),\n },\n {\n field: 'businessImpact',\n headerName: 'Business Impact',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n <Chip\n label={params.value}\n colorMapping={businessImpactColorMapping}\n size=\"small\"\n variant=\"outlined\"\n chipSx={{ marginBottom: '0' }}\n />\n </SimpleTooltip>\n ),\n },\n {\n field: 'riskLevel',\n headerName: 'Risk Level',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n <RiskLevel level={params.value} iconSize=\"large\" />\n </SimpleTooltip>\n ),\n },\n {\n field: 'riskScore',\n headerName: 'Risk Score',\n flex: 1,\n minWidth: 120,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n {params.value ?? ''}\n </SimpleTooltip>\n ),\n },\n {\n field: 'isActive',\n headerName: 'Status',\n flex: 1,\n minWidth: 120,\n headerAlign: 'center',\n valueGetter: (_, row) => (row.isActive ? 'Active' : 'Inactive'),\n renderCell: (params: any) => (\n <SimpleTooltip title={params.formattedValue || ''} centered>\n {params.formattedValue}\n </SimpleTooltip>\n ),\n },\n];\n\nexport const applicationColumnVisibility = {\n name: true,\n description: true,\n businessImpact: true,\n riskLevel: true,\n riskScore: true,\n isActive: true,\n};\n"],"names":[],"mappings":"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"}
@@ -3,9 +3,9 @@ import { useMemo } from 'react';
3
3
  import { Page, Content } from '@backstage/core-components';
4
4
  import { useApi, fetchApiRef } from '@backstage/core-plugin-api';
5
5
  import Typography from '@mui/material/Typography';
6
- import Box from '@mui/material/Box';
7
6
  import { apiiroApiRef } from '../../api/index.esm.js';
8
7
  import { DataGrid } from '../../components/DataGrid/DataGrid.esm.js';
8
+ import '@mui/material/Box';
9
9
  import '@mui/material/Select';
10
10
  import '@mui/material/MenuItem';
11
11
  import '@mui/material/Pagination';
@@ -25,21 +25,8 @@ import '@tanstack/react-query';
25
25
  import { columnVisibilityModal, repositoryColumns } from './tableConfig.esm.js';
26
26
  import '../../components/common/ChartBox.esm.js';
27
27
  import 'react-dom';
28
- import { SomethingWentWrong } from '../../components/common/SomethingWentWrong.esm.js';
28
+ import { StatusContainer } from '../../components/common/StatusContainer.esm.js';
29
29
 
30
- const SomethingWentWrongBox = ({ statusCode }) => {
31
- return /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(
32
- Box,
33
- {
34
- display: "flex",
35
- justifyContent: "center",
36
- alignItems: "center",
37
- flexDirection: "column",
38
- minHeight: "300px",
39
- children: /* @__PURE__ */ jsx(SomethingWentWrong, { statusCode })
40
- }
41
- ) });
42
- };
43
30
  const INITIAL_SORTING = [
44
31
  {
45
32
  field: "riskScore",
@@ -55,25 +42,29 @@ const DATA_GRID_FEATURES = {
55
42
  columnMenu: true,
56
43
  persistLayout: true
57
44
  };
58
- const Repositories = () => {
45
+ const RepositoriesContent = ({
46
+ applicationId
47
+ }) => {
59
48
  const connectBackendApi = useApi(apiiroApiRef);
60
49
  const { fetch } = useApi(fetchApiRef);
61
50
  const { repositoriesData, repositoriesDataLoading, repositoriesDataError } = useRepositoriesData({
62
51
  connectApi: connectBackendApi,
63
- fetchApi: fetch
52
+ fetchApi: fetch,
53
+ applicationId
64
54
  });
65
55
  const rows = useMemo(
66
56
  () => repositoriesData?.repositories || [],
67
57
  [repositoriesData?.repositories]
68
58
  );
69
- const showDataGrid = !repositoriesDataError;
70
- const errorStatusCode = repositoriesDataError?.details?.status;
71
- return /* @__PURE__ */ jsxs(Page, { themeId: "tool", children: [
72
- /* @__PURE__ */ jsx(Header, {}),
73
- /* @__PURE__ */ jsxs(Content, { children: [
74
- /* @__PURE__ */ jsx(Typography, { variant: "h4", sx: { color: "text.primary", mb: 2 }, children: "Repositories" }),
75
- repositoriesDataError && /* @__PURE__ */ jsx(SomethingWentWrongBox, { statusCode: errorStatusCode }),
76
- showDataGrid && /* @__PURE__ */ jsx(
59
+ return /* @__PURE__ */ jsx(
60
+ StatusContainer,
61
+ {
62
+ isLoading: repositoriesDataLoading,
63
+ error: repositoriesDataError,
64
+ isEmpty: !rows,
65
+ notFoundMessage: "No repositories found.",
66
+ showLogo: applicationId ? true : false,
67
+ children: /* @__PURE__ */ jsx(
77
68
  DataGrid,
78
69
  {
79
70
  getRowId: (row) => `${row.key}-${row.entityUrl}`,
@@ -94,9 +85,18 @@ const Repositories = () => {
94
85
  columnVisibility: columnVisibilityModal
95
86
  }
96
87
  )
88
+ }
89
+ );
90
+ };
91
+ const Repositories = () => {
92
+ return /* @__PURE__ */ jsxs(Page, { themeId: "tool", children: [
93
+ /* @__PURE__ */ jsx(Header, {}),
94
+ /* @__PURE__ */ jsxs(Content, { children: [
95
+ /* @__PURE__ */ jsx(Typography, { variant: "h4", sx: { color: "text.primary", mb: 2 }, children: "Repositories" }),
96
+ /* @__PURE__ */ jsx(RepositoriesContent, {})
97
97
  ] })
98
98
  ] });
99
99
  };
100
100
 
101
- export { Repositories };
101
+ export { Repositories, RepositoriesContent };
102
102
  //# sourceMappingURL=Repositories.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Repositories.esm.js","sources":["../../../src/pages/Repositories/Repositories.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\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 */\nimport { useMemo } from 'react';\nimport { Content, Page } from '@backstage/core-components';\nimport { fetchApiRef, useApi } from '@backstage/core-plugin-api';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { apiiroApiRef } from '../../api';\nimport { DataGrid } from '../../components/DataGrid';\nimport { Header } from '../../components/Header';\nimport { RepositoryType, useRepositoriesData } from '../../queries';\nimport { columnVisibilityModal, repositoryColumns } from './tableConfig';\nimport { SomethingWentWrong } from '../../components/common';\n\ninterface SomethingWentWrongBoxProps {\n statusCode?: number;\n}\n\nconst SomethingWentWrongBox = ({ statusCode }: SomethingWentWrongBoxProps) => {\n return (\n <Content>\n <Box\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n flexDirection=\"column\"\n minHeight=\"300px\"\n >\n <SomethingWentWrong statusCode={statusCode} />\n </Box>\n </Content>\n );\n};\n\nconst INITIAL_SORTING = [\n {\n field: 'riskScore',\n sort: 'desc' as const,\n },\n];\n\nconst PAGE_SIZE_OPTIONS = [10, 20, 50, 100];\n\nconst DATA_GRID_FEATURES = {\n quickSearch: true,\n columnPinning: true,\n columnReordering: true,\n customPagination: true,\n columnMenu: true,\n persistLayout: true,\n} as const;\n\nexport const Repositories = () => {\n const connectBackendApi = useApi(apiiroApiRef);\n const { fetch } = useApi(fetchApiRef);\n\n const { repositoriesData, repositoriesDataLoading, repositoriesDataError } =\n useRepositoriesData({\n connectApi: connectBackendApi,\n fetchApi: fetch,\n });\n\n const rows = useMemo(\n () => repositoriesData?.repositories || [],\n [repositoriesData?.repositories],\n );\n\n const showDataGrid = !repositoriesDataError;\n const errorStatusCode = repositoriesDataError?.details?.status;\n\n return (\n <Page themeId=\"tool\">\n <Header />\n <Content>\n <Typography variant=\"h4\" sx={{ color: 'text.primary', mb: 2 }}>\n Repositories\n </Typography>\n\n {repositoriesDataError && (\n <SomethingWentWrongBox statusCode={errorStatusCode} />\n )}\n\n {showDataGrid && (\n <DataGrid<RepositoryType>\n getRowId={row => `${row.key}-${row.entityUrl}`}\n loading={repositoriesDataLoading}\n tableKey=\"repositories\"\n columns={repositoryColumns}\n rows={rows}\n dataLabel=\"repositories\"\n searchBarPlaceHolder=\"Search repository name...\"\n features={DATA_GRID_FEATURES}\n initialState={{\n sorting: {\n sortModel: INITIAL_SORTING,\n },\n }}\n initialPageSize={PAGE_SIZE_OPTIONS[0]}\n pageSizeOptions={PAGE_SIZE_OPTIONS}\n columnVisibility={columnVisibilityModal}\n />\n )}\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Repositories.esm.js","sources":["../../../src/pages/Repositories/Repositories.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\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 */\nimport { useMemo } from 'react';\nimport { Content, Page } from '@backstage/core-components';\nimport { fetchApiRef, useApi } from '@backstage/core-plugin-api';\nimport Typography from '@mui/material/Typography';\nimport { apiiroApiRef } from '../../api';\nimport { DataGrid } from '../../components/DataGrid';\nimport { Header } from '../../components/Header';\nimport { RepositoryType, useRepositoriesData } from '../../queries';\nimport { columnVisibilityModal, repositoryColumns } from './tableConfig';\nimport { StatusContainer } from '../../components/common';\n\nconst INITIAL_SORTING = [\n {\n field: 'riskScore',\n sort: 'desc' as const,\n },\n];\n\nconst PAGE_SIZE_OPTIONS = [10, 20, 50, 100];\n\nconst DATA_GRID_FEATURES = {\n quickSearch: true,\n columnPinning: true,\n columnReordering: true,\n customPagination: true,\n columnMenu: true,\n persistLayout: true,\n} as const;\n\nexport const RepositoriesContent = ({\n applicationId,\n}: {\n applicationId?: string;\n}) => {\n const connectBackendApi = useApi(apiiroApiRef);\n const { fetch } = useApi(fetchApiRef);\n\n const { repositoriesData, repositoriesDataLoading, repositoriesDataError } =\n useRepositoriesData({\n connectApi: connectBackendApi,\n fetchApi: fetch,\n applicationId,\n });\n\n const rows = useMemo(\n () => repositoriesData?.repositories || [],\n [repositoriesData?.repositories],\n );\n\n return (\n <StatusContainer\n isLoading={repositoriesDataLoading}\n error={repositoriesDataError}\n isEmpty={!rows}\n notFoundMessage=\"No repositories found.\"\n showLogo={applicationId ? true : false}\n >\n <DataGrid<RepositoryType>\n getRowId={row => `${row.key}-${row.entityUrl}`}\n loading={repositoriesDataLoading}\n tableKey=\"repositories\"\n columns={repositoryColumns}\n rows={rows}\n dataLabel=\"repositories\"\n searchBarPlaceHolder=\"Search repository name...\"\n features={DATA_GRID_FEATURES}\n initialState={{\n sorting: {\n sortModel: INITIAL_SORTING,\n },\n }}\n initialPageSize={PAGE_SIZE_OPTIONS[0]}\n pageSizeOptions={PAGE_SIZE_OPTIONS}\n columnVisibility={columnVisibilityModal}\n />\n </StatusContainer>\n );\n};\n\nexport const Repositories = () => {\n return (\n <Page themeId=\"tool\">\n <Header />\n <Content>\n <Typography variant=\"h4\" sx={{ color: 'text.primary', mb: 2 }}>\n Repositories\n </Typography>\n <RepositoriesContent />\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAM,eAAA,GAAkB;AAAA,EACtB;AAAA,IACE,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,EAAM;AAAA;AAEV,CAAA;AAEA,MAAM,iBAAA,GAAoB,CAAC,EAAA,EAAI,EAAA,EAAI,IAAI,GAAG,CAAA;AAE1C,MAAM,kBAAA,GAAqB;AAAA,EACzB,WAAA,EAAa,IAAA;AAAA,EACb,aAAA,EAAe,IAAA;AAAA,EACf,gBAAA,EAAkB,IAAA;AAAA,EAClB,gBAAA,EAAkB,IAAA;AAAA,EAClB,UAAA,EAAY,IAAA;AAAA,EACZ,aAAA,EAAe;AACjB,CAAA;AAEO,MAAM,sBAAsB,CAAC;AAAA,EAClC;AACF,CAAA,KAEM;AACJ,EAAA,MAAM,iBAAA,GAAoB,OAAO,YAAY,CAAA;AAC7C,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAA,CAAO,WAAW,CAAA;AAEpC,EAAA,MAAM,EAAE,gBAAA,EAAkB,uBAAA,EAAyB,qBAAA,KACjD,mBAAA,CAAoB;AAAA,IAClB,UAAA,EAAY,iBAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV;AAAA,GACD,CAAA;AAEH,EAAA,MAAM,IAAA,GAAO,OAAA;AAAA,IACX,MAAM,gBAAA,EAAkB,YAAA,IAAgB,EAAC;AAAA,IACzC,CAAC,kBAAkB,YAAY;AAAA,GACjC;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,uBAAA;AAAA,MACX,KAAA,EAAO,qBAAA;AAAA,MACP,SAAS,CAAC,IAAA;AAAA,MACV,eAAA,EAAgB,wBAAA;AAAA,MAChB,QAAA,EAAU,gBAAgB,IAAA,GAAO,KAAA;AAAA,MAEjC,QAAA,kBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,UAAU,CAAA,GAAA,KAAO,CAAA,EAAG,IAAI,GAAG,CAAA,CAAA,EAAI,IAAI,SAAS,CAAA,CAAA;AAAA,UAC5C,OAAA,EAAS,uBAAA;AAAA,UACT,QAAA,EAAS,cAAA;AAAA,UACT,OAAA,EAAS,iBAAA;AAAA,UACT,IAAA;AAAA,UACA,SAAA,EAAU,cAAA;AAAA,UACV,oBAAA,EAAqB,2BAAA;AAAA,UACrB,QAAA,EAAU,kBAAA;AAAA,UACV,YAAA,EAAc;AAAA,YACZ,OAAA,EAAS;AAAA,cACP,SAAA,EAAW;AAAA;AACb,WACF;AAAA,UACA,eAAA,EAAiB,kBAAkB,CAAC,CAAA;AAAA,UACpC,eAAA,EAAiB,iBAAA;AAAA,UACjB,gBAAA,EAAkB;AAAA;AAAA;AACpB;AAAA,GACF;AAEJ;AAEO,MAAM,eAAe,MAAM;AAChC,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,MAAA,EACZ,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,CAAA;AAAA,yBACP,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAK,EAAA,EAAI,EAAE,OAAO,cAAA,EAAgB,EAAA,EAAI,CAAA,EAAE,EAAG,QAAA,EAAA,cAAA,EAE/D,CAAA;AAAA,0BACC,mBAAA,EAAA,EAAoB;AAAA,KAAA,EACvB;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -10,7 +10,7 @@ import '@mui/material/MenuItem';
10
10
  import '@mui/material/ListItemIcon';
11
11
  import '@mui/material/ListItemText';
12
12
  import '@mui/icons-material';
13
- import Typography from '@mui/material/Typography';
13
+ import '@mui/material/Typography';
14
14
  import '@mui/material/Select';
15
15
  import '@mui/material/Pagination';
16
16
  import '@mui/material/TextField';
@@ -20,6 +20,7 @@ import '@mui/icons-material/Clear';
20
20
  import '@mui/material/IconButton';
21
21
  import '../../components/common/ChartBox.esm.js';
22
22
  import 'react-dom';
23
+ import '../../components/common/StatusContainer.esm.js';
23
24
  import '../../components/common/logoSpinner.esm.js';
24
25
  import { Chip } from '../../components/Chip.esm.js';
25
26
  import { ChipsList } from '../../components/ChipsList.esm.js';
@@ -218,7 +219,7 @@ const repositoryColumns = [
218
219
  if (params.row.hasPaymentsData) sensitiveTypes.push("Payments");
219
220
  const displayValue = sensitiveTypes.length > 0 ? "Yes" : "No";
220
221
  const tooltipText = sensitiveTypes.length > 0 ? `Contains: ${sensitiveTypes.join(", ")}` : "No sensitive data";
221
- return /* @__PURE__ */ jsx(SimpleTooltip, { title: tooltipText, centered: true, children: /* @__PURE__ */ jsx(Typography, { children: displayValue }) });
222
+ return /* @__PURE__ */ jsx(SimpleTooltip, { title: tooltipText, centered: true, children: displayValue });
222
223
  }
223
224
  },
224
225
  {
@@ -1 +1 @@
1
- {"version":3,"file":"tableConfig.esm.js","sources":["../../../src/pages/Repositories/tableConfig.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\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 */\nimport { GridColDef } from '@mui/x-data-grid';\nimport { Link } from 'react-router-dom';\nimport { Chip, ChipsList, RiskLevel, SimpleTooltip } from '../../components';\nimport { scmProviderIcons } from '../../components/common/scmProviders';\nimport { formatDate } from '../../utils/dateFormatter';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\n\n// Color mapping for business impact\nexport const businessImpactColorMapping = {\n High: 'error',\n Medium: 'warning',\n Low: 'warning',\n} as const;\n\n// Repository columns configuration\nexport const repositoryColumns: GridColDef[] = [\n {\n field: 'name',\n headerName: 'Repository Name',\n flex: 1.5,\n hideable: false,\n minWidth: 230,\n valueGetter: (_, row) => `${row.name} (${row.branchName})`,\n renderCell: (params: any) => {\n const IconComponent = scmProviderIcons[params.row.provider as string];\n const redirectURL = `${params.row.entityUrl}/apiiro`;\n return (\n <SimpleTooltip title={params.formattedValue || ''}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '5px',\n width: '100%',\n minWidth: 0,\n }}\n >\n {IconComponent && <IconComponent style={{ flexShrink: 0 }} />}\n <Link\n to={redirectURL}\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n flex: 1,\n }}\n >\n {params.formattedValue}\n </Link>\n </div>\n </SimpleTooltip>\n );\n },\n },\n {\n field: 'visibility',\n headerName: 'Public/Private',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) => (row.isPublic ? 'Public' : 'Private'),\n renderCell: (params: any) => (\n <SimpleTooltip\n title={params.formattedValue || ''}\n centered\n tooltipProps={{\n PopperProps: {\n modifiers: [{ name: 'offset', options: { offset: [0, -20] } }],\n },\n }}\n >\n {params.formattedValue}\n </SimpleTooltip>\n ),\n },\n {\n field: 'businessImpact',\n headerName: 'Business Impact',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n <Chip\n label={params.value}\n colorMapping={businessImpactColorMapping}\n size=\"small\"\n variant=\"outlined\"\n chipSx={{ marginBottom: '0' }}\n />\n </SimpleTooltip>\n ),\n },\n {\n field: 'riskLevel',\n headerName: 'Risk Level',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n <RiskLevel level={params.value} iconSize=\"large\" />\n </SimpleTooltip>\n ),\n },\n {\n field: 'riskScore',\n headerName: 'Risk Score',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n {params.value ?? ''}\n </SimpleTooltip>\n ),\n },\n {\n field: 'languages',\n headerName: 'Languages',\n flex: 1.5,\n minWidth: 200,\n valueGetter: (_, row) => row.languages,\n renderCell: (params: any) => {\n return (\n <Box\n sx={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n width: '100%',\n }}\n >\n <ChipsList\n items={params.value.map((item: any) => ({\n id: item,\n label: item,\n }))}\n maxVisible={2}\n gap={0}\n variant=\"outlined\"\n />\n </Box>\n );\n },\n },\n {\n field: 'isDeployed',\n headerName: 'Deployed',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) => (row.isDeployed ? 'Yes' : 'No'),\n renderCell: (params: any) => (\n <SimpleTooltip title={params.formattedValue || ''} centered>\n {params.formattedValue}\n </SimpleTooltip>\n ),\n },\n {\n field: 'isInternetExposed',\n headerName: 'Internet Exposed',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) => (row.isInternetExposed ? 'Yes' : 'No'),\n renderCell: (params: any) => (\n <SimpleTooltip title={params.formattedValue || ''} centered>\n {params.formattedValue}\n </SimpleTooltip>\n ),\n },\n {\n field: 'apiCount',\n headerName: 'APIs',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n {params.value ?? ''}\n </SimpleTooltip>\n ),\n },\n {\n field: 'sensitiveData',\n headerName: 'Sensitive Data',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => {\n const sensitiveTypes = [];\n if (params.row.hasPiiData) sensitiveTypes.push('PII');\n if (params.row.hasPhiData) sensitiveTypes.push('PHI');\n if (params.row.hasPaymentsData) sensitiveTypes.push('Payments');\n const displayValue = sensitiveTypes.length > 0 ? 'Yes' : 'No';\n const tooltipText =\n sensitiveTypes.length > 0\n ? `Contains: ${sensitiveTypes.join(', ')}`\n : 'No sensitive data';\n return (\n <SimpleTooltip title={tooltipText} centered>\n <Typography>{displayValue}</Typography>\n </SimpleTooltip>\n );\n },\n },\n {\n field: 'contributorCount',\n headerName: 'Contributors',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n {params.value ?? ''}\n </SimpleTooltip>\n ),\n },\n {\n field: 'activeSince',\n headerName: 'Active Since',\n type: 'date',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) =>\n row.activeSince ? new Date(row.activeSince) : null,\n renderCell: (params: any) => (\n <SimpleTooltip\n title={params.value?.toLocaleDateString() || 'N/A'}\n centered\n >\n {params.value ? formatDate(params.value) : 'N/A'}\n </SimpleTooltip>\n ),\n },\n {\n field: 'lastActivity',\n headerName: 'Last Activity',\n type: 'date',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) =>\n row.lastActivity ? new Date(row.lastActivity) : null,\n renderCell: (params: any) => (\n <SimpleTooltip\n title={params.value?.toLocaleDateString() || 'N/A'}\n centered\n >\n {params.value ? formatDate(params.value) : 'N/A'}\n </SimpleTooltip>\n ),\n },\n {\n field: 'isArchived',\n headerName: 'Archived',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) => (row.isArchived ? 'Yes' : 'No'),\n renderCell: (params: any) => (\n <SimpleTooltip title={params.formattedValue || ''} centered>\n {params.formattedValue}\n </SimpleTooltip>\n ),\n },\n];\n\nexport const columnVisibilityModal = {\n name: true,\n visibility: true,\n businessImpact: true,\n riskLevel: true,\n riskScore: true,\n languages: true,\n isDeployed: false,\n isInternetExposed: false,\n apiCount: false,\n sensitiveData: false,\n contributorCount: false,\n activeSince: false,\n lastActivity: false,\n isArchived: false,\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tableConfig.esm.js","sources":["../../../src/pages/Repositories/tableConfig.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\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 */\nimport { GridColDef } from '@mui/x-data-grid';\nimport { Link } from 'react-router-dom';\nimport { Chip, ChipsList, RiskLevel, SimpleTooltip } from '../../components';\nimport { scmProviderIcons } from '../../components/common/scmProviders';\nimport { formatDate } from '../../utils/dateFormatter';\nimport Box from '@mui/material/Box';\n\n// Color mapping for business impact\nexport const businessImpactColorMapping = {\n High: 'error',\n Medium: 'warning',\n Low: 'warning',\n} as const;\n\n// Repository columns configuration\nexport const repositoryColumns: GridColDef[] = [\n {\n field: 'name',\n headerName: 'Repository Name',\n flex: 1.5,\n hideable: false,\n minWidth: 230,\n valueGetter: (_, row) => `${row.name} (${row.branchName})`,\n renderCell: (params: any) => {\n const IconComponent = scmProviderIcons[params.row.provider as string];\n const redirectURL = `${params.row.entityUrl}/apiiro`;\n return (\n <SimpleTooltip title={params.formattedValue || ''}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '5px',\n width: '100%',\n minWidth: 0,\n }}\n >\n {IconComponent && <IconComponent style={{ flexShrink: 0 }} />}\n <Link\n to={redirectURL}\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n flex: 1,\n }}\n >\n {params.formattedValue}\n </Link>\n </div>\n </SimpleTooltip>\n );\n },\n },\n {\n field: 'visibility',\n headerName: 'Public/Private',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) => (row.isPublic ? 'Public' : 'Private'),\n renderCell: (params: any) => (\n <SimpleTooltip\n title={params.formattedValue || ''}\n centered\n tooltipProps={{\n PopperProps: {\n modifiers: [{ name: 'offset', options: { offset: [0, -20] } }],\n },\n }}\n >\n {params.formattedValue}\n </SimpleTooltip>\n ),\n },\n {\n field: 'businessImpact',\n headerName: 'Business Impact',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n <Chip\n label={params.value}\n colorMapping={businessImpactColorMapping}\n size=\"small\"\n variant=\"outlined\"\n chipSx={{ marginBottom: '0' }}\n />\n </SimpleTooltip>\n ),\n },\n {\n field: 'riskLevel',\n headerName: 'Risk Level',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n <RiskLevel level={params.value} iconSize=\"large\" />\n </SimpleTooltip>\n ),\n },\n {\n field: 'riskScore',\n headerName: 'Risk Score',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n {params.value ?? ''}\n </SimpleTooltip>\n ),\n },\n {\n field: 'languages',\n headerName: 'Languages',\n flex: 1.5,\n minWidth: 200,\n valueGetter: (_, row) => row.languages,\n renderCell: (params: any) => {\n return (\n <Box\n sx={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n width: '100%',\n }}\n >\n <ChipsList\n items={params.value.map((item: any) => ({\n id: item,\n label: item,\n }))}\n maxVisible={2}\n gap={0}\n variant=\"outlined\"\n />\n </Box>\n );\n },\n },\n {\n field: 'isDeployed',\n headerName: 'Deployed',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) => (row.isDeployed ? 'Yes' : 'No'),\n renderCell: (params: any) => (\n <SimpleTooltip title={params.formattedValue || ''} centered>\n {params.formattedValue}\n </SimpleTooltip>\n ),\n },\n {\n field: 'isInternetExposed',\n headerName: 'Internet Exposed',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) => (row.isInternetExposed ? 'Yes' : 'No'),\n renderCell: (params: any) => (\n <SimpleTooltip title={params.formattedValue || ''} centered>\n {params.formattedValue}\n </SimpleTooltip>\n ),\n },\n {\n field: 'apiCount',\n headerName: 'APIs',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n {params.value ?? ''}\n </SimpleTooltip>\n ),\n },\n {\n field: 'sensitiveData',\n headerName: 'Sensitive Data',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => {\n const sensitiveTypes = [];\n if (params.row.hasPiiData) sensitiveTypes.push('PII');\n if (params.row.hasPhiData) sensitiveTypes.push('PHI');\n if (params.row.hasPaymentsData) sensitiveTypes.push('Payments');\n const displayValue = sensitiveTypes.length > 0 ? 'Yes' : 'No';\n const tooltipText =\n sensitiveTypes.length > 0\n ? `Contains: ${sensitiveTypes.join(', ')}`\n : 'No sensitive data';\n return (\n <SimpleTooltip title={tooltipText} centered>\n {displayValue}\n </SimpleTooltip>\n );\n },\n },\n {\n field: 'contributorCount',\n headerName: 'Contributors',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n renderCell: (params: any) => (\n <SimpleTooltip title={params.value ?? ''} centered>\n {params.value ?? ''}\n </SimpleTooltip>\n ),\n },\n {\n field: 'activeSince',\n headerName: 'Active Since',\n type: 'date',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) =>\n row.activeSince ? new Date(row.activeSince) : null,\n renderCell: (params: any) => (\n <SimpleTooltip\n title={params.value?.toLocaleDateString() || 'N/A'}\n centered\n >\n {params.value ? formatDate(params.value) : 'N/A'}\n </SimpleTooltip>\n ),\n },\n {\n field: 'lastActivity',\n headerName: 'Last Activity',\n type: 'date',\n flex: 1.2,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) =>\n row.lastActivity ? new Date(row.lastActivity) : null,\n renderCell: (params: any) => (\n <SimpleTooltip\n title={params.value?.toLocaleDateString() || 'N/A'}\n centered\n >\n {params.value ? formatDate(params.value) : 'N/A'}\n </SimpleTooltip>\n ),\n },\n {\n field: 'isArchived',\n headerName: 'Archived',\n flex: 1,\n minWidth: 150,\n headerAlign: 'center',\n valueGetter: (_, row) => (row.isArchived ? 'Yes' : 'No'),\n renderCell: (params: any) => (\n <SimpleTooltip title={params.formattedValue || ''} centered>\n {params.formattedValue}\n </SimpleTooltip>\n ),\n },\n];\n\nexport const columnVisibilityModal = {\n name: true,\n visibility: true,\n businessImpact: true,\n riskLevel: true,\n riskScore: true,\n languages: true,\n isDeployed: false,\n isInternetExposed: false,\n apiCount: false,\n sensitiveData: false,\n contributorCount: false,\n activeSince: false,\n lastActivity: false,\n isArchived: false,\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,MAAM,0BAAA,GAA6B;AAAA,EACxC,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,GAAA,EAAK;AACP;AAGO,MAAM,iBAAA,GAAkC;AAAA,EAC7C;AAAA,IACE,KAAA,EAAO,MAAA;AAAA,IACP,UAAA,EAAY,iBAAA;AAAA,IACZ,IAAA,EAAM,GAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,CAAC,CAAA,EAAG,GAAA,KAAQ,GAAG,GAAA,CAAI,IAAI,CAAA,EAAA,EAAK,GAAA,CAAI,UAAU,CAAA,CAAA,CAAA;AAAA,IACvD,UAAA,EAAY,CAAC,MAAA,KAAgB;AAC3B,MAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,MAAA,CAAO,GAAA,CAAI,QAAkB,CAAA;AACpE,MAAA,MAAM,WAAA,GAAc,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA,OAAA,CAAA;AAC3C,MAAA,uBACE,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,MAAA,CAAO,kBAAkB,EAAA,EAC7C,QAAA,kBAAA,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,GAAA,EAAK,KAAA;AAAA,YACL,KAAA,EAAO,MAAA;AAAA,YACP,QAAA,EAAU;AAAA,WACZ;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,aAAA,wBAAkB,aAAA,EAAA,EAAc,KAAA,EAAO,EAAE,UAAA,EAAY,GAAE,EAAG,CAAA;AAAA,4BAC3D,GAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,WAAA;AAAA,gBACJ,KAAA,EAAO;AAAA,kBACL,QAAA,EAAU,QAAA;AAAA,kBACV,YAAA,EAAc,UAAA;AAAA,kBACd,UAAA,EAAY,QAAA;AAAA,kBACZ,QAAA,EAAU,CAAA;AAAA,kBACV,IAAA,EAAM;AAAA,iBACR;AAAA,gBAEC,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACV;AAAA;AAAA,OACF,EACF,CAAA;AAAA,IAEJ;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,YAAA;AAAA,IACP,UAAA,EAAY,gBAAA;AAAA,IACZ,IAAA,EAAM,GAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,aAAa,CAAC,CAAA,EAAG,GAAA,KAAS,GAAA,CAAI,WAAW,QAAA,GAAW,SAAA;AAAA,IACpD,UAAA,EAAY,CAAC,MAAA,qBACX,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAO,cAAA,IAAkB,EAAA;AAAA,QAChC,QAAA,EAAQ,IAAA;AAAA,QACR,YAAA,EAAc;AAAA,UACZ,WAAA,EAAa;AAAA,YACX,SAAA,EAAW,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,GAAG,CAAA,IAAK;AAAA;AAC/D,SACF;AAAA,QAEC,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACV,GAEJ;AAAA,EACA;AAAA,IACE,KAAA,EAAO,gBAAA;AAAA,IACP,UAAA,EAAY,iBAAA;AAAA,IACZ,IAAA,EAAM,GAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,UAAA,EAAY,CAAC,MAAA,qBACX,GAAA,CAAC,aAAA,EAAA,EAAc,OAAO,MAAA,CAAO,KAAA,IAAS,EAAA,EAAI,QAAA,EAAQ,IAAA,EAChD,QAAA,kBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,YAAA,EAAc,0BAAA;AAAA,QACd,IAAA,EAAK,OAAA;AAAA,QACL,OAAA,EAAQ,UAAA;AAAA,QACR,MAAA,EAAQ,EAAE,YAAA,EAAc,GAAA;AAAI;AAAA,KAC9B,EACF;AAAA,GAEJ;AAAA,EACA;AAAA,IACE,KAAA,EAAO,WAAA;AAAA,IACP,UAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,YAAY,CAAC,MAAA,yBACV,aAAA,EAAA,EAAc,KAAA,EAAO,OAAO,KAAA,IAAS,EAAA,EAAI,QAAA,EAAQ,IAAA,EAChD,8BAAC,SAAA,EAAA,EAAU,KAAA,EAAO,OAAO,KAAA,EAAO,QAAA,EAAS,SAAQ,CAAA,EACnD;AAAA,GAEJ;AAAA,EACA;AAAA,IACE,KAAA,EAAO,WAAA;AAAA,IACP,UAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,UAAA,EAAY,CAAC,MAAA,qBACX,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,EAAA,EAAI,QAAA,EAAQ,IAAA,EAC/C,QAAA,EAAA,MAAA,CAAO,SAAS,EAAA,EACnB;AAAA,GAEJ;AAAA,EACA;AAAA,IACE,KAAA,EAAO,WAAA;AAAA,IACP,UAAA,EAAY,WAAA;AAAA,IACZ,IAAA,EAAM,GAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,CAAC,CAAA,EAAG,GAAA,KAAQ,GAAA,CAAI,SAAA;AAAA,IAC7B,UAAA,EAAY,CAAC,MAAA,KAAgB;AAC3B,MAAA,uBACE,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI;AAAA,YACF,QAAA,EAAU,UAAA;AAAA,YACV,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,cAAA,EAAgB,QAAA;AAAA,YAChB,MAAA,EAAQ,MAAA;AAAA,YACR,KAAA,EAAO;AAAA,WACT;AAAA,UAEA,QAAA,kBAAA,GAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAe;AAAA,gBACtC,EAAA,EAAI,IAAA;AAAA,gBACJ,KAAA,EAAO;AAAA,eACT,CAAE,CAAA;AAAA,cACF,UAAA,EAAY,CAAA;AAAA,cACZ,GAAA,EAAK,CAAA;AAAA,cACL,OAAA,EAAQ;AAAA;AAAA;AACV;AAAA,OACF;AAAA,IAEJ;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,YAAA;AAAA,IACP,UAAA,EAAY,UAAA;AAAA,IACZ,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,aAAa,CAAC,CAAA,EAAG,GAAA,KAAS,GAAA,CAAI,aAAa,KAAA,GAAQ,IAAA;AAAA,IACnD,UAAA,EAAY,CAAC,MAAA,qBACX,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,MAAA,CAAO,cAAA,IAAkB,EAAA,EAAI,QAAA,EAAQ,IAAA,EACxD,QAAA,EAAA,MAAA,CAAO,cAAA,EACV;AAAA,GAEJ;AAAA,EACA;AAAA,IACE,KAAA,EAAO,mBAAA;AAAA,IACP,UAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,aAAa,CAAC,CAAA,EAAG,GAAA,KAAS,GAAA,CAAI,oBAAoB,KAAA,GAAQ,IAAA;AAAA,IAC1D,UAAA,EAAY,CAAC,MAAA,qBACX,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,MAAA,CAAO,cAAA,IAAkB,EAAA,EAAI,QAAA,EAAQ,IAAA,EACxD,QAAA,EAAA,MAAA,CAAO,cAAA,EACV;AAAA,GAEJ;AAAA,EACA;AAAA,IACE,KAAA,EAAO,UAAA;AAAA,IACP,UAAA,EAAY,MAAA;AAAA,IACZ,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,UAAA,EAAY,CAAC,MAAA,qBACX,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,EAAA,EAAI,QAAA,EAAQ,IAAA,EAC/C,QAAA,EAAA,MAAA,CAAO,SAAS,EAAA,EACnB;AAAA,GAEJ;AAAA,EACA;AAAA,IACE,KAAA,EAAO,eAAA;AAAA,IACP,UAAA,EAAY,gBAAA;AAAA,IACZ,IAAA,EAAM,GAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,UAAA,EAAY,CAAC,MAAA,KAAgB;AAC3B,MAAA,MAAM,iBAAiB,EAAC;AACxB,MAAA,IAAI,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,cAAA,CAAe,KAAK,KAAK,CAAA;AACpD,MAAA,IAAI,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,cAAA,CAAe,KAAK,KAAK,CAAA;AACpD,MAAA,IAAI,MAAA,CAAO,GAAA,CAAI,eAAA,EAAiB,cAAA,CAAe,KAAK,UAAU,CAAA;AAC9D,MAAA,MAAM,YAAA,GAAe,cAAA,CAAe,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,IAAA;AACzD,MAAA,MAAM,WAAA,GACJ,eAAe,MAAA,GAAS,CAAA,GACpB,aAAa,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GACtC,mBAAA;AACN,MAAA,2BACG,aAAA,EAAA,EAAc,KAAA,EAAO,WAAA,EAAa,QAAA,EAAQ,MACxC,QAAA,EAAA,YAAA,EACH,CAAA;AAAA,IAEJ;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,kBAAA;AAAA,IACP,UAAA,EAAY,cAAA;AAAA,IACZ,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,UAAA,EAAY,CAAC,MAAA,qBACX,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,EAAA,EAAI,QAAA,EAAQ,IAAA,EAC/C,QAAA,EAAA,MAAA,CAAO,SAAS,EAAA,EACnB;AAAA,GAEJ;AAAA,EACA;AAAA,IACE,KAAA,EAAO,aAAA;AAAA,IACP,UAAA,EAAY,cAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,WAAA,EAAa,CAAC,CAAA,EAAG,GAAA,KACf,GAAA,CAAI,cAAc,IAAI,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA,GAAI,IAAA;AAAA,IAChD,UAAA,EAAY,CAAC,MAAA,qBACX,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,kBAAA,EAAmB,IAAK,KAAA;AAAA,QAC7C,QAAA,EAAQ,IAAA;AAAA,QAEP,QAAA,EAAA,MAAA,CAAO,KAAA,GAAQ,UAAA,CAAW,MAAA,CAAO,KAAK,CAAA,GAAI;AAAA;AAAA;AAC7C,GAEJ;AAAA,EACA;AAAA,IACE,KAAA,EAAO,cAAA;AAAA,IACP,UAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,WAAA,EAAa,CAAC,CAAA,EAAG,GAAA,KACf,GAAA,CAAI,eAAe,IAAI,IAAA,CAAK,GAAA,CAAI,YAAY,CAAA,GAAI,IAAA;AAAA,IAClD,UAAA,EAAY,CAAC,MAAA,qBACX,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,kBAAA,EAAmB,IAAK,KAAA;AAAA,QAC7C,QAAA,EAAQ,IAAA;AAAA,QAEP,QAAA,EAAA,MAAA,CAAO,KAAA,GAAQ,UAAA,CAAW,MAAA,CAAO,KAAK,CAAA,GAAI;AAAA;AAAA;AAC7C,GAEJ;AAAA,EACA;AAAA,IACE,KAAA,EAAO,YAAA;AAAA,IACP,UAAA,EAAY,UAAA;AAAA,IACZ,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,aAAa,CAAC,CAAA,EAAG,GAAA,KAAS,GAAA,CAAI,aAAa,KAAA,GAAQ,IAAA;AAAA,IACnD,UAAA,EAAY,CAAC,MAAA,qBACX,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,MAAA,CAAO,cAAA,IAAkB,EAAA,EAAI,QAAA,EAAQ,IAAA,EACxD,QAAA,EAAA,MAAA,CAAO,cAAA,EACV;AAAA;AAGN;AAEO,MAAM,qBAAA,GAAwB;AAAA,EACnC,IAAA,EAAM,IAAA;AAAA,EACN,UAAA,EAAY,IAAA;AAAA,EACZ,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,UAAA,EAAY,KAAA;AAAA,EACZ,iBAAA,EAAmB,KAAA;AAAA,EACnB,QAAA,EAAU,KAAA;AAAA,EACV,aAAA,EAAe,KAAA;AAAA,EACf,gBAAA,EAAkB,KAAA;AAAA,EAClB,WAAA,EAAa,KAAA;AAAA,EACb,YAAA,EAAc,KAAA;AAAA,EACd,UAAA,EAAY;AACd;;;;"}
@@ -37,7 +37,7 @@ import { ErrorSnackbar } from '../../components/common/ErrorSnackbar.esm.js';
37
37
  import '@tanstack/react-query';
38
38
  import { useRisksData } from '../../queries/risks.queries.esm.js';
39
39
  import { useFilterOptionsData } from '../../queries/filterOptions.queries.esm.js';
40
- import { columnVisibilityModal, risksColumns } from './tableConfig.esm.js';
40
+ import { getRisksColumns, columnVisibilityModal } from './tableConfig.esm.js';
41
41
 
42
42
  const formatDateForAPI = (date) => {
43
43
  const year = date.getFullYear();
@@ -87,7 +87,8 @@ const DATA_GRID_FEATURES = {
87
87
  };
88
88
  const Risks = ({
89
89
  repoId,
90
- entityRef
90
+ entityRef,
91
+ applicationId
91
92
  }) => {
92
93
  const connectBackendApi = useApi(apiiroApiRef);
93
94
  const { fetch } = useApi(fetchApiRef);
@@ -138,8 +139,9 @@ const Risks = ({
138
139
  const { risksData, risksDataLoading, risksDataError } = useRisksData({
139
140
  connectApi: connectBackendApi,
140
141
  fetchApi: fetch,
141
- repositoryKey: repoId,
142
+ repositoryId: repoId,
142
143
  entityRef,
144
+ applicationId,
143
145
  filters: {
144
146
  ...riskCategoryFilter.length > 0 && {
145
147
  RiskCategory: riskCategoryFilter
@@ -158,6 +160,10 @@ const Risks = ({
158
160
  }
159
161
  });
160
162
  const rows = useMemo(() => risksData?.risks || [], [risksData?.risks]);
163
+ const risksColumns = useMemo(
164
+ () => getRisksColumns(connectBackendApi, repoId, applicationId),
165
+ [connectBackendApi, repoId, applicationId]
166
+ );
161
167
  const handlePresetSelect = (range) => {
162
168
  setIsPresetSelection(true);
163
169
  presetSelectionRef.current = true;