@backstage-community/plugin-gitops-profiles
Version:
A Backstage plugin that helps you manage GitOps profiles
73 lines (70 loc) • 2.87 kB
JavaScript
import { jsxs, jsx } from 'react/jsx-runtime';
import { useState, useEffect } from 'react';
import { useParams } from 'react-router-dom';
import { gitOpsApiRef } from '../../api.esm.js';
import { transformRunStatus } from '../ProfileCatalog/ProfileCatalog.esm.js';
import { Page, Header, HeaderLabel, Content, Progress, Table, Link } from '@backstage/core-components';
import { useApi, githubAuthApiRef } from '@backstage/core-plugin-api';
const ClusterPage = () => {
const params = useParams();
const [pollingLog, setPollingLog] = useState(true);
const [runStatus, setRunStatus] = useState([]);
const [runLink, setRunLink] = useState("");
const [showProgress, setShowProgress] = useState(true);
const api = useApi(gitOpsApiRef);
const githubAuth = useApi(githubAuthApiRef);
const [githubAccessToken, setGithubAccessToken] = useState(String);
const [githubUsername, setGithubUsername] = useState(String);
const columns = [
{ field: "status", title: "Status" },
{ field: "message", title: "Message" }
];
useEffect(() => {
const fetchGithubUserInfo = async () => {
const accessToken = await githubAuth.getAccessToken(["repo", "user"]);
const userInfo = await api.fetchUserInfo({ accessToken });
setGithubAccessToken(accessToken);
setGithubUsername(userInfo.login);
};
if (!githubAccessToken || !githubUsername) {
fetchGithubUserInfo();
} else {
if (pollingLog) {
const interval = setInterval(async () => {
const resp = await api.fetchLog({
gitHubToken: githubAccessToken,
gitHubUser: githubUsername,
targetOrg: params.owner,
targetRepo: params.repo
});
setRunStatus(resp.result);
setRunLink(resp.link);
if (resp.status === "completed") {
setPollingLog(false);
setShowProgress(false);
}
}, 1e4);
return () => clearInterval(interval);
}
}
return () => {
};
}, [pollingLog, api, params, githubAuth, githubAccessToken, githubUsername]);
return /* @__PURE__ */ jsxs(Page, { themeId: "home", children: [
/* @__PURE__ */ jsx(Header, { title: `Cluster ${params.owner}/${params.repo}`, children: /* @__PURE__ */ jsx(HeaderLabel, { label: "Welcome", value: githubUsername }) }),
/* @__PURE__ */ jsxs(Content, { children: [
/* @__PURE__ */ jsx(Progress, { hidden: !showProgress }),
/* @__PURE__ */ jsx(
Table,
{
options: { search: false, paging: false, toolbar: false },
data: transformRunStatus(runStatus),
columns
}
),
/* @__PURE__ */ jsx(Link, { hidden: runLink === "", to: `${runLink}?check_suite_focus=true`, children: "Details" })
] })
] });
};
export { ClusterPage as default };
//# sourceMappingURL=ClusterPage.esm.js.map