feat: withdraw delegated issues from Filed (Closes #884)
This commit is contained in:
1 parent
f01dfa5f93
commit
6a03dfd7ac
8 files changed
+159
-19
No files matched your search
@@ -535,7 +535,6 @@ textarea { resize: vertical; min-height: 120px; }
|
||||
#issue-sheet.read-only #issue-planning,
|
||||
#issue-sheet.read-only #issue-handoff,
|
||||
#issue-sheet.read-only #release-issue,
|
||||
#issue-sheet.read-only #close-issue,
|
||||
#issue-sheet.read-only .detail-defer,
|
||||
#issue-sheet.read-only #issue-blockers,
|
||||
#issue-sheet.read-only #retry-issue-comment-actions { display:none; }
|
||||
|
||||
+16
-7
@@ -3352,6 +3352,7 @@
|
||||
async function openIssueSheet(item, trigger, offlineDetail = null) {
|
||||
if (!item) return;
|
||||
const readOnly = issueController.readOnly(item);
|
||||
const withdrawable = item.is_filed && !item.is_assigned && !item.is_completed && item.state === 'open';
|
||||
qs('#issue-sheet').classList.toggle('read-only', readOnly);
|
||||
issueDetailPosition.open(workDetailIdentity('issue', item));
|
||||
qs('#issue-planning').inert = false;
|
||||
@@ -3411,7 +3412,8 @@
|
||||
qs('#issue-edit-form').hidden = true;
|
||||
qs('#issue-edit-status').textContent = '';
|
||||
qs('#close-issue').disabled = false;
|
||||
qs('#close-issue').textContent = offlineDetail ?
|
||||
qs('#close-issue').hidden = readOnly && !withdrawable;
|
||||
qs('#close-issue').textContent = withdrawable ? 'Withdraw issue' : offlineDetail ?
|
||||
(workSession.active() ? 'Queue close & next' : 'Queue issue closure') :
|
||||
(workSession.active() ? 'Close & next' : 'Close issue');
|
||||
qs('#release-issue').textContent = workSession.checkpointed(item) ? 'Release & next' : 'Release assignment';
|
||||
@@ -5914,7 +5916,12 @@
|
||||
}
|
||||
});
|
||||
qs('#close-issue').addEventListener('click', async () => {
|
||||
if (!selectedIssue || !window.confirm('Close ' + selectedIssue.key + '?')) return;
|
||||
if (!selectedIssue) return;
|
||||
const withdrawing = selectedIssue.is_filed && !selectedIssue.is_assigned;
|
||||
const confirmation = withdrawing ?
|
||||
'Withdraw ' + selectedIssue.key + '? This closes the delegated request.' :
|
||||
'Close ' + selectedIssue.key + '?';
|
||||
if (!window.confirm(confirmation)) return;
|
||||
const closing = selectedIssue;
|
||||
const button = qs('#close-issue');
|
||||
button.disabled = true;
|
||||
@@ -5940,11 +5947,13 @@
|
||||
}
|
||||
qs('#issue-sheet-status').textContent = 'Closing issue…';
|
||||
try {
|
||||
await issueController.close(selectedIssue);
|
||||
const result = await issueController.close(selectedIssue);
|
||||
closeIssueSheet();
|
||||
lastMyWork = lastMyWork.filter(item =>
|
||||
!(item.kind === 'issue' && item.repository === closing.repository && item.number === closing.number)
|
||||
);
|
||||
if (withdrawing) Object.assign(closing, {
|
||||
state:'closed',is_completed:true,updated_at:result.updated_at || closing.updated_at,
|
||||
});
|
||||
else lastMyWork = lastMyWork.filter(item =>
|
||||
!(item.kind === 'issue' && item.repository === closing.repository && item.number === closing.number));
|
||||
refreshMyWorkView({ reconcileSession:false });
|
||||
const continuingSession = workSession.active();
|
||||
const transitionResult = workSession.active() ? await runTodayTransition('complete') : null;
|
||||
@@ -5953,7 +5962,7 @@
|
||||
} else if (transitionResult === 'gated') {
|
||||
qs('#my-work-action-status').textContent = closing.key + ' closed. Choose the next ready Today item.';
|
||||
} else if (!continuingSession) {
|
||||
qs('#my-work-action-status').textContent = closing.key + ' closed.';
|
||||
qs('#my-work-action-status').textContent = closing.key + (withdrawing ? ' withdrawn.' : ' closed.');
|
||||
}
|
||||
} catch (error) {
|
||||
qs('#issue-sheet-status').textContent = error.message + ' The issue remains in My Work; retry.';
|
||||
|
||||
@@ -214,7 +214,8 @@ function createIssueSheet({ fetchJson, storage, createConversationPager = global
|
||||
},
|
||||
close(item) {
|
||||
if (closeRequest) return closeRequest;
|
||||
closeRequest = fetchJson(issuePath(item) + '/close', {
|
||||
const access = item?.is_filed && !item?.is_assigned ? '?access=filed' : '';
|
||||
closeRequest = fetchJson(issuePath(item) + '/close' + access, {
|
||||
method: 'PATCH',
|
||||
headers: { Accept: 'application/json' },
|
||||
}).then(result => {
|
||||
|
||||
Reference in new issue
Block a user