feat: add review requests to My Work (#117)
This commit is contained in:
1 parent
26ffa1f1b3
commit
b7d4bd8137
7 files changed
+116
-14
No files matched your search
+5
-6
@@ -99,6 +99,7 @@ textarea { resize: vertical; min-height: 120px; }
|
||||
<button class="work-filter" data-work-filter="all" aria-pressed="true">All</button>
|
||||
<button class="work-filter" data-work-filter="issue" aria-pressed="false">Issues</button>
|
||||
<button class="work-filter" data-work-filter="pull" aria-pressed="false">PRs</button>
|
||||
<button class="work-filter" data-work-filter="review" aria-pressed="false">Reviews</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-work-list" id="my-work-list"></div>
|
||||
@@ -272,14 +273,12 @@ textarea { resize: vertical; min-height: 120px; }
|
||||
lastMyWork = buildMyWork(data);
|
||||
qs('#my-work').removeAttribute('data-stale');
|
||||
qs('#my-work-status').textContent = lastMyWork.length ?
|
||||
lastMyWork.length + ' assigned item' + (lastMyWork.length === 1 ? '' : 's') :
|
||||
'No assigned work.';
|
||||
summarizeMyWork(lastMyWork) : 'No assigned work or review requests.';
|
||||
renderMyWork();
|
||||
}
|
||||
|
||||
function renderMyWork() {
|
||||
const visible = selectedWorkFilter === 'all' ? lastMyWork :
|
||||
lastMyWork.filter(item => item.kind === selectedWorkFilter);
|
||||
const visible = filterMyWork(lastMyWork, selectedWorkFilter);
|
||||
qs('#my-work-list').innerHTML = visible.length ? visible.map(item =>
|
||||
'<a class="my-work-card" href="' + escAttr(item.url) + '" target="_blank" rel="noopener noreferrer">' +
|
||||
'<span class="small">' + escapeHtml(item.key) + ' · ' + escapeHtml(item.kind === 'pull' ? 'PR' : 'Issue') + '</span>' +
|
||||
@@ -287,13 +286,13 @@ textarea { resize: vertical; min-height: 120px; }
|
||||
'<span class="pill">' + escapeHtml(item.reason) + '</span>' +
|
||||
(item.updated_at ? '<span class="small"> · Updated ' + escapeHtml(fmt(item.updated_at)) + '</span>' : '') +
|
||||
'</a>'
|
||||
).join('') : '<div class="muted">No ' + (selectedWorkFilter === 'all' ? '' : selectedWorkFilter + ' ') + 'items.</div>';
|
||||
).join('') : '<div class="muted">No ' + (selectedWorkFilter === 'review' ? 'reviews' : (selectedWorkFilter === 'all' ? 'work' : selectedWorkFilter + ' items')) + '.</div>';
|
||||
}
|
||||
|
||||
function markMyWorkStale() {
|
||||
qs('#my-work').setAttribute('data-stale', 'true');
|
||||
qs('#my-work-status').textContent = lastMyWork.length ?
|
||||
'Update failed · showing last assigned work' : 'Assigned work unavailable.';
|
||||
'Update failed · showing last known work' : 'Work inbox unavailable.';
|
||||
}
|
||||
|
||||
function paintDeltas(deltas) {
|
||||
|
||||
+22
-2
@@ -10,11 +10,15 @@ function buildMyWork(data) {
|
||||
priorityLabels.includes(String(label).toLowerCase())
|
||||
);
|
||||
const assigned = (item.assignees || []).includes(login);
|
||||
const isReview = (item.work_reasons || []).includes('review_requested');
|
||||
return {
|
||||
...item,
|
||||
key: (item.repository || 'unknown') + '#' + item.number,
|
||||
reason: priorityLabel ? priorityLabel + ' priority' : (assigned ? 'Assigned to you' : 'Open work'),
|
||||
_priority: priorityLabel ? 0 : (assigned ? 1 : 2),
|
||||
is_review: isReview,
|
||||
is_assigned: assigned,
|
||||
reason: priorityLabel ? priorityLabel + ' priority' :
|
||||
(isReview ? 'Needs your review' : (assigned ? 'Assigned to you' : 'Open work')),
|
||||
_priority: priorityLabel ? 0 : (isReview ? 1 : (assigned ? 2 : 3)),
|
||||
};
|
||||
}).sort((left, right) =>
|
||||
left._priority - right._priority ||
|
||||
@@ -23,6 +27,22 @@ function buildMyWork(data) {
|
||||
).map(({ _priority, ...item }) => item);
|
||||
}
|
||||
|
||||
function filterMyWork(items, selectedFilter) {
|
||||
if (selectedFilter === 'all') return items;
|
||||
if (selectedFilter === 'review') return items.filter((item) => item.is_review);
|
||||
return items.filter((item) => item.kind === selectedFilter);
|
||||
}
|
||||
|
||||
function summarizeMyWork(items) {
|
||||
const reviews = items.filter((item) => item.is_review).length;
|
||||
const assigned = items.filter((item) => item.is_assigned).length;
|
||||
const reviewLabel = reviews + ' review' + (reviews === 1 ? '' : 's');
|
||||
const assignedLabel = assigned + ' assigned';
|
||||
return reviewLabel + ' · ' + assignedLabel;
|
||||
}
|
||||
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
buildMyWork.filterMyWork = filterMyWork;
|
||||
buildMyWork.summarizeMyWork = summarizeMyWork;
|
||||
module.exports = buildMyWork;
|
||||
}
|
||||
Reference in new issue
Block a user