UNPKG

@immobiliarelabs/backstage-plugin-gitlab

Version:
93 lines (90 loc) 3.2 kB
import React from 'react'; import { Progress, Table } from '@backstage/core-components'; import Alert from '@material-ui/lab/Alert'; import { useAsync } from 'react-use'; import { gitlabProjectId, gitlabProjectSlug, gitlabInstance } from '../../gitlabAppData.esm.js'; import { GitlabCIApiRef } from '../../../api/GitlabCIApi.esm.js'; import { getElapsedTime, getDuration } from '../../utils.esm.js'; import '@gitbeaker/rest'; import 'dayjs'; import { useApi } from '@backstage/core-plugin-api'; import { createTitleColumn } from './columns.esm.js'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { gitlabTranslationRef } from '../../../translation.esm.js'; const MergeRequestDenseTable = ({ data, projectName }) => { const { t } = useTranslationRef(gitlabTranslationRef); const columns = [ { title: "ID", field: "id" }, createTitleColumn(t), { title: t("mergeRequestsTable.columnsTitle.creator"), field: "author" }, { title: t("mergeRequestsTable.columnsTitle.state"), field: "state" }, { title: t("mergeRequestsTable.columnsTitle.createdAt"), field: "created_date" }, { title: t("mergeRequestsTable.columnsTitle.duration"), field: "duration" } ]; const title = t("mergeRequestsTable.title", { projectName }); const mappedData = data.map((mergeRequest) => { return { id: mergeRequest.id, state: mergeRequest.state, author: mergeRequest.author.username, title: mergeRequest.title, web_url: mergeRequest.web_url, created_date: getElapsedTime(mergeRequest.created_at), duration: getDuration( mergeRequest.created_at, mergeRequest.updated_at ) }; }); return /* @__PURE__ */ React.createElement( Table, { title, options: { search: true, paging: true }, columns, data: mappedData || [] } ); }; const MergeRequestsTable = ({}) => { const project_id = gitlabProjectId(); const project_slug = gitlabProjectSlug(); const gitlab_instance = gitlabInstance(); const GitlabCIAPI = useApi(GitlabCIApiRef).build( gitlab_instance || "gitlab.com" ); const { value, loading, error } = useAsync(async () => { const projectDetails = await GitlabCIAPI.getProjectDetails( project_slug || project_id ); if (!projectDetails) throw new Error("wrong project_slug or project_id"); const summary = await GitlabCIAPI.getMergeRequestsSummary( projectDetails.id ); if (!summary) throw new Error("Merge request summary is undefined!"); return { data: summary, projectName: projectDetails.name }; }, []); if (loading) { return /* @__PURE__ */ React.createElement(Progress, null); } else if (error) { return /* @__PURE__ */ React.createElement(Alert, { severity: "error" }, error.message); } else if (!value) { return /* @__PURE__ */ React.createElement(Alert, { severity: "error" }, "Merge request data are not available."); } return /* @__PURE__ */ React.createElement(MergeRequestDenseTable, { ...value }); }; export { MergeRequestDenseTable, MergeRequestsTable }; //# sourceMappingURL=MergeRequestsTable.esm.js.map