@backstage-community/plugin-tekton 3.23.0 → 3.25.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 (100) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/components/Charts/PipelineBars.esm.js +33 -29
  3. package/dist/components/Charts/PipelineBars.esm.js.map +1 -1
  4. package/dist/components/Icons/CriticalRiskIcon.esm.js +8 -6
  5. package/dist/components/Icons/CriticalRiskIcon.esm.js.map +1 -1
  6. package/dist/components/Icons/EqualsIcon.esm.js +8 -6
  7. package/dist/components/Icons/EqualsIcon.esm.js.map +1 -1
  8. package/dist/components/Icons/LinkToSbomIcon.esm.js +5 -5
  9. package/dist/components/Icons/LinkToSbomIcon.esm.js.map +1 -1
  10. package/dist/components/Icons/OutputIcon.esm.js +6 -8
  11. package/dist/components/Icons/OutputIcon.esm.js.map +1 -1
  12. package/dist/components/Icons/SignedBadge.esm.js +3 -3
  13. package/dist/components/Icons/SignedBadge.esm.js.map +1 -1
  14. package/dist/components/Icons/ViewLogsIcon.esm.js +6 -8
  15. package/dist/components/Icons/ViewLogsIcon.esm.js.map +1 -1
  16. package/dist/components/PipelineRunList/PipelineRunColumnHeader.esm.js +43 -41
  17. package/dist/components/PipelineRunList/PipelineRunColumnHeader.esm.js.map +1 -1
  18. package/dist/components/PipelineRunList/PipelineRunList.esm.js +92 -68
  19. package/dist/components/PipelineRunList/PipelineRunList.esm.js.map +1 -1
  20. package/dist/components/PipelineRunList/PipelineRunListSearchBar.esm.js +13 -10
  21. package/dist/components/PipelineRunList/PipelineRunListSearchBar.esm.js.map +1 -1
  22. package/dist/components/PipelineRunList/PipelineRunOutput.esm.js +17 -11
  23. package/dist/components/PipelineRunList/PipelineRunOutput.esm.js.map +1 -1
  24. package/dist/components/PipelineRunList/PipelineRunRow.esm.js +39 -24
  25. package/dist/components/PipelineRunList/PipelineRunRow.esm.js.map +1 -1
  26. package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js +88 -76
  27. package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js.map +1 -1
  28. package/dist/components/PipelineRunList/PipelineRunSBOMLink.esm.js +4 -4
  29. package/dist/components/PipelineRunList/PipelineRunSBOMLink.esm.js.map +1 -1
  30. package/dist/components/PipelineRunList/PipelineRunTableBody.esm.js +9 -8
  31. package/dist/components/PipelineRunList/PipelineRunTableBody.esm.js.map +1 -1
  32. package/dist/components/PipelineRunList/PipelineRunTaskStatus.esm.js +2 -2
  33. package/dist/components/PipelineRunList/PipelineRunTaskStatus.esm.js.map +1 -1
  34. package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js +90 -20
  35. package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js.map +1 -1
  36. package/dist/components/PipelineRunList/PipelineTableHeader.esm.js +26 -19
  37. package/dist/components/PipelineRunList/PipelineTableHeader.esm.js.map +1 -1
  38. package/dist/components/PipelineRunList/PlrStatus.esm.js +2 -2
  39. package/dist/components/PipelineRunList/PlrStatus.esm.js.map +1 -1
  40. package/dist/components/PipelineRunList/ResourceBadge.esm.js +6 -2
  41. package/dist/components/PipelineRunList/ResourceBadge.esm.js.map +1 -1
  42. package/dist/components/PipelineRunLogs/PipelineRunLogDialog.esm.js +52 -40
  43. package/dist/components/PipelineRunLogs/PipelineRunLogDialog.esm.js.map +1 -1
  44. package/dist/components/PipelineRunLogs/PipelineRunLogDownloader.esm.js +31 -23
  45. package/dist/components/PipelineRunLogs/PipelineRunLogDownloader.esm.js.map +1 -1
  46. package/dist/components/PipelineRunLogs/PipelineRunLogViewer.esm.js +32 -24
  47. package/dist/components/PipelineRunLogs/PipelineRunLogViewer.esm.js.map +1 -1
  48. package/dist/components/PipelineRunLogs/PipelineRunLogs.esm.js +29 -19
  49. package/dist/components/PipelineRunLogs/PipelineRunLogs.esm.js.map +1 -1
  50. package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js +15 -9
  51. package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js.map +1 -1
  52. package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js +43 -36
  53. package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js.map +1 -1
  54. package/dist/components/PipelineRunOutput/PipelineRunOutputDialog.esm.js +32 -22
  55. package/dist/components/PipelineRunOutput/PipelineRunOutputDialog.esm.js.map +1 -1
  56. package/dist/components/Router.esm.js +2 -2
  57. package/dist/components/Router.esm.js.map +1 -1
  58. package/dist/components/Tekton/TektonCIComponent.esm.js +5 -4
  59. package/dist/components/Tekton/TektonCIComponent.esm.js.map +1 -1
  60. package/dist/components/common/ClusterSelector.esm.js +17 -13
  61. package/dist/components/common/ClusterSelector.esm.js.map +1 -1
  62. package/dist/components/common/ErrorPanel.esm.js +25 -17
  63. package/dist/components/common/ErrorPanel.esm.js.map +1 -1
  64. package/dist/components/common/PermissionAlert.esm.js +8 -2
  65. package/dist/components/common/PermissionAlert.esm.js.map +1 -1
  66. package/dist/components/common/StatusSelector.esm.js +19 -12
  67. package/dist/components/common/StatusSelector.esm.js.map +1 -1
  68. package/dist/components/common/TableExpandCollapse.esm.js +26 -21
  69. package/dist/components/common/TableExpandCollapse.esm.js.map +1 -1
  70. package/dist/components/pipeline-topology/PipelineLayout.esm.js +14 -13
  71. package/dist/components/pipeline-topology/PipelineLayout.esm.js.map +1 -1
  72. package/dist/components/pipeline-topology/PipelineRunVisualization.esm.js +2 -2
  73. package/dist/components/pipeline-topology/PipelineRunVisualization.esm.js.map +1 -1
  74. package/dist/components/pipeline-topology/PipelineTaskNode.esm.js +63 -59
  75. package/dist/components/pipeline-topology/PipelineTaskNode.esm.js.map +1 -1
  76. package/dist/components/pipeline-topology/PipelineVisualization.esm.js +9 -6
  77. package/dist/components/pipeline-topology/PipelineVisualization.esm.js.map +1 -1
  78. package/dist/components/pipeline-topology/PipelineVisualizationStepList.esm.js +28 -19
  79. package/dist/components/pipeline-topology/PipelineVisualizationStepList.esm.js.map +1 -1
  80. package/dist/components/pipeline-topology/PipelineVisualizationView.esm.js +11 -7
  81. package/dist/components/pipeline-topology/PipelineVisualizationView.esm.js.map +1 -1
  82. package/dist/components/pipeline-topology/TaskGroupEdge.esm.js +2 -2
  83. package/dist/components/pipeline-topology/TaskGroupEdge.esm.js.map +1 -1
  84. package/dist/components/pipeline-topology/pipelineComponentFactory.esm.js.map +1 -1
  85. package/dist/hooks/TektonResourcesContext.esm.js +12 -10
  86. package/dist/hooks/TektonResourcesContext.esm.js.map +1 -1
  87. package/dist/hooks/useDarkTheme.esm.js +2 -2
  88. package/dist/hooks/useDarkTheme.esm.js.map +1 -1
  89. package/dist/hooks/usePipelineRunScanResults.esm.js +2 -2
  90. package/dist/hooks/usePipelineRunScanResults.esm.js.map +1 -1
  91. package/dist/hooks/usePodLogsOfPipelineRun.esm.js +4 -2
  92. package/dist/hooks/usePodLogsOfPipelineRun.esm.js.map +1 -1
  93. package/dist/hooks/useTektonObjectsResponse.esm.js +11 -11
  94. package/dist/hooks/useTektonObjectsResponse.esm.js.map +1 -1
  95. package/dist/index.d.ts +50 -4
  96. package/dist/index.esm.js +1 -0
  97. package/dist/index.esm.js.map +1 -1
  98. package/dist/translation.esm.js +81 -0
  99. package/dist/translation.esm.js.map +1 -0
  100. package/package.json +18 -18
@@ -1,4 +1,5 @@
1
- import React__default from 'react';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { memo, useContext, useState, useRef, useEffect, useMemo, useCallback } from 'react';
2
3
  import { Progress, InfoCard } from '@backstage/core-components';
