Skip to content

Commit 9b7d906

Browse files
committed
feat: Bump version to 5.6 and add shift-click selection for merging Dependabot PRs
1 parent e045ee9 commit 9b7d906

1 file changed

Lines changed: 24 additions & 2 deletions

File tree

MergeDependabotPRs.user.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// ==UserScript==
22
// @name Auto-Merge Dependabot PRs
33
// @namespace typpi.online
4-
// @version 5.5
4+
// @version 5.6
55
// @description Merges Dependabot PRs in any of your repositories - pulls the PRs into a table and lets you select which ones to merge.
66
// @author Nick2bad4u
77
// @match https://github.com/notifications
@@ -367,6 +367,8 @@
367367
container.classList.add('pr-selection-container');
368368

369369
const prList = document.createElement('div');
370+
let lastChecked = null; // Track the last clicked checkbox
371+
370372
prs.forEach((pr) => {
371373
const prItem = document.createElement('div');
372374
const checkbox = document.createElement('input');
@@ -377,6 +379,19 @@
377379
label.textContent = `Repo: ${pr.repo} - PR #${pr.number}: ${pr.title}`;
378380
label.style = 'margin-left: 5px;';
379381

382+
// Add event listener for shift-click selection
383+
checkbox.addEventListener('click', (event) => {
384+
if (event.shiftKey && lastChecked) {
385+
const checkboxes = Array.from(prList.querySelectorAll('input[type="checkbox"]'));
386+
const start = Math.min(checkboxes.indexOf(lastChecked), checkboxes.indexOf(checkbox));
387+
const end = Math.max(checkboxes.indexOf(lastChecked), checkboxes.indexOf(checkbox));
388+
for (let i = start; i <= end; i++) {
389+
checkboxes[i].checked = lastChecked.checked;
390+
}
391+
}
392+
lastChecked = checkbox; // Update the last clicked checkbox
393+
});
394+
380395
prItem.appendChild(checkbox);
381396
prItem.appendChild(label);
382397
prList.appendChild(prItem);
@@ -385,7 +400,12 @@
385400
const mergeSelectedButton = document.createElement('button');
386401
mergeSelectedButton.textContent = 'Merge Selected PRs';
387402
mergeSelectedButton.addEventListener('click', async () => {
388-
const selectedPRs = Array.from(prList.querySelectorAll('input:checked')).map((input) => prs.find((pr) => pr.number == input.value));
403+
// Get all selected checkboxes
404+
const selectedCheckboxes = Array.from(prList.querySelectorAll('input[type="checkbox"]:checked'));
405+
406+
// Map selected checkboxes to their corresponding PRs
407+
const selectedPRs = selectedCheckboxes.map((checkbox) => prs.find((pr) => pr.number == checkbox.value));
408+
389409
if (selectedPRs.length > 0) {
390410
container.innerHTML = '<div id="merge-status">Merging PRs...<br></div>';
391411
const groupedPRs = selectedPRs.reduce((acc, pr) => {
@@ -395,6 +415,8 @@
395415
acc[pr.repo].push(pr);
396416
return acc;
397417
}, {});
418+
419+
// Merge PRs grouped by repository
398420
for (const [repo, prs] of Object.entries(groupedPRs)) {
399421
await mergeDependabotPRs(prs, username, repo, token);
400422
}

0 commit comments

Comments
 (0)