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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user