Pail/pr-reviewer-suggestions.js

70 lines
2.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

if (location.toString().includes('/pull-requests?create')) {
const names = [
"Tam Nguyen",
"David Daniel",
"Nikalas Culvey",
"Michael Mezzina",
"Sage Vaillancourt",
"John Cyr",
"Adam Weizman",
"Caleb Soper",
"Rockey Liles",
"Fernando Batista"
]
const urlPrefix = 'https://git.add123.com/rest/api/latest'
fetch(`${urlPrefix}/projects/ADD/repos?limit=999`)
.then(resp => resp.json())
.then(async ({values: allRepos}) => {
const prListUrls = allRepos.map(repo => `${urlPrefix}/projects/ADD/repos/${repo.slug}/pull-requests`)
const allPullRequests = (await Promise.all(
prListUrls.map(async prListUrl => await fetch(prListUrl).then(resp => resp.json())))
).flatMap(({values}) => values)
const reviewerCounts = Object.fromEntries(names.map(name => [name, 0]))
allPullRequests.forEach(({reviewers}) => {
reviewers?.map(r => r.user.displayName)
.filter(displayName => !["Chris Gamache", "Tom Keels"].includes(displayName))
.forEach(displayName => {
reviewerCounts[displayName] ??= 0
reviewerCounts[displayName] += 1
})
})
const sortedCounts = Object.entries(reviewerCounts)
.map(([name, count]) => ({ name, count }))
.toSorted((a, b) => a.count - b.count)
const tryDisplay = () => setTimeout(() => {
if (document.getElementById('reviewer-counts')) {
return
}
const formBodyMain = document.querySelector('.create-pull-request-form .form-body .form-body-main')
if (formBodyMain) {
const countsParent = formBodyMain.lastChild.cloneNode(true)
const reviewerCountsNode = document.createElement('ol')
reviewerCountsNode.id = 'reviewer-counts'
reviewerCountsNode.style.columns = '3'
reviewerCountsNode.style.listStyle = 'none'
reviewerCountsNode.style.paddingLeft = '2px'
reviewerCountsNode.style.marginTop = 'auto'
// reviewerCountsNode.style.lineHeight = '95%'
reviewerCountsNode.style.fontSize = '0.9em'
sortedCounts.slice(0, 6).forEach(({ name, count }) => {
const listItem = document.createElement('li')
listItem.innerText = `${count} PR${count !== 1 ? 's' : 's'} ${name}`
reviewerCountsNode.appendChild(listItem)
})
const label = countsParent.querySelector('.form-label')
label.innerText = 'Now reviewing'
const message = countsParent.querySelector('.form-field-content')
message.replaceChildren(reviewerCountsNode)
formBodyMain.appendChild(countsParent)
} else {
tryDisplay()
}
}, 300)
tryDisplay()
})
}