Added esc functionality to open windows, added 'n' keybind to create new tasks, fixed Accounts and settings page to allow for edits to be made as well as profile picture to be updated

This commit is contained in:
NPS Agent
2026-05-13 09:55:19 +09:30
parent cf3e4cfe41
commit abb6402f86
7 changed files with 135 additions and 30 deletions
+37 -3
View File
@@ -104,6 +104,25 @@ function App() {
React.useEffect(() => {
window.dbUsers = dbUsers;
}, [dbUsers]);
React.useEffect(() => {
const handleKeyDown = (e) => {
const isTyping = ['INPUT', 'TEXTAREA'].includes(e.target.tagName) || e.target.isContentEditable;
if (e.key === 'Escape') {
setAdding(null);
setOpenTaskId(null);
setShowLogs(false);
setShowSettings(false);
} else if (e.key.toLowerCase() === 'n' && !isTyping) {
e.preventDefault();
setAdding(meId);
}
};
window.addEventListener('keydown', handleKeyDown);
return () => window.removeEventListener('keydown', handleKeyDown);
}, [meId]);
const [adding, setAdding] = React.useState(null);
const [openTaskId, setOpenTaskId] = React.useState(null);
const [showLogs, setShowLogs] = React.useState(false);
@@ -243,6 +262,16 @@ function App() {
}
};
const addNote = async (taskId, body) => {
try {
await api.createTaskNote(taskId, body);
await api.addAudit({ actor: meId, action: 'note_added', summary: 'Added a note to the task', target: taskId });
} catch(e) {
console.error(e);
alert("Failed to add note");
}
};
const dismissHU = (id) => setHeadsUp(h => h.filter(x => x.id !== id));
const openTaskFromAnywhere = (id) => { setOpenTaskId(id); setShowLogs(false); };
@@ -302,7 +331,7 @@ function App() {
<AddTaskModal open={!!adding} onClose={() => setAdding(null)} onSubmit={addTask} defaultAssignee={adding} me={me} dbUsers={dbUsers} />
{mappedOpenTask && (
<TaskDetail task={mappedOpenTask} allAudit={frontendAudit} onClose={() => setOpenTaskId(null)} onMove={moveTask} onPriority={setPriority} onComplete={() => completeTask(mappedOpenTask.id)} onReopen={() => reopenTask(mappedOpenTask.id)} onEditDesc={(newDesc) => editTaskDesc(mappedOpenTask.id, newDesc)} onDeleteTask={() => deleteTask(mappedOpenTask.id)} />
<TaskDetail task={mappedOpenTask} allAudit={frontendAudit} onClose={() => setOpenTaskId(null)} onMove={moveTask} onPriority={setPriority} onComplete={() => completeTask(mappedOpenTask.id)} onReopen={() => reopenTask(mappedOpenTask.id)} onEditDesc={(newDesc) => editTaskDesc(mappedOpenTask.id, newDesc)} onDeleteTask={() => deleteTask(mappedOpenTask.id)} onAddNote={(body) => addNote(mappedOpenTask.id, body)} />
)}
{showLogs && (
<Modal title="Audit log" onClose={() => setShowLogs(false)} wide>
@@ -316,8 +345,13 @@ function App() {
isAdmin={isAdmin}
onClose={() => setShowSettings(false)}
onSave={async (edits) => {
// Not implemented on backend yet for user updating, mock success
setShowSettings(false);
try {
await api.updateUser(meId, edits);
setShowSettings(false);
} catch (e) {
console.error(e);
alert("Failed to save changes: " + e.message);
}
}}
onLogout={() => {
api.logout();