Close issues and continue the Today session #392
|
|
@ -981,7 +981,7 @@
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshMyWorkView() {
|
function refreshMyWorkView({ reconcileSession = true } = {}) {
|
||||||
lastDrafts = listDrafts();
|
lastDrafts = listDrafts();
|
||||||
const partitioned = laterWork.partition(lastMyWork, {
|
const partitioned = laterWork.partition(lastMyWork, {
|
||||||
pruneMissing: !Object.values(workPagination).some(page => page?.has_more),
|
pruneMissing: !Object.values(workPagination).some(page => page?.has_more),
|
||||||
|
|
@ -1040,7 +1040,7 @@
|
||||||
'No assigned work, review requests, or unread updates.';
|
'No assigned work, review requests, or unread updates.';
|
||||||
updateWorkPaginationControls();
|
updateWorkPaginationControls();
|
||||||
renderMyWork();
|
renderMyWork();
|
||||||
if (workSession.active()) workSession.reconcile();
|
if (reconcileSession && workSession.active()) workSession.reconcile();
|
||||||
}
|
}
|
||||||
|
|
||||||
function activeWorkStreams() {
|
function activeWorkStreams() {
|
||||||
|
|
@ -1528,6 +1528,7 @@
|
||||||
qs('#issue-edit-form').hidden = true;
|
qs('#issue-edit-form').hidden = true;
|
||||||
qs('#issue-edit-status').textContent = '';
|
qs('#issue-edit-status').textContent = '';
|
||||||
qs('#close-issue').disabled = false;
|
qs('#close-issue').disabled = false;
|
||||||
|
qs('#close-issue').textContent = workSession.active() ? 'Close & next' : 'Close issue';
|
||||||
qs('#close-issue-sheet').focus();
|
qs('#close-issue-sheet').focus();
|
||||||
try {
|
try {
|
||||||
const detail = offlineDetail || await issueController.load(item);
|
const detail = offlineDetail || await issueController.load(item);
|
||||||
|
|
@ -3139,8 +3140,14 @@
|
||||||
lastMyWork = lastMyWork.filter(item =>
|
lastMyWork = lastMyWork.filter(item =>
|
||||||
!(item.kind === 'issue' && item.repository === closing.repository && item.number === closing.number)
|
!(item.kind === 'issue' && item.repository === closing.repository && item.number === closing.number)
|
||||||
);
|
);
|
||||||
refreshMyWorkView();
|
refreshMyWorkView({ reconcileSession:false });
|
||||||
qs('#my-work-action-status').textContent = closing.key + ' closed.';
|
const continuingSession = workSession.active();
|
||||||
|
if (workSession.active()) workSession.complete();
|
||||||
|
if (continuingSession && workSession.active()) {
|
||||||
|
qs('#my-work-action-status').textContent = closing.key + ' closed. Next work item opened.';
|
||||||
|
} else if (!continuingSession) {
|
||||||
|
qs('#my-work-action-status').textContent = closing.key + ' closed.';
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
qs('#issue-sheet-status').textContent = error.message + ' The issue remains in My Work; retry.';
|
qs('#issue-sheet-status').textContent = error.message + ' The issue remains in My Work; retry.';
|
||||||
button.disabled = false;
|
button.disabled = false;
|
||||||
|
|
|
||||||
|
|
@ -1376,6 +1376,24 @@ async def test_dashboard_wires_work_session_to_existing_sheet_flows_and_completi
|
||||||
assert opener in html
|
assert opener in html
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.anyio
|
||||||
|
async def test_closing_issue_advances_active_session_once_and_exposes_close_and_next():
|
||||||
|
html = await dashboard()
|
||||||
|
|
||||||
|
assert "qs('#close-issue').textContent = workSession.active() ? 'Close & next' : 'Close issue';" in html
|
||||||
|
close_handler = html.split("qs('#close-issue').addEventListener('click'", 1)[1].split(
|
||||||
|
"qs('#close-pull-sheet').addEventListener", 1
|
||||||
|
)[0]
|
||||||
|
assert "refreshMyWorkView({ reconcileSession:false });" in close_handler
|
||||||
|
assert "if (workSession.active()) workSession.complete();" in close_handler
|
||||||
|
assert close_handler.index("await issueController.close(selectedIssue)") < close_handler.index(
|
||||||
|
"if (workSession.active()) workSession.complete();"
|
||||||
|
)
|
||||||
|
assert close_handler.index("lastMyWork = lastMyWork.filter") < close_handler.index(
|
||||||
|
"if (workSession.active()) workSession.complete();"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_work_session_can_start_at_a_newly_created_item():
|
def test_work_session_can_start_at_a_newly_created_item():
|
||||||
script = f"""
|
script = f"""
|
||||||
const buildMyWork = require({json.dumps(str(MY_WORK))});
|
const buildMyWork = require({json.dumps(str(MY_WORK))});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user