3
4
  import { makeStyles, Box, Paper, Toolbar, Typography, Table, TableBody, TableRow, TableCell, TablePagination } from '@material-ui/core';
4
5
  import { ComputedStatus, pipelineRunStatus } from '@janus-idp/shared-react';
@@ -11,10 +12,12 @@ import 'classnames';
11
12
  import '../common/ResourceStatus.css.esm.js';
12
13
  import { StatusSelector } from '../common/StatusSelector.esm.js';
13
14
  import { TableExpandCollapse } from '../common/TableExpandCollapse.esm.js';
14
- import { PipelineRunColumnHeader } from './PipelineRunColumnHeader.esm.js';
15
+ import { getPipelineRunColumnHeader } from './PipelineRunColumnHeader.esm.js';
15
16
  import { PipelineRunListSearchBar } from './PipelineRunListSearchBar.esm.js';
16
17
  import { PipelineRunTableBody } from './PipelineRunTableBody.esm.js';
17
18
  import { EnhancedTableHead } from './PipelineTableHeader.esm.js';
19
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
20
+ import { tektonTranslationRef } from '../../translation.esm.js';
18
21
 
19
22
  const useStyles = makeStyles((theme) => ({
20
23
  root: {
@@ -42,15 +45,22 @@ const WrapperInfoCard = ({
42
45
  allErrors,
43
46
  showClusterSelector = true,
44
47
  titleClassName
45
- }) => /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, allErrors && allErrors.length > 0 && /* @__PURE__ */ React__default.createElement(ErrorPanel, { allErrors }), /* @__PURE__ */ React__default.createElement(
46
- InfoCard,
47
- {
48
- ...showClusterSelector && {
49
- title: /* @__PURE__ */ React__default.createElement("div", { className: titleClassName }, /* @__PURE__ */ React__default.createElement(ClusterSelector, null), /* @__PURE__ */ React__default.createElement(StatusSelector, null), /* @__PURE__ */ React__default.createElement(TableExpandCollapse, null))
48
+ }) => /* @__PURE__ */ jsxs(Fragment, { children: [
49
+ allErrors && allErrors.length > 0 && /* @__PURE__ */ jsx(ErrorPanel, { allErrors }),
50
+ /* @__PURE__ */ jsx(
51
+ InfoCard,
52
+ {
53
+ ...showClusterSelector && {
54
+ title: /* @__PURE__ */ jsxs("div", { className: titleClassName, children: [
55
+ /* @__PURE__ */ jsx(ClusterSelector, {}),
56
+ /* @__PURE__ */ jsx(StatusSelector, {}),
57
+ /* @__PURE__ */ jsx(TableExpandCollapse, {})
58
+ ] })
59
+ },
60
+ children
50
61
  }
51
- },
52
- children
53
- ));
62
+ )
63
+ ] });
54
64
  const PipelineRunList = () => {
55
65
  const {
56
66
  loaded,
@@ -60,29 +70,31 @@ const PipelineRunList = () => {
60
70
  clusters,
61
71
  selectedCluster,
62
72
  selectedStatus
63
- } = React__default.useContext(TektonResourcesContext);
64
- const [search, setSearch] = React__default.useState("");
65
- const [order, setOrder] = React__default.useState("desc");
66
- const [orderBy, setOrderBy] = React__default.useState("status.startTime");
67
- const [orderById, setOrderById] = React__default.useState("startTime");
68
- const [page, setPage] = React__default.useState(0);
69
- const [rowsPerPage, setRowsPerPage] = React__default.useState(5);
70
- const updateStateOnFilterChanges = React__default.useRef(false);
71
- React__default.useEffect(() => {
73
+ } = useContext(TektonResourcesContext);
74
+ const [search, setSearch] = useState("");
75
+ const [order, setOrder] = useState("desc");
76
+ const [orderBy, setOrderBy] = useState("status.startTime");
77
+ const [orderById, setOrderById] = useState("startTime");
78
+ const [page, setPage] = useState(0);
79
+ const [rowsPerPage, setRowsPerPage] = useState(5);
80
+ const { t } = useTranslationRef(tektonTranslationRef);
81
+ const pipelineRunColumnHeader = getPipelineRunColumnHeader(t);
82
+ const updateStateOnFilterChanges = useRef(false);
83
+ useEffect(() => {
72
84
  if (updateStateOnFilterChanges.current) {
73
85
  setPage(0);
74
86
  } else {
75
87
  updateStateOnFilterChanges.current = true;
76
88
  }
77
89
  }, [selectedCluster, selectedStatus, search]);
78
- const allPipelineRuns = React__default.useMemo(() => {
90
+ const allPipelineRuns = useMemo(() => {
79
91
  const plrs = watchResourcesData?.pipelineruns?.data?.map((d) => ({
80
92
  ...d,
81
93
  id: d.metadata.uid
82
94
  })) ?? [];
83
95
  return plrs;
84
96
  }, [watchResourcesData]);
85
- const filteredPipelineRuns = React__default.useMemo(() => {
97
+ const filteredPipelineRuns = useMemo(() => {
86
98
  let plrs = allPipelineRuns;
87
99
  if (selectedStatus && selectedStatus !== ComputedStatus.All) {
88
100
  plrs = plrs.filter((plr) => pipelineRunStatus(plr) === selectedStatus);
@@ -97,13 +109,13 @@ const PipelineRunList = () => {
97
109
  plrs = plrs.sort(getComparator(order, orderBy, orderById));
98
110
  return plrs;
99
111
  }, [allPipelineRuns, selectedStatus, search, order, orderBy, orderById]);
100
- const visibleRows = React__default.useMemo(() => {
112
+ const visibleRows = useMemo(() => {
101
113
  return filteredPipelineRuns.slice(
102
114
  page * rowsPerPage,
103
115
  page * rowsPerPage + rowsPerPage
104
116
  );
105
117
  }, [filteredPipelineRuns, page, rowsPerPage, order, orderById]);
106
- const handleRequestSort = React__default.useCallback(
118
+ const handleRequestSort = useCallback(
107
119
  (_event, property, id) => {
108
120
  const isAsc = orderBy === property && order === "asc";
109
121
  setOrder(isAsc ? "desc" : "asc");
@@ -129,57 +141,69 @@ const PipelineRunList = () => {
129
141
  ...selectedClusterErrors ?? []
130
142
  ];
131
143
  if (!loaded && !responseError)
132
- return /* @__PURE__ */ React__default.createElement("div", { "data-testid": "tekton-progress" }, /* @__PURE__ */ React__default.createElement(Progress, null));
133
- return /* @__PURE__ */ React__default.createElement(
144
+ return /* @__PURE__ */ jsx("div", { "data-testid": "tekton-progress", children: /* @__PURE__ */ jsx(Progress, {}) });
145
+ return /* @__PURE__ */ jsx(
134
146
  WrapperInfoCard,
135
147
  {
136
148
  allErrors,
137
149
  showClusterSelector: clusters.length > 0,
138
- titleClassName: classes.title
139
- },
140
- /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(Paper, null, /* @__PURE__ */ React__default.createElement(Toolbar, null, /* @__PURE__ */ React__default.createElement(Typography, { variant: "h5", component: "h2" }, "Pipeline Runs"), /* @__PURE__ */ React__default.createElement(PipelineRunListSearchBar, { value: search, onChange: setSearch })), /* @__PURE__ */ React__default.createElement(
141
- Table,
142
- {
143
- "aria-labelledby": "Pipeline Runs",
144
- size: "small",
145
- style: { width: "100%" }
146
- },
147
- /* @__PURE__ */ React__default.createElement(
148
- EnhancedTableHead,
149
- {
150
- order,
151
- orderBy,
152
- orderById,
153
- onRequestSort: handleRequestSort
154
- }
155
- ),
156
- visibleRows?.length > 0 ? /* @__PURE__ */ React__default.createElement(TableBody, null, /* @__PURE__ */ React__default.createElement(PipelineRunTableBody, { rows: visibleRows }), emptyRows > 0 && /* @__PURE__ */ React__default.createElement(TableRow, { style: { height: 55 * emptyRows } }, /* @__PURE__ */ React__default.createElement(TableCell, { colSpan: PipelineRunColumnHeader.length })), /* @__PURE__ */ React__default.createElement(TableRow, { className: classes.footer }, /* @__PURE__ */ React__default.createElement(
157
- TablePagination,
158
- {
159
- rowsPerPageOptions: [
160
- { value: 5, label: "5 rows" },
161
- { value: 10, label: "10 rows" },
162
- { value: 25, label: "25 rows" }
163
- ],
164
- count: filteredPipelineRuns.length,
165
- rowsPerPage,
166
- page,
167
- onPageChange: handleChangePage,
168
- onRowsPerPageChange: handleChangeRowsPerPage,
169
- labelRowsPerPage: null
170
- }
171
- ))) : /* @__PURE__ */ React__default.createElement("tbody", null, /* @__PURE__ */ React__default.createElement("tr", null, /* @__PURE__ */ React__default.createElement("td", { colSpan: PipelineRunColumnHeader.length }, /* @__PURE__ */ React__default.createElement(
172
- "div",
173
- {
174
- "data-testid": "no-pipeline-runs",
175
- className: classes.empty
176
- },
177
- "No Pipeline Runs found"
178
- ))))
179
- )))
150
+ titleClassName: classes.title,
151
+ children: /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(Paper, { children: [
152
+ /* @__PURE__ */ jsxs(Toolbar, { children: [
153
+ /* @__PURE__ */ jsx(Typography, { variant: "h5", component: "h2", children: t("pipelineRunList.title") }),
154
+ /* @__PURE__ */ jsx(PipelineRunListSearchBar, { value: search, onChange: setSearch })
155
+ ] }),
156
+ /* @__PURE__ */ jsxs(
157
+ Table,
158
+ {
159
+ "aria-labelledby": "Pipeline Runs",
160
+ size: "small",
161
+ style: { width: "100%" },
162
+ children: [
163
+ /* @__PURE__ */ jsx(
164
+ EnhancedTableHead,
165
+ {
166
+ order,
167
+ orderBy,
168
+ orderById,
169
+ onRequestSort: handleRequestSort
170
+ }
171
+ ),
172
+ visibleRows?.length > 0 ? /* @__PURE__ */ jsxs(TableBody, { children: [
173
+ /* @__PURE__ */ jsx(PipelineRunTableBody, { rows: visibleRows }),
174
+ emptyRows > 0 && /* @__PURE__ */ jsx(TableRow, { style: { height: 55 * emptyRows }, children: /* @__PURE__ */ jsx(TableCell, { colSpan: pipelineRunColumnHeader.length }) }),
175
+ /* @__PURE__ */ jsx(TableRow, { className: classes.footer, children: /* @__PURE__ */ jsx(
176
+ TablePagination,
177
+ {
178
+ rowsPerPageOptions: [
179
+ { value: 5, label: "5 rows" },
180
+ { value: 10, label: "10 rows" },
181
+ { value: 25, label: "25 rows" }
182
+ ],
183
+ count: filteredPipelineRuns.length,
184
+ rowsPerPage,
185
+ page,
186
+ onPageChange: handleChangePage,
187
+ onRowsPerPageChange: handleChangeRowsPerPage,
188
+ labelRowsPerPage: null
189
+ }
190
+ ) })
191
+ ] }) : /* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: pipelineRunColumnHeader.length, children: /* @__PURE__ */ jsx(
192
+ "div",
193
+ {
194
+ "data-testid": "no-pipeline-runs",
195
+ className: classes.empty,
196
+ children: t("pipelineRunList.noPipelineRuns")
197
+ }
198
+ ) }) }) })
199
+ ]
200
+ }
201
+ )
202
+ ] }) })
203
+ }
180
204
  );
181
205
  };
182
- var PipelineRunList$1 = React__default.memo(PipelineRunList);
206
+ var PipelineRunList$1 = memo(PipelineRunList);
183
207
 
184
208
  export { PipelineRunList$1 as default };
185
209
  //# sourceMappingURL=PipelineRunList.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineRunList.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunList.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 React from 'react';\n\nimport { InfoCard, Progress } from '@backstage/core-components';\n\nimport {\n Box,\n makeStyles,\n Paper,\n Table,\n TableBody,\n TableCell,\n TablePagination,\n TableRow,\n Toolbar,\n Typography,\n} from '@material-ui/core';\n\nimport {\n ComputedStatus,\n PipelineRunKind,\n pipelineRunStatus,\n} from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { ClusterErrors, Order } from '../../types/types';\nimport { getComparator } from '../../utils/tekton-utils';\nimport { ClusterSelector, ErrorPanel } from '../common';\nimport { StatusSelector } from '../common/StatusSelector';\nimport { TableExpandCollapse } from '../common/TableExpandCollapse';\nimport { PipelineRunColumnHeader } from './PipelineRunColumnHeader';\nimport { PipelineRunListSearchBar } from './PipelineRunListSearchBar';\nimport { PipelineRunTableBody } from './PipelineRunTableBody';\nimport { EnhancedTableHead } from './PipelineTableHeader';\n\ntype WrapperInfoCardProps = {\n allErrors?: ClusterErrors;\n showClusterSelector?: boolean;\n titleClassName?: string;\n};\n\nconst useStyles = makeStyles(theme => ({\n root: {\n alignItems: 'start',\n padding: theme.spacing(3, 0, 2.5, 2.5),\n },\n empty: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n },\n title: {\n display: 'flex',\n gap: '20px',\n alignItems: 'center',\n },\n footer: {\n '&:nth-of-type(odd)': {\n backgroundColor: `${theme.palette.background.paper}`,\n },\n },\n}));\n\nconst WrapperInfoCard = ({\n children,\n allErrors,\n showClusterSelector = true,\n titleClassName,\n}: React.PropsWithChildren<WrapperInfoCardProps>) => (\n <>\n {allErrors && allErrors.length > 0 && <ErrorPanel allErrors={allErrors} />}\n <InfoCard\n {...(showClusterSelector && {\n title: (\n <div className={titleClassName}>\n <ClusterSelector />\n <StatusSelector />\n <TableExpandCollapse />\n </div>\n ),\n })}\n >\n {children}\n </InfoCard>\n </>\n);\n\nconst PipelineRunList = () => {\n const {\n loaded,\n responseError,\n watchResourcesData,\n selectedClusterErrors,\n clusters,\n selectedCluster,\n selectedStatus,\n } = React.useContext(TektonResourcesContext);\n const [search, setSearch] = React.useState<string>('');\n const [order, setOrder] = React.useState<Order>('desc');\n const [orderBy, setOrderBy] = React.useState<string>('status.startTime');\n const [orderById, setOrderById] = React.useState<string>('startTime'); // 2 columns have the same field\n const [page, setPage] = React.useState<number>(0);\n const [rowsPerPage, setRowsPerPage] = React.useState<number>(5);\n\n // Jump to first page when cluster, status and search filter changed\n const updateStateOnFilterChanges = React.useRef(false);\n React.useEffect(() => {\n if (updateStateOnFilterChanges.current) {\n setPage(0);\n } else {\n updateStateOnFilterChanges.current = true;\n }\n }, [selectedCluster, selectedStatus, search]);\n\n const allPipelineRuns = React.useMemo(() => {\n const plrs =\n watchResourcesData?.pipelineruns?.data?.map(d => ({\n ...d,\n id: d.metadata.uid,\n })) ?? [];\n return plrs as PipelineRunKind[];\n }, [watchResourcesData]);\n\n const filteredPipelineRuns = React.useMemo(() => {\n let plrs = allPipelineRuns;\n\n if (selectedStatus && selectedStatus !== ComputedStatus.All) {\n plrs = plrs.filter(plr => pipelineRunStatus(plr) === selectedStatus);\n }\n\n if (search) {\n const f = search.toLocaleUpperCase('en-US');\n plrs = plrs.filter((plr: PipelineRunKind) => {\n const n = plr.metadata?.name?.toLocaleUpperCase('en-US');\n return n?.includes(f);\n });\n }\n\n plrs = plrs.sort(getComparator(order, orderBy, orderById));\n\n return plrs;\n }, [allPipelineRuns, selectedStatus, search, order, orderBy, orderById]);\n\n const visibleRows = React.useMemo(() => {\n return filteredPipelineRuns.slice(\n page * rowsPerPage,\n page * rowsPerPage + rowsPerPage,\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredPipelineRuns, page, rowsPerPage, order, orderById]);\n\n const handleRequestSort = React.useCallback(\n (_event: React.MouseEvent<unknown>, property: string, id: string) => {\n const isAsc = orderBy === property && order === 'asc';\n setOrder(isAsc ? 'desc' : 'asc');\n setOrderBy(property);\n setOrderById(id);\n },\n [order, orderBy],\n );\n\n const handleChangePage = (_event: unknown, newPage: number) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n setRowsPerPage(parseInt(event.target.value, 10));\n setPage(0);\n };\n\n // Avoid a layout jump when reaching the last page with empty rows.\n const emptyRows =\n page > 0\n ? Math.max(\n 0,\n (1 + page) * rowsPerPage - (filteredPipelineRuns.length ?? 0),\n )\n : 0;\n\n const classes = useStyles();\n\n const allErrors: ClusterErrors = [\n ...(responseError ? [{ message: responseError }] : []),\n ...(selectedClusterErrors ?? []),\n ];\n\n if (!loaded && !responseError)\n return (\n <div data-testid=\"tekton-progress\">\n <Progress />\n </div>\n );\n\n return (\n <WrapperInfoCard\n allErrors={allErrors}\n showClusterSelector={clusters.length > 0}\n titleClassName={classes.title}\n >\n <Box>\n <Paper>\n <Toolbar>\n <Typography variant=\"h5\" component=\"h2\">\n Pipeline Runs\n </Typography>\n <PipelineRunListSearchBar value={search} onChange={setSearch} />\n </Toolbar>\n <Table\n aria-labelledby=\"Pipeline Runs\"\n size=\"small\"\n style={{ width: '100%' }}\n >\n <EnhancedTableHead\n order={order}\n orderBy={orderBy}\n orderById={orderById}\n onRequestSort={handleRequestSort}\n />\n {visibleRows?.length > 0 ? (\n <TableBody>\n <PipelineRunTableBody rows={visibleRows} />\n {emptyRows > 0 && (\n <TableRow style={{ height: 55 * emptyRows }}>\n <TableCell colSpan={PipelineRunColumnHeader.length} />\n </TableRow>\n )}\n <TableRow className={classes.footer}>\n <TablePagination\n rowsPerPageOptions={[\n { value: 5, label: '5 rows' },\n { value: 10, label: '10 rows' },\n { value: 25, label: '25 rows' },\n ]}\n count={filteredPipelineRuns.length}\n rowsPerPage={rowsPerPage}\n page={page}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n labelRowsPerPage={null}\n />\n </TableRow>\n </TableBody>\n ) : (\n <tbody>\n <tr>\n <td colSpan={PipelineRunColumnHeader.length}>\n <div\n data-testid=\"no-pipeline-runs\"\n className={classes.empty}\n >\n No Pipeline Runs found\n </div>\n </td>\n </tr>\n </tbody>\n )}\n </Table>\n </Paper>\n </Box>\n </WrapperInfoCard>\n );\n};\n\nexport default React.memo(PipelineRunList);\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"PipelineRunList.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunList.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 type { PropsWithChildren, MouseEvent, ChangeEvent } from 'react';\n\nimport {\n useContext,\n useState,\n useRef,\n useEffect,\n useMemo,\n useCallback,\n memo,\n} from 'react';\n\nimport { InfoCard, Progress } from '@backstage/core-components';\n\nimport {\n Box,\n makeStyles,\n Paper,\n Table,\n TableBody,\n TableCell,\n TablePagination,\n TableRow,\n Toolbar,\n Typography,\n} from '@material-ui/core';\n\nimport {\n ComputedStatus,\n PipelineRunKind,\n pipelineRunStatus,\n} from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { ClusterErrors, Order } from '../../types/types';\nimport { getComparator } from '../../utils/tekton-utils';\nimport { ClusterSelector, ErrorPanel } from '../common';\nimport { StatusSelector } from '../common/StatusSelector';\nimport { TableExpandCollapse } from '../common/TableExpandCollapse';\nimport { getPipelineRunColumnHeader } from './PipelineRunColumnHeader';\nimport { PipelineRunListSearchBar } from './PipelineRunListSearchBar';\nimport { PipelineRunTableBody } from './PipelineRunTableBody';\nimport { EnhancedTableHead } from './PipelineTableHeader';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\n\ntype WrapperInfoCardProps = {\n allErrors?: ClusterErrors;\n showClusterSelector?: boolean;\n titleClassName?: string;\n};\n\nconst useStyles = makeStyles(theme => ({\n root: {\n alignItems: 'start',\n padding: theme.spacing(3, 0, 2.5, 2.5),\n },\n empty: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n },\n title: {\n display: 'flex',\n gap: '20px',\n alignItems: 'center',\n },\n footer: {\n '&:nth-of-type(odd)': {\n backgroundColor: `${theme.palette.background.paper}`,\n },\n },\n}));\n\nconst WrapperInfoCard = ({\n children,\n allErrors,\n showClusterSelector = true,\n titleClassName,\n}: PropsWithChildren<WrapperInfoCardProps>) => (\n <>\n {allErrors && allErrors.length > 0 && <ErrorPanel allErrors={allErrors} />}\n <InfoCard\n {...(showClusterSelector && {\n title: (\n <div className={titleClassName}>\n <ClusterSelector />\n <StatusSelector />\n <TableExpandCollapse />\n </div>\n ),\n })}\n >\n {children}\n </InfoCard>\n </>\n);\n\nconst PipelineRunList = () => {\n const {\n loaded,\n responseError,\n watchResourcesData,\n selectedClusterErrors,\n clusters,\n selectedCluster,\n selectedStatus,\n } = useContext(TektonResourcesContext);\n const [search, setSearch] = useState<string>('');\n const [order, setOrder] = useState<Order>('desc');\n const [orderBy, setOrderBy] = useState<string>('status.startTime');\n const [orderById, setOrderById] = useState<string>('startTime'); // 2 columns have the same field\n const [page, setPage] = useState<number>(0);\n const [rowsPerPage, setRowsPerPage] = useState<number>(5);\n const { t } = useTranslationRef(tektonTranslationRef);\n const pipelineRunColumnHeader = getPipelineRunColumnHeader(t);\n\n // Jump to first page when cluster, status and search filter changed\n const updateStateOnFilterChanges = useRef(false);\n useEffect(() => {\n if (updateStateOnFilterChanges.current) {\n setPage(0);\n } else {\n updateStateOnFilterChanges.current = true;\n }\n }, [selectedCluster, selectedStatus, search]);\n\n const allPipelineRuns = useMemo(() => {\n const plrs =\n watchResourcesData?.pipelineruns?.data?.map(d => ({\n ...d,\n id: d.metadata.uid,\n })) ?? [];\n return plrs as PipelineRunKind[];\n }, [watchResourcesData]);\n\n const filteredPipelineRuns = useMemo(() => {\n let plrs = allPipelineRuns;\n\n if (selectedStatus && selectedStatus !== ComputedStatus.All) {\n plrs = plrs.filter(plr => pipelineRunStatus(plr) === selectedStatus);\n }\n\n if (search) {\n const f = search.toLocaleUpperCase('en-US');\n plrs = plrs.filter((plr: PipelineRunKind) => {\n const n = plr.metadata?.name?.toLocaleUpperCase('en-US');\n return n?.includes(f);\n });\n }\n\n plrs = plrs.sort(getComparator(order, orderBy, orderById));\n\n return plrs;\n }, [allPipelineRuns, selectedStatus, search, order, orderBy, orderById]);\n\n const visibleRows = useMemo(() => {\n return filteredPipelineRuns.slice(\n page * rowsPerPage,\n page * rowsPerPage + rowsPerPage,\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredPipelineRuns, page, rowsPerPage, order, orderById]);\n\n const handleRequestSort = useCallback(\n (_event: MouseEvent<unknown>, property: string, id: string) => {\n const isAsc = orderBy === property && order === 'asc';\n setOrder(isAsc ? 'desc' : 'asc');\n setOrderBy(property);\n setOrderById(id);\n },\n [order, orderBy],\n );\n\n const handleChangePage = (_event: unknown, newPage: number) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event: ChangeEvent<HTMLInputElement>) => {\n setRowsPerPage(parseInt(event.target.value, 10));\n setPage(0);\n };\n\n // Avoid a layout jump when reaching the last page with empty rows.\n const emptyRows =\n page > 0\n ? Math.max(\n 0,\n (1 + page) * rowsPerPage - (filteredPipelineRuns.length ?? 0),\n )\n : 0;\n\n const classes = useStyles();\n\n const allErrors: ClusterErrors = [\n ...(responseError ? [{ message: responseError }] : []),\n ...(selectedClusterErrors ?? []),\n ];\n\n if (!loaded && !responseError)\n return (\n <div data-testid=\"tekton-progress\">\n <Progress />\n </div>\n );\n\n return (\n <WrapperInfoCard\n allErrors={allErrors}\n showClusterSelector={clusters.length > 0}\n titleClassName={classes.title}\n >\n <Box>\n <Paper>\n <Toolbar>\n <Typography variant=\"h5\" component=\"h2\">\n {t('pipelineRunList.title')}\n </Typography>\n <PipelineRunListSearchBar value={search} onChange={setSearch} />\n </Toolbar>\n <Table\n aria-labelledby=\"Pipeline Runs\"\n size=\"small\"\n style={{ width: '100%' }}\n >\n <EnhancedTableHead\n order={order}\n orderBy={orderBy}\n orderById={orderById}\n onRequestSort={handleRequestSort}\n />\n {visibleRows?.length > 0 ? (\n <TableBody>\n <PipelineRunTableBody rows={visibleRows} />\n {emptyRows > 0 && (\n <TableRow style={{ height: 55 * emptyRows }}>\n <TableCell colSpan={pipelineRunColumnHeader.length} />\n </TableRow>\n )}\n <TableRow className={classes.footer}>\n <TablePagination\n rowsPerPageOptions={[\n { value: 5, label: '5 rows' },\n { value: 10, label: '10 rows' },\n { value: 25, label: '25 rows' },\n ]}\n count={filteredPipelineRuns.length}\n rowsPerPage={rowsPerPage}\n page={page}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n labelRowsPerPage={null}\n />\n </TableRow>\n </TableBody>\n ) : (\n <tbody>\n <tr>\n <td colSpan={pipelineRunColumnHeader.length}>\n <div\n data-testid=\"no-pipeline-runs\"\n className={classes.empty}\n >\n {t('pipelineRunList.noPipelineRuns')}\n </div>\n </td>\n </tr>\n </tbody>\n )}\n </Table>\n </Paper>\n </Box>\n </WrapperInfoCard>\n );\n};\n\nexport default memo(PipelineRunList);\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
- import React__default from 'react';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import { makeStyles, FormControl, Input, InputAdornment, IconButton } from '@material-ui/core';
3
3
  import Clear from '@material-ui/icons/Clear';
4
4
  import Search from '@material-ui/icons/Search';
5
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
6
+ import { tektonTranslationRef } from '../../translation.esm.js';
5
7
 
6
8
  const useStyles = makeStyles({
7
9
  formControl: {
@@ -14,28 +16,29 @@ const PipelineRunListSearchBar = ({
14
16
  onChange
15
17
  }) => {
16
18
  const classes = useStyles();
17
- return /* @__PURE__ */ React__default.createElement(FormControl, { className: classes.formControl }, /* @__PURE__ */ React__default.createElement(
19
+ const { t } = useTranslationRef(tektonTranslationRef);
20
+ return /* @__PURE__ */ jsx(FormControl, { className: classes.formControl, children: /* @__PURE__ */ jsx(
18
21
  Input,
19
22
  {
20
23
  "aria-label": "search",
21
- placeholder: "Search",
24
+ placeholder: t("pipelineRunList.searchBarPlaceholder"),
22
25
  autoComplete: "off",
23
26
  onChange: (event) => onChange(event.target.value),
24
27
  value,
25
- startAdornment: /* @__PURE__ */ React__default.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React__default.createElement(Search, null)),
26
- endAdornment: /* @__PURE__ */ React__default.createElement(InputAdornment, { position: "end" }, /* @__PURE__ */ React__default.createElement(
28
+ startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(Search, {}) }),
29
+ endAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "end", children: /* @__PURE__ */ jsx(
27
30
  IconButton,
28
31
  {
29
32
  "aria-label": "clear search",
30
33
  onClick: () => onChange(""),
31
34
  edge: "end",
32
35
  disabled: !value,
33
- "data-testid": "clear-search"
34
- },
35
- /* @__PURE__ */ React__default.createElement(Clear, null)
36
- ))
36
+ "data-testid": "clear-search",
37
+ children: /* @__PURE__ */ jsx(Clear, {})
38
+ }
39
+ ) })
37
40
  }
38
- ));
41
+ ) });
39
42
  };
40
43
 
41
44
  export { PipelineRunListSearchBar };
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineRunListSearchBar.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunListSearchBar.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 React from 'react';\n\nimport {\n FormControl,\n IconButton,\n Input,\n InputAdornment,\n makeStyles,\n} from '@material-ui/core';\nimport Clear from '@material-ui/icons/Clear';\nimport Search from '@material-ui/icons/Search';\n\ntype PipelineRunListSearchBarProps = {\n value: string;\n onChange: (filter: string) => void;\n};\n\nconst useStyles = makeStyles({\n formControl: {\n alignItems: 'flex-end',\n flexGrow: 1,\n },\n});\n\nexport const PipelineRunListSearchBar = ({\n value,\n onChange,\n}: PipelineRunListSearchBarProps) => {\n const classes = useStyles();\n\n return (\n <FormControl className={classes.formControl}>\n <Input\n aria-label=\"search\"\n placeholder=\"Search\"\n autoComplete=\"off\"\n onChange={event => onChange(event.target.value)}\n value={value}\n startAdornment={\n <InputAdornment position=\"start\">\n <Search />\n </InputAdornment>\n }\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"clear search\"\n onClick={() => onChange('')}\n edge=\"end\"\n disabled={!value}\n data-testid=\"clear-search\"\n >\n <Clear />\n </IconButton>\n </InputAdornment>\n }\n />\n </FormControl>\n );\n};\n"],"names":["React"],"mappings":";;;;;AAgCA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,WAAa,EAAA;AAAA,IACX,UAAY,EAAA,UAAA;AAAA,IACZ,QAAU,EAAA;AAAA;AAEd,CAAC,CAAA;AAEM,MAAM,2BAA2B,CAAC;AAAA,EACvC,KAAA;AAAA,EACA;AACF,CAAqC,KAAA;AACnC,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAA,uBACGA,cAAA,CAAA,aAAA,CAAA,WAAA,EAAA,EAAY,SAAW,EAAA,OAAA,CAAQ,WAC9B,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,QAAA;AAAA,MACX,WAAY,EAAA,QAAA;AAAA,MACZ,YAAa,EAAA,KAAA;AAAA,MACb,QAAU,EAAA,CAAA,KAAA,KAAS,QAAS,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,MAC9C,KAAA;AAAA,MACA,gCACGA,cAAA,CAAA,aAAA,CAAA,cAAA,EAAA,EAAe,UAAS,OACvB,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,YAAO,CACV,CAAA;AAAA,MAEF,YACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,cAAe,EAAA,EAAA,QAAA,EAAS,KACvB,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,YAAW,EAAA,cAAA;AAAA,UACX,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,CAAA;AAAA,UAC1B,IAAK,EAAA,KAAA;AAAA,UACL,UAAU,CAAC,KAAA;AAAA,UACX,aAAY,EAAA;AAAA,SAAA;AAAA,qDAEX,KAAM,EAAA,IAAA;AAAA,OAEX;AAAA;AAAA,GAGN,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"PipelineRunListSearchBar.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunListSearchBar.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 {\n FormControl,\n IconButton,\n Input,\n InputAdornment,\n makeStyles,\n} from '@material-ui/core';\nimport Clear from '@material-ui/icons/Clear';\nimport Search from '@material-ui/icons/Search';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\n\ntype PipelineRunListSearchBarProps = {\n value: string;\n onChange: (filter: string) => void;\n};\n\nconst useStyles = makeStyles({\n formControl: {\n alignItems: 'flex-end',\n flexGrow: 1,\n },\n});\n\nexport const PipelineRunListSearchBar = ({\n value,\n onChange,\n}: PipelineRunListSearchBarProps) => {\n const classes = useStyles();\n const { t } = useTranslationRef(tektonTranslationRef);\n\n return (\n <FormControl className={classes.formControl}>\n <Input\n aria-label=\"search\"\n placeholder={t('pipelineRunList.searchBarPlaceholder')}\n autoComplete=\"off\"\n onChange={event => onChange(event.target.value)}\n value={value}\n startAdornment={\n <InputAdornment position=\"start\">\n <Search />\n </InputAdornment>\n }\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"clear search\"\n onClick={() => onChange('')}\n edge=\"end\"\n disabled={!value}\n data-testid=\"clear-search\"\n >\n <Clear />\n </IconButton>\n </InputAdornment>\n }\n />\n </FormControl>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAgCA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,WAAa,EAAA;AAAA,IACX,UAAY,EAAA,UAAA;AAAA,IACZ,QAAU,EAAA;AAAA;AAEd,CAAC,CAAA;AAEM,MAAM,2BAA2B,CAAC;AAAA,EACvC,KAAA;AAAA,EACA;AACF,CAAqC,KAAA;AACnC,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,oBAAoB,CAAA;AAEpD,EAAA,uBACG,GAAA,CAAA,WAAA,EAAA,EAAY,SAAW,EAAA,OAAA,CAAQ,WAC9B,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,QAAA;AAAA,MACX,WAAA,EAAa,EAAE,sCAAsC,CAAA;AAAA,MACrD,YAAa,EAAA,KAAA;AAAA,MACb,QAAU,EAAA,CAAA,KAAA,KAAS,QAAS,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,MAC9C,KAAA;AAAA,MACA,gCACG,GAAA,CAAA,cAAA,EAAA,EAAe,UAAS,OACvB,EAAA,QAAA,kBAAA,GAAA,CAAC,UAAO,CACV,EAAA,CAAA;AAAA,MAEF,YACE,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,QAAA,EAAS,KACvB,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,YAAW,EAAA,cAAA;AAAA,UACX,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,CAAA;AAAA,UAC1B,IAAK,EAAA,KAAA;AAAA,UACL,UAAU,CAAC,KAAA;AAAA,UACX,aAAY,EAAA,cAAA;AAAA,UAEZ,8BAAC,KAAM,EAAA,EAAA;AAAA;AAAA,OAEX,EAAA;AAAA;AAAA,GAGN,EAAA,CAAA;AAEJ;;;;"}
@@ -1,19 +1,25 @@
1
- import React__default from 'react';
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useContext, useCallback } from 'react';
2
3
  import { Progress } from '@backstage/core-components';
3
4
  import { useApi } from '@backstage/core-plugin-api';
4
5
  import { usePipelineRunOutput, Output } from '@aonic-ui/pipelines';
5
6
  import { Grid, Paper, Typography } from '@material-ui/core';
6
7
  import { TektonResourcesContext } from '../../hooks/TektonResourcesContext.esm.js';
7
8
  import { kubernetesProxyApiRef } from '../../types/types.esm.js';
9
+ import { tektonTranslationRef } from '../../translation.esm.js';
10
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
8
11
 
9
12
  const PipelineRunOutput = ({
10
13
  pipelineRun,
11
14
  taskRuns
12
15
  }) => {
13
- const { clusters, selectedCluster } = React__default.useContext(TektonResourcesContext);
16
+ const { clusters, selectedCluster } = useContext(
17
+ TektonResourcesContext
18
+ );
14
19
  const kubernetesProxyApi = useApi(kubernetesProxyApiRef);
20
+ const { t } = useTranslationRef(tektonTranslationRef);
15
21
  const currCluster = clusters.length > 0 && clusters[selectedCluster || 0] || "";
16
- const getLogs = React__default.useCallback(
22
+ const getLogs = useCallback(
17
23
  async (podName, containerName) => {
18
24
  return await kubernetesProxyApi.getPodLogs({
19
25
  podName,
@@ -34,16 +40,16 @@ const PipelineRunOutput = ({
34
40
  const noDataAvailable = outputGroup?.ec?.data.length === 0 && outputGroup.results.data.length === 0 && isEmpty(outputGroup?.acsImageScan?.data) && isEmpty(outputGroup?.acsImageScan?.data) && isEmpty(outputGroup?.acsImageScan?.data);
35
41
  const renderOutput = () => {
36
42
  if (stillLoading && noDataAvailable) {
37
- return /* @__PURE__ */ React__default.createElement(Progress, null);
43
+ return /* @__PURE__ */ jsx(Progress, {});
38
44
  }
39
45
  if (!stillLoading && noDataAvailable) {
40
- return /* @__PURE__ */ React__default.createElement(Typography, { align: "center", variant: "body2" }, "No output found");
46
+ return /* @__PURE__ */ jsx(Typography, { align: "center", variant: "body2", children: t("pipelineRunOutput.noOutput") });
41
47
  }
42
48
  const metadata = outputGroup?.acsImageCheck?.data?.results?.[0]?.metadata?.additionalInfo;
43
49
  if (metadata?.name?.includes("@")) {
44
50
  metadata.name = metadata?.name.substr(0, metadata?.name.lastIndexOf("@"));
45
51
  }
46
- return /* @__PURE__ */ React__default.createElement(
52
+ return /* @__PURE__ */ jsx(
47
53
  Output,
48
54
  {
49
55
  enterpriseContractPolicies: outputGroup?.ec?.data ?? [],
@@ -56,14 +62,14 @@ const PipelineRunOutput = ({
56
62
  }
57
63
  );
58
64
  };
59
- return /* @__PURE__ */ React__default.createElement(Grid, null, /* @__PURE__ */ React__default.createElement("div", { style: { height: "80vh" } }, /* @__PURE__ */ React__default.createElement(
65
+ return /* @__PURE__ */ jsx(Grid, { children: /* @__PURE__ */ jsx("div", { style: { height: "80vh" }, children: /* @__PURE__ */ jsx(
60
66
  Paper,
61
67
  {
62
68
  elevation: 1,
63
- style: { height: "100%", width: "100%", minHeight: "30rem" }
64
- },
65
- renderOutput()
66
- )));
69
+ style: { height: "100%", width: "100%", minHeight: "30rem" },
70
+ children: renderOutput()
71
+ }
72
+ ) }) });
67
73
  };
68
74
 
69
75
  export { PipelineRunOutput as default };
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineRunOutput.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunOutput.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 React from 'react';\n\nimport { Progress } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport {\n ACSCheckResults,\n ACSImageScanResult,\n Output,\n PipelineRunKind as PipelineRunV1Kind,\n TaskRunKind as TaskRunV1Kind,\n usePipelineRunOutput,\n} from '@aonic-ui/pipelines';\nimport { Grid, Paper, Typography } from '@material-ui/core';\n\nimport { PipelineRunKind, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport {\n kubernetesProxyApiRef,\n TektonResourcesContextData,\n} from '../../types/types';\n\ntype PipelineRunOutputProps = {\n pipelineRun: PipelineRunKind;\n taskRuns: TaskRunKind[];\n};\n\nconst PipelineRunOutput: React.FC<PipelineRunOutputProps> = ({\n pipelineRun,\n taskRuns,\n}) => {\n const { clusters, selectedCluster } =\n React.useContext<TektonResourcesContextData>(TektonResourcesContext);\n const kubernetesProxyApi = useApi(kubernetesProxyApiRef);\n\n const currCluster =\n (clusters.length > 0 && clusters[selectedCluster || 0]) || '';\n\n const getLogs = React.useCallback(\n async (podName: string, containerName: string): Promise<string> => {\n return await kubernetesProxyApi\n .getPodLogs({\n podName: podName,\n namespace: pipelineRun?.metadata?.namespace ?? '',\n containerName: containerName,\n clusterName: currCluster,\n })\n .then(res => res?.text);\n },\n [kubernetesProxyApi, currCluster, pipelineRun],\n );\n\n const outputGroup = usePipelineRunOutput(\n pipelineRun as PipelineRunV1Kind,\n taskRuns as TaskRunV1Kind[],\n getLogs,\n );\n\n const stillLoading =\n outputGroup?.ec?.loading &&\n (outputGroup?.acsImageScan?.loading ||\n outputGroup?.acsImageCheck?.loading ||\n outputGroup?.acsDeploymentCheck?.loading);\n\n const isEmpty = (data: ACSCheckResults | ACSImageScanResult) =>\n Object.keys(data).length === 0;\n const noDataAvailable =\n outputGroup?.ec?.data.length === 0 &&\n outputGroup.results.data.length === 0 &&\n isEmpty(outputGroup?.acsImageScan?.data) &&\n isEmpty(outputGroup?.acsImageScan?.data) &&\n isEmpty(outputGroup?.acsImageScan?.data);\n\n const renderOutput = () => {\n if (stillLoading && noDataAvailable) {\n return <Progress />;\n }\n\n if (!stillLoading && noDataAvailable) {\n return (\n <Typography align=\"center\" variant=\"body2\">\n No output found\n </Typography>\n );\n }\n\n const metadata =\n outputGroup?.acsImageCheck?.data?.results?.[0]?.metadata?.additionalInfo;\n if (metadata?.name?.includes('@')) {\n metadata.name = metadata?.name.substr(0, metadata?.name.lastIndexOf('@'));\n }\n\n return (\n <Output\n enterpriseContractPolicies={outputGroup?.ec?.data ?? []}\n acsImageScanResult={outputGroup?.acsImageScan?.data}\n acsImageCheckResults={outputGroup?.acsImageCheck?.data}\n acsDeploymentCheckResults={outputGroup?.acsDeploymentCheck?.data}\n pipelineRunName={pipelineRun?.metadata?.name ?? ''}\n pipelineRunStatus={outputGroup.status}\n results={outputGroup.results.data}\n />\n );\n };\n\n return (\n <Grid>\n <div style={{ height: '80vh' }}>\n <Paper\n elevation={1}\n style={{ height: '100%', width: '100%', minHeight: '30rem' }}\n >\n {renderOutput()}\n </Paper>\n </div>\n </Grid>\n );\n};\nexport default PipelineRunOutput;\n"],"names":["React"],"mappings":";;;;;;;;AA2CA,MAAM,oBAAsD,CAAC;AAAA,EAC3D,WAAA;AAAA,EACA;AACF,CAAM,KAAA;AACJ,EAAA,MAAM,EAAE,QAAU,EAAA,eAAA,EAChB,GAAAA,cAAA,CAAM,WAAuC,sBAAsB,CAAA;AACrE,EAAM,MAAA,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AAEvD,EAAA,MAAM,cACH,QAAS,CAAA,MAAA,GAAS,KAAK,QAAS,CAAA,eAAA,IAAmB,CAAC,CAAM,IAAA,EAAA;AAE7D,EAAA,MAAM,UAAUA,cAAM,CAAA,WAAA;AAAA,IACpB,OAAO,SAAiB,aAA2C,KAAA;AACjE,MAAO,OAAA,MAAM,mBACV,UAAW,CAAA;AAAA,QACV,OAAA;AAAA,QACA,SAAA,EAAW,WAAa,EAAA,QAAA,EAAU,SAAa,IAAA,EAAA;AAAA,QAC/C,aAAA;AAAA,QACA,WAAa,EAAA;AAAA,OACd,CAAA,CACA,IAAK,CAAA,CAAA,GAAA,KAAO,KAAK,IAAI,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,kBAAoB,EAAA,WAAA,EAAa,WAAW;AAAA,GAC/C;AAEA,EAAA,MAAM,WAAc,GAAA,oBAAA;AAAA,IAClB,WAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAM,MAAA,YAAA,GACJ,WAAa,EAAA,EAAA,EAAI,OAChB,KAAA,WAAA,EAAa,YAAc,EAAA,OAAA,IAC1B,WAAa,EAAA,aAAA,EAAe,OAC5B,IAAA,WAAA,EAAa,kBAAoB,EAAA,OAAA,CAAA;AAErC,EAAA,MAAM,UAAU,CAAC,IAAA,KACf,OAAO,IAAK,CAAA,IAAI,EAAE,MAAW,KAAA,CAAA;AAC/B,EAAM,MAAA,eAAA,GACJ,WAAa,EAAA,EAAA,EAAI,IAAK,CAAA,MAAA,KAAW,KACjC,WAAY,CAAA,OAAA,CAAQ,IAAK,CAAA,MAAA,KAAW,CACpC,IAAA,OAAA,CAAQ,aAAa,YAAc,EAAA,IAAI,CACvC,IAAA,OAAA,CAAQ,WAAa,EAAA,YAAA,EAAc,IAAI,CACvC,IAAA,OAAA,CAAQ,WAAa,EAAA,YAAA,EAAc,IAAI,CAAA;AAEzC,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,gBAAgB,eAAiB,EAAA;AACnC,MAAA,oDAAQ,QAAS,EAAA,IAAA,CAAA;AAAA;AAGnB,IAAI,IAAA,CAAC,gBAAgB,eAAiB,EAAA;AACpC,MAAA,oDACG,UAAW,EAAA,EAAA,KAAA,EAAM,QAAS,EAAA,OAAA,EAAQ,WAAQ,iBAE3C,CAAA;AAAA;AAIJ,IAAA,MAAM,WACJ,WAAa,EAAA,aAAA,EAAe,MAAM,OAAU,GAAA,CAAC,GAAG,QAAU,EAAA,cAAA;AAC5D,IAAA,IAAI,QAAU,EAAA,IAAA,EAAM,QAAS,CAAA,GAAG,CAAG,EAAA;AACjC,MAAS,QAAA,CAAA,IAAA,GAAO,UAAU,IAAK,CAAA,MAAA,CAAO,GAAG,QAAU,EAAA,IAAA,CAAK,WAAY,CAAA,GAAG,CAAC,CAAA;AAAA;AAG1E,IACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,0BAA4B,EAAA,WAAA,EAAa,EAAI,EAAA,IAAA,IAAQ,EAAC;AAAA,QACtD,kBAAA,EAAoB,aAAa,YAAc,EAAA,IAAA;AAAA,QAC/C,oBAAA,EAAsB,aAAa,aAAe,EAAA,IAAA;AAAA,QAClD,yBAAA,EAA2B,aAAa,kBAAoB,EAAA,IAAA;AAAA,QAC5D,eAAA,EAAiB,WAAa,EAAA,QAAA,EAAU,IAAQ,IAAA,EAAA;AAAA,QAChD,mBAAmB,WAAY,CAAA,MAAA;AAAA,QAC/B,OAAA,EAAS,YAAY,OAAQ,CAAA;AAAA;AAAA,KAC/B;AAAA,GAEJ;AAEA,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,4BACEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,MAAA,EAAQ,QACpB,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAA,CAAA;AAAA,MACX,OAAO,EAAE,MAAA,EAAQ,QAAQ,KAAO,EAAA,MAAA,EAAQ,WAAW,OAAQ;AAAA,KAAA;AAAA,IAE1D,YAAa;AAAA,GAElB,CACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"PipelineRunOutput.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunOutput.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 type { FC } from 'react';\n\nimport { useContext, useCallback } from 'react';\n\nimport { Progress } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport {\n ACSCheckResults,\n ACSImageScanResult,\n Output,\n PipelineRunKind as PipelineRunV1Kind,\n TaskRunKind as TaskRunV1Kind,\n usePipelineRunOutput,\n} from '@aonic-ui/pipelines';\nimport { Grid, Paper, Typography } from '@material-ui/core';\n\nimport { PipelineRunKind, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport {\n kubernetesProxyApiRef,\n TektonResourcesContextData,\n} from '../../types/types';\nimport { tektonTranslationRef } from '../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\ntype PipelineRunOutputProps = {\n pipelineRun: PipelineRunKind;\n taskRuns: TaskRunKind[];\n};\n\nconst PipelineRunOutput: FC<PipelineRunOutputProps> = ({\n pipelineRun,\n taskRuns,\n}) => {\n const { clusters, selectedCluster } = useContext<TektonResourcesContextData>(\n TektonResourcesContext,\n );\n const kubernetesProxyApi = useApi(kubernetesProxyApiRef);\n const { t } = useTranslationRef(tektonTranslationRef);\n\n const currCluster =\n (clusters.length > 0 && clusters[selectedCluster || 0]) || '';\n\n const getLogs = useCallback(\n async (podName: string, containerName: string): Promise<string> => {\n return await kubernetesProxyApi\n .getPodLogs({\n podName: podName,\n namespace: pipelineRun?.metadata?.namespace ?? '',\n containerName: containerName,\n clusterName: currCluster,\n })\n .then(res => res?.text);\n },\n [kubernetesProxyApi, currCluster, pipelineRun],\n );\n\n const outputGroup = usePipelineRunOutput(\n pipelineRun as PipelineRunV1Kind,\n taskRuns as TaskRunV1Kind[],\n getLogs,\n );\n\n const stillLoading =\n outputGroup?.ec?.loading &&\n (outputGroup?.acsImageScan?.loading ||\n outputGroup?.acsImageCheck?.loading ||\n outputGroup?.acsDeploymentCheck?.loading);\n\n const isEmpty = (data: ACSCheckResults | ACSImageScanResult) =>\n Object.keys(data).length === 0;\n const noDataAvailable =\n outputGroup?.ec?.data.length === 0 &&\n outputGroup.results.data.length === 0 &&\n isEmpty(outputGroup?.acsImageScan?.data) &&\n isEmpty(outputGroup?.acsImageScan?.data) &&\n isEmpty(outputGroup?.acsImageScan?.data);\n\n const renderOutput = () => {\n if (stillLoading && noDataAvailable) {\n return <Progress />;\n }\n\n if (!stillLoading && noDataAvailable) {\n return (\n <Typography align=\"center\" variant=\"body2\">\n {t('pipelineRunOutput.noOutput')}\n </Typography>\n );\n }\n\n const metadata =\n outputGroup?.acsImageCheck?.data?.results?.[0]?.metadata?.additionalInfo;\n if (metadata?.name?.includes('@')) {\n metadata.name = metadata?.name.substr(0, metadata?.name.lastIndexOf('@'));\n }\n\n return (\n <Output\n enterpriseContractPolicies={outputGroup?.ec?.data ?? []}\n acsImageScanResult={outputGroup?.acsImageScan?.data}\n acsImageCheckResults={outputGroup?.acsImageCheck?.data}\n acsDeploymentCheckResults={outputGroup?.acsDeploymentCheck?.data}\n pipelineRunName={pipelineRun?.metadata?.name ?? ''}\n pipelineRunStatus={outputGroup.status}\n results={outputGroup.results.data}\n />\n );\n };\n\n return (\n <Grid>\n <div style={{ height: '80vh' }}>\n <Paper\n elevation={1}\n style={{ height: '100%', width: '100%', minHeight: '30rem' }}\n >\n {renderOutput()}\n </Paper>\n </div>\n </Grid>\n );\n};\nexport default PipelineRunOutput;\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import React__default from 'react';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useEffect, Fragment } from 'react';
2
3
  import { makeStyles, TableRow, TableCell, IconButton, Collapse, Box } from '@material-ui/core';
3
4
  import KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';
4
5
  import KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';
@@ -13,6 +14,8 @@ import '../../consts/pipeline-topology-const.esm.js';
13
14
  import '../pipeline-topology/PipelineTaskNode.esm.js';
14
15
  import '../pipeline-topology/TaskGroupEdge.esm.js';
15
16
  import '../pipeline-topology/PipelineVisualization.css.esm.js';
17
+ import '@backstage/core-plugin-api/alpha';
18
+ import '../../translation.esm.js';
16
19
  import { PipelineRunVisualization } from '../pipeline-topology/PipelineRunVisualization.esm.js';
17
20
  import PipelineRunRowActions from './PipelineRunRowActions.esm.js';
18
21
  import PipelineRunTaskStatus from './PipelineRunTaskStatus.esm.js';
@@ -43,24 +46,24 @@ const PipelineRunName = ({ row }) => {
43
46
  const classes = useStyles();
44
47
  const name = row.metadata?.name;
45
48
  const signed = row?.metadata?.annotations?.[TEKTON_SIGNED_ANNOTATION] === "true";
46
- return /* @__PURE__ */ React__default.createElement("div", null, name ? /* @__PURE__ */ React__default.createElement(
49
+ return /* @__PURE__ */ jsx("div", { children: name ? /* @__PURE__ */ jsx(
47
50
  ResourceBadge,
48
51
  {
49
52
  color: tektonGroupColor,
50
53
  abbr: "PLR",
51
54
  name: name || "",
52
- suffix: signed ? /* @__PURE__ */ React__default.createElement(Tooltip, { content: "Signed" }, /* @__PURE__ */ React__default.createElement(
55
+ suffix: signed ? /* @__PURE__ */ jsx(Tooltip, { content: "Signed", children: /* @__PURE__ */ jsx(
53
56
  "div",
54
57
  {
55
58
  className: classNames(
56
59
  classes.signedIndicator,
57
60
  "signed-indicator"
58
- )
59
- },
60
- /* @__PURE__ */ React__default.createElement(SignedBadgeIcon, null)
61
- )) : null
61
+ ),
62
+ children: /* @__PURE__ */ jsx(SignedBadgeIcon, {})
63
+ }
64
+ ) }) : null
62
65
  }
63
- ) : "-");
66
+ ) : "-" });
64
67
  };
65
68
  const PipelineRunRow = ({
66
69
  row,
@@ -71,7 +74,7 @@ const PipelineRunRow = ({
71
74
  }) => {
72
75
  const classes = useStyles();
73
76
  const uid = row.metadata?.uid;
74
- React__default.useEffect(() => {
77
+ useEffect(() => {
75
78
  return setOpen((val) => {
76
79
  return {
77
80
  ...val,
@@ -89,21 +92,33 @@ const PipelineRunRow = ({
89
92
  };
90
93
  });
91
94
  };
92
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, { key: uid }, /* @__PURE__ */ React__default.createElement(TableRow, { className: classes.plrRow }, /* @__PURE__ */ React__default.createElement(TableCell, null, /* @__PURE__ */ React__default.createElement(
93
- IconButton,
94
- {
95
- "aria-label": "expand row",
96
- size: "small",
97
- onClick: expandCollapseClickHandler
98
- },
99
- open ? /* @__PURE__ */ React__default.createElement(KeyboardArrowDownIcon, null) : /* @__PURE__ */ React__default.createElement(KeyboardArrowRightIcon, null)
100
- )), /* @__PURE__ */ React__default.createElement(TableCell, { align: "left" }, /* @__PURE__ */ React__default.createElement(PipelineRunName, { row })), /* @__PURE__ */ React__default.createElement(TableCell, { align: "left" }, /* @__PURE__ */ React__default.createElement(PipelineRunVulnerabilities, { pipelineRun: row, condensed: true })), /* @__PURE__ */ React__default.createElement(TableCell, { align: "left" }, /* @__PURE__ */ React__default.createElement(PlrStatus, { obj: row })), /* @__PURE__ */ React__default.createElement(TableCell, { align: "left" }, /* @__PURE__ */ React__default.createElement(PipelineRunTaskStatus, { pipelineRun: row })), /* @__PURE__ */ React__default.createElement(TableCell, { align: "left" }, startTime ? /* @__PURE__ */ React__default.createElement(
101
- Timestamp,
102
- {
103
- className: "bs-tkn-timestamp",
104
- date: new Date(startTime)
105
- }
106
- ) : "-"), /* @__PURE__ */ React__default.createElement(TableCell, { align: "left" }, pipelineRunDuration(row)), /* @__PURE__ */ React__default.createElement(TableCell, { align: "left" }, /* @__PURE__ */ React__default.createElement(PipelineRunRowActions, { pipelineRun: row }))), /* @__PURE__ */ React__default.createElement(TableRow, { className: classes.plrVisRow }, /* @__PURE__ */ React__default.createElement(TableCell, { style: { paddingBottom: 0, paddingTop: 0 }, colSpan: 8 }, /* @__PURE__ */ React__default.createElement(Collapse, { in: open, timeout: "auto", unmountOnExit: true }, /* @__PURE__ */ React__default.createElement(Box, { marginTop: 1, marginBottom: 1 }, /* @__PURE__ */ React__default.createElement(PipelineRunVisualization, { pipelineRunName: row.metadata?.name }))))));
95
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
96
+ /* @__PURE__ */ jsxs(TableRow, { className: classes.plrRow, children: [
97
+ /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(
98
+ IconButton,
99
+ {
100
+ "aria-label": "expand row",
101
+ size: "small",
102
+ onClick: expandCollapseClickHandler,
103
+ children: open ? /* @__PURE__ */ jsx(KeyboardArrowDownIcon, {}) : /* @__PURE__ */ jsx(KeyboardArrowRightIcon, {})
104
+ }
105
+ ) }),
106
+ /* @__PURE__ */ jsx(TableCell, { align: "left", children: /* @__PURE__ */ jsx(PipelineRunName, { row }) }),
107
+ /* @__PURE__ */ jsx(TableCell, { align: "left", children: /* @__PURE__ */ jsx(PipelineRunVulnerabilities, { pipelineRun: row, condensed: true }) }),
108
+ /* @__PURE__ */ jsx(TableCell, { align: "left", children: /* @__PURE__ */ jsx(PlrStatus, { obj: row }) }),
109
+ /* @__PURE__ */ jsx(TableCell, { align: "left", children: /* @__PURE__ */ jsx(PipelineRunTaskStatus, { pipelineRun: row }) }),
110
+ /* @__PURE__ */ jsx(TableCell, { align: "left", children: startTime ? /* @__PURE__ */ jsx(
111
+ Timestamp,
112
+ {
113
+ className: "bs-tkn-timestamp",
114
+ date: new Date(startTime)
115
+ }
116
+ ) : "-" }),
117
+ /* @__PURE__ */ jsx(TableCell, { align: "left", children: pipelineRunDuration(row) }),
118
+ /* @__PURE__ */ jsx(TableCell, { align: "left", children: /* @__PURE__ */ jsx(PipelineRunRowActions, { pipelineRun: row }) })
119
+ ] }),
120
+ /* @__PURE__ */ jsx(TableRow, { className: classes.plrVisRow, children: /* @__PURE__ */ jsx(TableCell, { style: { paddingBottom: 0, paddingTop: 0 }, colSpan: 8, children: /* @__PURE__ */ jsx(Collapse, { in: open, timeout: "auto", unmountOnExit: true, children: /* @__PURE__ */ jsx(Box, { marginTop: 1, marginBottom: 1, children: /* @__PURE__ */ jsx(PipelineRunVisualization, { pipelineRunName: row.metadata?.name }) }) }) }) })
121
+ ] }, uid);
107
122
  };
108
123
 
109
124
  export { PipelineRunRow };