diff --git a/frontend/mobile-queue-launcher.js b/frontend/mobile-queue-launcher.js index 3215060..22d8c9e 100644 --- a/frontend/mobile-queue-launcher.js +++ b/frontend/mobile-queue-launcher.js @@ -13,6 +13,7 @@ ['today', 'Continue Today'], ['update', 'Resume Updates'], ['agenda', 'Open Agenda'], + ['filed', 'Review Filed'], ['later', 'Start Later'], ['draft', 'Open Drafts'], ]; diff --git a/frontend/mobile-task-dock.js b/frontend/mobile-task-dock.js index e6184e2..49be4ae 100644 --- a/frontend/mobile-task-dock.js +++ b/frontend/mobile-task-dock.js @@ -66,9 +66,9 @@ function updateWork(mode) { const text = { continue:'Continue', resume:'Resume', start:'Start', plan:'Plan', find:'Find', - attention:'Attention', update:'Updates', agenda:'Agenda', later:'Later', draft:'Drafts', + attention:'Attention', update:'Updates', agenda:'Agenda', filed:'Filed', later:'Later', draft:'Drafts', }[mode] || 'Work'; - const queue = ['Attention', 'Updates', 'Agenda', 'Later', 'Drafts'].includes(text); + const queue = ['Attention', 'Updates', 'Agenda', 'Filed', 'Later', 'Drafts'].includes(text); if (options.workLabel) options.workLabel.textContent = text; if (buttons.work) buttons.work.setAttribute('aria-label', queue ? (mode === 'update' ? 'Resume ' : 'Open ') + text diff --git a/tests/test_mobile_task_dock.py b/tests/test_mobile_task_dock.py index ed29bc7..db2981e 100644 --- a/tests/test_mobile_task_dock.py +++ b/tests/test_mobile_task_dock.py @@ -485,6 +485,33 @@ process.stdout.write(JSON.stringify({{result, calls}})); } +def test_mobile_work_continues_into_filed_follow_up_before_later_work(): + script = f""" +const createLauncher = require({json.dumps(str(QUEUE_LAUNCHER))}); +const calls = []; +let counts = {{attention:0, today:0, update:0, agenda:0, filed:2, later:4, draft:3}}; +const launcher = createLauncher({{ + getCounts: () => counts, + openFiled: () => {{ calls.push('filed-follow-up'); return 'opened-filed'; }}, + selectFilter: name => calls.push('filter:' + name), + firstAction: () => null, + announce: () => {{}}, + openFindWork: () => calls.push('find'), +}}); +const recommendation = launcher.recommend(); +const opened = launcher.continueWork(); +process.stdout.write(JSON.stringify({{recommendation, opened, calls}})); +""" + result = subprocess.run(["node", "-e", script], capture_output=True, text=True) + + assert result.returncode == 0, result.stderr + assert json.loads(result.stdout) == { + "recommendation": {"name": "filed", "count": 2, "label": "Review Filed (2)"}, + "opened": "opened-filed", + "calls": ["filed-follow-up"], + } + + def test_mobile_queue_launcher_recommends_and_revalidates_cross_queue_continuation(): script = f""" const createLauncher = require({json.dumps(str(QUEUE_LAUNCHER))}); @@ -555,7 +582,7 @@ const work = {{attributes: {{}}, setAttribute(name, value) {{ this.attributes[na const workLabel = {{textContent:''}}; const dock = createDock({{nav:{{}}, buttons:{{work}}, workLabel}}); const labels = {{}}; -for (const mode of ['attention','update','agenda','later','draft']) {{ +for (const mode of ['attention','update','agenda','filed','later','draft']) {{ dock.updateWork(mode); labels[mode] = [workLabel.textContent, work.attributes['aria-label']]; }} @@ -568,6 +595,7 @@ process.stdout.write(JSON.stringify(labels)); "attention": ["Attention", "Open Attention"], "update": ["Updates", "Resume Updates"], "agenda": ["Agenda", "Open Agenda"], + "filed": ["Filed", "Open Filed"], "later": ["Later", "Open Later"], "draft": ["Drafts", "Open Drafts"], }