2023-02-02 15:57:09 -05:00
|
|
|
|
const compareResults = currentUser => (a, b) => {
|
|
|
|
|
return ['/projects/', currentUser]
|
|
|
|
|
.some(href => a.children[0].href.includes(href)) ? -1 : 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const sortChildren = ol => {
|
|
|
|
|
const children = Array.from(ol.children)
|
|
|
|
|
children.forEach(child => ol.removeChild(child))
|
|
|
|
|
children
|
|
|
|
|
.sort(compareResults(getCurrentUser()))
|
|
|
|
|
.forEach(child => ol.appendChild(child))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Re-order the search results to list projects and the current user first
|
|
|
|
|
let claim = 0
|
|
|
|
|
const sortSearchResult = () => {
|
|
|
|
|
const searchBox = Array.from(document.getElementsByTagName('input'))
|
|
|
|
|
.filter(input => input.name === 'repository-search')[0]
|
2023-02-07 14:01:47 -05:00
|
|
|
|
if (!searchBox) {
|
|
|
|
|
return
|
|
|
|
|
}
|
2023-02-02 15:57:09 -05:00
|
|
|
|
searchBox.onkeyup = e => {
|
|
|
|
|
claim++
|
|
|
|
|
const myClaim = claim
|
|
|
|
|
setTimeout(() => {
|
2023-02-07 14:01:47 -05:00
|
|
|
|
if (claim !== myClaim) {
|
2023-02-02 15:57:09 -05:00
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
const ol = getClassNameElementsArray('search-results')[0]?.firstChild
|
|
|
|
|
sortChildren(ol)
|
|
|
|
|
claim = 0
|
|
|
|
|
}, 1000)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-11 16:33:57 -04:00
|
|
|
|
/////////////////////////////
|
|
|
|
|
// PR Reviewer Suggestions //
|
|
|
|
|
/////////////////////////////
|
|
|
|
|
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()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-02 15:57:09 -05:00
|
|
|
|
addFix(sortSearchResult)
|