UNPKG

@digital-ai/plugin-dai-deploy

Version:

Frontend functionalities for the dai-deploy backstage plugin

238 lines (235 loc) 6.48 kB
import { Table, LinkButton, Link } from '@backstage/core-components'; import LaunchIcon from '@material-ui/icons/Launch'; import React from 'react'; import SyncIcon from '@material-ui/icons/Sync'; import Typography from '@mui/material/Typography'; import capitalize from 'lodash/capitalize'; import { formatTimestamp } from '../../utils/dateTimeUtils.esm.js'; import { makeStyles } from '@material-ui/core'; const headerStyle = { textTransform: "capitalize", whiteSpace: "nowrap" }; const cellStyle = { width: "auto", whiteSpace: "nowrap" }; const useStyles = makeStyles((theme) => ({ empty: { padding: theme.spacing(2), display: "flex", justifyContent: "center" } })); const columnFactories = Object.freeze({ createUserColumns() { return { title: "User", field: "owner", cellStyle, headerStyle, render: (row) => ` ${row.owner}`, searchable: true, sorting: true }; }, createStateColumns() { return { title: "State", field: "state", cellStyle, headerStyle, render: (row) => capitalize(row.state), searchable: true, sorting: true }; }, createStartDateColumns() { return { title: "Start Date", field: "startDate", cellStyle, headerStyle, render: (row) => formatTimestamp(row.startDate), searchable: true, sorting: true }; }, createEndDateColumns() { return { title: "End Date", field: "completionDate", cellStyle, headerStyle, render: (row) => formatTimestamp(row.completionDate), searchable: true, sorting: true }; }, createPackageColumns() { return { title: "Package", field: "package", cellStyle, headerStyle, render: (row) => row.package, searchable: true, sorting: true }; }, createActivePackageColumns() { return { title: "Package", field: "metadata.application", cellStyle, headerStyle, customFilterAndSearch: (query, row) => `${row.metadata.application} ${row.metadata.version}`.toLocaleUpperCase("en-US").includes(query.toLocaleUpperCase("en-US")), render: (row) => `${row.metadata.application}/${row.metadata.version}`, customSort: (a, b) => { const packageA = `${a.metadata.application} ${a.metadata.version}`; const packageB = `${b.metadata.application} ${b.metadata.version}`; return packageA.localeCompare(packageB); }, searchable: true, sorting: true }; }, createEnvironmentColumns() { return { title: "Environment", field: "environment", cellStyle, headerStyle, render: (row) => /* @__PURE__ */ React.createElement(Link, { to: row.environmentRedirectUri }, row.environment), searchable: true, sorting: true }; }, createActiveEnvironmentColumns() { return { title: "Environment", field: "metadata.environment", cellStyle, headerStyle, render: (row) => /* @__PURE__ */ React.createElement(Link, { to: row.environmentRedirectUri }, row.metadata.environment), searchable: true, sorting: true }; }, createScheduledDateColumns() { return { title: "Scheduled Date", field: "scheduledDate", cellStyle, headerStyle, render: (row) => formatTimestamp(row.scheduledDate), searchable: true, sorting: true }; }, createTypeColumns() { return { title: "Type", field: "type", cellStyle, headerStyle, render: (row) => capitalize(row.type), searchable: true, sorting: true }; }, createActiveTypeColumns() { return { title: "Type", field: "metadata.taskType", cellStyle, headerStyle, render: (row) => capitalize(row.metadata.taskType), searchable: true, sorting: true }; }, createRedirectionColumns() { return { title: "View", field: "taskId", cellStyle, headerStyle, render: (row) => /* @__PURE__ */ React.createElement(LinkButton, { to: `${row.detailsRedirectUri}` }, /* @__PURE__ */ React.createElement(LaunchIcon, null)), searchable: false, sorting: false }; } }); const defaultActiveColumns = [ columnFactories.createActivePackageColumns(), columnFactories.createActiveEnvironmentColumns(), columnFactories.createActiveTypeColumns(), columnFactories.createUserColumns(), columnFactories.createStateColumns(), columnFactories.createScheduledDateColumns(), columnFactories.createStartDateColumns(), columnFactories.createEndDateColumns(), columnFactories.createRedirectionColumns() ]; const defaultArchivedColumns = [ columnFactories.createPackageColumns(), columnFactories.createEnvironmentColumns(), columnFactories.createTypeColumns(), columnFactories.createUserColumns(), columnFactories.createStateColumns(), columnFactories.createStartDateColumns(), columnFactories.createEndDateColumns(), columnFactories.createRedirectionColumns() ]; const DenseTable = ({ tableData, loading, page, pageSize, totalCount, onPageChange, onRowsPerPageChange, columns, retry, onOrderDirection, onOrderBy }) => { const classes = useStyles(); return /* @__PURE__ */ React.createElement( Table, { columns, data: tableData, page, totalCount, isLoading: loading, actions: [ { icon: () => /* @__PURE__ */ React.createElement(SyncIcon, { fontSize: "medium" }), tooltip: "Refresh Data", isFreeAction: true, onClick: () => retry() } ], options: { paging: true, search: true, showTitle: false, pageSize, pageSizeOptions: [5, 10, 20, 50], padding: "dense", showFirstLastPageButtons: true, showEmptyDataSourceMessage: !loading, toolbar: true, toolbarButtonAlignment: "left" }, onPageChange, onRowsPerPageChange, onOrderChange: (orderBy, orderDirection) => { onOrderBy(orderBy); onOrderDirection(orderDirection); }, emptyContent: /* @__PURE__ */ React.createElement(Typography, { color: "textSecondary", className: classes.empty }, "No tasks available") } ); }; export { DenseTable, columnFactories, defaultActiveColumns, defaultArchivedColumns }; //# sourceMappingURL=DenseTable.esm.js.map