Made reopen button for completed tasks

This commit is contained in:
NPS Agent
2026-05-11 14:33:14 +09:30
parent 4d7541caca
commit d959c89d5f
3 changed files with 22 additions and 5 deletions
+12 -1
View File
@@ -145,6 +145,17 @@ function App() {
} }
}; };
const reopenTask = async (taskId) => {
try {
await api.updateTask(taskId, { status: 'open' });
await api.addAudit({ actor: meId, action: 'task_reopened', summary: 'Reopened task', target: taskId });
setOpenTaskId(null);
} catch(e) {
console.error(e);
alert("Failed to reopen task: " + e.message);
}
};
const dismissHU = (id) => setHeadsUp(h => h.filter(x => x.id !== id)); const dismissHU = (id) => setHeadsUp(h => h.filter(x => x.id !== id));
const openTaskFromAnywhere = (id) => { setOpenTaskId(id); setShowLogs(false); }; const openTaskFromAnywhere = (id) => { setOpenTaskId(id); setShowLogs(false); };
@@ -202,7 +213,7 @@ function App() {
<AddTaskModal open={!!adding} onClose={() => setAdding(null)} onSubmit={addTask} defaultAssignee={adding} me={me} /> <AddTaskModal open={!!adding} onClose={() => setAdding(null)} onSubmit={addTask} defaultAssignee={adding} me={me} />
{mappedOpenTask && ( {mappedOpenTask && (
<TaskDetail task={mappedOpenTask} allAudit={frontendAudit} onClose={() => setOpenTaskId(null)} onMove={moveTask} onPriority={setPriority} onComplete={() => completeTask(mappedOpenTask.id)} /> <TaskDetail task={mappedOpenTask} allAudit={frontendAudit} onClose={() => setOpenTaskId(null)} onMove={moveTask} onPriority={setPriority} onComplete={() => completeTask(mappedOpenTask.id)} onReopen={() => reopenTask(mappedOpenTask.id)} />
)} )}
{showLogs && ( {showLogs && (
<Modal title="Audit log" onClose={() => setShowLogs(false)} wide> <Modal title="Audit log" onClose={() => setShowLogs(false)} wide>
BIN
View File
Binary file not shown.
+10 -4
View File
@@ -407,7 +407,7 @@ function Modal({ children, onClose, title, eyebrow, wide = false }) {
); );
} }
function TaskDetail({ task, allAudit = [], onClose, onMove, onPriority, onComplete }) { function TaskDetail({ task, allAudit = [], onClose, onMove, onPriority, onComplete, onReopen }) {
if (!task) return null; if (!task) return null;
const assignee = findUser(task.assignee); const assignee = findUser(task.assignee);
const author = findUser(task.addedBy); const author = findUser(task.addedBy);
@@ -487,9 +487,15 @@ function TaskDetail({ task, allAudit = [], onClose, onMove, onPriority, onComple
</div> </div>
<aside className="detail__side"> <aside className="detail__side">
<button className="btn btn--primary btn--full" style={{ marginBottom: '1.5rem' }} onClick={onComplete}> {task.status === 'closed' ? (
<Icon.Check /> Mark as completed <button className="btn btn--ghost btn--full" style={{ marginBottom: '1.5rem' }} onClick={onReopen}>
</button> <Icon.Arrow /> Reopen task
</button>
) : (
<button className="btn btn--primary btn--full" style={{ marginBottom: '1.5rem' }} onClick={onComplete}>
<Icon.Check /> Mark as completed
</button>
)}
<Field label="Assigned to"> <Field label="Assigned to">
<div className="picker"> <div className="picker">