add keystrokes for chat navigation

This commit is contained in:
marlon-erler
2026-04-12 12:54:20 +00:00
parent 4ad92f8dc7
commit 3af52fd029
4 changed files with 171 additions and 102 deletions
+38 -3
View File
@@ -1693,7 +1693,8 @@
this.close = () => { this.close = () => {
this.containingModel.closeTask(); this.containingModel.closeTask();
}; };
this.closeAndDiscard = () => { this.closeAndDiscard = (e) => {
e.preventDefault();
this.close(); this.close();
this.loadTaskData(); this.loadTaskData();
}; };
@@ -2751,9 +2752,34 @@
// view // view
this.open = () => { this.open = () => {
this.chatListViewModel.openChat(this); this.chatListViewModel.openChat(this);
document.body.addEventListener("keydown", this.handleKeystroke);
}; };
this.close = () => { this.close = () => {
this.chatListViewModel.closeChat(); this.chatListViewModel.closeChat();
document.body.removeEventListener("keydown", this.handleKeystroke);
};
this.handleKeystroke = (e) => {
if (!e.metaKey && !e.ctrlKey) return;
switch (e.key) {
case "e":
this.close();
break;
case "1":
this.selectedPage.value = "messages" /* Messages */;
break;
case "2":
this.selectedPage.value = "tasks" /* Tasks */;
break;
case "3":
this.selectedPage.value = "calendar" /* Calendar */;
break;
case ",":
this.selectedPage.value = "settings" /* Settings */;
break;
default:
return;
}
e.preventDefault();
}; };
this.closeSubPages = () => { this.closeSubPages = () => {
}; };
@@ -3125,7 +3151,15 @@
const isSelected = entry[0] == taskViewModel.task.boardId; const isSelected = entry[0] == taskViewModel.task.boardId;
return Option(entry[1], entry[0], isSelected); return Option(entry[1], entry[0], isSelected);
}; };
return /* @__PURE__ */ createElement("div", { class: "modal", open: true, "keystroke:s": taskViewModel.closeAndSave }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.chatPage.task.taskSettingsHeadline), /* @__PURE__ */ createElement("label", { class: "tile flex-no" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "history"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, coreViewModel2.translations.general.fileVersionLabel), /* @__PURE__ */ createElement( return /* @__PURE__ */ createElement(
"div",
{
class: "modal",
open: true,
"keystroke:s": taskViewModel.closeAndSave,
"keystroke:Escape": taskViewModel.closeAndDiscard
},
/* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.chatPage.task.taskSettingsHeadline), /* @__PURE__ */ createElement("label", { class: "tile flex-no" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "history"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, coreViewModel2.translations.general.fileVersionLabel), /* @__PURE__ */ createElement(
"select", "select",
{ {
"bind:value": taskViewModel.selectedVersionId, "bind:value": taskViewModel.selectedVersionId,
@@ -3225,7 +3259,8 @@
}, },
coreViewModel2.translations.general.saveButton, coreViewModel2.translations.general.saveButton,
/* @__PURE__ */ createElement("span", { class: "icon" }, "save") /* @__PURE__ */ createElement("span", { class: "icon" }, "save")
)))); )))
);
} }
// src/View/Components/taskEntry.tsx // src/View/Components/taskEntry.tsx
+6 -1
View File
@@ -27,7 +27,12 @@ export function TaskSettingsModal(
}; };
return ( return (
<div class="modal" open keystroke:s={taskViewModel.closeAndSave}> <div
class="modal"
open
keystroke:s={taskViewModel.closeAndSave}
keystroke:Escape={taskViewModel.closeAndDiscard}
>
<div> <div>
<main> <main>
<h2> <h2>
+28
View File
@@ -43,10 +43,38 @@ export default class ChatViewModel {
// view // view
open = (): void => { open = (): void => {
this.chatListViewModel.openChat(this); this.chatListViewModel.openChat(this);
document.body.addEventListener("keydown", this.handleKeystroke);
}; };
close = (): void => { close = (): void => {
this.chatListViewModel.closeChat(); this.chatListViewModel.closeChat();
document.body.removeEventListener("keydown", this.handleKeystroke);
};
handleKeystroke = (e: KeyboardEvent): any => {
if (!e.metaKey && !e.ctrlKey) return;
switch (e.key) {
case "e":
this.close();
break;
case "1":
this.selectedPage.value = ChatPageTypes.Messages;
break;
case "2":
this.selectedPage.value = ChatPageTypes.Tasks;
break;
case "3":
this.selectedPage.value = ChatPageTypes.Calendar;
break;
case ",":
this.selectedPage.value = ChatPageTypes.Settings;
break;
default:
return;
}
e.preventDefault();
}; };
closeSubPages = (): void => {}; closeSubPages = (): void => {};
+2 -1
View File
@@ -89,7 +89,8 @@ export default class TaskViewModel {
this.containingModel.closeTask(); this.containingModel.closeTask();
}; };
closeAndDiscard = (): void => { closeAndDiscard = (e: Event): void => {
e.preventDefault();
this.close(); this.close();
this.loadTaskData(); this.loadTaskData();
}; };