@bobfrankston/rmfmail 1.0.523 → 1.0.525

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client/app.js CHANGED
@@ -863,6 +863,22 @@ function forwardBody(msg) {
863
863
  let lastDeleted = null;
864
864
  let lastMoved = null;
865
865
  let undoTimeout = null;
866
+ /** Route a "delete the selection" action (Delete key, Ctrl+D, top trash
867
+ * button) to whichever pane has a selection. Tasks take priority — if
868
+ * any task rows are selected, delete those; otherwise fall through to
869
+ * messages. The previous behavior was to always delete messages, which
870
+ * surprised users who'd just selected a few tasks and hit Delete. */
871
+ async function deleteSelection() {
872
+ try {
873
+ const sidebar = await import("./components/calendar-sidebar.js");
874
+ if (sidebar.getSelectedTaskUuids().length > 0) {
875
+ await sidebar.deleteSelectedTasks();
876
+ return;
877
+ }
878
+ }
879
+ catch { /* sidebar module not loaded yet — fall through to messages */ }
880
+ await deleteSelectedMessages();
881
+ }
866
882
  async function deleteSelectedMessages() {
867
883
  const selected = getSelectedMessages();
868
884
  // Fall back to single message from viewer if nothing selected in list
@@ -973,11 +989,12 @@ document.addEventListener("mailx-moved", (e) => {
973
989
  clearTimeout(undoTimeout);
974
990
  undoTimeout = setTimeout(() => { lastMoved = null; }, 60000);
975
991
  });
976
- document.getElementById("btn-delete")?.addEventListener("click", deleteSelectedMessages);
992
+ document.getElementById("btn-delete")?.addEventListener("click", deleteSelection);
977
993
  // Same handlers also bound to the top-toolbar icons so delete/spam work
978
994
  // regardless of whether a message is open in the viewer. Useful for quick
979
- // triage from a list-only view.
980
- document.getElementById("btn-tb-delete")?.addEventListener("click", deleteSelectedMessages);
995
+ // triage from a list-only view. Top trash button uses deleteSelection so
996
+ // it follows the user's task selection when present (otherwise messages).
997
+ document.getElementById("btn-tb-delete")?.addEventListener("click", deleteSelection);
981
998
  document.getElementById("btn-tb-spam")?.addEventListener("click", spamSelectedMessages);
982
999
  // ── Flag toggle ──
983
1000
  document.getElementById("btn-flag")?.addEventListener("click", async () => {
@@ -1347,7 +1364,7 @@ document.addEventListener("mailx-compose", ((e) => {
1347
1364
  openCompose(e.detail.mode);
1348
1365
  }
1349
1366
  }));
1350
- document.addEventListener("mailx-delete", () => deleteSelectedMessages());
1367
+ document.addEventListener("mailx-delete", () => deleteSelection());
1351
1368
  // Share / mailto intents (Android-side: MainActivity routes share-sheet
1352
1369
  // invocations and mailto: links here. Desktop has no equivalent today —
1353
1370
  // MSIX / Windows share-target requires packaging changes we deferred).
@@ -2234,7 +2251,7 @@ document.addEventListener("keydown", (e) => {
2234
2251
  if (tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT" || editable)
2235
2252
  return;
2236
2253
  e.preventDefault();
2237
- deleteSelectedMessages();
2254
+ deleteSelection();
2238
2255
  }
2239
2256
  // Ctrl+Z = Undo the most recent delete or move
2240
2257
  if (e.ctrlKey && e.key === "z") {