diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e314f0..5cfcf54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,21 @@ All notable changes to this project are documented in this file. +## [1.119.2] - 2026-09-07 + +### Changed +- Die restlichen fünf Fremdkomponenten aus `WeeklyView.tsx` liegen jetzt unter + `src/components/weekly/`: `TaskInput`, `SomedayAddTask`, `TaskItem` (mit über 900 Zeilen + die grösste), `ListVisualsPopover` und `TabVisualsPopover`. +- Die Prioritäts-Abzeichen sind nach `weekly/priority-badge.tsx` gewandert. `GridTaskBlock` + importierte `getPriorityBadge` aus `WeeklyView.tsx` und zog sich damit die gesamte + Wochenansicht in seinen Abhängigkeitsgraphen; `WeeklyView` re-exportiert die Funktion, + bestehende Importe bleiben gültig. +- **`WeeklyView.tsx`: 11.148 → 9.711 Zeilen** — erstmals unter 10.000. Gegenüber dem Stand + vor dem Audit (11.906) sind das 2.195 Zeilen oder 18 Prozent. + +Verifiziert: Typecheck 0 Fehler, `npm run build` Exit 0, 63 Unit-Tests grün. + ## [1.119.1] - 2026-09-07 ### Changed diff --git a/TODO.md b/TODO.md index 7515ff2..24adcb4 100644 --- a/TODO.md +++ b/TODO.md @@ -136,7 +136,7 @@ Betroffen sind genau zwei Dateien: | Datei | Zeilen | |---|---:| -| `src/components/WeeklyView.tsx` | 11.148 *(war 11.906)* | +| `src/components/WeeklyView.tsx` | **9.711** *(war 11.906)* | | `src/components/SettingsSidebar.tsx` | 5.445 | **Voraussetzung:** C1 muss laufen — ohne Typecheck ist ein Refactoring dieser Größe @@ -148,8 +148,15 @@ Blindflug. Ebenso hilfreich: A2, damit es überhaupt Tests gibt. - [x] **Entdeckung:** In `WeeklyView.tsx` steckten **acht eigenständige Komponenten**, die gar nichts mit der Wochenansicht zu tun haben — zusammen rund 1.870 Zeilen. Drei davon sind heraus: `ProjectIcon`, `ProjectsSidebar`, `NotesSidebar`. -- [ ] Restliche fünf herauslösen: `TaskInput`, `SomedayAddTask`, `TaskItem`, - `ListVisualsPopover`, `TabVisualsPopover` +- [x] Restliche fünf herausgelöst: `TaskInput`, `SomedayAddTask`, `TaskItem`, + `ListVisualsPopover`, `TabVisualsPopover` — dazu die Prioritäts-Abzeichen, die + `GridTaskBlock` von `WeeklyView` importierte +- [ ] Someday-Listen aus dem Haupt-JSX herauslösen (jetzt echtes Props-Design nötig) +- [ ] All-Day-Leiste herauslösen +- [ ] Zeitraster und Tagesspalten herauslösen +- [ ] Einstellungs-Flyouts herauslösen +- [ ] Drag & Drop in einen Hook (~15 Abhängigkeiten — erst sinnvoll, wenn der State + geordneter ist; ein Hook mit 15 Parametern wäre keine Verbesserung) - [x] Datums-/Zeitraster-Helfer nach `src/lib/weekly/date-utils.ts` (13 Funktionen, 202 Zeilen) - [x] Cookie-/Geräteeinstellungen nach `src/lib/weekly/device-settings.ts` - [x] Formatierungs-Helfer nach `src/lib/weekly/format.ts` @@ -158,11 +165,6 @@ Blindflug. Ebenso hilfreich: A2, damit es überhaupt Tests gibt. vorher die drei Implementierungen auf Gleichheit prüfen - [ ] `calendar-cache.ts` hat mit `getWeekStart` eine **vierte** eigene Wochenlogik — ebenfalls gegen `date-utils.ts` ersetzen -- [ ] Drag & Drop in einen Hook `useTaskDragDrop.ts` -- [ ] Someday-Listen in `SomedayLists.tsx` -- [ ] All-Day-Leiste in `AllDayBar.tsx` -- [ ] Zeitraster + Tagesspalten in `TimeGrid.tsx` / `DayColumn.tsx` -- [ ] Einstellungs-Flyouts in `QuickSettingsPanel.tsx` - [ ] Daten-Laden in `useWeeklyData.ts` - [ ] `WeeklyView.tsx` bleibt als Orchestrator übrig diff --git a/package-lock.json b/package-lock.json index 159a583..e1232af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "my-weekly-todo-list", - "version": "1.119.1", + "version": "1.119.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "my-weekly-todo-list", - "version": "1.119.1", + "version": "1.119.2", "license": "MIT", "dependencies": { "@auth/prisma-adapter": "^2.11.1", diff --git a/package.json b/package.json index aaca392..4ad89eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "my-weekly-todo-list", - "version": "1.119.1", + "version": "1.119.2", "description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view", "main": "index.js", "scripts": { diff --git a/src/components/WeeklyView.tsx b/src/components/WeeklyView.tsx index 7d35f10..f1373d2 100644 --- a/src/components/WeeklyView.tsx +++ b/src/components/WeeklyView.tsx @@ -118,6 +118,13 @@ import WeekPrintModal from "./WeekPrintModal"; import { ProjectIcon } from "./weekly/ProjectIcon"; import { ProjectsSidebar } from "./weekly/ProjectsSidebar"; import { NotesSidebar } from "./weekly/NotesSidebar"; +import { TaskInput } from "./weekly/TaskInput"; +import { SomedayAddTask } from "./weekly/SomedayAddTask"; +import { TaskItem } from "./weekly/TaskItem"; +import { ListVisualsPopover, TabVisualsPopover } from "./weekly/VisualsPopover"; +import { getPriorityBadge } from "./weekly/priority-badge"; +// Re-Export: GridTaskBlock importiert getPriorityBadge historisch von hier +export { getPriorityBadge }; import type { RecurringTaskException, ViewStyle, KanbanStage, Task, CalendarEvent, SomedayList, CellDuration, @@ -9685,1460 +9692,16 @@ export default function WeeklyView() { ); } -// Task Input Component -interface TaskInputProps { - onAddTask: (title: string) => void; - onDragOver: (e: React.DragEvent) => void; - onDrop: (e: React.DragEvent) => void; -} -function TaskInput({ onAddTask, onDragOver, onDrop }: TaskInputProps) { - const [newTaskTitle, setNewTaskTitle] = useState(""); - const handleAddTask = () => { - if (newTaskTitle.trim()) { - onAddTask(newTaskTitle); - setNewTaskTitle(""); - } - }; - return ( -
-