feat: make mobile work queues addressable (Closes #657)
CI / lint (pull_request) Successful in 1m38s
CI / build-release (pull_request) Successful in 7s
CI / release-candidate (pull_request) Has been skipped

This commit is contained in:
timmy committed 2026-08-12 14:29:07 +00:00
1 parent 3e7d6f7111
commit 982c2a1fb7
4 files changed
+87 -19

No files matched your search

+1 -13
View File
@@ -5563,11 +5563,7 @@
qs('#active-work-queue').textContent = button.firstChild.textContent.trim() + ' (' + selectedCount + ')';
renderMyWork();
updateWorkPaginationControls();
if (!preserveRoute && filter === 'update' && window.location.hash !== '#/my-work/updates') {
window.history.pushState({ workQueue:'update' }, '', '#/my-work/updates');
} else if (!preserveRoute && filter !== 'update' && window.location.hash === '#/my-work/updates') {
window.history.replaceState(null, '', window.location.pathname + window.location.search);
}
if (!preserveRoute) workRoute.queue(filter);
return true;
}
function openWorkQueueRoute(filter) {
@@ -5575,14 +5571,6 @@
qs('#my-work').scrollIntoView({block:'start'});
qs('#my-work').focus();
}
function openDeliveryReceiptRoute() {
if (window.location.hash !== '#/my-work/drafts') return;
qs('[data-work-filter="draft"]').click();
qs('#my-work').scrollIntoView({block:'start'});
qs('#my-work').focus();
}
window.addEventListener('hashchange', openDeliveryReceiptRoute);
openDeliveryReceiptRoute();
qs('#work-milestone-filter').addEventListener('change', event => {
selectedWorkMilestone = event.target.value;
try { sessionStorage.setItem(WORK_MILESTONE_KEY, selectedWorkMilestone); }
+13 -2
View File
@@ -6,6 +6,7 @@
'use strict';
const repositoryPart = /^[A-Za-z0-9_.-]+$/;
const queueFilters = ['today', 'attention', 'update', 'later', 'draft'];
function positiveInteger(value) {
const number = Number(value);
@@ -15,8 +16,9 @@
function parse(fragment) {
const parts = String(fragment || '').split('/');
if (parts[0] !== '#' || parts[1] !== 'my-work') return null;
if (parts[2] === 'updates' && parts.length === 3) {
return { kind: 'queue', filter: 'update' };
const queue = parts[2]?.replace(/s$/, '');
if (queueFilters.includes(queue) && parts.length === 3) {
return { kind: 'queue', filter: queue };
}
if (parts[2] === 'update' && parts.length === 4) {
const notificationId = positiveInteger(parts[3]);
@@ -149,6 +151,15 @@
onOpen(item);
return true;
},
queue(filter) {
if (!queueFilters.includes(filter)) return false;
const name = filter + (['update', 'draft'].includes(filter) ? 's' : '');
const fragment = '#/my-work/' + name;
if (location.hash !== fragment) history.pushState(null, '', fragment);
active = fragment;
onQueue(filter);
return true;
},
close() {
if (parse(location.hash)) history.back();
else {