fix: deepen opens the linked note, task list columns in "Alle Aufgaben", Whisper repeats, date field
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 2m33s
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 2m33s
- The deepen buttons of task rows and Kanban cards open an already linked note (accent colour) instead of creating another one; the server refuses a second note for a linked task as well. - "Alle Aufgaben" uses each task's own list columns for the status selector, dot and detail. - Whisper: send vad_filter (STT_VAD_FILTER, default on) and drop a verbatim repeated tail of sentences or words from the transcript. - Task detail: narrower time field, wider date field in the desktop sidebar. v0.37.2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c56bd4d943
commit
6f2eb08489
13 files changed
+131
-18
No files matched your search
@@ -507,7 +507,7 @@ const TaskDetailModalContent: React.FC<TaskDetailModalProps & { task: Thought }>
|
||||
aria-label="Fälligkeitsdatum"
|
||||
value={dueParts.date}
|
||||
onChange={(e) => onUpdateDueDate(task, joinDue(e.target.value, dueParts.time))}
|
||||
className="flex-1 min-w-0 h-11 sm:h-8 input-field px-2 text-base sm:text-xs bg-panel"
|
||||
className="flex-1 min-w-0 h-11 sm:h-8 input-field px-2 lg:px-1.5 text-base sm:text-xs bg-panel"
|
||||
/>
|
||||
<input
|
||||
type="time"
|
||||
@@ -516,7 +516,7 @@ const TaskDetailModalContent: React.FC<TaskDetailModalProps & { task: Thought }>
|
||||
value={dueParts.time}
|
||||
disabled={!dueParts.date}
|
||||
onChange={(e) => onUpdateDueDate(task, joinDue(dueParts.date, e.target.value))}
|
||||
className="w-[7.5rem] shrink-0 h-11 sm:h-8 input-field px-2 text-base sm:text-xs bg-panel disabled:opacity-50"
|
||||
className="w-[7.5rem] lg:w-[5.25rem] shrink-0 h-11 sm:h-8 input-field px-2 lg:px-1.5 text-base sm:text-xs bg-panel disabled:opacity-50"
|
||||
/>
|
||||
{task.dueDate && (
|
||||
<button
|
||||
|
||||
@@ -355,6 +355,12 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
return globalColumns;
|
||||
}, [currentSelectedList, globalColumns]);
|
||||
|
||||
// The columns of the list a task belongs to: in "Alle Aufgaben" every task keeps its own list's columns
|
||||
const columnsFor = (task: Thought): KanbanColumn[] => {
|
||||
const own = safeTaskLists.find((l) => l.id === task.taskListId)?.columns;
|
||||
return Array.isArray(own) && own.length > 0 ? own : activeColumns;
|
||||
};
|
||||
|
||||
const safeTasks = useMemo(() => {
|
||||
if (!Array.isArray(tasks)) return [];
|
||||
const seen = new Set<string>();
|
||||
@@ -501,8 +507,9 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
const handleToggleDone = async (task: Thought) => {
|
||||
triggerHaptic(15);
|
||||
const nextState = !task.isCompleted;
|
||||
const doneCol = activeColumns.find((c) => c.isDone) || activeColumns[activeColumns.length - 1];
|
||||
const todoCol = activeColumns.find((c) => !c.isDone) || activeColumns[0];
|
||||
const cols = columnsFor(task);
|
||||
const doneCol = cols.find((c) => c.isDone) || cols[cols.length - 1];
|
||||
const todoCol = cols.find((c) => !c.isDone) || cols[0];
|
||||
const nextKanban = nextState ? (doneCol ? doneCol.id : 'done') : (todoCol ? todoCol.id : 'todo');
|
||||
|
||||
setTasks((prev) =>
|
||||
@@ -516,7 +523,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
|
||||
const handleSetKanbanStatus = async (task: Thought, nextStatus: string) => {
|
||||
triggerHaptic(15);
|
||||
const targetCol = activeColumns.find((c) => c.id === nextStatus);
|
||||
const targetCol = columnsFor(task).find((c) => c.id === nextStatus);
|
||||
const isCompleted = targetCol ? !!targetCol.isDone : nextStatus === 'done';
|
||||
|
||||
setTasks((prev) =>
|
||||
@@ -664,6 +671,11 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
|
||||
const handleConvertToDoc = async (task: Thought) => {
|
||||
triggerHaptic(20);
|
||||
// Already linked to a note: open it instead of creating another one
|
||||
if (task.docId) {
|
||||
onOpenDocument(task.docId, task.blockId);
|
||||
return;
|
||||
}
|
||||
const updated = await api.triageAction(task.id, 'keep', { convertTo: 'document' });
|
||||
onRefreshStats();
|
||||
// The task stays in its list, linked to the note's first checkbox (docId); open that note
|
||||
@@ -1339,7 +1351,8 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
{/* Status: dot in the column colour; a selector on desktop, plain text on phones (changed in TaskDetailModal) */}
|
||||
{(() => {
|
||||
const statusId = task.kanbanStatus || (isCompleted ? 'done' : 'todo');
|
||||
const statusCol = activeColumns.find((c) => c.id === statusId);
|
||||
const taskColumns = columnsFor(task);
|
||||
const statusCol = taskColumns.find((c) => c.id === statusId);
|
||||
const dot = <span className={`w-1.5 h-1.5 rounded-full flex-shrink-0 ${columnDotClass(statusCol)}`} aria-hidden="true" />;
|
||||
return (
|
||||
<>
|
||||
@@ -1352,7 +1365,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
className="h-5 px-1.5 text-[10px] rounded-btn border border-border bg-panel text-muted hover:text-main cursor-pointer"
|
||||
title="Status / Zustand ändern"
|
||||
>
|
||||
{activeColumns.map((c) => (
|
||||
{taskColumns.map((c) => (
|
||||
<option key={c.id} value={c.id}>
|
||||
{c.name}
|
||||
</option>
|
||||
@@ -1469,8 +1482,8 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
type="button"
|
||||
draggable={false}
|
||||
onClick={() => handleConvertToDoc(task)}
|
||||
title="Als Notiz vertiefen"
|
||||
className="text-faint hover:text-accent p-1.5 transition-colors hidden sm:block"
|
||||
title={task.docId ? 'Verknüpfte Notiz öffnen' : 'Als Notiz vertiefen'}
|
||||
className={`${task.docId ? 'text-accent' : 'text-faint'} hover:text-accent p-1.5 transition-colors hidden sm:block`}
|
||||
>
|
||||
<FileText className="w-3.5 h-3.5" />
|
||||
</button>
|
||||
@@ -2292,7 +2305,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
setShowDetailModal(false);
|
||||
setDetailTaskId(null);
|
||||
}}
|
||||
activeColumns={activeColumns}
|
||||
activeColumns={detailTask ? columnsFor(detailTask) : activeColumns}
|
||||
taskLists={safeTaskLists}
|
||||
onOpenDocument={onOpenDocument}
|
||||
onUpdateTitle={handleUpdateTaskTitle}
|
||||
@@ -2412,8 +2425,8 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
<div className="hidden sm:flex items-center gap-1 flex-shrink-0" onClick={(e) => e.stopPropagation()}>
|
||||
<button
|
||||
onClick={() => handleConvertToDoc(task)}
|
||||
title="Als Notiz vertiefen"
|
||||
className="text-faint hover:text-accent p-0.5"
|
||||
title={task.docId ? 'Verknüpfte Notiz öffnen' : 'Als Notiz vertiefen'}
|
||||
className={`${task.docId ? 'text-accent' : 'text-faint'} hover:text-accent p-0.5`}
|
||||
>
|
||||
<FileText className="w-3.5 h-3.5" />
|
||||
</button>
|
||||
|
||||
Reference in new issue
Block a user