@roadiehq/backstage-plugin-github-insights
Version:
55 lines (52 loc) • 1.68 kB
JavaScript
import { useAsync } from 'react-use';
import { Octokit } from '@octokit/rest';
import { useApi } from '@backstage/core-plugin-api';
import { useEntityGithubScmIntegration } from './useEntityGithubScmIntegration.esm.js';
import { useEntity } from '@backstage/plugin-catalog-react';
import { useStore } from '../components/store.esm.js';
import { scmAuthApiRef } from '@backstage/integration-react';
const useContributor = (username) => {
const auth = useApi(scmAuthApiRef);
const { entity } = useEntity();
const { hostname, baseUrl } = useEntityGithubScmIntegration(entity);
const { state: contributorData, setState: setContributorData } = useStore(
(state) => state.contributor
);
const { value, loading, error } = useAsync(async () => {
let result;
try {
const { token } = await auth.getCredentials({
url: `https://${hostname}/`,
additionalScope: {
customScopes: {
github: ["repo"]
}
}
});
const octokit = new Octokit({ auth: token });
const response = await octokit.request(`GET /users/${username}`, {
headers: { "if-none-match": contributorData[username].etag },
baseUrl
});
result = {
data: response.data,
etag: response.headers.etag ?? ""
};
} catch (e) {
if (e.status === 304) {
result = contributorData[username];
}
}
return result;
}, [username, baseUrl]);
if (value) {
setContributorData(username, value);
}
return {
contributor: value ? value.data : void 0,
loading,
error
};
};
export { useContributor };
//# sourceMappingURL=useContributor.esm.js.map