UNPKG

@roadiehq/backstage-plugin-github-insights

Version:
55 lines (52 loc) 1.68 kB
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