@@ -407,13 +398,14 @@ function Modal({ children, onClose, title, eyebrow, wide = false }) {
);
}
-function TaskDetail({ task, onClose, onMove, onPriority }) {
+function TaskDetail({ task, allAudit = [], onClose, onMove, onPriority }) {
if (!task) return null;
const assignee = findUser(task.assignee);
const author = findUser(task.addedBy);
- const audit = TASK_AUDIT[task.id] || [
- { at: task.addedAt, actor: task.addedBy, action: 'created', detail: '' }
- ];
+ const audit = allAudit.filter(a => a.target === task.id);
+ if (audit.length === 0) {
+ audit.push({ at: task.addedAt, actor: task.addedBy, action: 'task_created', summary: '' });
+ }
return (
@@ -474,9 +466,9 @@ function TaskDetail({ task, onClose, onMove, onPriority }) {
{row.actor === 'system' ? 'System' : (findUser(row.actor) || {}).name}
- {row.action}
+ {row.action.replace(/_/g, ' ')}
- {row.detail && {row.detail}
}
+ {(row.detail || row.summary) && {row.detail || row.summary}
}
{fmtDateTime(row.at)}
@@ -818,8 +810,7 @@ function ToggleRow({ label, defaultOn = false }) {
);
}
-function WorkspaceTab({ user, isAdmin, onSwitchUser, onCreateUser, onDeleteUser, onUpdateUserRole }) {
- const dbUsers = DashyDB.listUsers();
+function WorkspaceTab({ user, isAdmin, dbUsers, onSwitchUser, onCreateUser, onDeleteUser, onUpdateUserRole }) {
const [adding, setAdding] = React.useState(false);
const [newName, setNewName] = React.useState('');
const [newRole, setNewRole] = React.useState('');
@@ -935,123 +926,7 @@ function WorkspaceTab({ user, isAdmin, onSwitchUser, onCreateUser, onDeleteUser,
);
}
-function DatabaseInspector({ onClose }) {
- const [tab, setTab] = React.useState(DashyDB.tableNames()[0] || 'tasks');
- const [sql, setSql] = React.useState('SELECT id, title, assignee_id, priority, status\nFROM tasks\nORDER BY added_at DESC;');
- const [result, setResult] = React.useState(null);
- const [err, setErr] = React.useState(null);
- const tableNames = DashyDB.tableNames();
-
- const runQuery = () => {
- try {
- setErr(null);
- const r = DashyDB.rawExec(sql);
- setResult(r);
- } catch (e) { setErr(String(e.message || e)); setResult(null); }
- };
-
- const downloadDB = () => {
- const blob = DashyDB.exportFile();
- const url = URL.createObjectURL(blob);
- const a = document.createElement('a');
- a.href = url; a.download = 'dashy.db'; a.click();
- URL.revokeObjectURL(url);
- };
-
- const cols = tab && DashyDB.tableInfo(tab);
- const rows = tab && DashyDB.query('SELECT * FROM ' + tab + ' LIMIT 200');
-
- return (
-