import React, { useEffect, useState } from 'react'; import { Check, CheckCircle2, Circle, Calendar, Trash2, RotateCcw, FileText, Tag, AlertCircle, } from 'lucide-react'; import { Thought } from '../../lib/types'; import { api, triggerHaptic } from '../../lib/api'; interface TasksViewProps { onRefreshStats: () => void; onOpenDocument: (docId: string) => void; } export const TasksView: React.FC = ({ onRefreshStats, onOpenDocument }) => { const [filter, setFilter] = useState<'open' | 'done' | 'discarded'>('open'); const [tasks, setTasks] = useState([]); const [discarded, setDiscarded] = useState([]); const [loading, setLoading] = useState(true); const loadData = async () => { setLoading(true); try { const [allTasks, allDiscarded] = await Promise.all([ api.getTasks(), api.getThoughts('discarded'), ]); setTasks(allTasks); setDiscarded(allDiscarded); } finally { setLoading(false); } }; useEffect(() => { loadData(); }, []); const handleToggleDone = async (task: Thought) => { triggerHaptic(15); const nextState = !task.isCompleted; setTasks((prev) => prev.map((t) => (t.id === task.id ? { ...t, isCompleted: nextState } : t)) ); await api.updateThought(task.id, { isCompleted: nextState }); onRefreshStats(); }; const handleDueDateChange = async (task: Thought, newDate: string) => { setTasks((prev) => prev.map((t) => (t.id === task.id ? { ...t, dueDate: newDate } : t))); await api.updateThought(task.id, { dueDate: newDate }); }; const handleConvertToDoc = async (task: Thought) => { triggerHaptic(20); const updated = await api.triageAction(task.id, 'keep', { convertTo: 'document' }); onRefreshStats(); if (updated.convertedRefId) { onOpenDocument(updated.convertedRefId); } else { loadData(); } }; const handleRestore = async (item: Thought) => { triggerHaptic(15); await api.triageAction(item.id, 'restore'); await loadData(); onRefreshStats(); }; const handleDeletePermanent = async (id: string) => { triggerHaptic(20); await api.deleteThought(id); await loadData(); onRefreshStats(); }; const handlePurgeAllDiscarded = async () => { await api.purgeDiscarded(); await loadData(); onRefreshStats(); }; const openTasks = tasks.filter((t) => !t.isCompleted); const doneTasks = tasks.filter((t) => t.isCompleted); return (
{/* Filter Tabs */}
{filter === 'discarded' && discarded.length > 0 && ( )}
{loading ? (
Lade Aufgaben…
) : filter === 'discarded' ? (
{discarded.length === 0 ? (
Keine verworfenen Gedanken im Papierkorb.
) : ( discarded.map((item) => (

{item.content}

)) )}
) : (
{(filter === 'open' ? openTasks : doneTasks).length === 0 ? (
{filter === 'open' ? 'Keine offenen Aufgaben vorhanden.' : 'Noch keine erledigten Aufgaben.'}
) : ( (filter === 'open' ? openTasks : doneTasks).map((task) => (
{/* Square minimalist checkbox */}

{task.content}

{task.priority === 'urgent' && ( Dringend )} {task.priority === 'high' && ( Wichtig )} {task.tags?.map((tag) => ( #{tag} ))}
{/* Action Controls */}
handleDueDateChange(task, e.target.value)} className="h-7 pl-6 pr-2 bg-[#16171a] text-white text-xs border border-white/[0.08] focus:outline-none focus:border-[#1d8cf8] transition-colors" />
)) )}
)}
); };