feat: revise delegated filings from mobile Filed (Closes #887)
CI / lint (pull_request) Successful in 1m50s
CI / build-release (pull_request) Successful in 5s
CI / browser-journey (pull_request) Successful in 55s
CI / release-candidate (pull_request) Has been skipped

This commit is contained in:
timmy committed 2026-08-15 11:00:18 +00:00
1 parent 5201b18cae
commit 64f549848d
8 files changed
+194 -11

No files matched your search

+1
View File
@@ -488,6 +488,7 @@ textarea { resize: vertical; min-height: 120px; }
.issue-blocker-manager [role="option"] { text-align:left; overflow-wrap:anywhere; }
#manage-issue-blockers, #start-unblocked-issue { min-height:44px; width:100%; margin-top:10px; }
.today-readiness-blocker { width:100%; min-height:44px; text-align:left; background:#291b0c; }
.issue-content-editor { max-width:100%; overflow-x:hidden; margin-top:16px; padding:12px; border:1px solid #2a496e; border-radius:12px; }
.issue-planning { max-width:100%; margin-top:16px; border:1px solid #2a496e; border-radius:12px; padding:0 12px 12px; overflow-x:hidden; }
.issue-planning > summary { min-height:44px; display:flex; align-items:center; cursor:pointer; font-weight:700; }
.issue-planning-retry { min-height:44px; width:100%; }
+31 -4
View File
@@ -194,6 +194,7 @@
let issueBlockerSearchTimer = null;
let issueConversation = null;
let issueTrigger = null;
let issueEditHistoryActive = false;
let selectedPull = null;
let pullTrigger = null;
let selectedPullDetail = null;
@@ -3437,7 +3438,9 @@
qs('#issue-sheet-status').textContent = item.is_completed ?
'Completed Filed outcome ready · review the conversation' : readOnly ? 'Filed issue ready · follow-up enabled' :
'Issue ready · ' + (detail.state || 'open');
qs('#edit-issue-content').disabled = false;
const revisableFiling = item.is_filed && !item.is_completed && detail.state === 'open';
qs('#edit-issue-content').textContent = revisableFiling ? 'Revise filing' : 'Edit issue';
qs('#edit-issue-content').disabled = readOnly && !revisableFiling;
const dueDraft = issueController.loadDueDateDraft(item);
qs('#issue-due-date').value = String(dueDraft || detail.due_date || '').slice(0, 10);
qs('#issue-due-date').disabled = false;
@@ -3462,6 +3465,10 @@
}
function closeIssueSheet(navigate = true) {
if (navigate && issueEditHistoryActive) {
history.back();
return;
}
if (navigate && createWorkRoute.parse(window.location.hash)) {
workRoute.close();
return;
@@ -3476,6 +3483,14 @@
if (issueTrigger?.isConnected) issueTrigger.focus();
}
function closeIssueEditorFromHistory() {
if (!issueEditHistoryActive) return;
issueEditHistoryActive = false;
qs('#issue-edit-form').hidden = true;
if (selectedIssue) qs('#edit-issue-content').focus();
}
window.addEventListener('popstate', closeIssueEditorFromHistory);
qs('#acknowledge-completed-filed').addEventListener('click', () => {
if (!selectedIssue?.is_completed) return;
if (!completedFiledReview.acknowledge(selectedIssue)) {
@@ -4958,6 +4973,10 @@
}
if (e.key === 'Escape' && selectedIssue) {
e.preventDefault();
if (!qs('#issue-edit-form').hidden) {
history.back();
return;
}
closeIssueSheet();
return;
}
@@ -5479,6 +5498,10 @@
qs('#issue-edit-title').value = draft.title;
qs('#issue-edit-body').value = draft.body;
qs('#issue-edit-form').hidden = false;
if (!issueEditHistoryActive) {
history.pushState({ ...history.state, stackchainIssueEdit:true }, '', window.location.href);
issueEditHistoryActive = true;
}
qs('#issue-edit-status').textContent = 'Edit the issue, then save.';
qs('#issue-edit-title').focus();
});
@@ -5493,8 +5516,11 @@
})
);
qs('#cancel-issue-content').addEventListener('click', () => {
qs('#issue-edit-form').hidden = true;
qs('#edit-issue-content').focus();
if (issueEditHistoryActive) history.back();
else {
qs('#issue-edit-form').hidden = true;
qs('#edit-issue-content').focus();
}
});
qs('#issue-edit-form').addEventListener('submit', async event => {
event.preventDefault();
@@ -5526,7 +5552,8 @@
qs('#issue-sheet-title').textContent = confirmed.title;
qs('#issue-sheet-body').innerHTML = renderMarkdown(confirmed.body || 'No description provided.');
paintMyWork(lastContextSnapshot);
qs('#issue-edit-form').hidden = true;
if (issueEditHistoryActive) history.back();
else qs('#issue-edit-form').hidden = true;
qs('#issue-sheet-status').textContent = 'Issue saved.';
qs('#edit-issue-content').focus();
} catch (error) {
+5 -3
View File
@@ -645,9 +645,7 @@
</div>
<div id="issue-comment-status" class="small" aria-live="assertive"></div>
</section>
<details class="issue-planning" id="issue-planning">
<summary>Plan &amp; edit</summary>
<button class="issue-planning-retry" id="retry-issue-planning" type="button" hidden>Retry planning controls</button>
<section class="issue-content-editor" aria-label="Issue content">
<button id="edit-issue-content" type="button" disabled>Edit issue</button>
<form class="issue-edit-form" id="issue-edit-form" hidden>
<label for="issue-edit-title">Title
@@ -662,6 +660,10 @@
</div>
<div id="issue-edit-status" class="small" aria-live="assertive"></div>
</form>
</section>
<details class="issue-planning" id="issue-planning">
<summary>Plan &amp; edit</summary>
<button class="issue-planning-retry" id="retry-issue-planning" type="button" hidden>Retry planning controls</button>
<fieldset class="issue-label-editor" id="issue-label-editor" aria-describedby="issue-label-status">
<legend>Labels</legend>
<div class="issue-label-list" id="issue-label-list"></div>
+2 -1
View File
@@ -117,7 +117,8 @@ function createIssueSheet({ fetchJson, storage, createConversationPager = global
updateContent(item, draft) {
if (editRequest) return editRequest;
this.saveEditDraft(item, draft);
editRequest = fetchJson(issuePath(item) + '/content', {
const access = this.readOnly(item) ? '?access=filed' : '';
editRequest = fetchJson(issuePath(item) + '/content' + access, {
method: 'PATCH',
headers: { Accept: 'application/json', 'Content-Type': 'application/json' },
body: JSON.stringify({