@immobiliarelabs/backstage-plugin-gitlab
Version:
93 lines (90 loc) • 3.2 kB
JavaScript
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